




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、串口通信设计一、 实验目的1、熟练使用ISE设计工具;2、理解串口传输协议。理解采用“自顶向下”设计思路,分解模块的方法;3、在ISE使用Verilog HDL设计串口接收模块,完成仿真、下载。二、 实验原理1、串口传输协议概述设计完成异步串口通信通用异步收发是一种典型的异步串口通信,简称UART。串口通信时序如图1所示。图1 通用异步收发时序图由图1可以看出,在没有数据传送时,通信线会一直处于高电平,即逻辑1状态;当有数据传送时,数据帧以起始位开始,以停止位结束。起始位为低电平,即逻辑0状态;停止位为高电平,即逻辑1状态,其持续时间可选为1位、1.5位或2位(本次设计选择持续时间1位)。接收
2、端在接收到停止位后,知道一帧数据已经传完,转为等待数据接收状态;只要再接收到0状态,即为新一帧数据的起始状态。数据帧的数据位低位(LSB)在前,高位(MSB)在后,根据不同的编码规则,数据位可能为5位、6位、7位或者8位(本次设计数据位定位8位)。校验位也可根据需要选择奇校验、偶校验或者不要校验(本次设计不要校验位)。2、串口时序分析本次FPGA系统时钟是40MHZ,则一位数据传输时间相当于(1/9600)/(1/40M)=4167个40MHZ时钟周期。设一帧数据位数=1(开始位)+8(数据位)+1(校验位)+1(结束位)=11位,所以传输一帧数据的时间是11*1/9600=0.3333s。为
3、了稳定采集串口数据帧的数据,需要在每位数据的“中间时刻”采样,由此,需要在每位数据开始时刻对时钟进行计数,若系统时钟是40MHZ,则在计数至4167/2=2084时采样此时刻的数值。3、数据显示PC通过串口发送的数据应该在下载板上有所显示,以此来确定发送成功与否。所以实验中用到8个数码管以二进制的方式来显示通过串口助手发送的两个十六进制的数据。4、本次实验的设计一共有20个端口输入信号:CLK系统时钟;RSTn复位信号;Rx_EN_Sig通信使能信号。Rx_Pin_In串口数据输入。输出信号:SEG7:0数码管段选信号;CON7:0数码管位选信号。三、 实验步骤1、整个系统主要设计的模块是:帧
4、监测开始模块(detect_module)、数据位中心定位模块(Rx_Rbps_module)、数据装载模块(Rx_Control_module)和数码管显示模块(display_module)。接下来进行进行分模块设计。2、帧监测开始模块(detect_module)检测串行输入数据RX_Pin_In的值,判断是否开始传送一帧的数据。并将判断结果H2L_Sig输送给数据装载模块(Rx_Control_module)。模块结构图如图2:图2 帧监测开始模块3、数据位中心定位模块(Rx_Rbps_module)为了稳定采集串口数据帧的数据,需要在每位数据的“中间时刻”采样,所以需要一个该模块用来
5、检测每一位数据的持续时间的“中间时刻”。该模块原理为:当接收到数据装载模块传来的一个“当前数据有效(Count_Sig = 1)”的信号时开始计数,一直计数到该数据持续时间的一半时便发送一个确认信号(BPS_CLK = 1)给数据装载模块,提示其开始进行数据采集。模块结构图如图3:图3 数据位中心定位模块4、数据装载模块(Rx_Control_module)该模块用来接收自串口发送来的数据,并进行判断,将8位数据装载到寄存器中。并且在每接收完一帧数据时给显示模块一个确认信号(RX_Done_Sig=1),让数码管更新显示。模块结构图如图4:图4 数据装载模块5、数码管显示模块(display_
6、module)在接收到来自数据装载模块发送的数据接收完毕的信号之后,将接收到的数据按位显示到每一位数码管上。模块结构图如图5:图5 数码管显示模块6、顶层模块(top)对各个模块进行仿真验证,确认无误后。例化各个模块并将它们连接到一起。则系统结构图如图6:图6 系统结构图7、根据板子锁定引脚,并生成下载文件。CLK为系统40M时钟即是P82脚;RSTn复位信号选择拨码开关1,即P20脚;Rx_EN_Sig使能信号选择拨码开关2,即P26脚;Rx_Pin_In为串口0的RX端,即P14;CON0:7数码管位选信号锁定对应的数码管共阳端引脚,LED0:7即选择对应的数码管脚锁定即可。四、 实验结果
7、1、数据装载模块(Rx_Control_module)与数据位中心定位模块(Rx_Rbps_module)连接仿真测试激励文件的编写应该首先产生40M的CLK时钟信号,然后复位信号无效,使能信号有效,帧开始信号H2L_Sig有效。然后再每104166个时钟给Rx_Pin_In一个值,该激励文件给定的值为:1001 0101。图7 数据装载波形图由图可知,模块实现了依次将数据1001 0101装载到寄存器Rx_Data7:0里。2、数码管显示模块(display_module)激励文件的编写应该为首先产生一个40M的CLK时钟信号,然后复位信号无效,帧数据接收完毕即Rx_Done_Sig = 1
8、。给一个Rx_Data7:0赋一个值,看是否显示正确,即通过CON7:0和SEG7:0联立观察。图8 数码管显示由图形可知,给Rx_Data7:0赋值为1111 1101。在看CON7:0和SEG7:0,数码管1显示的为1,数码管2显示的为0,数码管3数码管7都显示的为1,故模块设计无误。3、下载到实验板上面后的结果将拨动开关0和1都拨动到上方,即为高电平时。数码管初始显示为0。连接好串口线,打开串口助手,打开串口以十六进制的方式发送两位数据如11。此时下载板上的数码管显示为00010001,即是十六进制的数据11对应的二进制下的数据。图9 数码管显示4、VGA下载实验效果下载后,将板子的VG
9、A线连接显示器上面。显示器显示如图10所示,拨动拨码开关0,显示器显示另一张图形如图11所示。图10 VGA显示图11 VGA显示五、 思考题1、简述帧开始监测模块(detect_module),数据位中心定位模块(rx_bps_module),数据装载模块(rx_control_module)的功能各是什么?这三个模块是如何配合实现了串口数据的接收?答:帧开始检测模块的功能是检测该数据传送的位数;数据位中心定位模块的功能是从数据的稳定状态提取数据;数据装载模块的功能是将取得的完整的数据传输给FPGA显示。2、如果串口比特率改为115200 bps,代码应该做怎样的修改?module rx_b
10、ps_module(CLK, RSTn,Count_Sig,BPS_CLK );input CLK;input RSTn;input Count_Sig;output BPS_CLK;reg 11:0Count_BPS;always ( posedge CLK or negedge RSTn )if( !RSTn ) Count_BPS <= 8'd0;else if( Count_BPS = 8'd173 )Count_BPS <= 8'd0;else if( Count_Sig ) Count_BPS <= Count_BPS + 1'b1
11、; else Count_BPS <= 8'd0;assign BPS_CLK = ( Count_BPS = 12'd1041 ) ? 1'b1 : 1'b0;endmodule3、如果要设计串口数据发送模块,该如何设计,简要写出设计系统任务书(包括设计目标,功能模块划分,子模块功能描述等)答:串口数据发送模块设计目的:通过在FPGA板上输入数据,然后在电脑的串口端显示数据;功能模块划分:按键(作为数据的输入),数码管(显示当前数据用于比较电脑端接受的数据是否正确),状态接受(处于某个状态时数据的状态),分频模块。六、 代码1、顶层模块代码:timesc
12、ale 1ns / 1psmodule top(CLK,RSTn,Rx_EN_Sig,Rx_Pin_In,SEG,CON);input CLK;input RSTn;input Rx_EN_Sig;input Rx_Pin_In;output 7:0 SEG;output 7:0 CON;wire H2L_Sig;wire Count_Sig;wire BPS_CLK;wire Rx_Done_Sig;wire 7:0 Rx_Data;detect_module detect(.CLK(CLK),.RSTn(RSTn),.Rx_Pin_In(Rx_Pin_In),.H2L_Sig(H2L_Si
13、g);Rx_Control_module Rx_Control(.CLK(CLK),.RSTn(RSTn).H2L_Sig(H2L_Sig),.Rx_Pin_In(Rx_Pin_In),.BPS_CLK(BPS_CLK), .Rx_EN_Sig(Rx_EN_Sig),.Count_Sig(Count_Sig),.Rx_Data(Rx_Data),.Rx_Done_Sig(Rx_Done_Sig);Rx_bps_module Rx_bps(.CLK(CLK),.RSTn(RSTn),.Count_Sig(Count_Sig),.BPS_CLK(BPS_CLK);display_module di
14、splay(.CLK(CLK),.RSTn(RSTn),.Rx_Done_Sig(Rx_Done_Sig),.Rx_Data(Rx_Data),.SEG(SEG),.CON(CON);endmodule2、帧监测开始模块(detect_module):timescale 1ns / 1ps/帧开始监测模块(detect_module)module detect_module(CLK,RSTn,Rx_Pin_In,H2L_Sig);input CLK;input RSTn; /复位信号input Rx_Pin_In; /串行输入数据RX_Pin_Inoutput H2L_Sig; reg H2L
15、_F1;reg H2L_F2; always ( posedge CLK or negedge RSTn )if( !RSTn )beginH2L_F1 <= 1'b1;H2L_F2 <= 1'b1;endelsebeginH2L_F1 <= Rx_Pin_In;H2L_F2 <= H2L_F1; endassign H2L_Sig = H2L_F2 & !H2L_F1;endmodule3、数据位中心定位模块(Rx_Rbps_module):timescale 1ns / 1ps/数据位中心定位模块(Rx_Rbps_module)module
16、Rx_bps_module(CLK,RSTn,Count_Sig,BPS_CLK);input CLK;input RSTn; /复位信号 RSTn,当RSTn=0,系统复位input Count_Sig; /串口数据帧开始确认信号:Count_Sig,当 Count_Sig=1, /表示串口输入帧开始时刻,持续一个系统时钟周期output BPS_CLK; /BPS_CLK,当计数至每一位的中间位置,BPS_CLK=1, /提示信号采集时间到,否则不进行信号采集reg 12:0Count_BPS;parameter12:0 BPS = 13'd4167; /2083*2(40Mhz)
17、always ( posedge CLK or negedge RSTn )if( !RSTn )Count_BPS <= 13'd0; /计数else if( Count_BPS = BPS )Count_BPS <= 13'd0;else if( Count_Sig )Count_BPS <= Count_BPS + 1'b1;elseCount_BPS <= 13'd0;assign BPS_CLK = ( Count_BPS = BPS/2 ) ? 1'b1 : 1'b0; endmodule4、数据装载模块(Rx
18、_Control_module):timescale 1ns / 1ps/数据装载模块(Rx_Control_module)module Rx_Control_module(CLK,RSTn,H2L_Sig,Rx_Pin_In,BPS_CLK,Rx_EN_Sig,Count_Sig,Rx_Data,Rx_Done_Sig);input CLK;input RSTn; /复位信号 RSTn,当RSTn=0时,系统复位input H2L_Sig; /帧开始信号H2L_Sig,当H2L_Sig=1,表示一帧信号开始input Rx_EN_Sig; /串口接收使能信号 RX_En_Sig,/当RX_E
19、n_Sig=1,系统正常工作。反正不接收数据input Rx_Pin_In; /串口数据输入信号: RX_Pin_Ininput BPS_CLK; /位中心定位信号:BPS_CLKoutput Count_Sig; /数据位有效信号 Count_Sig,/当Count_Sig=1,表示有效位传输output 7:0 Rx_Data;/装载好的串口数据:RX_Data,位宽为8bitsoutput Rx_Done_Sig; /串口数据接收结束信号: RX_Done_Sig, /当RX_Done_Sig=1表示一帧串口数据接收完毕reg 3:0i = 4'b0;reg 7:0rData =
20、 8'd0;reg isCount = 1'b0;reg isDone = 1'b0;always ( posedge CLK or negedge RSTn )if( !RSTn )begini <= 4'd0;rData <= 8'd0;isCount <= 1'b0;isDone <= 1'b0;endelse if(Rx_EN_Sig )case ( i )4'd0 :if( H2L_Sig ) begin i <= i + 1'b1; isCount <= 1'b1;
21、end4'd1 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8, 4'd9 :if( BPS_CLK ) begin i<=i+1'b1;rDatai-2<=Rx_Pin_In;end4'd10 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd11 :if( BPS_CLK ) begin i <= i +
22、1'b1; end4'd12 :begin I<= i + 1'b1; isDone<= 1'b1; isCount<= 1'b0; end4'd13 :begin i <= 1'b0; isDone <= 1'b0; endendcaseassign Count_Sig = isCount;assign Rx_Data = rData;assign Rx_Done_Sig = isDone;endmodule5、数码管显示模块(display_module):timescale 1ns / 1ps/
23、显示模块(display_module)module display_module(CLK,RSTn,Rx_Done_Sig,Rx_Data,SEG,CON);input CLK;input RSTn;input Rx_Done_Sig; /串口数据接收结束信号: RX_Done_Sig, /当RX_Done_Sig=1表示一帧串口数据接收完毕input7:0 Rx_Data; /装载好的串口数据:RX_Data,位宽为8bitsoutput7:0 SEG;output7:0 CON;reg7:0 SEG;reg7:0 CON;reg23:0 CNT;reg2:0 dig;always (po
24、sedge CLK or negedge RSTn)if(!RSTn) begindig <= 3'b000;CNT <= 24'b0;endelse beginif(CNT = 24'd25000)beginCNT <= 24'b0;if(dig = 3'd7)dig <= 3'd0;elsedig <= dig + 1'b1;endelseCNT <= CNT + 1'b1;endreg 7:0 Data = 8'b00000000; /数据寄存器/Rx_Done_Sig信号上升沿来
25、到时将串口接收到的数据送给Dataalways (posedge Rx_Done_Sig) Data <= Rx_Data;always (posedge CLK or negedge RSTn)if(!RSTn) beginSEG <= 8'b1000000;CON <= 8'b11111111;endelsecase(dig)3'd0 : begin SEG<= display(Data0);CON <= 8'b1111_1110;end3'd1 : begin SEG<= display(Data1);CON <= 8'b1111_1101;end3'd2 : begin SEG<= display(Data2);CON <= 8'b1111_1011;end3'd3 : begin SEG<= display(Data3);CON <= 8'b1111_0111;end3'd4 : begin SEG<= display(Data4);CON <= 8'b1110_1111;end3'd5 : begin SEG<= display(Data5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年合肥文旅博览集团野生动物园管理有限公司招聘25人笔试参考题库附带答案详解
- 文化产业资产管理合同(2篇)
- 2025新进厂员工安全培训考试试题及参考答案【综合题】
- 2025车间员工安全培训考试试题真题汇编
- 2025新员工岗前安全培训考试试题含答案(培优A卷)
- 2025年的履约类保函担保合同范本
- 2025珠宝设计合同
- 2025委托事务代理合同书
- 2025网站信息会员信息服务合同样本
- 2025年医用消毒灭菌设备项目建议书
- 《瑞幸咖啡企业财务造假问题探究》5800字(论文)
- 模块项目化活页式教材模板
- 储能设备故障诊断技术
- 2024年山东省公务员录用考试《行测》真题及答案解析
- 2024年贵州省公务员考试《行测》真题及答案解析
- 2022-2024北京初二一模生物汇编:实验探究题
- 2024年肿瘤放射治疗学(中级343)专业知识卫生专业技术资格考试试题与参考答案
- 产品召回程序合同
- 重难点18 球的切、接问题(举一反三)(新高考专用)(教师版) 2025年高考数学一轮复习专练(新高考专用)
- 职业心理健康课件
- 电子测量仪器的微机电系统技术考核试卷
评论
0/150
提交评论