1

下面是一个关于带同步使能的 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?

4

1 回答 1

2

在 Verilog 中,使用 DFF 作为输出是完全合法且常见的。

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

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

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

于 2012-04-15T18:50:57.137 回答