如果我有这个愚蠢的问题,我很抱歉…我一直在谷歌上寻找答案,但找不到。:(
我在将变量分配给虚拟接口时遇到问题。例如:
Param.sv
...
string MyInput[3];
MyInput[0] = Signal_CLK; //Storing SignalName to in an Array.
MyInput[1] = Signal_Tx;
MyInput[2] = Signal_Rx;
...
MyInterface.sv
...
Signal_CLK = dut.MicroController.Source.clk; //Signal destination
Signal_Tx = dut.MicroController.Tx_01;
Signal_Rx = dut.MicroController.Rx_01;
...
Test.sv
virtual MyInterface my_vif
logic [7:0] read_value;
....
for (i = 0; i <3; i++ )
begin
read_value = my_vif.My_Input[i];
..
//some logic to compare read_value with spec//
..
end问题是在编译时,它不能将my_vif.My_Input[0]转换成my_vif.***dut.MicroController.Source.clk***。相反,它认为路径是my_vif.***My_Input[i]***。
发布于 2015-03-21 03:05:57
编译器认为您正在尝试访问my_vif.My_Inputi的原因是您确实是这样的。My_Input[]数组是一个完全独立的字符串数组;不是虚拟接口的一部分。当使用"thing.thing.thing“语法时,编译器将忠实地遵循它,所以它会期望有一个名为My_Input的东西,它有一些元素(因为它是一个数组)作为my_vif给出的接口的成员。
然而,纵观你的代码,你正试图在编译时替换My_Inputi,这是非常不同的。编译器将不会运行您的循环,请在My_Inputi中查找并找到字符串"Signal_CLK“,并将其替换为路径的一部分,以获得路径my_vif.Signal_CLK。它也不能在运行时这样做。
我不知道在接口中查找任何变量的通用解决方案;尽管我也不确定这是否真的是你想要的。如果您提供更多有关您的其他检查程序的详细信息,我们可能能够为您提供更多帮助。
发布于 2015-03-21 07:52:43
不能使用字符串在SystemVerilog中按名称查找标识符。有一些特定于工具和C语言的接口可以让你做到这一点,但这将是非常低效的。最好的方法是使用抽象/具体类和绑定构造的组合。请参阅以下参考:http://events.dvcon.org/2012/proceedings/papers/01P_3.pdf和http://www.doulos.com/knowhow/sysverilog/DVCon08/DVCon08_SysVlog.php
https://stackoverflow.com/questions/29168566
复制相似问题