2016-06-23 54 views
0

是否可以使用枚舉與不關心?我試過Verilog,使用枚舉與不在乎

typedef enum reg [31:0] { 
    BLTZ = 32'b000001_?????_00000_????????????????, 
    BGEZ = 32'b000001_?????_00001_????????????????, 
    BEQ = 32'b000100_?????_?????_????????????????, 
    BNE = 32'b000101_?????_?????_????????????????, 
    . 
    . 
    . 

然後利用doulos.com給出的語法如下,我嘗試以下,看看我是否能得到一個「添加」指令,顯示在波形查看

op_mne_e op_mnemonic; 
    assign op_mnemonic = op_mne_e'(32'b000000_?????_?????_?????_?????_10000); 

但我看到的是

000000zzzzzzzzzzzzzzzzzzzz10000 

是否有可能有一些類似於枚舉的casez?

+1

我將標記更改爲System-Verilog,因爲Verilog中沒有'typedef'或'enum's。我意識到這可能會讓你的問題看起來像消失在你身上。因此,此評論將顯示在您最近的收件箱郵件中。 –

回答

0

我已經編輯了這個問題的標籤,因爲您問的是關於System-Verilog,而不是Verilog。我們所說的Verilog現在是System-Verilog標準IEEE-1800的一個子集。

在System-Verilog中,枚舉類型具有基本類型基類型。默認情況下,此類型爲int,這是一種2態的類型(每個位只能取值01)。如果您願意,您可以指定其他基本類型。枚舉類型的每個成員都由基類型的不同值表示。

您已指定4態32位基類型:reg [31:0] *。這4種狀態是0,1,Z(或?)和X。因此,枚舉類型的每個成員都由4狀態值表示,即0,1,Z(或?)和X的某種組合。但是,當您使用「%b」格式說明符顯示值時,您會得到以下結果:您將得到基礎4態值(使用Z s,而不是? s)。

http://www.edaplayground.com/x/3khr

casez聲明,一個Z?表示不關心。所以,你可以使用一個4-狀態基本類型的這樣的enumcasez聲明,如果你想:

casez (op_mnemonic) 
    BLTZ : $display("BLTZ"); 
    BGEZ : $display("BGEZ"); 
    BEQ : $display("BEQ"); 
    BNE : $display("BNE"); 
endcase 

但是,正如我們在這裏講系統的Verilog,爲什麼不使用case ... inside呢?

case (op_mnemonic) inside 
    BLTZ : $display("BLTZ"); 
    BGEZ : $display("BGEZ"); 
    BEQ : $display("BEQ"); 
    BNE : $display("BNE"); 
endcase 

http://www.edaplayground.com/x/4g3J

case ... inside通常比舊casez認爲更加安全,因爲它表現出不對稱通配符匹配。換句話說,與casez不同,case ... inside,XZ(或?)在測試表達式(op_mnemonic在這種情況下)不像一個不關心(但當然在分支表達式中) 。

*在System-Verilog中更常用的是指定logic [31:0],它是相同的,但logic通常用於System-Verilog而不是reg

+0

'?'和'z'在Verilog中是等效的。 –

+0

謝謝@ dave_59。雖然我知道'Z'和'?'是'casez'聲明中的同義詞,但我沒有意識到它比這更普遍。現在,這個便士已經放棄了原來的問題。 –

0

如果你想讓你的enum變量的標籤顯示在波形中,你需要設置基數來顯示它。大多數工具默認以二進制顯示。 SystemVerilog有一些運營商把'z'視爲一個不關心(casez就是其中之一),所以'?'被允許作爲數字文字的一部分代替'z'。但是,那'''立即轉換爲'z',你永遠不會看到'?'打印出來。

如果您試圖爲枚舉賦值並讓它對指令進行解碼並選擇匹配的標籤,那麼這將不起作用。您需要循環枚舉值並使用通配符相等運算符==?來查找匹配項。

但是,如果您只是在波形中獲取標籤,Modelsim/Questa會提供一個radix define命令來爲您解碼指令。