UART_SEND详细设计方案
1. UART_SEND简介:
串口是用的非常多的一种接口,实现原理比较简单,基本所有CPU芯片都配置有串口,所以经常被用来作为调试接口。
2. UART_SEND规格:
实现9600波特率的串口发送,上位机串口软件可以接收到发送的数据。
3. 实现原理
以波特率9600为例子说明,波特率9600接收一个bit的时间为1s/9600=104us,即每隔104us发送一个数据。
104us = 104000ns 50M时钟的一个周期时间为20ns要远小于104000ns,所以可以用50M时钟产生的计数器来计数,然后根据计数器来发送数据。
新建一个计数器,50Mhz为时钟,那么计数器变化一次时间为20ns。
由于一次完整数据接收需要有1144000ns时间,所以计数器必须记到1144000ns时间。
1144000ns/20ns = 57200,所以需要16位计数器。
Startbit(0)占据计数器的0 -104000ns/20ns = 5200
D0 占据计数器的5200-208000ns/20ns = 10400
D1 占据计数器的10400-312000ns/20ns = 15600
D2 占据计数器的15600-416000ns/20ns = 20800
D3 占据计数器的20800-520000ns/20ns = 26000
D4 占据计数器的26000-624000ns/20ns = 31200
D5 占据计数器的31200-728000ns/20ns = 36400
D6 占据计数器的36400-832000ns/20ns = 41600
D7 占据计数器的41600-936000ns/20ns = 46800
校验位 占据计数器的46800-1040000ns/20ns = 52000
Endbit(1) 占据计数器的52000-1144000ns/20ns = 57200
4. Verilog HDL源代码
Verilog HDL代码为:
moduleUartSend (
//input
sys_clk ,
sys_rst_n ,
data_in , //data in 8bit
//output
uart_txd
);
//inputports
input sys_clk ; //system clock;
input sys_rst_n ; //system reset, low is active;
input[WIDTH-1:0] data_in ; //to send data 8bit ;
//outputports
output uart_txd ; //uart txd output ;
//regdefine
reg [WIDTH-1:0] buff ;
reg [WIDTH-1:0] data_out ;
reg uart_txd ;
reg txd ; //temp txd signal;
reg [SIZE-1:0] counter ;
//wiredefine
//parameterdefine
parameterWIDTH = 8;
parameterSIZE = 16;
/*******************************************************************************************************
** Main Program
**
********************************************************************************************************/
always@(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0) begin
buff <= 8'b0;
end
else
buff <= data_in ;
end
always@(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0) begin
counter <= 16'b0;
end
else if (counter > 57200 )
counter <= 16'b0;
else
counter <= counter + 1'b1;
end
always@(*) begin
if ((counter > 0) && (counter <= 5200 ))
txd = 1'b0 ;
else if ((counter > 5200)&& (counter <= 10400))
txd = buff[0] ;
else if ((counter > 10400) &&(counter <= 15600))
txd = buff[1] ;
else if ((counter > 15600) &&(counter <= 20800))
txd = buff[2] ;
else if ((counter > 20800) &&(counter <= 26000))
txd = buff[3] ;
else if ((counter > 26000) &&(counter <= 31200))
txd = buff[4] ;
else if ((counter > 31200) &&(counter <= 36400))
txd = buff[5] ;
else if ((counter > 36400) &&(counter <= 41600))
txd = buff[6] ;
else if ((counter > 41600) &&(counter <= 46800))
txd = buff[7] ;
else if ((counter > 46800) &&(counter <= 52000))
txd = 1'b1 ;
else if ((counter > 52000) &&(counter <= 57200))
txd = 1'b1 ;
else
txd = 1'b1 ;
end
always@(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0) begin
uart_txd <= 1'b1;
end
else
uart_txd <= txd;
end
endmodule
//endof RTL code
UART_SEND详细设计方案相关推荐
- UART_RECV详细设计方案
1. UART_RECV简介: 串口是用的非常多的一种接口,实现原理比较简单,基本所有CPU芯片都配置有串口,所以经常被用来作为调试接口. 2. UART_RECV规格: 实现96 ...
- 协同数据交换平台详细设计方案(word)
本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 1 架构设计 1.1 总体架构 协同数据交换平台利用企业服务总线.数据抽取ETL.消息中间件.大文件传输等相关技术,包括文件适配器.数据 ...
- 复位处理详细设计方案
一.方案一 1. 复位处理简介: 复位电路一般都是芯片外部管脚直接输入芯片内部的,所以会有毛刺产生,被内部所有有复位功能的寄存器使用,所以地位非常重要,功能就是复位寄存器. 2. ...
- 如何做好详细方案设计?
大家好,我是易安 之前我们聊过架构方案的选择,今天我们来看看架构设计重最为重要的一环,如何做好详细方案设计. 概念 一言蔽之,详细方案设计就是将方案涉及的关键技术细节给确定下来. 我举几个例子: 假如 ...
- 多通道高通量实时处理单元详细方案设计报告
前端时间,做了一个项目,编写了相关的技术方案设计报告,项目的技术细节虽不能透漏,但这个设计报告做的很好,在此,贡献出来,给有相关需求的同事们做个参考,整个报告84页,2万多字,需要的找我索要完整的资料 ...
- 计算机组成原理设计一个累加和,组成原理课设关于累加器.doc
组成原理课设关于累加器 沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:计算机组成原理课程设计 课程设计题目:COP2000实现数据累加 院(系):计算机学院 专 业:计算机科学与技术 班 级 ...
- 从“负电价”说起:谈谈德国新能源消纳的借鉴意义
目前,随着大规模可再生能源的开发使用,如何将这些发电更灵活地并入电网并减少对电网稳定性的冲击,如何更加有效地利用可再生能源发电,成为世界各国研究的课题.德国的新能源发电消纳比例相当高,其在政策支撑.管 ...
- 程序员黑科技 | 用13块钱DIY微信小程序浇花神器
作者:iotzheng,腾讯TEG平台开发工程师(江湖人称IoT小能手) 前言 去年7月的时候,公司办了一场王者荣耀大赛,我和同事们也报名参加了.首局比赛就给我们泼了冷水,"深圳湾一号业主& ...
- 硬件工程师前途到底怎样?看看大佬怎么说,看完跪了
点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达 一位项目经理带着一名硬件工程师和一名软件工程师一同坐车去参加研讨会,结果汽车在半路抛锚 ...
最新文章
- JSP自定义标签之简单标签入门
- BL1551模拟开关,封装SC70-6
- 英特尔CPU机密数据大量泄露:芯片后门实锤,下一代CPU原理图曝光
- Struts2-整理笔记(三)结果处理跳转、获得servletAPI原生
- php的array_multisort()使用
- 《Cloud Native Infrastructure》CHAPTER 7 (1)
- Mysql 死锁过程及案例详解之元数据锁MetaData Lock
- vscode+XDebug调试远程环境(虚拟机)上的PHP代码
- 阿里云盘今日公测:无论用户是否付费,未来都不会限速
- free命令查看内存信息
- centos7切换root为mysql_Linux(centos 7)系统下mysql8及以上版本修改root账户密码
- mysql一次运行多个SQL文件
- jQuery als.js 跑马灯
- 大型网站应用之海量数据解决方案
- 外企计算机英语,职场英语:外企生存十大必备英语词汇
- 计算机中模拟和数字信号,模拟信号和数字信号的区别是什么
- 【HTML】input多行文本
- 十七 SQL ALTER 与 AUTO INCREMENT
- Aras Innovator 11 sp2 firefox客户端设置
- 钉钉显示服务器升级是什么意思,服务器升级自动通知钉钉群并报告环境功能
热门文章
- boost::math::pow相关用法的测试程序
- boost::fusion::hash_value用法的测试程序
- ITK:从灰度图像计算直方图
- ITK:计算图像在特定方向上的导数
- DICOM:标准内容概述
- VTK:Shaders之ColorByNormal
- OpenCV cv::split用法的实例(附完整代码)
- OpenCV Sobel Derivatives衍生物
- Qt Creator优化移动设备的应用程序
- Qt Creator创建可缩放的按钮和边框