2010-02-20 2 views
2

Я использую ключевое слово параметра для определения состояния, т.е. RESET = 5'b00000. Если я хочу использовать $ display для распечатки имени состояния вместо двоичного представления или отображения имени состояния в моем средстве просмотра симуляции, как я могу это сделать? Он не работает, чтобы попытаться распечатать его как строку (как и следовало ожидать), поэтому мне интересно, можно ли это сделать.Использование ключевого слова параметра Verilog

ответ

3

Я не знаю, как автоматически $display имя parameter. Однако, если вы не против дублирования кода, вы можете создать task (или function) для достижения своей цели:

task show_name_state; 
     case (state) 
      5'b00000: $display("RESET"); 
      5'b00001: $display("WAIT"); 
     endcase 
    endtask 

    $display(state); show_name_state(); 

Я знаю, по крайней мере, один (дорогой) Verilog отладчик, который обладает способностью распознавать параметры и автоматически отображать их имена в своем средстве просмотра осциллограмм: инструмент nWave от Verdi (ранее Debussy) может сделать это.

+0

Вы можете, конечно же, заменить 5'b00000 в выражении case параметром RESET. – George

1

Может быть несколько параметров с одинаковым значением, поэтому вы не можете вообще перейти от числового значения к имени параметра с этим значением. Параметры подобны C #define s; хотя вы можете использовать их для определения набора состояний, формальная связь между переменной и списком параметров, которые вы используете для представления возможных состояний, не существует. Поскольку не было лучшего варианта, он обычно использовался для (неправильного) использования параметров таким образом, но затем SystemVerilog вводил тип enum, который не имеет проблем с параметром. Вы не указали, какие инструменты вы используете, но при условии, что ваши инструменты поддерживают типы перечисления SystemVerilog, тогда это было бы лучшим выбором для значения состояния.

2

Если ваша цель просто дисплей имя состояния во время моделирования, я обычно делаю что-то вроде

`ifdef SIMULATION 
reg [127:0] __state__; 
case (state) 
    STATE_1 : __state__ = "STATE_1"; 
    STATE_2 : __state__ = "STATE_2"; 
    default : __state__ = "error"; 
endcase 
`endif 


Где состояние является регистр, который имеет соответствующий параметр.