2010-02-20 4 views
2

매개 변수 키워드를 사용하여 상태 즉 RESET = 5'b00000을 정의하고 있습니다. $ display를 사용하여 바이너리 표현 대신 상태 이름을 출력하거나 시뮬레이션 웨이브 뷰어에 상태 이름을 표시하려면 어떻게해야합니까? 그것은 문자열로 인쇄하려고 노력하지 않습니다 (당신이 기대하는 것처럼), 그래서 이것이 할 수 있는지 궁금하네요.Verilog 사용 매개 변수 키워드

답변

3

parameter의 이름은 자동으로 $display입니다. 당신이 당신의 코드를 복제 꺼리지 않는 경우, 당신은 만들 수있는 task (또는 function) 목표 달성 :

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

    $display(state); show_name_state(); 

내가 인식하는 기능이 하나 이상 (비싼)의 Verilog 디버거의 알을 매개 변수를 자동으로 파형 뷰어에 표시합니다. Verdi (이전의 Debussy) nWave 도구로이를 수행 할 수 있습니다.

+0

case 문에서 5'b00000을 매개 변수 RESET 대신 바꿀 수 있습니다. – George

1

동일한 값을 가진 여러 매개 변수가있을 수 있으므로 일반적으로 숫자 값에서 해당 값을 가진 매개 변수 이름으로 이동할 수 없습니다. 매개 변수는 C #define과 같습니다. 변수를 사용하여 상태 집합을 정의 할 수는 있지만 변수와 가능한 상태를 나타내는 데 사용하는 매개 변수 목록간에 공식적인 연관성이 없습니다. 더 나은 옵션이 없기 때문에이 방법으로 매개 변수를 사용하는 것이 일반적 이었지만 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 



있다.