2017-04-03 97 views
0

請幫助找到一個解決方案,以獲得漂亮的代碼。訪問界面路徑的好方法

所以在我的代碼中,我必須做幾次強制,因爲tb和其他部分設計正在驅動相同的電線。因此,我有很多的力量陳述這樣的:

力TOP.u_proto_mc_top.gtx_rx_reset = TOP.u_proto_mc_top.u_GTX_RXB.gtxMaster_itf_inst .rstn;

力TOP.u_proto_mc_top.gtx_tx_reset = TOP.u_proto_mc_top.u_GTX_RXB.gtxMaster_itf_inst .txstn;

所以我只是複製再粘貼相同的接口路徑並再次,我的意思是這條路徑: TOP.u_proto_mc_top.u_GTX_RXB.gtxMaster_itf_inst

每次我需要強制接口信號,我要複製並粘貼此路徑。 這對我來說很醜。 有人可以請建議另一種解決方案,因爲我不會複製/粘貼界面路徑一次又一次。

感謝

回答

1

首先我會嘗試找出爲什麼你的測試平臺的結構需要一個接口的力量。更好的計劃可能會避免這種情況。

快速解決方案使用文本宏。

`define uTOP TOP.u_proto_mc_top 
`define GTXMaster `uTOP.u_GTX_RXB.gtxMaster_itf_inst 
force `uTOP.gtx_tx_reset = `GTXMaster.txstn; 
+0

我在層次結構的中間GTX模塊,在由通過GTX模塊發送一些數據,確保GTX鏈接上之後第一次測試GTX鏈接我的試驗檯運行頂層測試。 assign mc_rx_update = rx_reg_we | rx_update; GTX u_GTX_RXB(.update(mc_rx_update),..) 所以我有一個包含所有GTX端口的接口。然後我將該接口綁定到GTX模塊。 這裏如果我們採取更新信號,一方面它由我的驅動模塊驅動,另一方面「mc_rx_update」也試圖驅動它。大多數情況下「mc_rx_update」是X. – haykp

+0

因此,我在單個網絡上獲得2個不同的驅動程序,因此出現了Xs。 爲了解決這個問題,我正在創建force_signal和release_signal任務,這將強制「mc_rx_update」到接口端口。 – haykp

1

您可以使用uvm_hdl_read()和uvm_hdl_force()來代替嗎?這些UVM內置函數將一個字符串作爲hdl路徑的輸入參數。

string if_path = "TOP.u_proto_mc_top.u_GTX_RXB.gtxMaster_itf_inst"; 
string top_path = "TOP.u_proto_mc_top"; 
uvm_hdl_data_t val; 

uvm_hdl_read({if_path,".rstn"}, val); 
uvm_hdl_force({top_path, ".gtx_rx_reset", val); 

uvm_hdl_read({path,".txstn"}, val); 
uvm_hdl_force({top_path, ".gtx_tx_reset", val); 
+0

嗯,這個語法有什麼好處? uvm_hdl_force爲用戶 – haykp

+0

提供任何有用的選項好處是報價中的hdl_path只是一個文本字符串。您可以在運行時構建不同的字符串或綁定到不同的DUT層次結構。使用文本宏定義hdl路徑在編譯時被硬編碼,使得代碼難以重用。 – hevangel