我想知道是否有办法计算Verilog中reg的大小。我研究了很多,发现$ size(a),但它只在SystemVerilog中,并且它不能在我的verilog程序中工作。
有没有人知道这个的替代方案?
我也想问一下旁注;我在测试平台上遇到了一些麻烦,因为当我更新文件中的值时,在我模拟时不会考虑这种变化。我被告知我可能一直在使用旧的测试台,但我不断模拟的是这个项目中唯一可用的测试台。
编辑:
让您了解问题的原因:在我的代码中有一个" start"信号,当它设置为1时,操作开始。否则,它会保持闲置状态。我开始用start = 0编写测试平台,测试并模拟它,然后通过将start设置为1来编辑测试平台。但是当我模拟它时,启动信号在波形中保持为0。我试着检查一下我是否在使用另一个测试台,但它是我在这个项目中使用的唯一测试平台。
鉴于我在截止日期前,我研究了代码,以便它能够适应"冻结"试验台。我现在得到了我想要的所有结果,但我想测试我的代码的其他一些功能,所以我创建了一个新项目并将代码粘贴到新文件中(包括相同的测试工作台)。但是当我运行模拟时,波形显示错误的结果(即使我在所有模块和测试台中使用完全相同的代码)。知道为什么吗?
任何帮助将不胜感激:)
答案 0 :(得分:1)
有一种标准化的方法可以做到这一点,但它要求你使用VPI,我认为你不会在Modelsim的学生版上使用。简而言之,您必须编写C代码,并将其动态链接到模拟器。在C代码中,您可以使用vpi_get
等例程来获取对象属性。有用的专业可能是vpiSize
,这是您想要的,vpiLeftRange
,vpiRightRange
等。
说了这么多,Verilog本质上是一种静态语言,并且必须使用常量表达式以静态宽度声明对象。因此,使用运行时方法来确定对象的大小的价值非常有限(因为您应该已经知道它),并且可能无法解决您实际遇到的任何问题。你的问题对VHDL(和SystemVerilog?)更有意义,它更具动态性。
关于Icarus的注意事项:开发人员已将大量SystemVerilog内容推回主语言。如果您了解这一点,您可能会发现您的代码不可移植。
问题的第二部分:你需要具体说明你的问题究竟是什么。