小工具知识网

当前位置: 首页 > 行业知识 > uart串口环回(加FIFO)

行业知识

uart串口环回(加FIFO)

2026-10-31 21:47:14 来源:互联网转载

文章目录

  • 一.uart简介
  • 二.原理
    • 1.同步通信&&异步通信
      • 1.1同步通信
      • 1.2异步通信
      • 2.并行通信&&串行通信
        • 2.1并行通信
        • 2.2串行通信
        • 3.全双工&&半双工
          • 3.1全双工
          • 3.2半双工
          • 4.协议层
          • 4.1数据格式
          • 4.2传输速率
          • 二.初步设计
            • 1.模块图
            • 2.tx设计
            • 3.rx设计
            • 4.加入FIFO
            • 三.代码
              • 1.uart_tx
              • 2.uart_rx
              • 3.ctrl(FIFO)
              • 4.top
              • 四.���果

                一.uart简介

                • UART(universal asynchronous receiver-transmitter)是一种采用异步串行通信方式的通用异步收发传输器。
                • 定义如上,那么出现问题了,什么叫异步串行通信?请关注下文原理。

                  二.原理

                  1.同步通信&&异步通信

                  1.1同步通信

                  • 发送方发送出数据后,等接收方响应后才发送下一个数据

                    1.2异步通信

                    • 发送方发出数据后,不等接收方发回相应,接着发送下一个数据

                      2.并行通信&&串行通信

                      2.1并行通信

                      • 并行通信是指数据各个位用多条数据线同时进行传输

                        2.2串行通信

                        • 串行通信是将数据分成一位一位的形式在一条线上逐个传输

                          3.全双工&&半双工

                          3.1全双工

                          • 双方都可以发送接收数据,并可以同时进行

                            3.2半双工

                            • 双方都可以发送接收数据,但是同一时刻只能一方发送,一方接收

                              4.协议层

                              4.1数据格式

                              • 解析上图可以看出:空闲位处于高电平,起始位为0(拉低);数据位可以是6-8bit,注意是低位先发;暂时不考虑校验位,停止位为1(拉高)。

                                4.2传输速率

                                • 串口通信的速率用波特率表示,它表示每秒传输二进制数据的位数,单位是bit/s(位/秒),简称bps。常用的波特率有9600、19200、38400、57600、115200等。本文中设计用的115200的波特率==>传输1bit需要计数50_000_000/115200 = 434次

                                  二.初步设计

                                  1.模块图

                                  2.tx设计

                                  • tx将8bit的数据转换为1bit数据输出

                                    3.rx设计

                                    • rx将1bit的数据转换为8bit数据输出
                                    • 这里由于加入stop状态后面会导致状态跳崩了,于是我不要stop状态了

                                      4.加入FIFO

                                      • FIFO配置上,数据宽度选8bit,数据深度选32bit,其他配置可参考前文https://blog.csdn.net/weixin_67803687/article/details/132248964?spm=1001.2014.3001.5501中的单时钟前显模式

                                        三.代码

                                        1.uart_tx

                                        /**************************************功能介绍***********************************Date: 2023年8月16日17:07:11Author: Alegg xy.Version: 2.0Description: FPGA向上位机发送数据【8bit变1bit(波形)】*********************************************************************************/    //---------------------------------------------------------------module uart_tx(     inputclk,    inputrst_n,    input       [7:0]   tx_data ,    input               tx_data_vld,    output              ready   ,    output  reg         tx              ); //------------------------------------------------------------------     parameter   MAX_1bit = 9'd434;//1bit要计434次    //状态机参数定义    localparam  IDLE   = 'b0001,//空闲状态                START  = 'b0010,//起始位                DATA   = 'b0100,//数据位                STOP   = 'b1000;//停止位//--------------------------------------------------------------        reg [3:0]cstate     ;//现态    reg    [3:0]nstate     ;//次态        wire    IDLE_START;    wire    START_DATA;    wire    DATA_CHECK;    wire    CHECK_STOP;    wire    STOP_IDLE;    reg[8:0]cnt_baud   ;//波特计数器,波特率115200    wireadd_cnt_baud;    wireend_cnt_baud;    reg[2:0]cnt_bit   ;//bit计数器,起始位1bit,数据位8bit,结束位1bit    wireadd_cnt_bit;    wireend_cnt_bit;        reg         [3:0]   bit_max;//bit最大值,复用需要考察每个状态的bit值    reg         [7:0]   tx_data_r;        //计434次    always @(posedge clk or negedge rst_n)begin        if(!rst_n)begin            cnt_baud 

上一篇:系统公安备案怎么备?

下一篇:Android保存图片到相册,兼容Android10及以上版本