2014-10-28 43 views
0

寫的是:Specman e vr_ad:如何使用read_reg_field?在<code>UVM e Reference</code>文件

You can call read_reg_field or write_reg_field for registers whose fields 
are defined as single_field_access (see 「vr_ad_port_unit Syntax and Examples」). 
... 
For example: 
write_reg_fields tx_mode_reg {.resv = 4; .dest = 2}; 

但對於使用read_reg_field ... 能否請您解釋一下應該怎樣使用任何的例子嗎?

(我試過了下一個代碼,但它給出編譯錯誤: some_var = read_reg_field my_reg_file.my_reg {.my_reg_field}) 謝謝你的幫忙。

+0

我不確定你引用了什麼版本的UVM e引用,但有些東西似乎沒有。你提到'write_reg_field',但是這個例子顯示了'write_reg_fields',這是一個不同的宏。 – 2014-10-28 16:42:53

+1

嗨,你是對的 - 在我看來,就像參考文獻中的一個錯字。我正在使用的參考:產品版本13.2 UVM World版本1.1 2014年1月 – Halona 2014-10-28 16:46:16

+0

所以,據我所知,沒有任何'read_reg'字段的宏。 'vr_ad_macro.e'中也沒有定義。 – 2014-10-28 16:48:55

回答

1

據我所知,沒有read_reg_fieds宏。如果你想做一個讀取到寄存器,然後保存一定的字段的值,這樣做:

read_reg my_reg; 
value = my_reg.my_reg_field; 

通常,當你讀寄存器,你完全閱讀。如果你的總線協議允許窄傳輸(即你的數據寬度是32位,但你可以在它上面做16位傳輸),只讀單個字段是有意義的。我還沒有看到vr_ad(可能在那裏,我只是不知道它)實現這樣的事情,但UVM RAL(SystemVerilog註冊包)支持它。長話短說,如果你只是在乎從你的DUT獲取你的數據,使用read_reg就足夠了。

1

當被測設計在Verilog或vhdl中實現時 - 您可以將整個寄存器讀取,但不能「只讀取其中的一些字段」。

寄存器位於特定地址,讀取此寄存器 - >從此地址讀取。

有關字段訪問規範的報價是當DUT是SystemC模型時。

使用端口連接到SC模型。如果模型爲每個字段定義一個端口 - 您可以閱讀一個字段。

+0

我並不完全同意這一點。假設你有32位寬的寄存器。這意味着寄存器的地址是4的倍數。如果你有一個由4個1字節字段組成的偏移量爲0的寄存器,那麼你可以讀取偏移量1來獲得'field1'(只要底層總線協議允許) 。 – 2014-10-29 13:36:26