关于简单FSM的输出逻辑

时间:2012-04-15 15:53:41

标签: verilog

以下是关于具有同步启用的D FF的简单Verilog示例

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 个答案:

答案 0 :(得分:2)

在Verilog中,使用DFF作为输出是完全合法和普遍的。

在VHDL中,从输出信号中读取是非法的。 http://vhdl.renerta.com/mobile/source/vhd00051.htm

所以,在这种情况下,行“r_next = r_reg;”如果将此行转换为VHDL并且r_reg是输出,则可能是非法的。

出于这个原因,想要对verilog和VHDL保持一致的RTL编码指南将坚持所有输出都在单独的“输出逻辑”部分中分配。如果您最终想要用VHDL重写代码,这将有助于(一点点)。