名稱:uart串口收發(fā)器設(shè)計(jì)VHDL代碼Quartus仿真
軟件:Quartus
語(yǔ)言:VHDL
代碼功能:
uart串口收發(fā)器設(shè)計(jì):
1、輸入的8位并行數(shù)據(jù)使用UART協(xié)議串行輸出。
2、可以接收UART協(xié)議信號(hào),并將其并行輸出(8位)。
3、波特率為9600bit/s。
4、帶有奇偶校驗(yàn)位(奇校驗(yàn)或者偶檢驗(yàn))。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1.工程文件
2.程序文件
3.程序編譯
4.RTL圖
5.仿真圖
整體仿真圖
波特率模塊
發(fā)送模塊
部分代碼展示:
--uart串口收發(fā)器設(shè)計(jì) --1、輸入的8位并行數(shù)據(jù)使用UART協(xié)議串行輸出 --2、可以接收UART協(xié)議信號(hào),并將其并行輸出(8位) --3、波特率為9600bit/s --4、帶有奇偶校驗(yàn)位(奇校驗(yàn)或者偶檢驗(yàn)) 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;--時(shí)鐘 ??????rst_n????????????????:?IN?STD_LOGIC;--復(fù)位 ??????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);--接收數(shù)據(jù) ??????uart_rx_err??????????:?OUT?STD_LOGIC;--校驗(yàn)錯(cuò)誤 ??????uart_rxd?????????????:?IN?STD_LOGIC--接收串行數(shù)據(jù) ???); END?uart_rx; ARCHITECTURE?trans?OF?uart_rx?IS ??? ???SIGNAL???data_len?????????????:??STD_LOGIC_VECTOR(3?DOWNTO?0);--數(shù)據(jù)長(zhǎng)度--?5~8 ???SIGNAL???stop_len?????????????:??STD_LOGIC_VECTOR(1?DOWNTO?0);--停止位長(zhǎng)度--?1~2 ???SIGNAL???check_len????????????:??STD_LOGIC;--校驗(yàn)位長(zhǎng)度--?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位數(shù)據(jù)位 stop_len<="01";--1位停止位 check_len<='1';--1位校驗(yàn)位 check_mode<='0';--奇校驗(yàn) ???--?Drive?referenced?outputs ???uart_rx_buf_wr_data?<=?uart_rx_buf_wr_data_buf;--輸出接收數(shù)據(jù) ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????uart_rxd_bit_inv?<=?uart_rxd;--同步到時(shí)鐘下 ??????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;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1524
閱讀全文