串行数据发送器

框图

在这里插入图片描述

  • THR:发送保持寄存器

    • 定义了两种状态:空,满
    • 数据写入端口地址:00H
    • 状态读出端口地址:00H
    • 当THR不满时,可以向THR写入数据
  • TSR:发送移位寄存器

    • 一旦TSR空而THR中有数据时,THR中的数据就送到TSR
    • RSR中的数据以串行方式从TxD段发送,高位在前,低位在后
    • 在TxD端的bit流中,若连续出现5个’1‘,则在第5个’1‘之后自动插入一个’0’。注意:相邻两个字节之间也会出现5个连续的‘1’
      - yi
      在这里插入图片描述
  • 发送时许
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 代码
module p2s_tramsmitter (RST,CLK2M,CS,FS,WR,RD,A0,D,TxD
);input       RST,CLK2M,CS,WR,RD,FS;input       A0;inout [7:0] D;output      TxD;reg         TxD;wire  [7:0] D;reg   [7:0] THR_Status,THR,TSR,R_Shifter;// R_Shifter 最低为TxD_1;reg   [2:0] Count8;reg   [2:0] Count5;reg   [4:0] Count32;reg         TSR_Shift_EN;reg         Mux_Sel1,Mux_Sel2;reg         TxD_2;reg         Load_EN;reg         THR_Read;// 移位寄存器,load操作为:每当移完一个字节的数据并且THR不空时,// 就从THR加载一个数据// 在TSR_Shift_EN信号有效时,TSR做移位操作always @(posedge RST or posedge CLK2M) beginif (RST) TSR <= 8'b00000000;else if (Count8 ==3'b000&&THR_Status[0] == 1) beginTSR <= THR;end else if (TSR_Shift_EN == 1'b1) TSR <= {TSR[6:0],1'b0};end//连续5个‘1’的检测及插‘0’。always @(posedge RST or posedge CLK2M) beginif (RST) Count5 = 3'b100;else if (TSR[7] == 1'b0) Count5 = 3'b100;else Count5 = Count5 - 1;endalways @(TSR or Mux_Sel1) beginif (Mux_Sel1) TxD_2 = 1'b0;else TxD_2 = TSR[7];endalways @(Count5) beginif (Count5 == 3'b000) Mux_Sel1 = 1'b1;else Mux_Sel1 = 1'b0;end//在发送5个连续的‘1’之后要插入一个‘0’,此时TSR不移位。// always @(Count5) begin//    if (Count5 == 3'b000) //       TSR_Shift_EN = 1'b0;//    else //       TSR_Shift_EN = 1'b1;// end 等价于always @(Mux_Sel1) beginTSR_Shift_EN = ~Mux_Sel1;end//正常数据与发送7EH的处理always @(Mux_Sel1 or TxD or R_Shifter) beginif (Mux_Sel2) TxD = R_Shifter[7];else TxD = TxD_2;endalways @(posedge RST or posedge CLK2M) beginif (RST) R_Shifter = 8'b01111110;else if (Load_EN) R_Shifter = 8'b01111110;//7EHelse R_Shifter = {R_Shifter[6:0],R_Shifter[7]};endalways @(posedge RST or posedge CLK2M) beginif (RST)Count32 = 5'b11111;else if (~FS) Count32 = 5'b11111;else if (TSR_Shift_EN) Count32 = Count32 - 1;end// 对TSR移位32次,即进入空闲态,因此Count32对TSR_Shift_EN进行计数always @(Count32) beginif (Count32 == 5'b00000)Load_EN = 1'b1;else Load_EN = 1'b0;endalways @(Load_EN) beginMux_Sel2 = Load_EN;endalways @(posedge RST or posedge CLK2M) beginif (RST)THR = 8'b00000000;else if (CS == 1'b0&&WR == 1'b0&&A0 == 1'b0) THR = D;end//THR_Status是一个状态信号,由于该状态最终可以被处理器通过总线读取,因此可以将它设置为//8bits,当THR中有数据时为00000001,否则为00000000;// 该信号应该是寄存器信号,无论THR中是否有数据,只要TSR发出一个读信号,那么在// 读信号有效的下一个时钟沿,该信号为空always @(posedge RST or posedge CLK2M) beginif (RST) THR_Status = 8'b00000000;else if (WR == 1'b0 && THR_Read == 1'b1 &&A0 == 1'b0) THR_Status = 8'b00000001;else if (WR == 1'b1 && THR_Read == 1'b0) THR_Status = 8'b00000000;endalways @(Count8) beginif (Count8 == 3'b000) THR_Read = 1'b0;else THR_Read = 1'b1;endalways @(posedge RST or posedge CLK2M) beginif (RST) Count8 = 3'b000;else if (~FS) Count8 = 3'b111;else if (TSR_Shift_EN)Count8 = Count8 - 1;endassign D = (RD == 1'b0 &&A0 == 1'b0)?THR_Status:8'bzzzzzzzz;endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/129519.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell中分支语句,循环语句,函数

