访问接口路径的好方法

时间:2017-04-03 11:09:52

标签: system-verilog uvm

请帮助找到解决方案,以获得漂亮的代码。

所以在我的代码中,我必须做几次强制,因为同一条线由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

每次我需要强制接口信号时,我必须复制并粘贴此路径。 这对我来说很难看。 有人可以建议另一个解决方案,因为我不会一次又一次地复制/粘贴接口路径。

由于

2 个答案:

答案 0 :(得分:2)

首先,我会尝试找出为什么测试平台的结构需要带有接口的力。更好的规划可能会避免这种情况。

快速解决方案用于使用文本宏。

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

答案 1 :(得分: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);