>我有以下顺序:
extend CONFIG_ADC_CLK ocp_master_sequence_q {
divide_by : uint(bits:4);
align_by : uint(bits:4);
body()@driver.clock is {
var div : uint(bits:3);
case divide_by {
1 : { div = 0; };
2 : { div = 1; };
4 : { div = 2; };
8 : { div = 3; };
16 : { div = 4; };
default : { dut_error(divide_by," is not a legal Clock division for ADC"); };
};
gad_regs.gad_clk_gen.clk_algn = align_by;
gad_regs.gad_clk_gen.clk_dev = div;
do WR_REG seq keeping {.reg==gad_regs.gad_clk_gen;};
};
};//extend CONFIG_ADC_CLK ocp_master_sequence_q {
在测试中,我使用以下序列: do CONFIG_ADC_CLK seq keeping {.divide_by== 3;.align_by==0;};
出于某种原因,编译器将字段divide_by
的编号称为十六进制数而不是十进制。 如何确保将其称为十进制?
这与序列无关,也与数字分配给字段的方式无关。这只是关于如何在打印和字符串操作中设置数值的格式。字段的实际值与其打印方式无关。
默认情况下,dut_error()
、message()
、out()
、append()
和其他字符串格式设置例程使用config print -radix
的当前设置。因此,您可能已将其设置为在您的环境中HEX
。 如果您需要此特定dut_error()
始终使用十进制格式,无论配置设置是什么,都可以使用dec()
,如下所示:
dut_error(dec(divide_by)," is not a legal Clock division for ADC");
顺便说一下,当使用这些例程的第二个变体时,例如dut_errorf()
或appendf()
,您可以通过提供正确的%
参数来确定基数,例如,小数的%d
或十六进制的%x
,例如,上述dut_error()
可能会重写为:
dut_errorf("%d is not a legal Clock division for ADC", divide_by);
在这里,您也可以使用%s
,在这种情况下,仍然使用配置基数设置。