0

我想知道是否有一种方法可以在 Verilog 中计算 reg 的大小。我研究了一番,发现了$size(a),但它只在SystemVerilog中,在我的verilog程序中不起作用。

有谁知道这个的替代品?

作为旁注,我还想问一下;我的测试台遇到了一些问题,因为当我更新文件中的值时,在模拟时没有考虑到这种变化。有人告诉我,我可能一直在使用旧的测试台,但我不断模拟的那个是这个项目中唯一可用的。

编辑:

为了让您了解问题所在:在我的代码中有一个“开始”信号,当它设置为 1 时,操作开始。否则,它将保持空闲状态。我开始用 start=0 编写测试台,测试并模拟它,然后通过将 start 设置为 1 来编辑测试台。但是当我模拟它时,波形中的启动信号仍然为 0。我试图检查我是否在使用另一个测试台,但它是我在这个项目中使用的唯一测试台。

鉴于我已经到了最后期限,我编写了代码,以便它能够适应“冻结”的测试平台。我现在得到了我想要的所有结果,但我想测试我的代码的一些其他功能,所以我创建了一个新项目并将代码复制粘贴到新文件中(包括相同的测试台)。但是当我运行模拟时,波形显示错误的结果(即使我在所有模块和测试台中使用完全相同的代码)。知道为什么吗?

任何帮助,将不胜感激 :)

4

1 回答 1

1

有一种标准化的方法可以做到这一点,但它需要您使用 VPI,我认为您在 Modelsim 的学生版上无法获得。简而言之,您必须编写 C 代码,并将其动态链接到模拟器。在 C 代码中,您可以使用诸如vpi_get. 有用的属性可能是vpiSize,这是您想要的,vpiLeftRangevpiRightRange,等等。

说了这么多,Verilog 本质上是一种静态语言,对象必须使用常量表达式以静态宽度声明。因此,拥有一个确定对象大小的运行时方法的价值非常有限(因为您应该已经知道它),并且可能无法解决您实际遇到的任何问题。您的问题对 VHDL(和 SystemVerilog?)更有意义,它们更具动态性。

关于 Icarus 的注意事项:开发人员已将大量 SystemVerilog 内容推回到主要语言中。如果您利用这一点,您可能会发现您的代码不可移植。

您问题的第二部分:您需要具体说明您的问题实际上是什么。

于 2015-12-10T10:12:15.723 回答