FPGA通用异步收发器设计

上传人:油条 文档编号:28520221 上传时间:2018-01-17 格式:DOC 页数:11 大小:117.50KB
返回 下载 相关 举报
FPGA通用异步收发器设计_第1页
第1页 / 共11页
FPGA通用异步收发器设计_第2页
第2页 / 共11页
FPGA通用异步收发器设计_第3页
第3页 / 共11页
FPGA通用异步收发器设计_第4页
第4页 / 共11页
FPGA通用异步收发器设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《FPGA通用异步收发器设计》由会员分享,可在线阅读,更多相关《FPGA通用异步收发器设计(11页珍藏版)》请在金锄头文库上搜索。

1、FPGA 通用异步收发器设计一设计目的 1.了解短距离串行传输接口。2了解 FPGA 通用一部收发器的原理和应用。二设计内容(1)在信号线上共有两种状态,可分别用逻辑 1(高电平)和逻辑 0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态。(2)起始位(Start Bit):发送器是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑 0 状态,提示接受器数据传输即将开始。(3)数据位(Data Bits):起始位之后就是传送数据位。数据位一般为 8 位一个字节的数据(也有 6 位、7 位的情况) ,低位(LSB)在前,高位(MSB)在后。(4)校验位(parity Bit

2、):可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。在使用中,该位常常取消。(5)停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑 1 状态。(6)位时间:即每个位的时间宽度。起始位、数据位、校验位的位宽度是一致的,停止位有 0.5 位、1 位、1.5 位格式,一般为 1 位。(7)帧:从起始位开始到停止位结束的时间间隔称之为一帧。(8)波特率:UART 的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率 9600=9600bps(位/秒) 。UART 的数

3、据帧格式为:STARTD0 D1 D2 D3 D4 D5 D6 D7 P STOP起始位数 据 位 校验位 停止位三设计原理FPGA UART 系统组成 FPGA UART 由三个子模块组成:(1)波特率发生器;(2)接收模块;(3)发送模块; 模块设计1. 顶层模块 2. 波特率发生器 3. UART 接收器 4. UART 发送器 1. 顶层模块 异步收发器的顶层模块由波特率发生器、UART 接收器和 UART 发送器构成。UART 发送器的用途是将准备输出的并行数据按照基本 UART 帧格式转为 TXD 信号串行输出。UART 接收器接收 RXD 串行信号,并将其转化为并行数据。波特率发

4、生器就是专门产生一个远远高于波特率的本地时钟信号对输入 RXD 不断采样,使接收器与发送器保持同步。顶层模块的电路图 2. 波特率发生器 波特率发生器实际上就是一个分频器。可以根据给定的系统时钟频率(晶振时钟)和要求的波特率算出波特率分频因子,算出的波特率分频因子作为分频器的分频数。特率分频因子可以根据不同的应用需要更改。 3.UART 接收器 由于串行数据帧和接收时钟是异步的,由逻辑 1 转为逻辑 0 可以被视为一个数据帧的起始位。然而,为了避免毛刺影响,能够得到正确的起始位信号,必须要求接收到的起始位在波特率时钟采样的过程中至少有一半都是属于逻辑 0 才可认定接收到的是起始位。由于内部采样

5、时钟 bclk 周期(由波特率发生器产生)是发送或接收波特率时钟频率的 16 倍,所以起始位需要至少 8 个连续 bclk 周期的逻辑 0 被接收到,才认为起始位接收到,接着数据位和奇偶校验位将每隔 16 个 bclk 周期被采样一次(即每一个波特率时钟被采样一次) 。如果起始位的确是 16 个 bclk 周期长,那么接下来的数据将在每个位的中点处被采样。UART 接收器的接收状态机接收状态机一共有 5 个状态:R_START(等待起始位)R_CENTER(求中点)R_WAIT(等待采样)R_SAMPLE(采样)R_STOP(停止位接收)R_START 状态当 UART 接收器复位后,接收状态

6、机将处于这一个状态。在此状态,状态机一直在等待 RXD 的电平跳转,从逻辑 1 变为逻辑 0,即起始位,这意味着新的一帧 UART 数据帧的开始,一旦起始位被确定,状态机将转入R_CENTER 状态。状态图中的 RXD_SYNC 信号是 RXD 的同步信号,因为在进行逻辑 1 或逻辑 0 判断时,不希望检测的信号是不稳定的,所以不直接检测 RXD 信号,而是检测经过同步后的RXD_SYNC 信号。 R_CENTER 状态对于异步串行信号,为了使每一次都检测到正确的位信号,而且在较后的数据位检测时累计误差较小,显然在每位的中点检测是最为理想的。在本状态,就是由起始位求出每位的中点,通过对 bcl

7、k 的个数进行计数(RCNT16) ,但计数值不是想当然的“1000” ,要考虑经过一个状态,也即经过了一个 bclk 周期,所希望得到的是在采样时 1/2 位。另外,可能在 R_START 状态检测到的起始位不是真正的起始位,可能是一个偶然出现的干扰尖脉冲(负脉冲) 。这种干扰脉冲的周期是很短的,所以可以认为保持逻辑 0 超过 1/4 个位时间的信号一定是起始位。R_WAIT 状态当状态机处于这一状态,等待计满 15 个 bclk,在第 16 个 bclk 是进入 R_SAMPLE状态进行数据位的采样检测,同时也判断是否采集的数据位长度已达到数据帧的长度(FRAMELEN) ,如果到来,就说

8、明停止位来临了。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_

9、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;顶层程序的仿真 波特率发生器程序 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity baud is

10、Port (clk,resetb:in std_logic; bclk:out std_logic);end baud;architecture Behavioral of baud isbeginprocess(clk,resetb)variable cnt:integer;begin if resetb=1 then cnt:=0; bclk=208 then cnt:=0; bclk -状态 1,等待数据帧发送命令 if xmit_cmd_p=1 then state -状态 2,发送信号至起始位 if xcnt16=01111 then state -状态 3,等待状态 if xcnt

11、16=01110 then if xbitcnt=framlent then statetxds:=txdbuf(xbitcnt); xbitcnt:=xbitcnt+1; state -状态 5,停止位发送状态 if xcnt16=01111 then if xmit_cmd_p=0 then statestate -状态 1,等待起始位 if rxd_sync=0 then state -状态 2,求出每位的中点 if rxd_sync=0 then if count=0100 then state -状态 3,等待状态 if count=1110 then count:=0000; if rcnt=framlenr then staterbufs(rcnt):=rxd_sync; rcnt:=rcnt+1; stater_readystate=r_start; end case; end if;end process;end Behavioral;UART 接收器的仿真波形

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

当前位置:首页 > 行业资料 > 其它行业文档

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