题目
通用异步串行接收器的设计 工作原理: 通用串行接口是一种应用非常广泛的串行接口,计算机的COM1,COM2就是这种接口。本题内容是设计一个工作在(8,n,1)模式下(即一个起始位,一个停止位,8个数据位)的接收模块。 通用串行接口数据波形下图所示:
图1 数据波形 数据线sin在空闲状态下保持高电平,当传送一个字节数据时,首先将sin信号变为低电平,表示一个起始位,接着依次出现BIT0,BIT1,…BIT7,然后是一个BIT宽度的高电平,表示停止位。这样每传输一个字节的数据,实际上要传送10BIT的数据,其中8个BIT是数据位,1个起始位,一个停止位。每秒钟传送的BIT数称为波特率(BAUD RATE),因此每一个BIT的时间实际上等于波特率时钟的一个周期。在接收数据时,使用一个16倍于波特率的时钟(baud_clk_16x)采样数据线,当处于空闲状态的时候,采样到一个低电平,则认为监测到了一个起始位的下降沿,并且在8个16x时钟后再次校验起始位是否有效,如果有效,则以后每个16时钟周期采样一次数据并将其移入移位寄存器中,直到监测到有效的停止位并且把移位寄存器中的数据锁存到输出寄存器(dout)中,并且将数据准备好信号(drdy)置为有效,同时状态回到初始状态准备接收下一个字节。如果没有监测到有效的停止位则忽略这一帧数据,即不产生drdy信号。
相应工作时序如图2所示: 图2 工作时序
由模块的工作原理可知,如果drdy信号有效之后,在下一个字节接收完毕之前必须把本次接收到的数据取走,否则,数据将会被下一字节覆盖。 要求: 1.
输入输出端口 module uart_rec ( rst, baud_clk_16x, sin , dout , rd_n , drdy); input
rst, baud_clk_16x, sin, rd_n; output [7:0] dout; output
drdy; 2.
输入输出端口说明 rst
:异步复位输入,rst 为高电平时,模块复位 baud_clk_16x
:16倍波特率时钟,用于监视输入数据电平和控制数据接收 sin
:输入数据信号 dout[7:0]
:接收到的数据输出寄存器,接收完一个字节后更新 rd_n
:读信号,低有效,每一个有效的rd_n都会清除数据准备好信号drdy drdy
:数据准备好,输出。每接收到一个字节后drdy信号置高,drdy信号被rd_n信号清零 3.
测试要求 测试模块中应该产生模块需要的所有信号包括16倍波特率的时钟,和按照波特率产生的数据sin,要求依次产生0x00---0xFF数据,并且监测模块输出的drdy信号,监测到drdy信号上升沿后延迟一段时间,产生一个rd_n信号将drdy信号清除。
哪位强人帮帮忙啊? |