关于简单的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?
在Verilog的是完全合法的,共同使用的DFF为输出。
在VHDL中它是非法的,从输出信号来读取。 http://vhdl.renerta.com/mobile/source/vhd00051.htm
因此,在这种情况下,线 “r_next = r_reg;”如果您将此行转换为VHDL并且r_reg是输出,则可能是非法的。
为此,RTL编码希望成为双方一致的Verilog和VHDL将坚持所有输出一个单独的“输出逻辑”一节中指定的指导方针。如果你最终想用VHDL重写代码,这将有所帮助(一点点)。
约输出Q,它看起来非常redundent什么,如果我r_reg取代q什么?首先定义q的原因是什么? – fiftyplus 2012-04-15 21:33:58
在Verilog中你是对的。输出q是多余的。你可以安全地用r_reg替换q。 q可能仅在答案中的文体原因中首先定义。 – 2012-04-16 07:22:54
您*可*读取VHDL输出(从VHDL-2008起) – 2012-04-16 12:37:21
它看起来像你的copy'n'paste了可怕坏。该代码不会编译。什么是Q *'? 'IU'? – toolic 2012-04-15 17:51:05
@toolic对不起,应该是@ – fiftyplus 2012-04-15 21:32:01