FPGA—UART实验说课材料

上传人:go****e 文档编号:137385710 上传时间:2020-07-07 格式:DOCX 页数:14 大小:477.84KB
返回 下载 相关 举报
FPGA—UART实验说课材料_第1页
第1页 / 共14页
FPGA—UART实验说课材料_第2页
第2页 / 共14页
FPGA—UART实验说课材料_第3页
第3页 / 共14页
FPGA—UART实验说课材料_第4页
第4页 / 共14页
FPGA—UART实验说课材料_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《FPGA—UART实验说课材料》由会员分享,可在线阅读,更多相关《FPGA—UART实验说课材料(14页珍藏版)》请在金锄头文库上搜索。

1、FPGAUART实验精品文档串口通信设计一、 实验目的1、熟练使用ISE设计工具;2、理解串口传输协议。理解采用“自顶向下”设计思路,分解模块的方法;3、在ISE使用Verilog HDL设计串口接收模块,完成仿真、下载。二、 实验原理1、串口传输协议概述设计完成异步串口通信通用异步收发是一种典型的异步串口通信,简称UART。串口通信时序如图1所示。图1 通用异步收发时序图由图1可以看出,在没有数据传送时,通信线会一直处于高电平,即逻辑1状态;当有数据传送时,数据帧以起始位开始,以停止位结束。起始位为低电平,即逻辑0状态;停止位为高电平,即逻辑1状态,其持续时间可选为1位、1.5位或2位(本次

2、设计选择持续时间1位)。接收端在接收到停止位后,知道一帧数据已经传完,转为等待数据接收状态;只要再接收到0状态,即为新一帧数据的起始状态。数据帧的数据位低位(LSB)在前,高位(MSB)在后,根据不同的编码规则,数据位可能为5位、6位、7位或者8位(本次设计数据位定位8位)。校验位也可根据需要选择奇校验、偶校验或者不要校验(本次设计不要校验位)。2、串口时序分析串口通讯常用“波特率”表述串口传输速率,常用的参数有9600 bps 和115200 bps等。在硬件传输角度看,波特率表征了传输一位数据所需要的时间。例如:波特率是9600 bps,传输一位数据的时间是1/9600= 0.000104

3、1666666667s;本次FPGA系统时钟是40MHZ,则一位数据传输时间相当于(1/9600)/(1/40M)=4167个40MHZ时钟周期。设一帧数据位数=1(开始位)+8(数据位)+1(校验位)+1(结束位)=11位,所以传输一帧数据的时间是11*1/9600=0.0011458333333333333333333333s。为了稳定采集串口数据帧的数据,需要在每位数据的“中间时刻”采样,由此,需要在每位数据开始时刻对时钟进行计数,若系统时钟是40MHZ,则在计数至4167/2=2084时采样此时刻的数值。3、数据显示PC通过串口发送的数据应该在下载板上有所显示,以此来确定发送成功与否。

4、所以实验中用到8个数码管以二进制的方式来显示通过串口助手发送的两个十六进制的数据。4、本次实验的设计一共有20个端口输入信号:CLK系统时钟;RSTn复位信号;Rx_EN_Sig通信使能信号。Rx_Pin_In串口数据输入。输出信号:SEG7:0数码管段选信号;CON7:0数码管位选信号。三、 实验步骤1、整个系统主要设计的模块是:帧监测开始模块(detect_module)、数据位中心定位模块(Rx_Rbps_module)、数据装载模块(Rx_Control_module)和数码管显示模块(display_module)。接下来进行进行分模块设计。2、帧监测开始模块(detect_modu

5、le)检测串行输入数据RX_Pin_In的值,判断是否开始传送一帧的数据。并将判断结果H2L_Sig输送给数据装载模块(Rx_Control_module)。模块结构图如图2:图2 帧监测开始模块3、数据位中心定位模块(Rx_Rbps_module)为了稳定采集串口数据帧的数据,需要在每位数据的“中间时刻”采样,所以需要一个该模块用来检测每一位数据的持续时间的“中间时刻”。该模块原理为:当接收到数据装载模块传来的一个“当前数据有效(Count_Sig = 1)”的信号时开始计数,一直计数到该数据持续时间的一半时便发送一个确认信号(BPS_CLK = 1)给数据装载模块,提示其开始进行数据采集。

6、模块结构图如图3:图3 数据位中心定位模块4、数据装载模块(Rx_Control_module)该模块用来接收自串口发送来的数据,并进行判断,将8位数据装载到寄存器中。并且在每接收完一帧数据时给显示模块一个确认信号(RX_Done_Sig=1),让数码管更新显示。模块结构图如图4:图4 数据装载模块5、数码管显示模块(display_module)在接收到来自数据装载模块发送的数据接收完毕的信号之后,将接收到的数据按位显示到每一位数码管上。模块结构图如图5:图5 数码管显示模块6、顶层模块(top)对各个模块进行仿真验证,确认无误后。例化各个模块并将它们连接到一起。则系统结构图如图6:图6 系

