软件:Quartus
语言:VHDL
代码功能:
uart串口收发器设计:
1、输入的8位并行数据使用UART协议串行输出。
2、可以接收UART协议信号,并将其并行输出(8位)。
3、波特率为9600bit/s。
4、带有奇偶校验位(奇校验或者偶检验)。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.工程文件
2.程序文件
3.程序编译
4.RTL图
5.仿真图
整体仿真图
波特率模块
发送模块
部分代码展示:
--uart串口收发器设计 --1、输入的8位并行数据使用UART协议串行输出 --2、可以接收UART协议信号,并将其并行输出(8位) --3、波特率为9600bit/s --4、带有奇偶校验位(奇校验或者偶检验) LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ???USE?ieee.std_logic_arith.all; --接收模块 ENTITY?uart_rx?IS ???PORT?( ??????clk??????????????????:?IN?STD_LOGIC;--时钟 ??????rst_n????????????????:?IN?STD_LOGIC;--复位 ??????baud16_tick??????????:?IN?STD_LOGIC;--波特率*16 ??????uart_rx_buf_wr_en????:?OUT?STD_LOGIC;--接收使能 ??????uart_rx_buf_wr_data??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--接收数据 ??????uart_rx_err??????????:?OUT?STD_LOGIC;--校验错误 ??????uart_rxd?????????????:?IN?STD_LOGIC--接收串行数据 ???); END?uart_rx; ARCHITECTURE?trans?OF?uart_rx?IS ??? ???SIGNAL???data_len?????????????:??STD_LOGIC_VECTOR(3?DOWNTO?0);--数据长度--?5~8 ???SIGNAL???stop_len?????????????:??STD_LOGIC_VECTOR(1?DOWNTO?0);--停止位长度--?1~2 ???SIGNAL???check_len????????????:??STD_LOGIC;--校验位长度--?0~1 ???SIGNAL???check_mode???????????:??STD_LOGIC;--奇偶--?0~1 ??? ???SIGNAL?uart_rxd_bit_inv??????????:?STD_LOGIC; ??? ???SIGNAL?Bau16_Tick_shift_r????????:?STD_LOGIC_VECTOR(1?DOWNTO?0); ???SIGNAL?Bau16_Tick_rising?????????:?STD_LOGIC; ??? ???SIGNAL?state?????????????????????:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???SIGNAL?next_state????????????????:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???SIGNAL?cnt_baud16_tick???????????:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???SIGNAL?cnt_rx_bit????????????????:?STD_LOGIC_VECTOR(3?DOWNTO?0); ??? ???SIGNAL?rx_shift_reg??????????????:?STD_LOGIC_VECTOR(8?DOWNTO?0); ??? ???SIGNAL?rx_check_sum??????????????:?STD_LOGIC; ???SIGNAL?local_check_sum???????????:?STD_LOGIC; ???SIGNAL?uart_rx_buf_wr_data_buf?:?STD_LOGIC_VECTOR(7?DOWNTO?0); BEGIN ???data_len<="1000";--8位数据位 stop_len<="01";--1位停止位 check_len<='1';--1位校验位 check_mode<='0';--奇校验 ???--?Drive?referenced?outputs ???uart_rx_buf_wr_data?<=?uart_rx_buf_wr_data_buf;--输出接收数据 ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????uart_rxd_bit_inv?<=?uart_rxd;--同步到时钟下 ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????Bau16_Tick_shift_r?<=?(Bau16_Tick_shift_r(0)?&?baud16_tick); ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1524
阅读全文