ZYNQ筆記(十五):PL讀寫PS DDR(自定義IP核-AXI4接口)

版本:Vivado2020.2(Vitis)

任務:PL 端自定義一個 AXI4 接口的 IP 核,通過 AXI_HP 接口對 PS 端 DDR3 進行讀寫 測試,讀寫的內存大小是 4K 字節,

目錄

一、介紹? ??

(1)AXI

(2)AXI SmartConnect 與?AXI Interconnect IP核

(3)ZYNQ AXI GP/HP 接口

二、硬件設計

三、軟件設計

四、效果


一、介紹? ??

(1)AXI

????????AXI:高級可擴展接口(Advanced eXtensible Interface)是 ARM 公司提出的?高性能、高帶寬、低延遲?的片上總線協議,屬于 AMBA:高級微控制器總線架構(Advanced Microcontroller Bus Architecture)協議家族的一部分,廣泛應用于 FPGA 和 SoC 設計中。

AXI 協議目前主要有?3 種版本

  1. AXI4(AXI4-Full):支持高帶寬數據傳輸,適用于內存映射(Memory-Mapped)設備。

  2. AXI4-Lite:簡化版,適用于低復雜度外設(如寄存器配置)。

  3. AXI4-Stream:無地址協議,用于高速流數據傳輸(如視頻、網絡數據)。

AXI4 (Full)AXI4-LiteAXI4-Stream
地址支持??????? (無地址)
突發傳輸????? (但本身流數據連續,且不限制長度)
亂序支持????
適用場景DDR訪問、DMA寄存器配置流數據傳輸:視頻流、網絡數據

(2)AXI SmartConnect 與?AXI Interconnect IP核

????????兩者都是 Xilinx 提供的基礎互聯 IP,用于管理多個AXI主設備(Master)和從設備(Slave)之間的通信,支持地址路由、仲裁和基礎QoS(服務質量)。AXI SmartConnect 為更高性能互聯IP,在AXI Interconnect 基礎上優化了?延遲、吞吐量和資源利用率,支持更復雜的系統拓撲。

AXI InterconnectAXI SmartConnect
協議支持AXI4, AXI4-LiteAXI4, AXI4-Lite, AXI4-Stream
QoS 能力基礎輪詢仲裁權重仲裁、優先級搶占
數據寬度轉換需手動配置自動適配
延遲優化中等更低延遲
適用場景簡單到中等復雜度系統高性能復雜系統(如Versal)
資源占用較少較多(但更高效)

(3)ZYNQ AXI GP/HP 接口

????????Zynq 的 PS 與 PL 端之間通過多種AXI接口連接,其中?GP(通用)接口和 HP(高性能)接口是最常用的兩類,主要區別在于帶寬、用途和連接對象。以下是核心對比與使用指南:

特性GP(General Purpose)接口HP(High Performance)接口
AXI版本AXI4(32位數據位寬)AXI3/AXI4(32/64位數據位寬)
數據帶寬較低
主要用途控制寄存器訪問、低速數據傳輸高速數據流(如DMA、視頻處理)
連接對象

PS 作為主設備訪問 PL 外設、

進行一般性的數據傳輸交互

PL 作為主設備訪問 PS 端 DDR 或 OCM
典型應用配置IP核寄存器、傳感器數據讀取視頻幀緩沖、高速ADC/DAC數據交互

二、硬件設計

? ? ? ? 整體系統框圖如圖所示,ZYNQ 配置用到了UART、AXI HP接口(PL端訪問 PS端 DDR)、DDR、以及提供給PL端的時鐘、復位信號:

????????(1)自定義 IP 核創建流程之前有介紹,參考:ZYNQ筆記(六):自定義IP核-LED呼吸燈。此外本次 IP 要實現 PL 端讀寫 PS 端 DDR,因此接口類型需要選FULL(AXI4-FULL)接口模式為Master。如圖所示:

????????(2)所創建的自定義 IP 核 Vivado 提供了實現 AXI-Full 接口的讀寫功能的模板(頂層模塊下的.v文件):不用對代碼作任 何修改,即可實現本次例程對 DDR 的讀寫測試功能

模板代碼設計了一個狀態機實現讀寫功能(模板代碼分析可參考正點原子視頻教程):

