UART轉AHB模塊ModelSim仿真

一、簡介

??UART轉AHB模塊用于實現一種簡單的通過上位機控制FPGA內部寄存器的方式。上位機通過串口助手發送讀寫寄存器的指令,UART轉AHB模塊接收指令后解析出地址,命令,數據信息,然后轉成AHB總線格式輸出。這時UART轉AHB模塊相當于AHB master主模塊,對應的包含寄存器的就是AHB slave從模塊。
??UART接口是上位機最簡單最通用的接口,物理接口就TXD和RXD兩根線,通過FPGA的3.3V引腳接可以接入。協議方面按字節傳輸,網上教程也比較多,這里不做詳細介紹。時序圖如下,也比較簡單,只是每個傳輸的字節是什么功能需要自己定義。
在這里插入圖片描述

??一般設置參數都是波特率115200,有效數據位8,停止位1,無奇偶校驗位。
在這里插入圖片描述

??AHB(Advanced High-performance Bus)是一種常用的FPGA內部總線接口。接口保留AHB接口中的主要端口,描述如下。
在這里插入圖片描述

??AHB總線的一次傳輸由如下兩部分組成。地址段,一個周期;數據段,一個或多個周期,可以由HREADY發出請求延長一個周期。
??下圖是一次沒有等待狀態的簡單的傳輸時序圖。HCLK上升沿 master 驅動地址和控制信號。HCLK下一周期上升沿 slave 采樣地址和控制信息,如果是讀操作,slave 發出相應的反饋信息,在第三個時鐘上升沿被 master采樣,同時 slave 完成數據的讀寫操作。
在這里插入圖片描述

二、模塊介紹

??仿真工程可以從此地址下載https://download.csdn.net/download/cjie221/90484623
??如下圖是UART轉AHB模塊的功能框圖。主要分兩部分,uart_slv_top模塊和uart_ahb_mst模塊。
在這里插入圖片描述

1. uart_slv_top模塊

??uart_slv_top模塊相當于UART的從設備,接收從上位機發送過來的串行指令數據,轉成字節數據和數據使能信號。框圖和主要端口如下圖。
在這里插入圖片描述

??其中uart_rxs用2個計數器,一個計每個bit位的時鐘數,另一個計bit位數,1個開始位,8個數據位,一個停止位,共10位。然后將串行8個數據位轉成并行輸出并加上數據有效指示信號。
??uart_txs同樣也是用2個計數器實現數據轉換,一個計每個bit位的時鐘數,另一個計bit位數。在tx_rdy信號為高時,等待tx_wrreq請求信號和數據,然后拉低tx_rdy信號,表示發送模塊正在忙,待串行數據傳輸完,再拉高tx_rdy。

2. uart_ahb_mst模塊

??uart_ahb_mst模塊接收uart_slv_top模塊發送過來的rx_data數據,解析出讀寫命令和地址,再轉成AHB總線接口輸出控制AHB slave從模塊。如果是讀命令,還要將讀回的寄存器值轉成tx_wrreq請求信號和數據送給uart_slv_top模塊。
??采用FIFO實現UART時鐘域到AHB時鐘域的轉換。因為UART傳輸較慢,而AHB傳輸較快,FIFO還具有指令和數據緩存的作用。對UART RX的FIFO可以保證UART指令接收完再進行AHB讀寫。對UART TX的FIFO可以緩存多條AHB的返回數據,從而保證UART能有足夠時間完成數據的發送。
??框圖和主要端口如下圖。
在這里插入圖片描述

三、實際仿真過程

??如下圖所示是testbench框圖,除uart_ahb_mst_top模式是被測試模塊,其他模塊是測試激勵和相關輔助模塊。
在這里插入圖片描述

??uart_cmd_trans模塊主要有兩個作用,一是負責將如下字符轉成ASCII 碼輸出。

