SystemVerilog错误:由连续和程序分配编写的变量

时间:2017-04-09 09:57:03

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

我想为我的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)变量''由连续和程序分配编写。

     

**错误:(vlog-3838)变量'A'由连续和程序性作业编写。

     

**错误:(vlog-3838)变量'B'由连续和程序分配写成。

     

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

     

**错误:(vlog-3838)变量'B'由连续和程序分配写成。

这些错误意味着什么?

1 个答案:

答案 0 :(得分:1)

您正在使用&#39; A&#39;,&#39; B&#39; ,&#39; S&#39;在连续分配(分配)和程序块(初始)中。变量不能同时用于连续和程序分配。

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

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

最后,把变量'&#39; i&#39;在初始区之外。

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