在vcs ucli中查看枚举名称

时间:2014-08-18 21:41:06

标签: enums verilog system-verilog synopsys-vcs

我正在使用VCS UCLI(即命令行界面),并且无法让VCS显示各种状态变量,typedef的枚举类型,值作为名称而不是数字。例如,我有一些像这样的SystemVerilog:

typedef enum logic [1:0] {A, B, C} state_t;

state_t s;
...

现在在ucli中,我希望看到s的值(比如它在状态A中),所以我输入类似的内容:

ucli% get s
0
ucli% get s -radix symbolic
0
ucli% show s -value
s 0
ucli% show s -value -radix symbolic
s 0
ucli% show s -value -type
s 0 { ENUM state_t { {A 0} {B 1} {C 2} } }

(或类似的东西)。我已经阅读了ucli用户指南,它似乎是符号基数,我所知道的唯一一个可能接近的基数,只使用枚举中的原始值,而不是枚举名称。我尝试使用ucli(.name())中的call命令调用变量s的{​​{1}}方法,但它似乎不受支持。我知道VCS有能力打印枚举名称,它当然可以在DVE中播出,但我无法想出办法让我在ucli中展示。

有人知道如何让ucli打印枚举名称而不是查询时的数字吗?枚举类型的基数是否是某种方式(在DVE中用户定义?),使用一些SystemVerilog系统调用来获取名称,类似的东西?

(注意,我知道我可以使用DVE,但我正在尝试使用ucli简单地为潜在用户提供界面,这是出于教育目的而我想掩盖很多ucli界面(和VCS界面)一般情况下)不要压倒学生并轻松获得一些变量;我将vcs ucli变成一个简单的处理器模拟器)

+++++++++++++++++++++++++++++++++++++++++++++++++++

我想出了一个非常讨厌的解决方案,但我真的想要一个更好的方法。我快速编写了我自己的show包装器(称为eshow),如果设置了-radix枚举,则使用枚举名称替换任何-value:

ucli% call {$display("%s", s.name())}

因此,如果我输入任何其他非基数枚举eshow命令,它将传递给show,否则,它将用其名称替换所有值并返回与替换相同的事物show。正如我所说,我真的想要一个更好的解决方案,但是如果有人想要使用我的功能,那么就是这样。

0 个答案:

没有答案