`define CHAR_SPACE      8'h20
`define CHAR_R_UP       8'h52
`define CHAR_r_LO       8'h72
`define CHAR_W_UP       8'h57
`define CHAR_w_LO       8'h77
`define CHAR_0          8'h30
`define CHAR_1          8'h31
`define CHAR_2          8'h32
`define CHAR_3          8'h33
`define CHAR_4          8'h34
`define CHAR_5          8'h35
`define CHAR_6          8'h36
`define CHAR_7          8'h37
`define CHAR_8          8'h38
`define CHAR_9          8'h39
`define CHAR_A_UP       8'h41
`define CHAR_B_UP       8'h42
`define CHAR_C_UP       8'h43
`define CHAR_D_UP       8'h44
`define CHAR_E_UP       8'h45
`define CHAR_F_UP       8'h46
`define CHAR_a_LO       8'h61
`define CHAR_b_LO       8'h62
`define CHAR_c_LO       8'h63
`define CHAR_d_LO       8'h64
`define CHAR_e_LO       8'h65
`define CHAR_f_LO       8'h66

??二是產生寄存器讀寫測試指令。可根據自己需要,修改指令數量和內容

localparam N  = 3;//instruction number, must match with actual memory depth
assign  memc[0]  = "R 00000004         ";
assign  memc[1]  = "W 0000000a 00001234";
assign  memc[2]  = "R 0000000a         ";

??寫寄存器命令格式W 地址 數據,例如:W 0000000a 00001234
??讀寄存器命令格式R 地址,例如:R 00000004
??命令,地址和數據之間用1個空格隔開,命令w和r,大小寫都可以。地址和數據都用32位的十六進制表示,不用加0x前綴。

??uart_mst_top模塊將ASCII 碼轉成UART格式串行輸出,模擬上位機的UART端口。
??仿真波形如下圖所示。
在這里插入圖片描述

結語

??通過ModelSim仿真,我們能夠確認UART轉AHB轉換模塊的功能,滿足預期設計。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898194.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt5.15.2實現Qt for WebAssembly與示例

目錄 1.什么是Qt for WebAssembly? 1.1 什么是 WebAssembly? 1.2 WebAssembly 的優勢 1.3 什么是 Qt for WebAssembly? 1.4 Qt for WebAssembly 的特點 1.5 編譯過程 1.6 運行時環境 注意!!!注意&am…

AGI大模型(8):提示詞的安全與防護

1 前言 著名的「奶奶漏洞」,?套路把 AI 繞懵。 2 常?的提示詞攻擊技術 2.1 同類型?標劫持 同類?標劫持攻擊,特別是在同類型任務的背景下,涉及到攻擊者通過?法?段控制模型,并迫使其執行與原始任務性質相同但?標不同的操作…

使用redis客戶端中對于json數據格式的存儲和讀取

代碼背景: 現在有一個json格式的數據,但是由于redis客戶端上面沒辦法直接創建/導入json的數據格式。 故考慮現在redis客戶端上先存儲一個名為"old_order"的string類型的的源數據。 思路: 由于直接使用redisTemplate獲取自動導入…

專題三搜索插入位置

1.題目 題目分析: 給一個目標值,然后要在排序的整數數組中,找到跟目標值一樣的,如果沒有就把這個值插入進去,然后返回插入后的下標。 2.算法原理 根據題目的時間復雜度可以知道要用二分,開始劃分區域&…

Redis監控:從睜眼瞎到千里眼的進化史

各位在Redis迷霧中摸黑的探險家們!今天我們要給Redis裝上"天眼系統"——從連自己內存爆了都不知道的睜眼瞎,進化到連每秒哪個鍵被摸了幾次都門兒清的監控狂魔!準備好迎接《Redisの楚門世界》了嗎?👁? 第一幕…

雙緩沖機制(含原理、優勢、實現方式、應用場景)

雙緩沖機制 一、雙緩沖機制的原理二、雙緩沖的典型應用場景三、雙緩沖的優勢四、雙緩沖的實現方式1. 硬件級雙緩沖2. 軟件級雙緩沖3. 性能提升對比 五、雙緩沖的挑戰與解決方案六、總結 雙緩沖機制是一種通過使用兩個緩沖區(Buffer A 和 Buffer B)來優化…

Linux 進程的創建、終止、等待與程序替換函數 保姆級講解

目錄 一、 進程創建 fork函數 二、進程的終止: 1. 想明白:終止是在做什么? 2.進程終止的3種情況? a.退出碼是什么?存在原因?為什么int main()return 0? b.第三種進程終止的情況…

深入了解Linux —— git三板斧

版本控制器git 為了我們方便管理不同版本的文件,就有了版本控制器; 所謂的版本控制器,就是能夠了解到一個文件的歷史記錄(修改記錄);簡單來說就是記錄每一次的改動和版本迭代的一個管理系統,同…

STM32---FreeRTOS事件標志組

一、簡介 事件標志位:用一個位,來表示事件是否發生 事件標志組:一組事件標志位的集合,可以簡單的理解時間標志組,就是一個整體。 事件標志租的特點: 它的每一個位表示一個時間(高8位不算&…

在centOS Linux系統搭建自動化構建工具Jenkins

前言 在工作中發現公司使用Jenkins實現自動化部署項目方案,于是閑著自己也搗鼓一下,網上查閱相關部署資料,順便記錄操作步驟,所以有了下面這篇的文章。 部署完之后,安裝前端項目所需環境,比如node環境&am…

Git下載安裝(保姆教程)

目錄 1、Git下載 2、Git安裝(windows版) (1)啟動安裝程序 (2)閱讀許可協議 (3)選擇安裝路徑 (4)選擇組件 (5)選擇開始菜單文件夾…

深入理解嵌入式開發中的三個重要工具:零長度數組、container_of 和 typeof

在嵌入式開發中,內核開發者經常需要處理復雜的數據結構和動態內存分配。零長度數組、container_of 宏和 typeof 是內核開發中三個非常重要的工具,它們在結構體管理、內存操作和類型處理中發揮著關鍵作用。本文將詳細探討這三個工具的功能、應用場景及其在內核開發中的重要性。…

【react】react中的<></>和React Fragment的用法及區別詳解

目錄 1、<>是什么 2、為什么要使用<>&#xff1f; 3、如何使用<>&#xff1f; 基本用法 需要傳遞屬性時&#xff08;如key&#xff09; 使用效果 注意事項 總結 4、React Fragment 與空標簽&#xff08;<>&#xff09;詳解 1. Fragment 的用…

【人工智能】使用Python實現時間序列異常檢測:從基礎到深度學習模型的全方位探索

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 時間序列異常檢測是數據分析領域中的重要課題,廣泛應用于金融、醫療、工業監控等多個行業。本篇文章深入探討了時間序列異常檢測的基本技術…

Keytool常見問題全解析:從環境配置到公鑰提取

引言 在Android開發、跨平臺應用構建&#xff08;如UniApp&#xff09;或服務端證書管理中&#xff0c;keytool 是一個不可或缺的工具。然而&#xff0c;許多開發者在使用 keytool 時&#xff0c;常因環境配置、路徑權限、密碼問題等導致操作失敗。本文基于真實問題場景&#…

TSB - AD 解讀 — 邁向可靠、透明的 TSAD 任務

目錄 一 文章動機 二 TSAD 領域內的兩類缺陷 三 數據集的構建 四 實驗結果及結論 項目宣傳鏈接&#xff1a;TSB-AD 代碼鏈接&#xff1a; TheDatumOrg/TSB-AD: TSB-AD: Towards A Reliable Time-Series Anomaly Detection Benchmark 原作者解讀&#xff1a;NeurIPS 2…

DNS主從服務器

1.1環境準備 作用系統IP主機名web 服務器redhat9.5192.168.33.8webDNS 主服務器redhat9.5192.168.33.18dns1DNS 從服務器redhat9.5192.168.33.28dns2客戶端redhat9.5192.168.33.7client 1.2修改主機名和IP地址 web服務器 [rootweb-8 ~]# hostnamectl hostname web [rootweb-8…

遙感數據獲取、處理、分析到模型搭建全流程學習!DeepSeek、Python、OpenCV驅動空天地遙感數據分析

【扔進數據&#xff0c;直接出結果】在科技飛速發展的時代&#xff0c;遙感數據的精準分析已經成為推動各行業智能決策的關鍵工具。從無人機監測農田到衛星數據支持氣候研究&#xff0c;空天地遙感數據正以前所未有的方式為科研和商業帶來深刻變革。然而&#xff0c;對于許多專…

第一個vue項目

項目目錄 啟動vue項目 npm run serve 1.vue.config.js文件 (CLI通過vue-cli-serve啟動項目&#xff0c;解析配置配置文件vue-condig-js&#xff09; // vue.config.js //引入path板塊&#xff0c;這是Node.js的一個內置模塊&#xff0c;用于處理文件路徑&#xff0c;這里引用…

QT中讀取QSetting文件

1.ini文件的格式 頭文件 #include <QSettings> #include <QStringList> #include <QtCore> #include <QDebug>2.讀文件 //ini文件的讀取 void iniTest::readIniFile(QString filePath) {//1.打開ini文件QSettings m_iniFile(filePath, QSettings::I…