狀態機流程
1. 系統復位后,狀態機處于IDLE 初始狀態,等待外部輸入的啟動傳輸脈沖 init_txn_pulse。
2. IDLE 狀態下檢測到 init_txn_pulse 為高電平,狀態機跳轉到 INIT_WRITE 狀態。
3. INIT_WRITE 狀態下,狀態機拉高 start_single_burst_write 信號,來不斷地啟動 AXI4 Master 接口對 Slave 端大小為 4KB 的存儲空間進行突發寫操作。寫操作完成后,write_done 信號會拉高,狀態機進入 INIT_READ 狀態。
4. INIT_READ 狀態下,狀態機拉高 start_single_burst_read 信號,不斷地啟動 AXI4 Master 接口對 Slave 端同一存儲空間進行突發讀操作,同時將讀出的數據與寫入的數據進行對比。讀操作完成后,read_done 信號拉高,狀態機進入 INIT_COMPARE 狀態。
5. INIT_COMPARE 狀態下,判斷 AXI4 接口在讀寫過程中的是否發生錯誤,并將錯誤狀態賦值給 ERROR 信號,然后將 compare_done 信號拉高,表示一次讀寫測試完成。最后跳轉到 IDLE 狀態,等待下一次讀寫操作的啟動信號。

????????(3)直接封裝打包IP核,不用對內部代碼進行修改,直接使用生成的模板實現讀寫操作。再將自定義IP核添加到BD設計中,雙擊進行配置,將變量C M AXI TARGET SLAVE BASE ADDR 的值修改為0x1000_0000,它位于DDR3存儲器的地址空間,是axi4_rw_test IP核進行讀寫操作的起始地址,約為中間位置(不同板卡的ddr大小可能不一樣)。將該地址之前約DDR一半的存儲空間預留下來,用于運行PS中的軟件程序:

? ? ? ? 寫滿這些配置參數用于?AXI4 總線?的?用戶側擴展信號,允許在 AXI4 事務中添加額外的用戶自定義信息,沒有使用全部設置0。

? ? ? ? (4)PL通過按鍵輸入一個啟動信號,因此需要添加一個按鍵消抖模塊key_filter,實現按鍵按下輸出一個時鐘周期的高電平脈沖,模塊時鐘周期為50MHz,正好是zynq配置提供給PL的時鐘頻率。新建key_filter.v源文件并完成verilog設計后,在 BD 界面空白處右鍵選擇“Add Module”,添加源文件,將按鍵消抖模塊 key_filter.v 添加進來,如圖所示:

????????(5)最后整體 bd 設計部分如圖所示:設計檢查、Generate Output Products、 Create HDL Wrapper、管腳約束、Gnerate Bitstream、Export Hardware(包含比特流文件)、啟動Vitis

三、軟件設計

#include "stdio.h"
#include "xil_printf.h"
#include "xil_cache.h"
#include "xil_io.h"   //用于訪問內存映射的寄存器或外設:包含讀寫內存數據函數#define DDR3_DATA_BASEADDR   0x10000000  //宏定義DDR3數據存儲的起始地址(對應硬件設計中的配置)int main()
{int i;int data;int c;//關閉數據緩存Data Cache以免從緩存中讀取數據。因為對同一地址進行讀操作時,讀出的有可能是 Data Cache中緩存數據,而非 DDR中真正數據Xil_DCacheDisable();while(1){xil_printf("Enter 1 to start read data in DDR \r\n");scanf("%d",&c);if(c==1){//for循環從地址 0x1000_0000讀取 DDR3存儲器中的數據,讀取的存儲空間大小為 4KB。for(i=0; i<4096; i+=4)//i每次累加 4,因為調用Xil_In32()讀取內存數據,每次讀取 32bit。而內存地址以字節為單位,一次讀操作后地址應加 4。{//通過地址讀取32位數據data = Xil_In32(DDR3_DATA_BASEADDR + i);//打印地址和數據xil_printf("Address:%d	Data:%d \r\n",(DDR3_DATA_BASEADDR+i), data);}}}return 0;
}

四、效果

1.不按按鍵(沒有向DDR寫數據)直接讀取DDR,可以看到打印的數據為隨機數。

