就像芯片本身一樣,SoC上的CSR設(shè)計(jì)也沿用了層級(jí)設(shè)計(jì)的方法。從最底層往上,寄存器可以被分為以下幾個(gè)層級(jí)。
- Reg Field
- Reg
- Reg Block
- Memory Map
下面我們就來(lái)一一簡(jiǎn)單介紹一下,它們是如何在設(shè)計(jì)里面實(shí)現(xiàn)的。
1. Reg Field:
為了提升設(shè)計(jì)的效率,一個(gè)寄存器往往包含著許多功能的控制或是模塊的狀態(tài),所以一個(gè)寄存器往往可以再向下分出幾個(gè)更小的配置單元來(lái)達(dá)到不同的目的。比如說(shuō)下圖就是一個(gè)被設(shè)計(jì)了五個(gè)不同域的寄存器,每個(gè)域都有它特定的功能。
CSR中的不同域
A Register Block
2.Reg & Reg Block:
那么Reg本身不用說(shuō)就是最常見(jiàn)的CSR unit了。而Reg Block則是根據(jù)SoC上不同模塊的Reg Collection組成的一個(gè)寄存器塊。比如對(duì)于SoC Top層的寄存器有控制 Direct Memory Access(DMA) 的也有監(jiān)視中斷狀態(tài)的寄存器。一個(gè)模塊的寄存器往往都擁有同一個(gè) offset address 。如下圖所示。
3. Memory Map:
一個(gè)SoC上通常都有一個(gè)或多個(gè)processor cores,direct memory access(DMA),bus network interconnects和許多種 peripheral module 。而每個(gè)外設(shè)模塊都擁有一個(gè)它所有CSR的 Reg Block 。Memory Map就是這些所有Reg Block的頂層模塊,并為每個(gè)Reg Block定義了不同的地址范圍,每個(gè)Block都有它一個(gè)對(duì)應(yīng)的 base address 。而且對(duì)于不同的 processor core ,這些地址范圍還可能不一樣,根據(jù)不同的 rocessor bus(Maybe AHB or AXI) 。
A Memory Map
第二部分:UVM中關(guān)于CSR的驗(yàn)證方法學(xué)
在了解UVM Reg Model這一部分之前,讓我們先了解一下它的一些來(lái)源吧。
At the begining, UVM_RGM is not part of the Accellera standard, it is a user contribution from Cadence which is based on their use contribution from the OVM. UVM1.1 has a Register Abstaction as a part of the Accellera standard called UVM_REG. There is already multiple vendors that supprot generations producing UVM_REG descriptions
這是來(lái)自一個(gè)論壇上對(duì)于UVM_REG的介紹。大致意思就是UVM_REG的前身是 UVM_RGM ,在加入到Accellera標(biāo)準(zhǔn)之前,它其實(shí)是一個(gè)民間創(chuàng)建的package。所以我們可以簡(jiǎn)單理解UVM_REG就是一個(gè)UVM的library。
UVM_REG重新定義了TB和設(shè)計(jì)中的寄存器,它提供了一種不同的驗(yàn)證方法來(lái)簡(jiǎn)化對(duì)芯片上的寄存器的仿真。那么它到底是如何簡(jiǎn)化的呢?
就像設(shè)計(jì)中寄存器的層級(jí)結(jié)構(gòu),在搭建寄存器驗(yàn)證環(huán)境的時(shí)候我們當(dāng)然也想要一個(gè)能模仿DUT中CSR行為的結(jié)構(gòu),所以UVM Reg Model也提供了
- UVM Reg Field Class
- UVm Reg Class
- UVM Reg Block Class
1. UVM Reg Field Class:
正如前面所提,UVM將設(shè)計(jì)中的CSR每一層都抽象成了一種class。對(duì)于Reg Field而言就是uvm_reg_field這個(gè)class了。一般它在Reg Class中被聲明成rand類型的變量。
2. UVM Reg Class:
對(duì)于Reg本身,UVM定義了uvm_reg這一class,就像所有的Reg field需要繼承自u(píng)vm_reg_field一樣,寄存器驗(yàn)證環(huán)境中的每個(gè)寄存器都要繼承自u(píng)vm_reg。如下code所示,Reg Field被聲明成rand類型的變量便于我們有時(shí)候做一些特殊的case,后面會(huì)介紹到。
就像所有uvm的class一樣,我們需要將它實(shí)例化才能夠真正使用它。這里我們看到一個(gè)函數(shù)——‘configure()‘這個(gè)configure()函數(shù)十分重要,它決定了這個(gè)寄存器中每個(gè)寄存器域的屬性,決定了這個(gè)域的訪問(wèn)權(quán)限,是否具有失憶性等等。這在后面的驗(yàn)證過(guò)程中十分重要?。?!
在一個(gè)uvm_reg中聲明不同rand類型的域
3. UVM Reg Block Class:
當(dāng)我們?cè)诃h(huán)境里面定義了所有需要被仿真的寄存器后,就需要將它們集合在一起方便做一些更高層級(jí)的操作,就像DUT中的CSR一樣。這個(gè)時(shí)候我們就用到了uvm_reg_block這個(gè)class了。以下是一段uvm block的code。
在uvm_block中聲明所有這個(gè)block中的CSR
除了要聲明,實(shí)例化這些寄存器以外,也不要忘記使用configure()定義這些寄存器的屬性,并將它們添加到default map當(dāng)中。一個(gè)reg_block的對(duì)象就是一個(gè)Register model然后通過(guò)它可以訪問(wèn)到里面所有的寄存器進(jìn)行讀寫操作。
configure函數(shù)
第三部分:如何用UVM搭建CSR驗(yàn)證環(huán)境
到目前為止,我們只知道了如何去構(gòu)建一個(gè)類似于DUT中的寄存器仿真模型(有點(diǎn)reference model內(nèi)味兒)。但如何讓環(huán)境中的寄存器模型“動(dòng)起來(lái)”,like模擬DUT中CSR的讀寫操作還仍未知曉。
當(dāng)然,這只是寄存器仿真環(huán)境的一部分,要想進(jìn)行寄存器操作,我們還需要向bus發(fā)送bus transaction,就像直接通過(guò)普通的bus agent向外設(shè)寄存器配置接口發(fā)送讀寫的transaction一樣。
但在我們繼續(xù)這個(gè)環(huán)境的剩余部分之前我還需要向你們介紹UVM Reg中兩個(gè)重要的概念——Mirror Value和Desired Value。這兩個(gè)概念十分重要,對(duì)于理解后面UVM Reg內(nèi)建的各種task和sequence幫助巨大!
Desired Value:
這個(gè)value可以理解成我們期望DUT寄存器中的值。寄存器模型中的這個(gè)變量其實(shí)就是我們預(yù)先設(shè)定好而后再更新同步到DUT中的寄存器里。如下圖:
CSR中的期望值
Mirrored Value:
而mirror value則是盡它最大的可能反應(yīng)實(shí)際DUT中的值,每次我們通過(guò)寄存器模型發(fā)送讀寫操作到DUT中,對(duì)應(yīng)寄存器的mirror value都會(huì)被更新。如下圖:
CSR中的鏡像值
實(shí)際上,整個(gè)寄存器環(huán)境一共有四個(gè)組成部分:
寄存器模型環(huán)境整體
- Register Model
- Agent
- Adapter
- Predictor
Register Model就是上文用了大量筆墨提到的一個(gè)組成部分。Agent也與其他常規(guī)驗(yàn)證環(huán)境中的agent類似,依據(jù)不同的protocol將不同的transaction通過(guò)agent作為激勵(lì)送到DUT中。下面我們將重點(diǎn)介紹一下在寄存器環(huán)境中特有的兩個(gè)組成部分:Adapter和Predictor
Adapter:
由于寄存器模型中的seq有它特有的封裝方式,所以為了將寄存器模型類型的seq轉(zhuǎn)化成bus agent可識(shí)別的bus transaction,我們需要一個(gè)轉(zhuǎn)換器,同理來(lái)自bus agent的transaction也需要經(jīng)過(guò)Adapter的轉(zhuǎn)換才能將來(lái)自DUT的信息同步到寄存器模型中。Adapter中最重要的兩個(gè)函數(shù)就是reg2bus() 和 bus2reg() 了,分別對(duì)應(yīng)上述的兩個(gè)方向的transaction的轉(zhuǎn)化。
Predictor:
Predictor的作用也是用來(lái)同步寄存器模型中的值的。但經(jīng)常,如果我們只通過(guò)寄存器模型里發(fā)起sequence,我們只擁有一個(gè)adpter就足夠同步寄存器模型里面的值通過(guò)寄存器模型built-in的task——read(),write(),因?yàn)檫@些內(nèi)建的task中都有predict()函數(shù),它的作用就是來(lái)將我們配置或從DUT收集來(lái)的值同步到寄存器模型中。但如果有一些配置DUT中寄存器的transaction來(lái)自于其他sequencer發(fā)送到bus agent的話,這個(gè)時(shí)候寄存器模型就不能實(shí)時(shí)的更新了,這有可能使我們最后的check mismatch。
所以predictor的main idea就是在環(huán)境中增添了一個(gè)連接agent中monitor的component來(lái)無(wú)時(shí)無(wú)刻監(jiān)視著bus agent的動(dòng)態(tài),只要有任何write/read transaction經(jīng)過(guò),都會(huì)將其同步回寄存器模型中。
集成了predictor的寄存器模型環(huán)境
ok,現(xiàn)在我們已經(jīng)具備了寄存器模型環(huán)境中的所有所需要的“磚頭”了,那么接下來(lái)就是如何將他們搭建成一個(gè)完整的房子了。如同其他所有驗(yàn)證環(huán)境一樣,我們要在build phase將它們一個(gè)個(gè)實(shí)例化,然后在connect phase中再將它們銜接在一起。以下是一個(gè)簡(jiǎn)易的寄存器模型環(huán)境的實(shí)例,僅供參考。
結(jié)語(yǔ)
寄存器雖然在整個(gè)芯片當(dāng)中作為一個(gè)設(shè)計(jì)風(fēng)險(xiǎn)較小的組成部分,但在SoC驗(yàn)證過(guò)程中是要優(yōu)先完成驗(yàn)證的部分。如果由于一個(gè)頂層寄存器的問(wèn)題而導(dǎo)致一個(gè)芯片上大部分模塊無(wú)法正常工作是很耽誤驗(yàn)證時(shí)效的。對(duì)于寄存器驗(yàn)證來(lái)講,特別是一個(gè)有很多寄存器的芯片來(lái)講,如何通過(guò)UVM Reg進(jìn)行高效,靈活的寄存器驗(yàn)證十分重要!
-
CSR
+關(guān)注
關(guān)注
3文章
118瀏覽量
69736 -
SoC芯片
+關(guān)注
關(guān)注
1文章
617瀏覽量
35070 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19236 -
狀態(tài)寄存器
+關(guān)注
關(guān)注
0文章
39瀏覽量
7161 -
DUT
+關(guān)注
關(guān)注
0文章
190瀏覽量
12513
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
寄存器與移位寄存器
寄存器應(yīng)用舉例
![<b class='flag-5'>寄存器</b>應(yīng)用舉例](https://file1.elecfans.com//web2/M00/A4/EA/wKgZomUMNjCAGURjAAAZP6KFg2g937.gif)
數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思
寄存器傳輸級(jí)低功耗設(shè)計(jì)方法
![<b class='flag-5'>寄存器</b>傳輸級(jí)低功耗設(shè)計(jì)方法](https://file1.elecfans.com//web2/M00/A5/DA/wKgZomUMOm-Ac5EdAAAYudHeCpM426.gif)
多寄存器組網(wǎng)絡(luò)處理器上的寄存器分配技術(shù)
![多<b class='flag-5'>寄存器</b>組網(wǎng)絡(luò)處理<b class='flag-5'>器</b><b class='flag-5'>上</b>的<b class='flag-5'>寄存器</b>分配技術(shù)](https://file.elecfans.com/web2/M00/49/01/pYYBAGKhtDKAHXjFAAAJ5tsk_-Q992.jpg)
芯片與寄存器
![<b class='flag-5'>芯片</b>與<b class='flag-5'>寄存器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
GPIO寄存器
![GPIO<b class='flag-5'>寄存器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
深度學(xué)習(xí)_硬件知識(shí)_上拉寄存器與下拉寄存器
![深度學(xué)習(xí)_硬件知識(shí)_<b class='flag-5'>上</b>拉<b class='flag-5'>寄存器</b>與下拉<b class='flag-5'>寄存器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
簡(jiǎn)述RAL寄存器模型基礎(chǔ)
![簡(jiǎn)述RAL<b class='flag-5'>寄存器</b>模型基礎(chǔ)](https://file.elecfans.com/web2/M00/90/B3/poYBAGPrR22AUrkqAAGMANm30iE910.jpg)
車載芯片安全寄存器的布局設(shè)計(jì)
![車載<b class='flag-5'>芯片</b>安全<b class='flag-5'>寄存器</b>的布局設(shè)計(jì)](https://file1.elecfans.com/web2/M00/88/7F/wKgaomRq0umAUJeSAAAYE60H5_o184.png)
評(píng)論