关于简单的FSM

关于简单的FSM

问题描述:

下面是一个简单的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

在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