实现对一个数组求和的函数&#xff0c;将数组作为实参传给函数 #!/bin/bash sum() {for i in $do((sumi))doneecho $sum} read -p "请输入一组数字: " -a arr sum ${arr[*]}2 调用函数&#xff0c;输出当前用户的uid gid 并使用变量接收结果 #!/bin/bashget() {uid…

2023 年高教社杯全国大学生数学建模竞赛题目 B 题 多波束测线问题

B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀速直线传播&#xff0c;在不同界面上产生反射&#xff0c;利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信号&#xff0c;并记录从声波发射到信号接收的传播…

VSCode自动分析代码的插件

今天来给大伙介绍一款非常好用的插件&#xff0c;它能够自动分析代码&#xff0c;并帮你完成代码的编写 效果如下图 首先我们用的是VSCode&#xff0c;&#xff08;免费随便下&#xff09; 找到扩展&#xff0c;搜索CodeGeeX&#xff0c;将它下载好&#xff0c;就可以实现了 到…

由Qt::BlockingQueuedConnection引起的关闭Qt主页面而后台仍有进程残留

BUG&#xff1a;由Qt::BlockingQueuedConnection引起的关闭Qt主页面而后台仍有进程残留 1、错误代码示例 首先我们看下下面的代码&#xff0c;可以思考一下代码的错误之处 /** BlockingQueueDeadLock.h **/ #pragma once#include <QtWidgets/QMainWindow> #include &q…

深度学习Tensorflow: CUDA_ERROR_OUT_OF_MEMORY解决办法

目前在用深度学习训练&#xff0c;训练中设置batch size后可以正常跑通&#xff0c;但是在训练一轮save_model时&#xff0c;总出现这个错误&#xff0c;即使我调batch size到1也依旧会报错。 发现是在 调用logger时出现问题。 查询后了解到是因为TensorFlow中的eager_executi…

模电课程设计

主要内容跟本科实验关系很大&#xff0c;可以用来借鉴。 包含文件有&#xff1a;实验报告、Multisim仿真文件&#xff0c;资料很全&#xff0c;有问题可以私信 目录 1、模电课设&#xff1a;用Multisim简单了解二极管 2、模电课设&#xff1a;用Multisim简析三极管与场效应…

开发者的商业智慧:产品立项策划你知道多少?

文章目录 想法的萌芽&#x1f31f;初步评估产品可行性&#x1f34a;分析核心功能和特点以及竞争对手&#x1f4dd;大健康监测&#x1f4dd;时尚新科技产品&#x1f4dd;准确性&#x1f4dd;多功能&#x1f4dd;品牌口碑&#x1f4dd;数据分析与个性化建议&#x1f4dd;社交互动…

go的iris框架进行本地资源映射到服务端