2.按下按鍵后,僅指示讀寫操作結束的LED燈亮起(DDR數據讀寫成功),這時PS再讀取DDR,可以看到打印的數據為1到1024(一個數據32位,一共剛好?4Byte×1K=4KB數據),正是自定義IP寫入DDR的數據。

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

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

相關文章

Redis 小記

Redis 命令小記 Redis 是一個文本/二進制數據庫&#xff08;textual/binary database&#xff09; CLI 命令 redis-cli, redis-server, redis-benchmark, redis-check-dump, redis-check-aof redis-cli 執行命令 # 方式 1 redis-cli -h 127.0.0.1 -p 6379 > 127.0.0.1:63…

如何在idea中編寫spark程序

在 IntelliJ IDEA 中編寫 Spark 程序的詳細指南 在大數據處理領域&#xff0c;Apache Spark 憑借其強大的分布式計算能力&#xff0c;成為了眾多開發者的首選工具。而 IntelliJ IDEA 作為一款功能強大的集成開發環境&#xff08;IDE&#xff09;&#xff0c;為編寫 Spark 程序…

各類神經網絡學習:(十一)注意力機制(第3/4集),位置編碼

上一篇下一篇注意力機制&#xff08;2/4集&#xff09;注意力機制&#xff08;4/4集&#xff09; 位置編碼 R N N RNN RNN 和 L S T M LSTM LSTM 這些網絡都是串行執行的&#xff0c;在潛移默化中&#xff0c;就包含了順序關系&#xff0c;也就是詞序關系。而注意力機制是并行…

《Python Web部署應知應會》Flask網站隱藏或改變瀏覽器URL:從Nginx反向代理到URL重寫技術

Flask網站隱藏或改變瀏覽器顯示URL地址的實現方案&#xff1a;從Nginx反向代理到URL重寫技術 引言 在Web應用開發中&#xff0c;URL路徑的安全性往往被忽視&#xff0c;這可能導致網站結構和后端邏輯被攻擊者輕易推斷。對于Flask框架開發的網站&#xff0c;如何隱藏或改變瀏覽…

elementui里的el-tabs的內置樣式修改失效?

1.問題圖 紅框里的是組件的內置樣式&#xff0c;紅框下的是自定義樣式 2.分析 2.1scoped vue模板編譯器在編譯有scoped的stye標簽時&#xff0c;會生成對應的postCSS插件&#xff0c;該插件會給每個scoped標記的style標簽模塊&#xff0c;生成唯一一個對應的 data-v-xxxhash…

大數據測試集群環境部署

Hadoop大數據集群搭建&#xff08;超詳細&#xff09;_hadoop_小飛飛519-GitCode 開源社區 hadoop集群一之虛擬機安裝(mac)_hadoop_皮皮蝦不皮呀-華為開發者空間 hadoop集群二之hadoop安裝_hadoop_皮皮蝦不皮呀-華為開發者空間 虛擬機如何查看gateway | PingCode智庫

Nginx 核心功能筆記

目錄 一、Nginx 簡介 二、核心功能詳解 三、關鍵指令解析 四、性能優化要點 五、常見應用場景 一、Nginx 簡介 定位 高性能的 HTTP/反向代理服務器&#xff0c;同時支持郵件協議代理&#xff08;IMAP/POP3/SMTP&#xff09;。采用 事件驅動、異步非阻塞 架構&#xff0c;…

強化學習(二)馬爾科夫決策過程(MDP)

1. 簡介 馬爾可夫決策過程正式地描述了強化學習的環境其中環境是完全可觀測的即當前狀態完全表征了這個過程幾乎所有的強化學習問題都可以形式化為馬爾可夫決策過程&#xff0c;例如&#xff1a; 最優控制主要處理連續的馬爾可夫決策過程部分可觀察的問題可以轉化為馬爾可夫決…

Day16(貪心算法)——LeetCode45.跳躍游戲II763.劃分字母區間

1 LeetCode45.跳躍游戲II 1.1 題目描述 與跳躍游戲類似&#xff0c;跳躍游戲II給定長為n的從0開始索引的整數數組nums&#xff0c;nums[i]是你在i處能向右跳躍的最大步數&#xff0c;求到達數組最后一個索引處需要跳躍的最少次數。 ??一個示例&#xff1a;nums[2,3,1,1,4]&a…

