当前位置:文档之家› 实验四串口接收模块电路设计

实验四串口接收模块电路设计

实验四串口接收模块电路设计一、实验目的:1、熟练使用ISE设计工具。

2、理解串口传输协议。

理解采用“自顶向下”设计思路,分解模块的方法。

3、在ISE使用Verilog HDL设计串口接收模块,完成仿真、下载。

二、原理分析(一)串口传输协议概述设计完成异步串口通信通用异步收发是一种典型的异步串口通信,简称UART。

串口通信时序如图1所示。

图1 通用异步收发时序图由图1可以看出,在没有数据传送时,通信线会一直处于高电平,即逻辑1状态;当有数据传送时,数据帧以起始位开始,以停止位结束。

起始位为低电平,即逻辑0状态;停止位为高电平,即逻辑1状态,其持续时间可选为1位、1.5位或2位(本次设计选择持续时间1位)。

接收端在接收到停止位后,知道一帧数据已经传完,转为等待数据接收状态;只要再接收到0状态,即为新一帧数据的起始状态。

数据帧的数据位低位(LSB)在前,高位(MSB)在后,根据不同的编码规则,数据位可能为5位、6位、7位或者8位(本次设计数据位定位8位)。

校验位也可根据需要选择奇校验、偶校验或者不要校验(本次设计不要校验位)。

(二)串口时序分析串口通讯常用“波特率”表述串口传输速率,常用的参数有9600 bps 和115200 bps等。

在硬件传输角度看,波特率表征了传输一位数据所需要的时间。

例如:波特率是9600 bps,传输一位数据的时间是1/9600= 0.000104166666666667秒。

如果FPGA系统时钟是20MHZ,则一位数据传输时间相当于(1/9600)/(1/20M)=2083个20MHZ时钟周期。

设一帧数据位数=1(开始位)+8(数据位)+1(校验位)+1(结束位)=11位,所以传输一帧数据的时间是11*1/9600=0.00114583333333333333333333333333秒。

为了稳定采集串口数据帧的数据,需要在每位数据的“中间时刻”采样,由此,需要在每位数据开始时刻对时钟进行计数,若系统时钟是20MHZ,则在计数至2083/2=1042时采样此时刻的数值。

三、系统分析:为实现串口接收电路,FPGA应该完成:1、及时发现数据传输的开始,并判断每一位的开始。

2、按照“在数据位中间采样”的要求,确认采样时刻。

3、将采样得到串行数据转换为并行数据。

4、将并行数据显示在下载板上。

本次实验参数:串口传输数据率9600bps,每帧数据11位。

按照“自顶向下”设计思想,系统分为以下五个子模块:1、帧开始监测模块(detect_module)输入端口:串行输入数据RX_Pin_In,系统时钟CLK,复位信号RSTn,其中当RSTn=0时系统复位。

输出端口:H2L_Sig参考代码:module detect_module( CLK, RSTn,RX_Pin_In, H2L_Sig);input CLK;input RSTn;input RX_Pin_In;output H2L_Sig;reg H2L_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;endmodule2、数据位中心定位模块(rx_bps_module)输入端口:系统时钟CLK;复位信号 RSTn,当RSTn=0,系统复位;数据位有效信号 Count_Sig,当Count_Sig=1,表示有效位传输。

输出端口:BPS_CLK,当计数至每一位的中间位置,BPS_CLK=1,提示信号采集时间到,否则不进行信号采集。

设系统时钟20MHZ,则参考代码如下:module rx_bps_module(CLK, RSTn,Count_Sig,BPS_CLK );input CLK;input RSTn;input Count_Sig;output BPS_CLK;reg [11:0]Count_BPS;always @ ( posedge CLK or negedge RSTn )if( !RSTn )Count_BPS <= 12'd0;else if( Count_BPS == 12'd2082 )Count_BPS <= 12'd0;else if( Count_Sig )Count_BPS <= Count_BPS + 1'b1;elseCount_BPS <= 12'd0;assign BPS_CLK = ( Count_BPS == 12'd1041 ) ? 1'b1 : 1'b0;endmodule3、数据装载模块(rx_control_module)输入端口:系统时钟CLK,复位信号 RSTn,当RSTn=0时,系统复位帧开始信号H2L_Sig,当H2L_Sig=1,表示一帧信号开始;串口数据输入信号: RX_Pin_In,位中心定位信号:BPS_CLK,串口接收使能信号 RX_En_Sig,当RX_En_Sig=1,系统正常工作。

反正不接收数据。

输出端口:串口数据帧开始确认信号:Count_Sig,当 Count_Sig=1,表示串口输入帧开始时刻,持续一个系统时钟周期。

装载好的串口数据:RX_Data,位宽为8bits串口数据接收结束信号: RX_Done_Sig,当RX_Done_Sig=1,表示一帧串口数据接收完毕。

参考代码: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;input H2L_Sig;input RX_En_Sig;input RX_Pin_In;input BPS_CLK;output Count_Sig;output [7:0]RX_Data;output RX_Done_Sig;reg [3:0]i;reg [7:0]rData;reg isCount;reg isDone;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; 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; rData[ i - 2 ] <= RX_Pin_In; end4'd10 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd11 :if( BPS_CLK ) begin i <= i + 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;endmodule这一代码采用有限状态机方式,在监测到串口数据帧开始时刻,如果系统接收使能信号有效,展开对串口输入的几个阶段:帧开始,有效帧数据接收,接收帧校验位,接收帧结束位,一帧接收结束,转回帧开始状态。

4、显示模块(display)输入端口:sum,从串口接收到的8bits的一帧数据输出端口:自定义本模块根据下载板的资源,将接收到的8bits数据显示出来,可以采用数码管,发光二极管等。

5、顶层模块(top)将以上4个模块合理组合,构成一个系统。

四、实验内容:1.在理解串口协议2.采用VerilogHDL,设计分频模块,将下载板上40MHz时钟转换为所需要的20MHZ 时钟。

3. 分析帧开始监测模块(detect_module),数据位中心定位模块(rx_bps_module),数据装载模块(rx_control_module)的功能,完成:帧开始监测模块(detect_module),数据装载模块(rx_control_module)两个模块的功能仿真。

4. 根据下载板资源,设计数据显示方案,并设计display.v模块并仿真。

5. 在理解各个参考代码基础上,画出系统模块连接图,完成顶层模块top.v的设计。

6、根据下载板资源,锁定引脚,编译适配以上文件,最后进行下载和硬件测试。

四、思考题:1、简述帧开始监测模块(detect_module),数据位中心定位模块(rx_bps_module),数据装载模块(rx_control_module)的功能各是什么?这三个模块是如何配合实现了串口数据的接收?2、如果串口比特率改为115200 bps,代码应该做怎样的修改?3、如果要设计串口数据发送模块,该如何设计,简要写出设计系统任务书(包括设计目标,功能模块划分,子模块功能描述等)五、实验报告:要求按照系统实现要求,分析串口通讯协议,描述按“自顶向下”设计方法分解系统,实现各子模块的思路,实验报告附功能仿真波形及其分析。

阐述下载测试电路,包括引脚锁定,下载调试效果。

回答本实验的思考题。

相关主题