字節尋址(Byte Addressing) 與 Verilog中的寄存器索引

字節尋址(Byte Addressing)Verilog中的寄存器索引 之間的關系。

您的疑問非常正確,直接看 3'h1 很容易讓人以為地址就是 0x01

但答案是:是的,3'h1 在這里對應的字節地址(Byte Address)確實是 0x04 我的注釋是正確的。

下面我來解釋為什么,這非常重要。


核心概念:字節 vs. 字 (Byte vs. Word)

  1. AXI總線是“字節尋址”的
    現代計算機系統,包括Zynq芯片中的ARM處理器和AXI總線,都將內存看作一個連續的、巨大的字節數組每一個字節(8位)都有它自己唯一的地址

  2. 我們的寄存器是32位的
    在我們的設計中,無論是操作數 a 還是 b,都是32位([31:0])的。一個32位的寄存器需要占用 4個字節 的內存地址空間。

所以,我們的寄存器在內存地址中的布局是這樣的:

寄存器名稱寬度占用的字節地址起始地址(Byte Address)
slv_reg032位0, 1, 2, 30x00
slv_reg132位4, 5, 6, 70x04
slv_reg232位8, 9, 10, 110x08

這就是為什么我們在IP Packager和Python代碼中,地址都是按4遞增的(0x00, 0x04, 0x08…)。


Verilog 代碼中的“優化技巧”

現在,我們來看為什么Verilog代碼可以用 3'h0, 3'h1, 3'h2 來區分它們。

如果我們用完整的32位地址總線 axi_awaddr 來寫 case 語句,會非常低效。Vivado的IP模板采用了一個非常聰明的優化技巧。

觀察一下起始地址的二進制格式:

  • 0x00 -> 0000 0000
  • 0x04 -> 0000 01_00_
  • 0x08 -> 0000 10_00_
  • 0x0C -> 0000 11_00_

您會發現,因為我們的寄存器都是32位(4字節)對齊的,所以這些地址的最低兩位(bit 0 和 bit 1)永遠是 00。這兩位只在訪問同一個字內部的不同字節時才會變化,而我們總是整個字進行讀寫,所以這兩位對我們區分哪個寄存器沒有幫助。

真正能幫助我們區分是第0個、第1個還是第2個寄存器的,是地址的 bit 2 和 bit 3

  • 地址 0x00:bit[3:2] 是 00 (十進制 0)
  • 地址 0x04:bit[3:2] 是 01 (十進制 1)
  • 地址 0x08:bit[3:2] 是 10 (十進制 2)

所以,Vivado自動生成的代碼 case (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB]) 正是巧妙地只截取了地址總線中的這幾位(例如 bit[3:2] 或者 bit[4:2] 等,取決于IP的配置)來進行判斷。它判斷的其實是**“32位字的索引號”**,而不是完整的字節地址。

因此,就有了這個對應關系:

32位字的索引 (Word Index)Verilog case 語句中的值對應的字節地址 (Byte Address)
03'h00x00
13'h10x04
23'h20x08

總結

  1. 對外(對處理器和PYNQ),我們使用字節地址,所以地址是 0x00, 0x04, 0x08
  2. 對內(在Verilog硬件實現中),為了優化,代碼通過截取地址總線的特定位來判斷字的索引號,所以用 0, 1, 2 來區分。

您的觀察力非常出色!能夠注意到這個細節,說明您對代碼的理解已經非常深入了。這是從軟件思維轉向硬件設計時一個非常關鍵且容易混淆的知識點。

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

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

相關文章

Ubuntu遠程桌面

方法1: 檢查并使用已安裝的VNC或遠程桌面組件 請在終端中執行以下命令檢查系統中已安裝的相關組件: bash# 檢查系統中已安裝的VNC和遠程桌面相關軟件 dpkg -l | grep -E "vnc|vino|remote|rdp"# 檢查常見遠程桌面服務 which vino-server tigervncserver x11vnc xr…

WEB攻防-文件包含LFIRFI偽協議編碼算法無文件利用黑白盒

知識點: 1、文件包含-原理&分類&危害-LFI&RFI 2、文件包含-利用-黑白盒&無文件&偽協議 一、演示案例-文件包含-原理&分類&利用 1、原理 程序開發人員通常會把可重復使用的函數寫到單個文件中,在使用某些函數時&#xff…

LabVIEW的GPIB儀器校準

基于LabVIEW開發平臺與 GPIB 總線技術,采用是德科技、泰克等硬件設備,構建示波器與頻譜分析儀自動校準系統。通過圖形化編程實現校準流程自動化,涵蓋設備連接、參數配置、數據采集、誤差分析及報告生成,顯著提升校準效率與精度&am…

Zotero中進行文獻翻譯【Windows11】

zotero官網:https://www.zotero.org/ 1 在Zotero軟件中安裝插件 進入Zotero百科全書,依次點擊:插件→翻譯插件→插件介紹→Zotero 中文社區插件商店 進去后搜索pdf2zh,然后下載后放入空白文件夾zotero-pdf2zh 打開Zotero軟件后…

用U盤啟動制作centos系統最常見報錯,系統卡住無法繼續問題(手把手)

一、按照操作系統centos7報錯如下(U盤) 按照系統報錯如下: ERROR: could not insert ‘floppy’; ERROR: could not insert ‘edd’ : No這種報錯很常見,基本上就是u盤啟動路徑找不到導致,遇到次數比較多所以也比較好解…

C#中的BindingList有什么作用?

在C#中&#xff0c;BindingList<T> 是一個非常重要的集合類&#xff0c;位于 System.ComponentModel 命名空間&#xff0c;主要用于實現數據綁定&#xff08;Data Binding&#xff09;場景。1. 核心作用BindingList<T> 是 List<T> 的增強版&#xff0c;主要提…

