Specman - Присвоить десятичное число uint последовательности - PullRequest
0 голосов
/ 02 мая 2018

У меня следующая последовательность:

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 голосов
/ 02 мая 2018

Это не относится к последовательностям и не относится к тому, как номера присваиваются полям. Речь идет о том, как числовые значения отформатированы в операциях печати и строк. Фактическое значение поля не имеет ничего общего с тем, как оно печатается.

По умолчанию 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 для hexa, например, вышеуказанное dut_error() может быть переписано как:

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

Здесь вы также можете использовать %s, в этом случае настройка configx все еще используется.

...