2012-04-15 30 views
1

下面是一個簡單的Verilog實例有關與同步一d FF輸出邏輯使關於簡單的FSM

module d-ff-en_2seg 
(
input wire clk,reset, 
input wire en, 
input wire d, 
output reg q 
); 
    // signal declaration 
    IU reg r_reg, r_next; 
    // body 
    // D FF 
    always @(posedge clk, posedge reset) 
     if (reset) 
      r_reg <= 1'bO; 
     else 
      r_reg <= r_next; 
    // next-state logic 
    always @* 
     if (en) 
      r_next = d; 
     else 
      r_next = r_reg; 
    // output logic 
    always @* 
     q = r_reg; 
endmodule 

我的問題是,爲什麼我們在這裏所需要的輸出邏輯?我們可以忽略它嗎?只需將r_reg定義爲輸出reg?

+1

它看起來像你的copy'n'paste了可怕壞。該代碼不會編譯。什麼是Q *'? 'IU'? – toolic 2012-04-15 17:51:05

+0

@toolic對不起,應該是@ – fiftyplus 2012-04-15 21:32:01

回答

2

在Verilog的是完全合法的,共同使用的DFF爲輸出。

在VHDL中它是非法的,從輸出信號來讀取。 http://vhdl.renerta.com/mobile/source/vhd00051.htm

因此,在這種情況下,線 「r_next = r_reg;」如果您將此行轉換爲VHDL並且r_reg是輸出,則可能是非法的。

爲此,RTL編碼希望成爲雙方一致的Verilog和VHDL將堅持所有輸出一個單獨的「輸出邏輯」一節中指定的指導方針。如果你最終想用VHDL重寫代碼,這將有所幫助(一點點)。

+0

約輸出Q,它看起來非常redundent什麼,如果我r_reg取代q什麼?首先定義q的原因是什麼? – fiftyplus 2012-04-15 21:33:58

+0

在Verilog中你是對的。輸出q是多餘的。你可以安全地用r_reg替換q。 q可能僅在答案中的文體原因中首先定義。 – 2012-04-16 07:22:54

+0

您*可*讀取VHDL輸出(從VHDL-2008起) – 2012-04-16 12:37:21