0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SoC芯片上的寄存器設(shè)計與驗證

冬至子 ? 來源:長點芯 ? 作者:SJ ? 2023-10-20 10:39 ? 次閱讀

就像芯片本身一樣,SoC上的CSR設(shè)計也沿用了層級設(shè)計的方法。從最底層往上,寄存器可以被分為以下幾個層級。

  1. Reg Field
  2. Reg
  3. Reg Block
  4. Memory Map

下面我們就來一一簡單介紹一下,它們是如何在設(shè)計里面實現(xiàn)的。

1. Reg Field:

為了提升設(shè)計的效率,一個寄存器往往包含著許多功能的控制或是模塊的狀態(tài),所以一個寄存器往往可以再向下分出幾個更小的配置單元來達到不同的目的。比如說下圖就是一個被設(shè)計了五個不同域的寄存器,每個域都有它特定的功能。

圖片

CSR中的不同域

圖片

A Register Block

2.Reg & Reg Block:

那么Reg本身不用說就是最常見的CSR unit了。而Reg Block則是根據(jù)SoC上不同模塊的Reg Collection組成的一個寄存器塊。比如對于SoC Top層的寄存器有控制 Direct Memory Access(DMA 的也有監(jiān)視中斷狀態(tài)的寄存器。一個模塊的寄存器往往都擁有同一個 offset address 。如下圖所示。

3. Memory Map:

一個SoC上通常都有一個或多個processor cores,direct memory access(DMA),bus network interconnects和許多種 peripheral module 。而每個外設(shè)模塊都擁有一個它所有CSRReg Block 。Memory Map就是這些所有Reg Block的頂層模塊,并為每個Reg Block定義了不同的地址范圍,每個Block都有它一個對應(yīng)的 base address 。而且對于不同的 processor core ,這些地址范圍還可能不一樣,根據(jù)不同的 rocessor bus(Maybe AHB or AXI)

圖片

A Memory Map

第二部分:UVM中關(guān)于CSR的驗證方法學(xué)

在了解UVM Reg Model這一部分之前,讓我們先了解一下它的一些來源吧。

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

這是來自一個論壇上對于UVM_REG的介紹。大致意思就是UVM_REG的前身是 UVM_RGM ,在加入到Accellera標(biāo)準(zhǔn)之前,它其實是一個民間創(chuàng)建的package。所以我們可以簡單理解UVM_REG就是一個UVM的library。

UVM_REG重新定義了TB和設(shè)計中的寄存器,它提供了一種不同的驗證方法來簡化對芯片上的寄存器的仿真。那么它到底是如何簡化的呢?

就像設(shè)計中寄存器的層級結(jié)構(gòu),在搭建寄存器驗證環(huán)境的時候我們當(dāng)然也想要一個能模仿DUT中CSR行為的結(jié)構(gòu),所以UVM Reg Model也提供了

  1. UVM Reg Field Class
  2. UVm Reg Class
  3. UVM Reg Block Class

1. UVM Reg Field Class:

正如前面所提,UVM將設(shè)計中的CSR每一層都抽象成了一種class。對于Reg Field而言就是uvm_reg_field這個class了。一般它在Reg Class中被聲明成rand類型的變量。

2. UVM Reg Class:

對于Reg本身,UVM定義了uvm_reg這一class,就像所有的Reg field需要繼承自uvm_reg_field一樣,寄存器驗證環(huán)境中的每個寄存器都要繼承自uvm_reg。如下code所示,Reg Field被聲明成rand類型的變量便于我們有時候做一些特殊的case,后面會介紹到。

就像所有uvm的class一樣,我們需要將它實例化才能夠真正使用它。這里我們看到一個函數(shù)——‘configure()‘這個configure()函數(shù)十分重要,它決定了這個寄存器中每個寄存器域的屬性,決定了這個域的訪問權(quán)限,是否具有失憶性等等。這在后面的驗證過程中十分重要!??!

圖片

在一個uvm_reg中聲明不同rand類型的域

3. UVM Reg Block Class:

當(dāng)我們在環(huán)境里面定義了所有需要被仿真的寄存器后,就需要將它們集合在一起方便做一些更高層級的操作,就像DUT中的CSR一樣。這個時候我們就用到了uvm_reg_block這個class了。以下是一段uvm block的code。

圖片

在uvm_block中聲明所有這個block中的CSR

除了要聲明,實例化這些寄存器以外,也不要忘記使用configure()定義這些寄存器的屬性,并將它們添加到default map當(dāng)中。一個reg_block的對象就是一個Register model然后通過它可以訪問到里面所有的寄存器進行讀寫操作。

圖片

configure函數(shù)

第三部分:如何用UVM搭建CSR驗證環(huán)境

到目前為止,我們只知道了如何去構(gòu)建一個類似于DUT中的寄存器仿真模型(有點reference model內(nèi)味兒)。但如何讓環(huán)境中的寄存器模型“動起來”,like模擬DUT中CSR的讀寫操作還仍未知曉。

當(dāng)然,這只是寄存器仿真環(huán)境的一部分,要想進行寄存器操作,我們還需要向bus發(fā)送bus transaction,就像直接通過普通的bus agent向外設(shè)寄存器配置接口發(fā)送讀寫的transaction一樣。

但在我們繼續(xù)這個環(huán)境的剩余部分之前我還需要向你們介紹UVM Reg中兩個重要的概念——Mirror Value和Desired Value。這兩個概念十分重要,對于理解后面UVM Reg內(nèi)建的各種task和sequence幫助巨大!

Desired Value:

這個value可以理解成我們期望DUT寄存器中的值。寄存器模型中的這個變量其實就是我們預(yù)先設(shè)定好而后再更新同步到DUT中的寄存器里。如下圖:

圖片

CSR中的期望值

Mirrored Value:

而mirror value則是盡它最大的可能反應(yīng)實際DUT中的值,每次我們通過寄存器模型發(fā)送讀寫操作到DUT中,對應(yīng)寄存器的mirror value都會被更新。如下圖:

圖片

CSR中的鏡像值

實際上,整個寄存器環(huán)境一共有四個組成部分:

圖片

寄存器模型環(huán)境整體

  1. Register Model
  2. Agent
  3. Adapter
  4. Predictor

Register Model就是上文用了大量筆墨提到的一個組成部分。Agent也與其他常規(guī)驗證環(huán)境中的agent類似,依據(jù)不同的protocol將不同的transaction通過agent作為激勵送到DUT中。下面我們將重點介紹一下在寄存器環(huán)境中特有的兩個組成部分:AdapterPredictor

Adapter:

由于寄存器模型中的seq有它特有的封裝方式,所以為了將寄存器模型類型的seq轉(zhuǎn)化成bus agent可識別的bus transaction,我們需要一個轉(zhuǎn)換器,同理來自bus agent的transaction也需要經(jīng)過Adapter的轉(zhuǎn)換才能將來自DUT的信息同步到寄存器模型中。Adapter中最重要的兩個函數(shù)就是reg2bus()bus2reg() 了,分別對應(yīng)上述的兩個方向的transaction的轉(zhuǎn)化。

Predictor:

Predictor的作用也是用來同步寄存器模型中的值的。但經(jīng)常,如果我們只通過寄存器模型里發(fā)起sequence,我們只擁有一個adpter就足夠同步寄存器模型里面的值通過寄存器模型built-in的task——read(),write(),因為這些內(nèi)建的task中都有predict()函數(shù),它的作用就是來將我們配置或從DUT收集來的值同步到寄存器模型中。但如果有一些配置DUT中寄存器的transaction來自于其他sequencer發(fā)送到bus agent的話,這個時候寄存器模型就不能實時的更新了,這有可能使我們最后的check mismatch。

所以predictor的main idea就是在環(huán)境中增添了一個連接agent中monitor的component來無時無刻監(jiān)視著bus agent的動態(tài),只要有任何write/read transaction經(jīng)過,都會將其同步回寄存器模型中。

圖片

集成了predictor的寄存器模型環(huán)境

ok,現(xiàn)在我們已經(jīng)具備了寄存器模型環(huán)境中的所有所需要的“磚頭”了,那么接下來就是如何將他們搭建成一個完整的房子了。如同其他所有驗證環(huán)境一樣,我們要在build phase將它們一個個實例化,然后在connect phase中再將它們銜接在一起。以下是一個簡易的寄存器模型環(huán)境的實例,僅供參考。

結(jié)語

寄存器雖然在整個芯片當(dāng)中作為一個設(shè)計風(fēng)險較小的組成部分,但在SoC驗證過程中是要優(yōu)先完成驗證的部分。如果由于一個頂層寄存器的問題而導(dǎo)致一個芯片上大部分模塊無法正常工作是很耽誤驗證時效的。對于寄存器驗證來講,特別是一個有很多寄存器的芯片來講,如何通過UVM Reg進行高效,靈活的寄存器驗證十分重要!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CSR
    CSR
    +關(guān)注

    關(guān)注

    3

    文章

    117

    瀏覽量

    69557
  • SoC芯片
    +關(guān)注

    關(guān)注

    1

    文章

    592

    瀏覽量

    34800
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    19110
  • 狀態(tài)寄存器
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    7058
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    12271
收藏 人收藏

    評論

    相關(guān)推薦

    寄存器與移位寄存器

    寄存器與移位寄存器 寄存器是用來寄存數(shù)碼的邏輯部件,所以必須具備接收和寄存數(shù)碼的功能。任何一種觸發(fā)
    發(fā)表于 03-12 15:19 ?59次下載

    寄存器應(yīng)用舉例

    寄存器應(yīng)用舉例   在9.2.3寄存器的應(yīng)用一節(jié)中,曾介紹利用寄存器集成芯片74LS194構(gòu)造的兩種脈沖分配器:環(huán)形計數(shù)和扭環(huán)形計數(shù)
    發(fā)表于 05-17 00:02 ?1536次閱讀
    <b class='flag-5'>寄存器</b>應(yīng)用舉例

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內(nèi)的組成部分。寄存器是有限存貯容量
    發(fā)表于 03-08 14:26 ?2.2w次閱讀

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思 數(shù)據(jù)寄存器數(shù)據(jù)寄存器包括累加AX、基址寄存器BX、計數(shù)
    發(fā)表于 03-08 14:38 ?1.2w次閱讀

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    發(fā)表于 03-08 14:50 ?1.7w次閱讀

    寄存器傳輸級低功耗設(shè)計方法

    寄存器傳輸級的低功耗設(shè)計對降低整個芯片的功耗作用非常顯著,本文討論的三種寄存器傳輸級低功耗設(shè)計方法,經(jīng)驗證對動態(tài)功耗的降低很有效。
    發(fā)表于 02-16 18:12 ?1438次閱讀
    <b class='flag-5'>寄存器</b>傳輸級低功耗設(shè)計方法

    寄存器組網(wǎng)絡(luò)處理寄存器分配技術(shù)

    本內(nèi)容提供了多寄存器組網(wǎng)絡(luò)處理寄存器分配技術(shù)
    發(fā)表于 06-28 15:26 ?28次下載
    多<b class='flag-5'>寄存器</b>組網(wǎng)絡(luò)處理<b class='flag-5'>器</b><b class='flag-5'>上</b>的<b class='flag-5'>寄存器</b>分配技術(shù)

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實現(xiàn)。
    發(fā)表于 05-20 11:47 ?0次下載

    芯片寄存器

    芯片寄存器作為一個嵌入式開發(fā)人員,從接觸第一塊單片機的時候,就一定會聽到一個此,叫做寄存器。單片機的很多功能都是通過配置修改寄存器來實現(xiàn)的。我們了解
    發(fā)表于 11-23 16:21 ?50次下載
    <b class='flag-5'>芯片</b>與<b class='flag-5'>寄存器</b>

    GPIO寄存器

    每組IO口有10個寄存器組成,如果芯片有GPIOA~GPIOI,9個組那么一共有90個寄存器如果配置一個IO口需要2個位,那么剛好32位寄存器配置一組IO口16個IO口如果配置一個IO
    發(fā)表于 12-08 17:06 ?5次下載
    GPIO<b class='flag-5'>寄存器</b>

    深度學(xué)習(xí)_硬件知識_寄存器與下拉寄存器

    寄存器寄存器是控制對應(yīng)端口上拉使能的。當(dāng)對應(yīng)位為0時,設(shè)置對應(yīng)引腳上拉使能,對應(yīng)位為1時,禁止對應(yīng)引腳上拉使能。如果
    發(fā)表于 01-14 14:31 ?10次下載
    深度學(xué)習(xí)_硬件知識_<b class='flag-5'>上</b>拉<b class='flag-5'>寄存器</b>與下拉<b class='flag-5'>寄存器</b>

    ARM通用寄存器及狀態(tài)寄存器詳解

    筆者來聊聊ARM通用寄存器以及狀態(tài)寄存器的認(rèn)識與理解。
    的頭像 發(fā)表于 01-06 14:58 ?6685次閱讀

    簡述RAL寄存器模型基礎(chǔ)

    ,以及如何將寄存器模型集成到驗證環(huán)境中。篇幅原因,將在下一篇文章再給出寄存器模型的操作圖鑒(前后門訪問API),以及寄存器覆蓋率的收集。
    的頭像 發(fā)表于 02-14 16:55 ?2619次閱讀
    簡述RAL<b class='flag-5'>寄存器</b>模型基礎(chǔ)

    車載芯片安全寄存器的布局設(shè)計

    我們知道在車載芯片的數(shù)字實現(xiàn)中,常用的安全機制有安全寄存器(Safety Register),所以識別出關(guān)鍵路徑失效風(fēng)險高的寄存器(也就是熱點寄存
    的頭像 發(fā)表于 05-22 10:25 ?1314次閱讀
    車載<b class='flag-5'>芯片</b>安全<b class='flag-5'>寄存器</b>的布局設(shè)計

    寄存器分為基本寄存器和什么兩種

    寄存器是計算機中用于存儲數(shù)據(jù)的高速存儲單元,它們是CPU內(nèi)部的重要組成部分。寄存器可以分為基本寄存器和擴展寄存器兩種類型。 一、基本寄存器
    的頭像 發(fā)表于 07-12 10:31 ?829次閱讀