Specman - 将 uint 十进制数分配给序列



>我有以下顺序:

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,在这种情况下,仍然使用配置基数设置。

相关内容

  • 没有找到相关文章

最新更新