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

Specman - Assign uint decimal number to sequence

我有以下顺序:

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 的编号引用为十六进制数而不是十进制数。 我怎样才能确保它将它引用为十进制?

这与序列无关,也与数字分配给字段的方式无关。它只是关于数值在打印和字符串操作中如何格式化。字段的实际值与其打印方式无关。

默认情况下,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,此时仍然使用config radix设置。