以下是关于具有同步启用的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?
答案 0 :(得分:2)
在Verilog中,使用DFF作为输出是完全合法和普遍的。
在VHDL中,从输出信号中读取是非法的。 http://vhdl.renerta.com/mobile/source/vhd00051.htm
所以,在这种情况下,行“r_next = r_reg;”如果将此行转换为VHDL并且r_reg是输出,则可能是非法的。
出于这个原因,想要对verilog和VHDL保持一致的RTL编码指南将坚持所有输出都在单独的“输出逻辑”部分中分配。如果您最终想要用VHDL重写代码,这将有助于(一点点)。