El uso de palabras clave Verilog Parámetro
-
21-09-2019 - |
Pregunta
Estoy utilizando la palabra clave parámetro para definir un estado es decir reset = 5'b00000. Si quiero usar $ pantalla en formato papel el nombre del estado en lugar de la representación binaria, o mostrar el nombre del estado en mi visor de onda de simulación, ¿cómo puedo hacer esto? No funciona para tratar de imprimirlo como una cadena (como era de esperar), por lo que me pregunto si esto se puede hacer.
Solución
No sé de una manera de $display
automáticamente el nombre de un parameter
. Sin embargo, si no te importa la duplicación de su código, se puede crear un task
(o function
) para lograr su objetivo:
task show_name_state;
case (state)
5'b00000: $display("RESET");
5'b00001: $display("WAIT");
endcase
endtask
$display(state); show_name_state();
Sé de al menos un (caro) Verilog depurador que tiene la capacidad de reconocer automáticamente los parámetros y sus nombres aparezcan en su visor de forma de onda:. Verdi (antes Debussy) nWave herramienta puede hacer esto
Otros consejos
Si su objetivo es sólo la pantalla el nombre del estado durante la simulación, yo suelo hacer algo así como
`ifdef SIMULATION
reg [127:0] __state__;
case (state)
STATE_1 : __state__ = "STATE_1";
STATE_2 : __state__ = "STATE_2";
default : __state__ = "error";
endcase
`endif
Donde el estado es el registro de estado que tiene el parámetro en cuestión.
Puede haber varios parámetros con el mismo valor, por lo que no se puede ir en general, de un valor numérico para el nombre de un parámetro con ese valor. Los parámetros son como C #define
s; aunque se puede utilizar para definir un conjunto de estados, no existe una asociación formal entre la variable y la lista de parámetros que utiliza para representar los estados posibles. Debido a que no había mejor opción que solía ser común a (des) parámetros de uso de esta manera, pero luego SystemVerilog introdujo un tipo enum
que no tiene los problemas del método de parámetros. Usted no ha mencionado qué herramientas que está utilizando, pero asumiendo que sus herramientas soportan tipos de enumeración SystemVerilog entonces eso sería una mejor opción para un valor de estado.