Verilog - 总是在posedge上重新使用寄存器值

时间:2017-11-15 12:41:55

标签: verilog edge

请考虑以下代码:

   Module Test  (B, A, CLK)

Input A, CLK;
Output B;

Reg RA;

Always @(Posedge CLK)

Begin

RA=A;
B=RA;

End
EndModule

是否可以正常工作将输入移动到寄存器,然后在每个上升沿移动到输出?它可以用电路创建吗?

2 个答案:

答案 0 :(得分:0)

这取决于你要做的事情......

  • 如果您只想要一个触发器,最简单的方法是声明react-hot-loader然后您可以编写reg B;。不需要另外的信号。

  • 如果(由于某些样式原因)您想要将触发器与输出分开,您可以使用连续分配always @(posedge CLK) B <= A;将它们连接在一起。电路是一样的。

  • 如果您需要两个触发器(2阶段管道),您的代码几乎是正确的,但请记住声明assign B = RA;并使用reg B; 更新(可以按任意顺序编写)。

  • 如果<=是用于描述您对工具的意图的某种临时变量,那么是;您可以使用RA向其写入并在同一进程中使用其值(不要尝试从任何其他进程访问它)。这对于例如偶尔有用。在循环中积累东西,但这里只会让人感到困惑和容易出错!

要合成实际硬件,通常还会有一个复位信号,并且需要以适当的方式为每个触发器使用它。

答案 1 :(得分:0)

要回答你的问题,是的,你所写的(概念上)将起作用。在语法方面,这里有一些可以编译并做你正在思考的东西。请注意,我已将输出B声明为寄存器,并对寄存器使用非阻塞分配。

module Test (
    input  wire CLK,
    input  wire A,
    output reg  B
);

    reg RA;

    always @(posedge CLK) begin
        RA <= A;
        B  <= RA;
    end

endmodule