【问题标题】:Verilog : error Reference to scalar wire 'VALUE' is not a legal reg or variable lvalueVerilog:错误引用标量线'VALUE'不是合法的reg或变量左值
【发布时间】:2020-05-14 09:50:22
【问题描述】:

我被这段代码卡住了。我不明白为什么我的VALUE 不能倒置。

module PREDIV(
    input wire QUARTZ,
     output wire VALUE);

always @ (posedge QUARTZ)
    assign VALUE= ~VALUE;

endmodule

【问题讨论】:

    标签: verilog


    【解决方案1】:

    有一些问题。

    您不应在 always 块内使用 assign 关键字。

    在进行程序分配时(在always 块内),您应该将信号声明为reg 类型,而不是wire。这就是您的错误消息所指的内容。

    对于顺序逻辑,您应该使用非阻塞赋值:<=

    最后,reg 被初始化为未知 (X)。您需要一种方法来初始化VALUE,否则它将保持X。一种方法是添加RESET 信号。

    module PREDIV(
        input wire QUARTZ, input RESET,
         output reg VALUE);
    
    always @ (posedge QUARTZ or posedge RESET)
        if (RESET) begin
            VALUE <= 0;
        end else begin
            VALUE <= ~VALUE;
        end
    
    endmodule
    

    【讨论】:

      【解决方案2】:

      看起来代码在always 块中使用了阻塞赋值。 always 块应该只使用非阻塞分配。

      代码应该是这样的:

      always @(posedge QUARTS)
      Value <= ~Value; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 2014-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        相关资源
        最近更新 更多