我这里使用的是HandleDirapi,有其他的请补充 package mainimport ("github.com/kataras/iris/v12" )type Hello struct{Status int json:"status"Message string json:"message" }func main(){app : iris.New()//第一个api:相当于首页app.Get(&q…

【多线程】volatile 关键字

volatile 关键字 1. 保证内存可见性2. 禁止指令重排序3. 不保证原子性 1. 保证内存可见性 内存可见性问题: 一个线程针对一个变量进行读取操作&#xff0c;另一个线程针对这个变量进行修改操作&#xff0c; 此时读到的值&#xff0c;不一定是修改后的值&#xff0c;即这个读线…

C++学习之list的实现

在了解学习list实现之前我们首先了解一下关于迭代器的分类&#xff1a; 按功能分类&#xff1a; 正向迭代器 反向迭代器 const正向迭代器 const反向迭代器 按性质分类&#xff1a; 单向迭代器 只能 例如单链表 双向迭代器 可&#xff0c;也可-- 例如双…

服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决

https://blog.csdn.net/zxlyx/article/details/120397006 本文给出一个 TIME_WAIT 状态的 TCP 连接过多的问题的解决思路&#xff0c;非常典型&#xff0c;大家可以好好看看&#xff0c;以后遇到这个问题就不会束手无策了。 问题描述 模拟高并发的场景&#xff0c;会出现批量…

《Python深度学习-Keras》精华笔记3:解决深度学习多分类问题

公众号&#xff1a;机器学习杂货店作者&#xff1a;Peter编辑&#xff1a;Peter 持续更新《Python深度学习》一书的精华内容&#xff0c;仅作为学习笔记分享。 本文是第三篇&#xff1a;介绍如何使用Keras解决Python深度学习中的多分类问题。 多分类问题和二分类问题的区别注意…

Linux dup dup2函数

/*#include <unistd.h>int dup2(int oldfd, int newfd);作用&#xff1a;重定向文件描述符oldfd 指向 a.txt, newfd 指向b.txt,调用函数之后&#xff0c;newfd和b.txt close&#xff0c;newfd指向a.txtoldfd必须是一个有效的文件描述符 */ #include <unistd.h> #i…

Vue 2 条件渲染

条件渲染相关的指令有哪些&#xff1f; v-if、v-else、v-else-ifv-show v-if 的作用 <div v-if"expression"></div>v-if 根据表达式 expression 返回的值是否为 truthy 来决定其内容是否被渲染。 Vue还实现了 v-else 和 v-else-if&#xff1a; <d…

排序算法:快速排序(三种排序方式、递归和非递归)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关排序算法的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

autojs修改顶部标题栏颜色

顶部标题栏的名字是statusBarColor 不是toolbar。难怪我搜索半天搜不到 修改之后变成这样了 代码如下&#xff1a; "ui"; importClass(android.view.View); importClass(android.graphics.Color); ui.statusBarColor(Color.parseColor("#ffffff")); ui.…

【Spring Cloud系统】- 轻量级高可用工具Keepalive详解

【Spring Cloud系统】- 轻量级高可用工具Keepalive详解 文章目录 【Spring Cloud系统】- 轻量级高可用工具Keepalive详解一、概述二、Keepalive分类2.1 TCP的keepalive2.2 HTTP的keep-alive2.3 TCP的 KeepAlive 和 HTTP的 Keep-Alive区别 三、nginx的keepalive配置3.1 nginx保持…

NPM使用技巧

NPM使用技巧 前言技巧全局模块位置PowerShell报错安装模块冲突 NPM介绍NPM命令使用方法基本命令模块命令查看模块运行命令镜像管理 常用模块rimrafyarn 前言 本文包含NodeJS中NPM包管理器的使用技巧&#xff0c;具体内容包含NPM介绍、NPM命令、常用模块等内容&#xff0c;还包…

【STM32】学习笔记-时间戳RTC

Unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同&#xff0c;不同时区通…

upload-labs 16/17关

16 将gif文件和包含一句话木马的php文件放在同一目录下&#xff0c;用cmd的copy命令将php文件整合进文件中。 可以看到最后一行包含了注入代码 将b1文件上传到服务器后&#xff0c;发现并未能正常执行代码&#xff0c;将上传后的文件下载到本地&#xff0c;打开后发现最后的代…