2022年FPGA通用异步收发器课程设计.pdf
FPGA 通用异步收发器课程设计课程设计任务书学生姓名 : 瞿子敬专业班级 : 通信 1104 指导教师 : 陈适工作单位 : 信息工程学院题目 :FPGA 通用异步收发器设计课程设计目的 : 1. 熟练使用 VHDL 语言进行电路设计 ; 2. 能够运用相关软件进行模拟分析; 3. 掌握基本的文献检索与文献阅读的方法; 4. 提高正确的撰写论文的基本能力。课程设计内容与要求1. 内容:FPGA通用异步收发器设计2、要求 :使用 VHDL 语言完成电路设计 ,并在此基础上进行仿真 ,得到正确结果。初始条件Quartus 仿真平台时间安排1. 方案设计 ,1 天; 2. 软件设计 ,2 天; 3. 系统调试 ,1 天; 4. 答辩,1 天。指导教师签名 : 年月日系主任 (或责任教师 )签名 : 年月日精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计目录摘要. IAbstract. I1、 UART 简介 . 11、1 UART 基本特点 . 11、2 FPGA URAT 系统组成 . 12、 模块设计 . 22、1 顶层模块 . 22、1 波特率发生器 . 32、3 UART 接收器 . 32、3、1 接收器简介 . 32、3、2 UART 接收器的接收状态机 . 42、4 URAT 发送器 . 52、4、1 发送器简介 . 52、4、2 发送状态机 . 53、 程序设计与仿真 . 73、1 顶层程序 . 73、2 波特率发生器程序 . 93、3 UART 发送器程序 . 103、4 UART 接收器程序 . 134、 心得体会 . 155、 参考文献 . 16精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计摘要UART(Universal Asynchronous Receiver Transmitter 通用异步收发器 )就是一种应用广泛的短距离串行传输接口。常常用于短距离、低速、低成本的通讯中。8250、8251、NS16450等芯片都就是常见的UART 器件。基本的 UART 通信只需要两条信号线 (RXD、 TXD) 就可以完成数据的相互通信,接收与发送就是全双工形式。 TXD 就是 UART 发送端 ,为输出 ;RXD 就是 UART接收端 ,为输入。关键词 :UART,FPGA,VHDL, 电路通信Abstract UART (Universal Asynchronous Receiver Transmitter) is a kind of widely used short serial transmission interface 、 Often used in short distance, low speed, low cost of communications、 8250, 8251, NS16450, etc are common UART chip devices 、Basic UART communication only need two signal lines (RXD, TXD) can complete data communication, sending and receiving is full duplex form 、 TXD is UART transmitter for output; RXD is UART receiver for input 、Keywords:UART,FPGA,VHDL,Circuit Communication精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计1、 UART 简介1、1 UART基本特点(1)在信号线上共有两种状态,可分别用逻辑1(高电平 )与逻辑 0(低电平 )来区分。在发送器空闲时 ,数据线应该保持在逻辑高电平状态。(2)起始位 (Start Bit): 发送器就是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑 0 状态,提示接受器数据传输即将开始。(3)数据位 (Data Bits):起始位之后就就是传送数据位。 数据位一般为 8 位一个字节的数据 (也有 6 位、7 位的情况 ),低位(LSB)在前,高位(MSB)在后。(4)校验位 (parity Bit): 可以认为就是一个特殊的数据位。 校验位一般用来判断接收的数据位有无错误 ,一般就是奇偶校验。在使用中,该位常常取消。(5)停止位 :停止位在最后 ,用以标志一个字符传送的结束,它对应于逻辑 1 状态。(6)位时间 :即每个位的时间宽度。起始位、数据位、校验位的位宽度就是一致的,停止位有 0、5 位、1 位、1、5 位格式 ,一般为 1位。(7)帧:从起始位开始到停止位结束的时间间隔称之为一帧。(8)波特率 :UART 的传送速率 ,用于说明数据传送的快慢。 在串行通信中 ,数据就是按位进行传送的 ,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率 9600=9600bps(位/秒)。UART 的数据帧格式为 : 1、2 FPGA URAT 系统组成FPGA UART 由三个子模块组成 : (1)波特率发生器 ; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计(2)接收模块 ; (3)发送模块 ; 模块分布如图所示 : 图 1、1 UART 模块2. 模块设计模块设计分为顶层模块、波特率发生器、UART 接收器、 UART 发送器四部分。2、1 顶层模块异步收发器的顶层模块由波特率发生器、UART 接收器与 UART 发送器构成。UART 发送器的用途就是将准备输出的并行数据按照基本UART 帧格式转为 TXD 信号串行输出。UART 接收器接收 RXD 串行信号 ,并将其转化为并行数据。波特率发生器就就是专门产生一个远远高于波特率的本地时钟信号对输入RXD 不断采样 ,使接收器与发送器保持同步。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计顶层模块电路图 : 图 2、1 顶层模块电路2、1 波特率发生器波特率发生器实际上就就是一个分频器。可以根据给定的系统时钟频率(晶振时钟 )与要求的波特率算出波特率分频因子,算出的波特率分频因子作为分频器的分频数。波特率分频因子可以根据不同的应用需要更改。2、3 UART接收器2、3、1 接收器简介由于串行数据帧与接收时钟就是异步的,由逻辑 1 转为逻辑 0 可以被视为一个数据帧的起始位。然而 ,为了避免毛刺影响,能够得到正确的起始位信号,必须要求接收到的起始位在波特率时钟采样的过程中至少有一半都就是属于逻辑0 才可认定接收到的就是起始位。由于内部采样时钟bclk 周期 (由波特率发生器产生 )就是发送或接收波特率时钟频率的16 倍,所以起始位需要至少8 个连续 bclk 周期的逻辑 0 被接收到,才认为起始位接收到 ,接着数据位与奇偶校验位将每隔16 个 bclk 周期被采样一次 (即每一个波特率时钟被采样一次)。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计如果起始位的确就是 16个 bclk 周期长 ,那么接下来的数据将在每个位的中点处被采样2、3、2 UART 接收器的接收状态机图 2、2 接受状态机状态图五个状态分别为R_START(等待起始位 ),R_CENTER(求中点 ),R_WAIT(等待采样),R_SAMPLE(采样),R_STOP(停止位接收 )。R_START 状态:当 UART 接收器复位后 ,接收状态机将处于这一个状态。在此状态 ,状态机一直在等待RXD 的电平跳转 ,从逻辑 1 变为逻辑 0,即起始位 ,这意味着新的一帧UART数据 帧 的开始 ,一旦起始位被确定,状态机将转入R_CENTER 状态。状态图中的 RXD_SYNC 信号就是 RXD 的同步信号 ,因为在进行逻辑 1 或逻辑 0 判断时 ,不希望检测的信号就是不稳定的,所以不直接检测RXD 信号,而就是检测经过同步后的RXD_SYNC 信号。R_CENTE 状态 :对于异步串行信号 ,为了使每一次都检测到正确的位信号,而且在较后的数据位检测时累计误差较小,显然在每位的中点检测就是最为理想的。在本状态 ,就就是由起始位求出每位的中点,通过对bclk 的个数进行计数精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计(RCNT16),但计数值不就是想当然的“1000” ,要考虑经过一个状态 ,也即经过了一个 bclk 周期,所希望得到的就是在采样时1/2 位。另外,可能在 R_START 状态检测到的起始位不就是真正的起始位,可能就是一个偶然出现的干扰尖脉冲(负脉冲 )。 这种干扰脉冲的周期就是很短的,所以可以认为保持逻辑 0 超过 1/4 个位时间的信号一定就是起始位。R_WAIT 状态:当状态机处于这一状态 ,等待计满 15 个 bclk,在第 16个 bclk 就是进入 R_SAMPLE 状态进行数据位的采样检测,同时也判断就是否采集的数据位长度已达到数据帧的长度(FRAMELEN), 如果到来 ,就说明停止位来临了。FRAMELEN 在设计时就是可更改的 (使用了 Generic),在本设计中默认为 8,即对应的 UART 工作在 8 位数据位、无校验位格式。R_SAMPLE 状态:即数据位采样检测 ,完成后无条件状态机转入R_WAIT 状态,等待下次数据位的到来。R_STOP状态:无论停止位就是 1还就是 1、 5位,或就是 2位,状态机在 R_STOP不具体检测RXD,只就是输出帧接收完毕信号(REC_DONEclk32mhz,resetb=reset,bclk=b); -顶层映射u2:reciever port map(bclkr=b,resetr=reset,rxdr=rxd,r_ready=rec_ready, rbuf=rec_buf); u3:transfer port map(bclkt=b,resett=reset,xmit_cmd_p=xmit_cmd_p_in, txdbuf=txdbuf_in,txd=txd_out,txd_done=txd_done_out); end Behavioral; 顶层程序仿真 : 图 3、1 顶层程序仿真精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计3、2 波特率发生器程序-文件名 :baud、vhd、-功能:将外部输入的 32MHz 的信号分成频率为 153600Hz 的信号。library IEEE; use IEEE、STD_LOGIC_1164、ALL; use IEEE、STD_LOGIC_ARITH 、ALL; use IEEE、STD_LOGIC_UNSIGNED 、ALL; entity baud is Port (clk,resetb:in std_logic; bclk:out std_logic); end baud; architecture Behavioral of baud is begin process(clk,resetb) variable cnt:integer; begin if resetb=1 then cnt:=0; bclk=208 then cnt:=0; bclk=1; -设置分频系数else cnt:=cnt+1; bclk=0; end if; end if; end process; end Behavioral; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计波特率发生器程序仿真 : 图 5、2 波特率发生器仿真3、3 UART发送器程序-文件名 :transfer、vhd。-功能:UART 发送器。-说明:系统由五个状态 (x_idle,x_start,x_wait,x_shift,x_stop)与一个进程构成。library IEEE; use IEEE、STD_LOGIC_1164、ALL; use IEEE、STD_LOGIC_ARITH 、ALL; use IEEE、STD_LOGIC_UNSIGNED 、ALL; entity transfer is generic(framlent:integer:=8); Port (bclkt,resett,xmit_cmd_p:in std_logic; -定义输入输出信号txdbuf:in std_logic_vector(7 downto 0):=11001010; txd:out std_logic; txd_done:out std_logic); end transfer; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计architecture Behavioral of transfer is type states is (x_idle,x_start,x_wait,x_shift,x_stop); -定义个子状态signal state:states:=x_idle; signal tcnt:integer:=0; begin process(bclkt,resett,xmit_cmd_p,txdbuf) -主控时序、组合进程variable xcnt16:std_logic_vector(4 downto 0):=00000; -定义中间变量variable xbitcnt:integer:=0; variable txds:std_logic; begin if resett=1 then state=x_idle; txd_done -状态 1,等待数据帧发送命令if xmit_cmd_p=1 then state=x_start; txd_done=0; else state -状态 2,发送信号至起始位if xcnt16=01111 then state=x_wait; xcnt16:=00000; else xcnt16:=xcnt16+1; txds:=0; state -状态 3,等待状态if xcnt16=01110 then if xbitcnt=framlent then state=x_stop;xbitcnt:=0;xcnt16:=00000; else state=x_shift; end if; else xcnt16:=xcnt16+1; statetxds:=txdbuf(xbitcnt); xbitcnt:=xbitcnt+1; state -状态 5,停止位发送状态if xcnt16=01111 then if xmit_cmd_p=0 then state=x_idle; xcnt16:=00000; else xcnt16:=xcnt16; state=x_stop; end if; txd_done=1; else xcnt16:=xcnt16+1; txds:=1; statestate=x_idle; end case; end if; txd=txds; end process; end Behavioral; UART 发送器仿真 : 图 3、3 发送器仿真精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计3、4 UART接收器程序-文件名 :reciever、vhd。-功能:UART 接受器。-说明:系统由五个状态 (r_start,r_center,r_wait,r_sample,r_stop) 与两个进-程构成library IEEE; use IEEE、STD_LOGIC_1164、ALL; use IEEE、STD_LOGIC_ARITH 、ALL; use IEEE、STD_LOGIC_UNSIGNED 、ALL; entity reciever is generic(framlenr:integer:=8); Port (bclkr,resetr,rxdr:in std_logic; -定义输入输出信号r_ready:out std_logic; rbuf:out std_logic_vector(7 downto 0); end reciever; architecture Behavioral of reciever is type states is (r_start,r_center,r_wait,r_sample,r_stop); -定义各子状态signal state:states:=r_start; signal rxd_sync:std_logic; begin pro1:process(rxdr) begin if rxdr=0 then rxd_sync=0; else rxd_sync=1; end if; end process; pro2:process(bclkr,resetr,rxd_sync) -主控时序、组合进程精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计variable count:std_logic_vector(3 downto 0); -定义中间变量variable rcnt:integer:=0; variable rbufs:std_logic_vector(7 downto 0); begin if resetr=1 then state -状态 1,等待起始位if rxd_sync=0 then state=r_center; r_ready=0; rcnt:=0; else state=r_start; r_ready -状态 2,求出每位的中点if rxd_sync=0 then if count=0100 then state=r_wait; count:=0000; else count:=count+1; state=r_center; end if; else state -状态 3,等待状态if count=1110 then count:=0000; if rcnt=framlenr then state=r_stop; else state=r_sample; end if; else count:=count+1; staterbufs(rcnt):=rxd_sync; rcnt:=rcnt+1; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 17 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计stater_ready=1; rbuf=rbufs; statestate=r_start; end case; end if; end process; end Behavioral; UART 接收器仿真 : 图 3、4 接收器仿真4. 心得体会本次课程设计使用的就是一门较为陌生的语言,通过这次设计 ,我对 VHDL 语言有了更为深刻的认识 ,了解了如何通过 VHDL 语言来进行电路设计。这次使用的软件就是Quartus,虽然在上个学期的EDA 实验课中使用过 ,但时隔半年 ,无论就是使用方法还就是程序编写,都就是一门新的挑战,虽然课设中有很多不明白的东西 ,但通过上网查阅信息以及老师给的资料,这些困难都迎刃而精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 18 页,共 19 页 - - - - - - - - - - FPGA 通用异步收发器课程设计解。在软件的使用过程中 ,遇到过很多次程序无法运行,文件缺失等等问题 ,在解决问题的过程中 ,我学到了很多 ,对于 Quartus软件的使用更加得心应手。同时对于通用异步收发器这个新概念有了一定的了解,掌握了其原理与应用 ,也知道了软件设计对于电子类器件的重要性,在专业的学习上更上一层楼。5. 参考文献1 潘松、 EDA 技术实用教程、 科学出版社、2007、5 2 褚振勇 齐亮、FPGA 设计及应用 (第二版 ) 、 西安电子科技大学出版社、2006 3 简弘伦 、 精通 Verylog HDL:IC 设计核心实例技术详解 、北京 :电子工业出版社、 2005 4 张德,马淑芳 ,李海等、 专用异步串行通信的FPGA 实现5 刘可文、 数字电子电路与逻辑设计 、 科学出版社、 2013 6 Donald C、 Larson、 High Speed Direct Digital Synthesis Techniques and Application、 IEEE、 1998、 209-212 本科生课程设计成绩评定表姓名瞿子敬性别男专业、班级通信工程 1104班课程设计题目 :FPGA 通用异步收发器设计课程设计答辩或质疑记录: 成绩评定依据 : 最终评定成绩 (以优、良、中、及格、不及格评定) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 19 页,共 19 页 - - - - - - - - - -