名称:串口测试试验设计Verilog代码VIVADO? ARTIX-7开发板
软件:VIVADO
语言:Verilog
代码功能:
串口测试试验
实现PC端通过UART发送数据到FPGA,FPGA将所接收到的数据同样通过UART发回PC端
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ARTIX-7开发板验证,ARTIX-7开发板如下,其他开发板可以修改管脚适配:
设计文档:
1简介
本试验用来验证开发板FPGA串口通信接口,实现PC端通过UART发送数据到FPGA,FPGA将所接收到的数据同样通过UART发回PC端。
2实验原理
本开发的串口指的是异步串行通信,异步串行是指 UART,通用异步接收/发送。UART是一个并行输入成为串行输出的芯片,通常集成在主板上。UART包含TTL电平的串口和RS232电平的串口。TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平, MDS2710、MDSSD4、EL805等是RS232接口,EL806有TTL接口。
开发板的串口通信通过USB转换成串口的方式,主要是解决很多人电脑不带串口接口的问题,所以这里不涉及到电气协议标准,用法和 TTL 电平串口类似。FPGA 芯片使用2 个IO口和USB串口转换芯片CH340G相连。
开发板USB转串口设计如下:
起止式异步通讯协议:
特点与格式:
起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。其格式如图3 所示。每一个字符的前面都有一位起始位(低电平,逻辑值0),字符本身有5~7位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一 位,或意味半,或二位停止位,停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平(逻辑值),这样就保证起始位开始处一定有一个下跳沿。
起/止位的作用:起 始位实际上是作为联络信号附加进来的,当它变为低电平时,告诉收方传送开始。它的到来,表示下面接着是数据位来了,要准备接收。而停止位标志一个字符的结 束,它的出现,表示一个字符传送完毕。这样就为通信双方提供了何时开始收发,何时结束的标志。传送开始前,发收双方把所采用的起止式格式(包括字符的数据 位长度,停止位位数,有无校验位以及是奇校验还是偶校验等)和数据传输速率作统一规定。传送开始后,接收设备不断地检测传输线,看是否有起始位到来。当收 到一系列的“1”(停止位或空闲位)之后,检测到一个下跳沿,说明起始位出现,起始位经确认后,就开始接收所规定 的数据位和奇偶校验位以及停止位。经过处理将停止位去掉,把数据位拼装成一个并行字节,并且经校验后,无奇偶错才算正确的接收一个字符。一个字符接收完 毕,接收设备有继续测试传输线,监视“0”电平的到来和下一个字符的开始,直到全部数据传送完毕。
由 上述工作过程可看到,异步通信是按字符传输的,每传输一个字符,就用起始位来通知收方,以此来重新核对收发双方同步。若接收设备和发送设备两者的时钟频率 略有偏差,这也不会因偏差的累积而导致错位,加之字符之间的空闲位也为这种偏差提供一种缓冲,所以异步串行通信的可靠性高。但由于要在每个字符的前后加上 起始位和停止位这样一些附加位,使得传输效率变低了,只有约80%。因此,起止协议一般用在数据速率较慢的场合(小于19.2kbit/s)。在高速传送时,一般要采用同步协议。
3程序设计
本程序实现最简单的串口收发功能,即将收到的电脑串口数据通过FPGA串口回传给电脑。程序如下:
assign uart_out = uart_in;
FPGA串口管脚分配如下:
信号名 |
方向 |
管脚 |
BANK |
端口说明 |
uart_rxd |
input |
K13 |
BANK15 |
USB串口接收 |
uart_txd |
output |
E16 |
BANK15 |
USB串口发送 |
4.实验现象
在电脑上安装CH340G的驱动,安装界面如下:
将目录“... at7_prj_011at7_prjat7_prj.runsimpl_1”文件夹下的 at7_prj.bit 文件下载到开发板上,并将USB线连接至USB串口接口。
安装完转换芯片的驱动,我们通过串口调试助手发送串口数据。其界面设置如下,选择波特率未9600,然后发送“hello,xilinx”,则收到回复同样的“hello,xilinx”:
部分代码展示:
`timescale?1ns?/?1ps ////////////////////////////////////////////////////////////////////////////////// //?Company:? //?Engineer:? //? //?Create?Date:?2019/04/13?17:54:08 //?Design?Name:? //?Module?Name:?at7_prj //?Project?Name:? //?Target?Devices:? //?Tool?Versions:? //?Description:? //? //?Dependencies:? //? //?Revision: //?Revision?0.01?-?File?Created //?Additional?Comments: //? ////////////////////////////////////////////////////////////////////////////////// module?at7_prj( ????clk??, ????uart_in?, ????uart_out?? ); //declare?parameter /**********************************************************************************/ //parameter /**********************************************************************************/ /**********************************************************************************/ //ports /**********************************************************************************/ //declare?input input????????????????????????????????????????clk?????????????????????????????????????; input????????????????????????????????????????uart_in?????????????????????????????????; output???????????????????????????????????????uart_out
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1336