日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA串口(UART)通信协议制定与设计思路详解示例

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA串口(UART)通信协议制定与设计思路详解示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

串口(UART)通信協議制定與設計思路詳解

1 概述

本文用于描述規定的串口通信協議,以及傳輸內容。

2 項目關于串口的要求

a) 支持BIT自檢,1路UART上報BIT信息;

b) 1路UART接口,波特率可調,默認波特率為可達到3.125Mbps。

3 功能分析

支持BIT自檢即需要串口自動上報BIT信息,即周期信息上報信息,本設計暫定為1s鐘上報一次。

支持波特率可調,在無其他接口控制的環境下,則需要通過串口下發來調整波特率。

4 項目設計

本項目串口設計支持收和發兩個方向,BIT上報為1s一次。波特率可調,默認為3.125Mbps。串口格式為:1bit起始位,8bit數據位,1bit停止位,無奇偶校驗位。

通信協議如下表所示:

表 1 串口通信協議

字段位寬備注
幀頭frame_head8bit默認為0xfe
地址addr8bit0x01:BIT信息 0x02:波特率信息 0x03:BIT上報狀態控制 0x04:上報串口波特率使能 0x05:上報BIT信息使能
數據data32bit數據為大端模式

4.1 BIT信息內容

BIT信息包括:光纖的fiber_ok,dvi_lock,DDR初始化完成init_calib_complete等信息,優先使用低位表示,比如:

Data[0]:fiber_ok;

data[1]:dvi_lock;

data[2]: init_calib_complete

4.2 BIT上報狀態控制

BIT上報控制如下:

當數據位1時,默認為自動上報;

當數據位0時,停止自動上報。

4.3 波特率

波特率設置一bps為單位.比如115200bps。

5 上傳通道的包

可上傳的包信息有:

  • BIT信息;

  • 現在的串口波特率;

  • 等其他信息

  • 6 接收通道的包

    接收后需要處理的包有:

  • BIT狀態控制;

  • 改變的波特率值;

  • 7 設計思路

    本設計要實現本功能主要分為7個模塊。如下圖所示:

    圖 1 模塊對接圖

    虛線框里的模塊為FPGA用邏輯需要實現的部分。

    其中rx_uart為將串行的1bit從串口接收到的信號轉變為8bit數據的模塊,已經實現。Tx_uart為將8bit并行數據轉換為1bit串行數據給串口芯片的模塊,也以實現。

    7.1 RX_DATA模塊

    RX_DATA模塊為實現從接收到的數據中識別本項目需要的數據格式,本模塊的輸入輸出端口如下表所示:

    表 2 RX_DATA模塊接口

    序號信號名位寬bit方向I/O備注
    1.clk1I時鐘
    2.rst_n1I復位,低有效
    3.uart_din8I從rx_uart接收到的數據
    4.uart_din_vld1I從rx_uart接收到的數據有效指示信號,高有效
    5.addr8O按串口協議解析出的地址
    6.data32O按串口協議解析出的數據
    7.data_vld1O按串口協議解析出的數據有效指示信號

    其實現過程為使用狀態機判斷是否為本文需要的格式,狀態機如下所示:

    圖 2 RX_DATA控制邏輯

    7.2 RX_analysis模塊

    本模塊主要是實現從地址數據中提取出有用數據的功能。本模塊的接口如下表所示:

    表 3 RX_ANALYSIS模塊接口

    序號信號名位寬bit方向I/O備注
    1.clk1I時鐘
    2.rst_n1I復位,低有效
    3.addr8I串口協議的地址
    4.data32I串口協議的數據
    5.data_vld1I串口協議的數據有效指示信號,高有效
    6.bit_self_report_en1OBit自動上報使能信號,高有效
    7.uart_bps32O串口波特率
    8.Uart_bps_report_en1O波特率上報使能信號
    9.Bit_report_en1OBit上報一次使能信號

    具體實現方式如下所示:

  • 當addr為0x03時賦值判斷:bit_self_report_en默認為1,當addr為0x03并且data_vld為1時變為data[0],其他時候保持不變;

  • 當addr為0x02時賦值判斷:uart_bps默認為d’3_125_000,當addr為0x02并且data_vld為1時變為data,其他時候保持不變;

  • 當addr為0x04時賦值判斷:data_vld有效且data[1]為1時,Uart_bps_report_en使能一次;

  • 當addr為0x05時賦值判斷:data_vld有效且data[1]為1時,Bit_report_en使能一次;

  • 7.3 TX_DATA模塊

    本模塊主要是將串口協議的數據轉為換8bit的串口發射模塊可以發出的格式。本模塊的接口如下表所示:

    表 3 RX_ANALYSIS模塊接口

    序號信號名位寬bit方向I/O備注
    10.clk1I時鐘
    11.rst_n1I復位,低有效
    12.din_addr8I串口協議的地址
    13.din_data32I串口協議的數據
    14.din_data_vld1I串口協議的數據有效指示信號
    15.din_rdy1O本模塊準備好接受數據指示信號,高有效
    16.dout8O輸出給tx_uart模塊的數據
    17.dout_vld1O輸出給tx_uart模塊的數據有效指示信號,高有效
    18.dout_rdy1I下級模塊準備好接受數據的指示信號,高有效

    其實現思路如下所示:

  • 當輸入數據信號有效時,將地址數據以及幀頭按串口協議格式進行組包,即位數拼接 tx_data = {幀頭,地址,數據};

  • 之后將tx_data輸入到一個位寬轉換fifo里面。Fifo的輸入位寬為8+8+32=48bit,輸出位寬為8bit;

  • Dout等于fifo的輸出;

  • 當fifo非空,且dout_rdy為1時,fifo的讀使能有效,且dout_vld有效;

  • 當fifo非滿或者即將非滿時,din_rdy有效;

  • 7.4 Tx_ctrl模塊

    本模塊主要是控制什么時候需要往外面發送數據,以及發送什么數據。本模塊的端口如下表所示:

    表 3 TX_CTRL模塊接口

    序號信號名位寬bit方向I/O備注
    1.clk1I時鐘
    2.rst_n1I復位,低有效
    3.dout_addr8O串口協議的地址
    4.dout_data32O串口協議的數據
    5.dout_data_vld1O串口協議的數據有效指示信號
    6.dout_rdy1I下級模塊準備好接受數據指示信號,高有效
    7.uart_bps32I當前串口波特率
    8.bit_data32IBit的信息
    9.bit_report_en1IBit上報使能信號,高有效
    10.uart_bsp_report_en1I串口波特率上報使能信號,高有效

    本模塊實現的思路如下:

  • 當Bit_report_en為1時,dout_addr為0x01,dout_data為bit_data,且在dout_rdy有效時,dout_data_vld有效一次;

  • Uart_bsp_report_en為1時,dout_addr為0x02,dout_data為uart_bps,且在dout_rdy有效時,dout_data_vld有效一次;

  • 7.5 Top模塊

    本模塊是用于整合各個模塊,以及產生一個1s的定時模塊。

    當定時時間到或者外部有bit上報請求時,則使能一次bit上報使能。

    ata為bit_data,且在dout_rdy有效時,dout_data_vld有效一次;

  • Uart_bsp_report_en為1時,dout_addr為0x02,dout_data為uart_bps,且在dout_rdy有效時,dout_data_vld有效一次;
  • 7.5 Top模塊

    本模塊是用于整合各個模塊,以及產生一個1s的定時模塊。

    當定時時間到或者外部有bit上報請求時,則使能一次bit上報使能。

    總結

    以上是生活随笔為你收集整理的FPGA串口(UART)通信协议制定与设计思路详解示例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。