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

时间:2018-05-02 08:30:03

标签: sequence variable-assignment decimalformat specman

我有以下顺序:

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

1 个答案:

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