FIFO接口的通用UART串口设计VHDL代码VIVADO仿真

名称:FIFO接口的通用UART串口设计VHDL代码VIVADO仿真

软件:VIVADO

语言:VHDL

代码功能:

FIFO接口的通用UART串口设计

1、发送使用FIFO接口,只需将数据写入FIFO,即可完成UART协议输出

2、默认波特率115200 ,1位起始位,8位数据位,1位停止位,1位校验位

3、参数可调如下:

uart_baudrate<="11100001000000000";--115200

uart_data_len   <= "1000";--8bit--输入数据位长度

uart_stop_len   <= "01"  ;--输入停止位长度

uart_check_len  <= '1'   ;--输入校验位长度

uart_check_mode <= '0'   ;--输入校验位奇偶


FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

设计文档_FIFO.doc

1. 工程文件


2. 程序文件


3. 程序编译


4. RTL图


5. Testbench

控制往FIFO连续写入00000001~00001010共10个数


6. 仿真图

整体仿真图

往FIFO连续写入00000001~00001010共10个数




串口依次输出01~0a


FIFO控制模块


Tx发送模块


Rx接收模块

波特率控制模块


部分代码展示:

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;
      
      data_len             : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--数据长度-- 5~8
      stop_len             : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--停止位长度-- 1~2
      check_len            : IN STD_LOGIC;--校验位长度-- 0~1
      check_mode           : IN STD_LOGIC;--奇偶-- 0~1
      
      baud16_tick          : IN STD_LOGIC;
      
      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 uart_rxd_sync_r           : STD_LOGIC_VECTOR(2 DOWNTO 0);
   
   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
   -- 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_sync_r <= (uart_rxd_sync_r(1 DOWNTO 0) & uart_rxd);--移位
--      END IF;
--   END PROCESS;
   
   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;
   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
         if(Bau16_Tick_shift_r = "01")then--检测Bau16_Tick_shift_r上升沿
Bau16_Tick_rising<='1';--上升沿
else
Bau16_Tick_rising<='0';
end if;
      END IF;
   END PROCESS;
   
--状态机
   PROCESS (clk, rst_n)
   BEGIN
      IF ((NOT(rst_n)) = '1') THEN
         state <= "0000";
      ELSIF (clk'EVENT AND clk = '1') THEN
         state <= next_state;
      END IF;
   END PROCESS;

代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » FIFO接口的通用UART串口设计VHDL代码VIVADO仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员