如何在verilog中为寄存器分配寄存器?

时间:2015-03-12 15:39:23

标签: verilog

我很难弄清楚如何将temp的值分配给out。我在网上搜索了答案并尝试了各种各样的事情,但仍然无法获得分配的输出。这是代码:

module Reg8bit(
    input CLK,
    input En,
    input CLR,
    input [7:0] in,
    output [7:0] out
    );

    reg[7:0] temp;

    always @(posedge CLK)
    begin
        if (En)
        begin
            if (CLR)
                out = 8'b0000_0000;
            else
                out = in;
        end
    end

    assign out = tempQ;

endmodule

编辑:temp应该是tempQ,抱歉打字错误

3 个答案:

答案 0 :(得分:3)

你可能打算写

module Reg8bit(
    input CLK,
    input En,
    input CLR,
    input [7:0] in,
    output reg [7:0] out // out is a variable, not a wire
    );

    always @(posedge CLK)
    begin
        if (En)
        begin
            if (CLR)
                out <= 8'b0000_0000; // use Non-blocking assignments
            else
                out <= in;
        end
    end
endmodule

答案 1 :(得分:0)

您的代码没有多大意义。您要分配两次而不使用临时寄存器。

你可能想写这样的东西:

reg[7:0] temp;

always @(posedge CLK)
begin
    if (En)
    begin
        if (CLR)
            temp <= 0;
        else
            temp <= in;
    end
end

assign out = temp;

在always块中使用非阻塞赋值通常(并不总是)被视为良好做法。我认为在这种情况下你甚至可以在没有临时登记的情况下这样做。

答案 2 :(得分:0)

assign语句的LHS应该始终是一条线。您已声明为reg,并且最好在始终块内的LHS中使用reg数据类型。

相关问题