在本文中,我們將介紹五個(gè)廣泛使用的特殊寄存器,即;別名、影子、間接、鎖定和觸發(fā)緩沖區(qū)寄存器。
在當(dāng)今的SoC中,我們已經(jīng)看到了系統(tǒng)架構(gòu)、節(jié)點(diǎn)大小、互連、安全性、編程語(yǔ)言和開(kāi)發(fā)工具領(lǐng)域的許多創(chuàng)新。有時(shí),我們低估了我們?cè)谌粘9ぷ髦惺褂玫暮?jiǎn)單創(chuàng)新的重要性和影響,這些創(chuàng)新是我們作為 SoC 架構(gòu)師、驗(yàn)證工程師、硬件設(shè)計(jì)師或軟件/固件開(kāi)發(fā)人員。
特別是,讓我們研究與硬件/軟件接口層相關(guān)的創(chuàng)新 - 軟件應(yīng)用程序與硬件外設(shè)通信。具體來(lái)說(shuō),在寄存器空間中,硬件外圍設(shè)備(如視頻編解碼器、藍(lán)牙或 Wi-Fi)從處理器上執(zhí)行的軟件應(yīng)用程序接收配置、控制和功能。十年前,在設(shè)計(jì)寄存器時(shí),我們只需要RO、WO、RW、RC、RS、WS等的組合。但是今天的SoC已經(jīng)變得如此復(fù)雜,以至于我們不得不進(jìn)行創(chuàng)新,并思考更具創(chuàng)造性的方式來(lái)設(shè)計(jì)寄存器。在本文中,我們將介紹五個(gè)廣泛使用的特殊寄存器,即;別名、影子、間接、鎖定和觸發(fā)緩沖區(qū)寄存器。
別名寄存器
這是一種可從同一地址映射中的多個(gè)地址訪問(wèn)的寄存器類型,但實(shí)際上它是一個(gè)寄存器。別名寄存器中的字段根據(jù)用于訪問(wèn)它們的地址具有不同的行為。如圖 1 所示的示例,RegA 中的字段在使用0x1000地址訪問(wèn)時(shí)是可讀和可寫的,但在從0x2000地址訪問(wèn)時(shí)是寫 1 到清除的。創(chuàng)建別名寄存器時(shí)應(yīng)應(yīng)用的一些準(zhǔn)則:別名寄存器的硬件訪問(wèn)為 NA;字段不能是已別名字段的別名;并且別名字段的父寄存器不能是外部的。
影子寄存器
當(dāng)您的軟件應(yīng)用程序需要覆蓋所有寄存器但稍后需要恢復(fù)數(shù)據(jù)時(shí),解決方案是使用影子寄存器。通過(guò)寄存器總線寫入寄存器的數(shù)據(jù)應(yīng)自動(dòng)復(fù)制或隱藏到地址映射中的另一個(gè)寄存器。如圖 2 中的示例所示,OriginalReg 中的數(shù)據(jù)被復(fù)制到 ShadowReg。可以從總線訪問(wèn)ShadowReg,但對(duì)原始寄存器沒(méi)有影響。多個(gè)影子寄存器可以影子單個(gè)原始寄存器。
間接寄存器
某些寄存器或存儲(chǔ)器位置不能通過(guò)專用地址直接訪問(wèn),它們被稱為間接尋址寄存器或簡(jiǎn)稱間接寄存器。兩個(gè)寄存器用于訪問(wèn)間接寄存器。
若要將值存儲(chǔ)到間接寄存器數(shù)組中,請(qǐng)使用基本寄存器來(lái)保存實(shí)際地址。該指令檢查基本寄存器,將其值解釋為寄存器數(shù)組中的地址位置,并將數(shù)據(jù)寄存器中的值放入該位置。要從間接寄存器數(shù)組加載值,還使用了基本寄存器。此基本寄存器保存實(shí)際地址。該指令檢查基本寄存器,將其值解釋為地址,獲取存儲(chǔ)在該位置的值,然后將其加載到數(shù)據(jù)寄存器中。
如圖 3 中的示例所示,Reg1 指定內(nèi)存數(shù)組中的索引。Reg2 指定要寫入的數(shù)據(jù)或存儲(chǔ)從內(nèi)存中讀取的值。Reg2 需要一個(gè)間接寄存器大小的“深度”屬性。
鎖定寄存器
如果狀態(tài)機(jī)受保護(hù)在寄存器后面,而該狀態(tài)機(jī)只能由存儲(chǔ)在另一個(gè)寄存器中的密鑰啟動(dòng),則 Lock 寄存器可能是解決方案。任何可寫寄存器或字段都可以根據(jù)其他寄存器的字段值進(jìn)行保護(hù)/鎖定。此類寄存器稱為鎖定寄存器。鎖定寄存器和保護(hù)/密鑰寄存器可以位于不同的寄存器組中,但不能位于不同的塊中。如圖 4 中的示例所示,由屬性 “l(fā)ock” 指定的 Lock 寄存器由一個(gè)簡(jiǎn)單的表達(dá)式lock=RegA.f1 定義,這意味著寄存器 Lockreg 被鎖定,具體取決于寄存器“RegA”(密鑰寄存器)的字段“f1”的值。鎖定機(jī)制也可以通過(guò)更復(fù)雜的表達(dá)式來(lái)定義,例如 lock = regA.FldA || regB.Lock_fld == 8‘b00000001&& regA.FldA == 4’b0011。此復(fù)雜表達(dá)式由不同的寄存器字段組成。在這種情況下,如果鎖定表達(dá)式中的每個(gè)條件在運(yùn)行時(shí)計(jì)算結(jié)果為 true,則寄存器的軟件寫訪問(wèn)權(quán)限將被鎖定。
觸發(fā)緩沖寄存器
有時(shí)需要從硬件端將大小大于總線寬度的寄存器作為一個(gè)原子單元寫入和讀取。這種寄存器從軟件端按順序?qū)懭?讀取。這可以通過(guò)在與觸發(fā)事件關(guān)聯(lián)的內(nèi)存空間中創(chuàng)建 N 寄存器緩沖區(qū)來(lái)實(shí)現(xiàn)。當(dāng)觸發(fā)事件發(fā)生時(shí),寫入/讀取發(fā)生在緩沖區(qū)到硬件端可用的實(shí)際寄存器。觸發(fā)事件可以是對(duì)最低有效位或最高有效位寄存器的讀/寫。例如,如圖5所示,RegA是寬硬件寄存器,寬寄存器Reg.A1的MSB是觸發(fā)器。Reg.A2 和 Reg.A3 是對(duì)應(yīng)于寬硬件寄存器字段的緩沖區(qū)。
下一步是學(xué)習(xí)如何在IP-XACT或SystemRDL中定義這些特殊寄存器。還需要學(xué)習(xí)如何在RTL中對(duì)它們進(jìn)行編碼,并創(chuàng)建UVM寄存器模型和完整的UVM測(cè)試平臺(tái)以進(jìn)行驗(yàn)證。我們將在點(diǎn)播網(wǎng)絡(luò)研討會(huì) 5 對(duì)當(dāng)今 SoC 有用的特殊寄存器中詳細(xì)介紹后續(xù)步驟。在本次網(wǎng)絡(luò)研討會(huì)中,我們將提供這五個(gè)特殊寄存器的詳細(xì)信息、它們的優(yōu)勢(shì)、用例和示例。我們還提供有關(guān)如何自動(dòng)驗(yàn)證它們的最佳實(shí)踐,以實(shí)現(xiàn) 100% 的功能覆蓋率。
審核編輯:郭婷
-
寄存器
+關(guān)注
關(guān)注
31文章
5433瀏覽量
124388 -
soc
+關(guān)注
關(guān)注
38文章
4385瀏覽量
222646
發(fā)布評(píng)論請(qǐng)先 登錄
使用寄存器點(diǎn)亮LED燈

XILINX FPGA CLB單元之移位寄存器

LDC1000不管怎么改變RPMAX和RPMIN寄存器的值,后5個(gè)寄存器的值一直為0?
ADS1216通過(guò)改變寄存器DEC0 DEC1這兩個(gè)寄存器想改變采樣速率,結(jié)果得到的數(shù)據(jù)不正確,為什么?
接口的控制與狀態(tài)寄存器什么作用
什么是寄存器移位尋址
寄存器間接尋址和寄存器尋址的區(qū)別
ARM寄存器的分類及功能
通用寄存器是什么意思
寄存器的類型和作用
寄存器的輸入輸出方式
寄存器故障分析
寄存器根據(jù)功能的不同分為哪兩種
寄存器是什么意思?寄存器是如何構(gòu)成的?

評(píng)論