我有以下顺序:
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 {
在测试中我使用序列: 做CONFIG_ADC_CLK seq保持{.divide_by == 3; .align_by == 0;};
由于某种原因,编译器将字段divide_by
的编号称为十六进制数而不是十进制数。
我怎样才能确保它将其称为十进制?
答案 0 :(得分:1)
这与序列无关,与数字如何分配给字段无关。它只是关于打印和字符串操作中数值格式化的方式。字段的实际值与其打印方式无关。
默认情况下,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()
,您可以通过提供正确的%
参数来确定基数,例如{{ 1}}表示小数,或%d
表示hexa,例如,上述%x
可能会被重写为:
dut_error()
在这里,你也可以使用dut_errorf("%d is not a legal Clock division for ADC", divide_by);
,在这种情况下仍然使用配置基数设置。