UVM暫存器篇之七 暫存器模型的常規方法(下)

2021-08-28 05:32:22 字數 1474 閱讀 6491

本文**:

mem與reg的聯絡和差別

uvm暫存器模型也可以用來對儲存建模。uvm_mem類可以用來模擬rw(讀寫)、ro(唯讀)和wo(只寫)型別的儲存,並且可以配置其模型的資料寬度和位址範圍。而uvm_mem不同於uvm_reg的地方在於,考慮到物理儲存一旦對映到uvm_mem會帶來更大的資源消耗,因此uvm_mem並不支援**和影子儲存(shadow storage)功能,即沒有預期值和期望值。uvm_mem可以提供的功能就是利用自帶的儲存訪問方法去訪問硬體儲存,相比於直接利用硬體匯流排uvc進行訪問,這麼做的好處在於:

與uvm_reg相比,uvm_mem不但擁有常規的訪問方法read()、write()、peek()和poke(),也提供了burst_read()和burst_write()。之所以額外提供這兩種方法,不但是為了更高速地通過物理匯流排burst方式連續方法儲存,也是為了盡可能貼合實際訪問儲存中的場景。要實現burst訪問形式,需要考慮下面這些因素:

內建(built-in)sequences

不少有經驗的uvm使用者可能會忽略uvm針對暫存器模型內建的一些sequence,實際上如果可以將這些自建的序列作為驗證專案一開始的健康檢查必選項的話,這對於整個專案的平穩執行會有不小的貢獻。這是因為在專案一開始的階段,設計內部的邏輯還不穩定,對於verifier而言,如果想要同步跟上設計的進度,可以展開驗證的部分無外乎是系統控制訊號(時鐘、復位、電源)和暫存器的驗證。在早期時,暫存器模型的驗證可以為後期各個功能點驗證打下良好的基礎。比如,通過內建的暫存器或者儲存序列可以實現完善的暫存器復位值檢查,又比如檢查讀寫暫存器的讀寫功能是否正常等。

不過有一些暫存器即便可以測試,也建議將其作為例外而過濾出去,例如一些重要的系統控制訊號(時鐘、復位、電源),當寫入某些值以後,會使得系統全部或者區域性復位、時鐘也可能被關閉,這就可能阻礙暫存器的下一步檢查。所以uvm提供了一些特殊域,用來禁止一些sequence檢查這些暫存器或者儲存。接下來,我們來瀏覽整理出來的暫存器和儲存相關的自建sequence。

暫存器模型內建序列

儲存模型內建序列

接下來我們給出一段例碼,繼之前mcdf測試暫存器的例子,用來演示如何利用內建序列完成暫存器測試一開始的健康檢查。下面的例碼分別新增了uvm_reg_hw_reset_seq、uvm_reg_bit_bash_seq和uvm_reg_access_seq來測試暫存器模型,從**的整潔性來看,使用者並不需要額外再新增什麼,這種使用方式非常方便,且又能完成暫存器的大規模整合測試。

對於一些暫存器,如果像將其排除在某些內建序列測試範圍之外,使用者可以額外新增上面列表中提到的「禁止網域名稱」。由於uvm_reg_block和uvm_reg均是uvm_object類而不是uvm_component類,所以可以使用uvm_resource_db來配置「禁止網域名稱」。下面的**摘自mcdf_rgm::build()方法,這相當於暫存器模型在自己的建立階段設定了一些屬性,當然,uvm_resource_db的配置也可以在更高層指定,只不過考慮到uvm_resource_db不具備層次化的覆蓋屬性,我們建議只在乙個地方進行「禁止網域名稱」的配置。

UVM暫存器篇之五 暫存器模型的整合(下)

本文 前門訪問 利用暫存器模型,我們可以更方便地對暫存器做操作。接下來我們分別兩種訪問暫存器的方式,即前門訪問 front door 和後門訪問 back door 前門訪問,顧名思義指的是在暫存器模型上做的讀寫操作,最終會通過匯流排uvc來實現匯流排上的物理時序訪問,因此是真實的物理操作 而後門訪...

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...