一、实验名称
FPGA串口发送与接收实验
二、实验目的和要求
目的要求:
1) 掌握VHDL硬件语言的基本应用。 2) 理解掌握串口通信协议。
3) 掌握和理解串口发送模块的原理和设计方法。 4) 掌握和理解串口接收模块的原理和设计方法。 5) 掌握用VHDL硬件语言进行顶层文件设计。 6) 掌握用Modelsim 进行仿真操作。
三、实验内容和原理
1. 串口发送与接收模块设计思路
串行通信时与并行通信相对应的,串行通信指计算机总线或者其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。串行通信被用于长距离通信及大多数计算机网络,串行通信总线越来越普遍,优越性也越来越突出。
UART是异步串口通信,没有同步的时钟,为了能保证数据传输的正确性,采用16倍数据波特率的时钟进行采样,每位数据有16个时钟采样,接收采用大数判决或者中间时钟采样。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。串口UART通信协议数据帧格式如下图所示,首先是一个起始位ST,然后是7-8位可选数据位,0-1位可选奇偶校验位PA、1-2位可选的高电平停止位SP。
1
图3-1 UART串口通信协议
本次试验分三个模块进行设计:分频器、串口发送部分、串口接收部分。分频器输出时钟为16倍采样值,发送部分根据发送信号进行数据发送,接收部分先接收起始位再对每个数据位的第八个clk进行采样接收数据。设计中分别对三个模块效果进行仿真,最后把串口发送和接收部分组合,实现把串行接收到的数据再串行发出。 2. 分频器
分频器是对输入的50MHz系统时钟进行分频,本次试验采用的波特率为9600bps,进行16倍采样后的时钟为16*9600,因此分频系数为325。计算公式如下:
325.52?5000000016?9600 (公式3-1)
分频器的符号文件如下图所示:
图3-2 分频器符号文件
3. 串口发送模块
串口发送模块最根本的功能是把放在串口中的并行数据一位一位地串
2
行发送出去,实现数据的并串转换。串口发送部分与分频器连接图如下图所示,
图3-3 串口发送与分频器连接图
4. 串口接收模块
串口接收模块最根本的功能是把串口接收到的串行数据转换成并行数据,根据串口通信协议实现数据的串并转换。串口接收模块与分频器连接图如下图所示,
图3-4 串口接收与分频器连接图
5. 串口收发顶层文件设计
串口接收与发送模块与分频器连接图如下图所示,该模块实现的功能是把串口接收模块接收到的数据立即经串口发送模块发送出去,在模块中没有加入FIFO,所以每接收一个字节的数据并不在模块内部停留而是立即在串口发送端串行输出。顶层文件设计先把分频器、串口发送和接收模块元件例化,然后进行端口映射连接。具体如下图所示。
3
图3-5 串口收发的模块连接
四、实验环境(软、硬件环境,主要仪器设备)
软件环境:ISE Design Suite 11.0,Modelsim SE 6.5 硬件环境:PC机 操作系统:Windows XP
五、操作方法与实验步骤
设计过程分模块进行设计,当所有模块经过仿真验证正确后再进行顶层文件设计。
1、分频器设计
打开ISE Design Suite 11.0,新建工程命名为\。在Preferred Language 中择为VHDL,在新建的工程中右键New Source 选择VHDL Mouldue并命名为div,新建div.vhd文件,然后加入分频器代码,代码参考第六部分内容。
2、串口发送模块设计
在新建工程\中右键New Source 选择VHDL Mouldue并命名为usart_tx,新建usart_tx.vhd文件,然后加入串口发送模块代码,代码参考第六部分内容。保存后编译,然后新建Test Bench对串口发送模块进行仿真,在工程中右键新建VHDL Test Bench命名为usart_tx_tb,把初始化的输入data_in和tx_sig信号赋值为零,然后在激励中加入以下代码。
4
图5-1串口发送仿真激励代码
3、串口接收模块设计
在新建工程“uart_txrx\中右键New Source 选择VHDL Mouldue并命名为usart_rx,新建usart_rx.vhd文件,然后加入串口发送模块代码,代码参考第六部分内容。保存后编译,然后新建Test Bench对串口发送模块进行仿真,在工程中右键新建VHDL Test Bench命名为usart_rx_tb,把初始化的输入rx信号赋值为1表示为处在空闲状态,aclr信号赋值为1进行复位,然后在激励中加入以下代码。
图5-2串口接收仿真激励代码
4、系统设计
系统总体原理即为上述讲到的顶层设计,根据上述介绍中收发模块组合的原理图,把分频器、串口接收模块和串口发送模块例化后就可以通过端口
5