告別碎片化!兩大先進分塊技術如何提升RAG的語義連貫性?

研究動機 論文核心問題及研究背景分析 1. 研究領域及其重要性 研究領域&#xff1a;檢索增強生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;系統&#xff0c;結合自然語言處理&#xff08;NLP&#xff09;與信息檢索技術。重要性&#xff1a; RAG通過動態…

leetcode day37 474

474 一和零 給你一個二進制字符串數組 strs 和兩個整數 m 和 n 。 請你找出并返回 strs 的最大子集的長度&#xff0c;該子集中 最多 有 m 個 0 和 n 個 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 示例 1&#xff1a; 輸入&#xff1a;s…

二、信息時代社會結構的轉變

到了信息時代,以及在核武器的前提下,上述的社會結構的邏輯,就有了一個根 本性的轉變,就是暴力的成本和收益,都在下降。 暴力的成本在降低。比如說槍支,它的制造和分發都變得非常容易。現在我們都 知道有 3D 打印,它就好像工業時代的印刷機,印刷圣經或者書籍,使知識更加 普及和容…

Elasticsearch 堆內存使用情況和 JVM 垃圾回收

作者&#xff1a;來自 Elastic Kofi Bartlett 探索 Elasticsearch 堆內存使用情況和 JVM 垃圾回收&#xff0c;包括最佳實踐以及在堆內存使用過高或 JVM 性能不佳時的解決方法。 堆內存大小是分配給 Elasticsearch 節點中 Java 虛擬機的 RAM 數量。 從 7.11 版本開始&#xff…

C++之類和對象:構造函數,析構函數,拷貝構造,賦值運算符重載

前提&#xff1a;如果一個類是空類&#xff0c;C中空類中真的什么都沒有嗎&#xff0c;不是的&#xff0c;編譯器會自動生成6個默認成員函數。默認成員函數&#xff1a;用戶沒有顯式實現&#xff0c;編譯器會生成的成員函數稱為默認成員函數。 默認成員函數&#xff1a;構造函…

【專題五】位運算(1):常見位運算操作總結

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

小草GrassRouter多卡聚合路由器聚合衛星、MESH網絡應用解決方案

一、多網融合解決方案 衛星網絡融合? 支持接入衛星通信模塊&#xff0c;在無地面網絡覆蓋的極端場景&#xff08;如偏遠山區、海洋救援&#xff09;下&#xff0c;形成“5G衛星”雙鏈路冗余傳輸&#xff0c;衛星鏈路可作為核心通信備份&#xff0c;確保關鍵指令和視頻數據實…

【Mybatis】Mybatis基礎

文章目錄 前言一、搭建MyBatis1.1 創建maven工程1.2 加入log4j日志功能1.3 MyBatis的增刪改查1.4 核心配置文件詳解 二、MyBatis獲取參數值的兩種方式2.1 單個字面量類型的參數2.2 多個字面量類型的參數2.3 map集合類型的參數2.4 實體類類型的參數2.5 使用Param標識參數 三、 M…

AI四大邊界

大模型訓練的邊界并非由單一因素決定&#xff0c;而是技術、倫理、法律及實際應用需求共同作用的結果。以下從四個維度解析其邊界來源&#xff1a; 一、技術邊界&#xff1a;資源與能力的雙重限制 計算資源瓶頸 成本與算力&#xff1a;大模型訓練依賴海量GPU/TPU資源&#xff…

Twitter 工作原理|架構解析|社交APP邏輯

這是對Twitter 工作原理&#xff5c;架構解析&#xff5c;社交APP邏輯_嗶哩嗶哩_bilibili的學習&#xff0c;感謝up小凡生一 在兩年半前&#xff0c;埃隆馬斯克收購了Twitter&#xff0c;并且進行了一系列重大改革。今天我們來解析一下這個全球知名社交平臺的架構。首先&#x…

Java基礎學習內容大綱

Java基礎學習內容大綱 第一階段:建立編程思想 ? Java概述:如何快速學習Java技術、Java歷史、Java特點、Sublime、Java運行機制、JDK、轉義字符、Java開發規范、Java API ? 變量:數據類型、變量基本使用、數據類型轉換 ? 運算符:運算符介紹、算數運算符、關系運算符、…