2010-02-20 206 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調試器,它具有識別能力參數並在其波形查看器中自動顯示其名稱:Verdi(以前稱爲Debussy)nWave工具可以執行此操作。

+0

您當然可以用參數RESET替換case語句中的5'b00000。 – George 2010-10-29 13:21:43

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 


如果狀態是有問題的參數狀態寄存器。