名称:UART接收电路(防毛刺)设计VHDL代码modelsim仿真
软件:modelsim
语言:VHDL
代码功能:
设计一个UART接收电路,其工作原理为
输入输出信号说明:
Datain:输入串行码流,速率为11.52 Kbits/S
CLK? ? 输入时钟,频率为50MHz;
Dataout:输出并行数据信号(8bits宽度)。
电路功能说明:对输入的串行数据码流,用高速的时钟进行采样处理,将异步串行输入的数据流转换为同步的并行数据输出。
1.输入码流 Datain,速率为1152kbts/S;时钟速率是50MHz,当时钟上升沿时进行数据釆样。
2.当 Outenable信号为高时,并行输出数据有效。
3.串行输入数据流是以数据帧的格式输入的;其帧号依次递增。毎帧包含一个起始位、8bits数据位和一个停止为,其示意如下图所示。当无数据输入时,信号线状态保持为高("1")。而数据帧的起始位(Datai)固定为‘0',它标志着一个数据帧的开始;停止位( Datae)固定为1',它标志着一个数据帧的结束。
设计要求:
输入信号时序波形为(8bit数据,高位在前):56H、37H、AOH4BH、FFH。在第一帧数据出现前有一个宽度为500ns的低脉冲毛刺,在第一帧数据的起始位的后半段,有一个宽度为500ns的高电平脉冲毛刺。
2.接收电路能够在毛刺存在的条件下,正确检测岀串行传输数据。
2.在同一个进程中不能有两个' event
3.除 testbench程序外,不能使用 after语句。
提示:
设计一个毛刺计数器,如果出现毛刺则进行计数。如果最后毛刺计数器的计数值高于某个门限,则表明本接收状态出现错误,需要重新搜索接收状态;如果毛刺计数器的值还很小时,就又出现了正确数据,则毛刺计数器清零。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.?代码文件
顶层模块
波特率分频模块
滤波模块(去除毛刺)
Uart接收模块
Testbench
仿真图
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?filter?IS ???PORT?( ??????clk?????????:?IN?STD_LOGIC; ??????rst_n???????:?IN?STD_LOGIC; ??????signal_in???:?IN?STD_LOGIC; ??????signal_out??:?OUT?STD_LOGIC ???); END?filter; ARCHITECTURE?RTL?OF?filter?IS ????TYPE?state_FSM?is?(s_idle,s_high,s_high_cnt,s_low,s_low_cnt); signal?state:state_FSM; ???SIGNAL?signal_data?:?STD_LOGIC; ???SIGNAL?cnt?????????:?STD_LOGIC_VECTOR(5?DOWNTO?0)?:=?"000000"; BEGIN ??? ???PROCESS?(clk,?rst_n) ???BEGIN ??????IF?((NOT(rst_n))?=?'1')?THEN ?????????cnt?<=?"000000"; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_high_cnt?OR?state?=?s_low_cnt)?THEN ????????????cnt?<=?cnt?+?"000001"; ?????????ELSE ????????????cnt?<=?"000000"; ?????????END?IF; ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1135