【问题标题】:Specman - Assign uint decimal number to sequenceSpecman - 将 uint 十进制数分配给序列
【发布时间】:2018-05-02 08:30:03
【问题描述】:

我有以下顺序:

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

【问题讨论】:

  • 您能否澄清一下-“编译器将数字称为十六进制数字”是什么意思?它以什么方式将其称为十六进制?至少3 在十六进制和十进制中的意思是一样的,那么到底哪里出错了?
  • 或者您的意思是打印数字的方式(作为dut_error的一部分)?
  • @Yuri Tsoglin - 是的,我的意思是数字的打印方式

标签: sequence variable-assignment decimalformat specman


【解决方案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(),您可以通过提供正确的 % 参数来确定基数,例如,%d 用于小数或 @987654334 @ 表示 hexa,例如上面的dut_error() 可以改写为:

dut_errorf("%d is not a legal Clock division for ADC", divide_by);

在这里,您也可以使用%s,在这种情况下仍然使用配置基数设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2015-03-22
    • 2014-08-23
    • 2018-12-06
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多