【问题标题】:SystemVerilog Error: variable written by continuous and procedural assignmentsSystemVerilog 错误:由连续和程序赋值写入的变量
【发布时间】:2017-04-09 09:57:03
【问题描述】:

我想为我的 ALU 电路创建一个测试台。当我编译它时,我得到了一些错误:

module ALU_TB();
logic [7:0] A, B, w;
logic [2:0] s, n;
logic co, ci, si;
wire ov, neg, zero, gt, eq;

ALU alu8(A, B, s, si, ci, n, co, ov, zero, neg, gt, eq, w);
assign A = 8'b10000000, B = 8'b0, s = 3'b0, ci = 1'b0, si = 1'b0, n = 3'b011;
initial begin
  integer i;
    for (i = 0; i < 7; i = i + 1) begin 
        s = s + 3'b001;
        repeat(8) #59 A = {A[0], A[7:1]};
        #59 B = 8'b10000000; A = 8'b01011010;
        repeat(8) #59 B = {~B[0], B[7:1]};
    end
end
endmodule

这些是第 12、13、14、14、15 行的编译错误:

** 错误:(vlog-3838) 变量“s”由连续和程序分配写入。

** 错误:(vlog-3838) 变量'A'由连续和程序赋值写入。

** 错误:(vlog-3838) 变量“B”由连续和程序赋值写入。

** 错误:(vlog-3838) 变量“A”由连续和程序赋值写入。

** 错误:(vlog-3838) 变量“B”由连续和程序赋值写入。

这些错误是什么意思?

【问题讨论】:

    标签: verilog system-verilog digital-logic test-bench


    【解决方案1】:

    您在连续分配(分配)和程序块(初始)中使用 'A'、'B'、'S'。变量不能同时用于连续赋值和过程赋值。

    顺便说一句,您的代码逻辑不正确。例如,当您分配 B=0 时,这意味着 B 将始终为 0(这就是为什么它被称为连续分配!)。但是您正在更改初始块中的 B!

    您似乎想使用 assign 初始化信号,这是完全错误的。初始块用于此目的。

    最后,将变量“i”的声明放在初始块之外。

    integer i;
    initial begin
    A = 8'b10000000;
     B = 8'b0;
     s = 3'b0;
     ci = 1'b0;
     si = 1'b0;
     n = 3'b011;
    
        #1 for (i = 0; i < 7; i = i + 1) begin 
            // your code here
        end
    end
    

    【讨论】:

    • 仅供参考,在 SystemVerilog 中,您可以对变量进行连续赋值。但是当你这样做时,你只能有一个连续的分配,而不能同时有其他的程序分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多