7、统结构图7、根据板子锁定引脚,并生成下载文件。CLK为系统40M时钟即是P82脚;RSTn复位信号选择拨码开关1,即P20脚;Rx_EN_Sig使能信号选择拨码开关2,即P26脚;Rx_Pin_In为串口0的RX端,即P14;CON0:7数码管位选信号锁定对应的数码管共阳端引脚,LED0:7即选择对应的数码管脚锁定即可。四、 实验结果1、数据装载模块(Rx_Control_module)与数据位中心定位模块(Rx_Rbps_module)连接仿真测试激励文件的编写应该首先产生40M的CLK时钟信号,然后复位信号无效,使能信号有效,帧开始信号H2L_Sig有效。然后再每104166个时钟给Rx_

8、Pin_In一个值,该激励文件给定的值为:1001 0101。图7 数据装载波形图由图可知,模块实现了依次将数据1001 0101装载到寄存器Rx_Data7:0里。2、数码管显示模块(display_module)激励文件的编写应该为首先产生一个40M的CLK时钟信号,然后复位信号无效,帧数据接收完毕即Rx_Done_Sig = 1。给一个Rx_Data7:0赋一个值,看是否显示正确,即通过CON7:0和SEG7:0联立观察。图8 数码管显示由图形可知,给Rx_Data7:0赋值为1111 1101。在看CON7:0和SEG7:0,数码管1显示的为1,数码管2显示的为0,数码管3数码管7都显

9、示的为1,故模块设计无误。3、下载到实验板上面后的结果将拨动开关0和1都拨动到上方,即为高电平时。数码管初始显示为0。连接好串口线,打开串口助手,打开串口以十六进制的方式发送两位数据如11。此时下载板上的数码管显示为00010001,即是十六进制的数据11对应的二进制下的数据。图9 数码管显示4、VGA下载实验效果下载后,将板子的VGA线连接显示器上面。显示器显示如图10所示,拨动拨码开关0,显示器显示另一张图形如图11所示。图10 VGA显示图11 VGA显示五、 思考题1、简述帧开始监测模块(detect_module),数据位中心定位模块(rx_bps_module),数据装载模块(rx

10、_control_module)的功能各是什么?这三个模块是如何配合实现了串口数据的接收?答:帧开始检测模块的功能是检测该数据传送的位数;数据位中心定位模块的功能是从数据的稳定状态提取数据;数据装载模块的功能是将取得的完整的数据传输给FPGA显示。2、如果串口比特率改为115200 bps,代码应该做怎样的修改?module rx_bps_module(CLK, RSTn,Count_Sig,BPS_CLK );input CLK;input RSTn;input Count_Sig;output BPS_CLK;reg 11:0Count_BPS;always ( posedge CLK o

11、r negedge RSTn )if( !RSTn ) Count_BPS = 8d0;else if( Count_BPS = 8d173 )Count_BPS = 8d0;else if( Count_Sig ) Count_BPS = Count_BPS + 1b1; else Count_BPS = 8d0;assign BPS_CLK = ( Count_BPS = 12d1041 ) ? 1b1 : 1b0;endmodule3、如果要设计串口数据发送模块,该如何设计,简要写出设计系统任务书(包括设计目标,功能模块划分,子模块功能描述等)答:串口数据发送模块设计目的:通过在FPGA

12、板上输入数据,然后在电脑的串口端显示数据;功能模块划分:按键(作为数据的输入),数码管(显示当前数据用于比较电脑端接受的数据是否正确),状态接受(处于某个状态时数据的状态),分频模块。六、 代码1、顶层模块代码:timescale 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;wi

13、re Rx_Done_Sig;wire 7:0 Rx_Data;detect_module detect(.CLK(CLK),.RSTn(RSTn),.Rx_Pin_In(Rx_Pin_In),.H2L_Sig(H2L_Sig);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(R

14、x_Done_Sig);Rx_bps_module Rx_bps(.CLK(CLK),.RSTn(RSTn),.Count_Sig(Count_Sig),.BPS_CLK(BPS_CLK);display_module display(.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

15、(CLK,RSTn,Rx_Pin_In,H2L_Sig);input CLK;input RSTn; /复位信号input Rx_Pin_In; /串行输入数据RX_Pin_Inoutput H2L_Sig; reg H2L_F1;reg H2L_F2; always ( posedge CLK or negedge RSTn )if( !RSTn )beginH2L_F1 = 1b1;H2L_F2 = 1b1;endelsebeginH2L_F1 = Rx_Pin_In;H2L_F2 = H2L_F1; endassign H2L_Sig = H2L_F2 & !H2L_F1;endmodule3、数据位中心定位模块(Rx_Rbp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号