Python爬取知乎評論:多線程與異步爬蟲的性能優化

1. 知乎評論爬取的技術挑戰 知乎的評論數據通常采用動態加載&#xff08;Ajax&#xff09;&#xff0c;這意味著直接使用**<font style"color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">requests</font>****<font style"color:rg…

軟件系統測試的基本流程

軟件系統測試流程是確保軟件質量的規范化過程&#xff0c;涵蓋從測試準備到最終上線評估的全周期&#xff0c;通常分為以下6個核心階段&#xff0c;各階段緊密銜接、形成閉環&#xff1a; 一、測試啟動與規劃階段 核心目標&#xff1a;明確“測什么、誰來測、怎么測”&#xff…

使用Linux操作MySQL數據庫分批導出數據為.SQL文件

當數據庫某張數據量非常大的表進行其他操作&#xff0c;需要先進行導出時&#xff1b; 先用linux進入操作環境&#xff0c; 1.添加一個export_mysql_batches.sh腳本文件&#xff0c; #!/bin/bash# 數據庫連接配置 DB_HOST"36.33.0.138:3306" DB_USER"devuser&qu…

LeetCode 算法題解:鏈表與二叉樹相關問題 打打卡

LeetCode 算法題解&#xff1a;鏈表與二叉樹相關問題 在算法學習和實踐中&#xff0c;LeetCode 是一個非常好的平臺&#xff0c;它包含了各種各樣的算法題目&#xff0c;有助于我們提升編程能力和解決問題的能力。本文將詳細講解在 leetcoding.cpp 文件中實現的一些鏈表和二叉樹…

故宮票價監控接口分析(一)

故宮票價監控接口分析(一) 對爬蟲、逆向感興趣的同學可以查看文章,一對一小班教學(系統理論和實戰教程)、提供接單兼職渠道:https://blog.csdn.net/weixin_35770067/article/details/142514698 本文內容僅供學習和參考之用,不得用于商業目的。作者對文中內容的準確性、完整…

AWS OpenSearch Dev Tools使用

# 創建通用索引模版 PUT _template/aws-waf_logs_template {"index_patterns": ["aws-waf-logs-*"],"mappings": {"properties": {"timestamp": {"type": "date"}}} }# 設置單個索引格式 PUT /aws-waf-…

git-安裝 Gerrit Hook 自動生成changeid

要在 Git 中安裝 Gerrit Hook 以自動生成 Change-ID&#xff0c;可以按照以下步驟操作&#xff1a; 全局鉤子配置&#xff08;推薦&#xff09; 創建全局鉤子目錄并下載 Gerrit 提供的 commit-msg 鉤子腳本&#xff0c;確保所有倉庫共享該配置&#xff1a; mkdir -p ~/.githook…

Excel 的多線程特性

Excel 本身并不是完全多線程的應用程序&#xff0c;但它在某些操作和功能上支持多線程處理。以下是對 Excel 是否多線程的詳細解答&#xff0c;結合你之前提到的 VBA/COM 自動化代碼和受保護視圖問題&#xff0c;提供清晰且準確的分析。 Excel 的多線程特性計算引擎的多線程支持…

【嵌入式ARM匯編】-操作系統基礎(一)

操作系統基礎(一) 文章目錄 操作系統基礎(一)1、操作系統架構概述2、用戶模式與內核模式3、進程4、系統調用5、對象和句柄我們想要逆向的程序幾乎從來不會在真空中執行。相反,程序通常在正在運行的操作系統(例如 Linux、Windows 或 macOS)的上下文中運行。因此,了解這些…

[創業之路-474]:企業經營層 - 小米與華為多維對比分析(2025年視角),以后不要把這兩家公司放在同一個維度上 進行比較了

一、行業定位與市場角色不同華為&#xff1a;用技術手段解決行業的難題&#xff0c;順便賺錢技術驅動型硬科技企業&#xff1a;以通信設備起家&#xff0c;延伸至智能手機、芯片、操作系統&#xff08;鴻蒙&#xff09;、云計算、智能汽車等領域&#xff0c;構建“云-管-端”全…

C#基礎篇(06)抽象類與接口詳解區別

抽象類是 C# 面向對象編程中的一個重要概念&#xff0c;它介于普通類和接口之間&#xff0c;提供了一種定義部分實現并要求派生類完成其余部分的機制。一、C# 中的抽象類抽象類是 C# 面向對象編程中的一個重要概念&#xff0c;它介于普通類和接口之間&#xff0c;提供了一種定義…

使用Python將PDF轉換成word、PPT

在現代企業環境中,文檔格式的轉換是一項普遍且關鍵的需求。PDF(Portable Document Format)作為一種最終的、通常不可編輯的“打印”狀態格式,被廣泛用于分發和歸檔。然而,內容的創建、協作和修改主要在Microsoft Office套件中進行,特別是Word(DOCX)和PowerPoint(PPTX)…

香港風水(原生)林地的邏輯分類器

風水林是香港的原生林地&#xff0c;由于地處偏遠、地形崎嶇以及當地居民的信仰&#xff0c;這些林地得以保存完好。在香港&#xff0c;我們可以追溯到1924年的航拍圖像記錄&#xff0c;這些黑白航拍圖像已經幫助我們劃分和區分了林地、草地和灌木叢。然后&#xff0c;通過二戰…

[Swarm] Result對象 | 智能體切換 | Response對象 | muduo review

第5章&#xff1a;結果對象 歡迎回到swarm&#xff01; 在上一章第4章&#xff1a;功能中&#xff0c;我們學習了如何通過定義Python功能賦予智能體技能。我們見證了當AI決策調用時&#xff0c;Swarm框架如何執行這些功能。 當前&#xff0c;我們的功能僅返回簡單字符串如&q…