在原始输出连接中获取错误必须是标量 var 或 net

Getting error in primitive output connection must be a scalar var or net

我是HDL初学者,用Verilog做了几个基础模块。现在,在 Verilog 中创建我的一个项目时,我在第 5 行遇到了这个奇怪的错误:

primitive output connection must be a scalar var or net

我不知道如何解决这个问题。

我尝试将缓冲模块更改为 xor 模块,但没有发现任何变化。

module decoder(A, B);
    input[1:32] A;
    output[1:38] B;
    buf p1(B[3:3], A[1:1]);
    buf p2(B[5:7], A[2:4]);
    buf p3(B[9:15], A[5:11]);
    buf p4(B[17:31], A[12:26]);
    buf p5(B[33:38], A[27:32]);
    xor u1(B[1], A[3], A[5], A[7], A[9], A[11], A[13], A[15], A[17], A[19], A[21], A[23], A[25], A[27], A[29], A[31]);
    xor u2(B[2], A[3], A[6], A[7], A[10], A[11], A[14], A[15], A[18], A[19], A[22], A[23], A[26], A[27], A[30], A[31]);
    xor u3(B[4], A[5], A[6], A[7], A[12], A[13], A[14], A[15], A[20], A[21], A[22], A[23], A[28], A[29], A[30], A[31]);
    xor u4(B[8], A[9], A[10], A[11], A[12], A[13], A[14], A[15], A[24], A[25], A[26], A[27], A[28], A[29], A[30], A[31]);
    xor u5(B[16], A[17], A[18], A[19], A[20], A[21], A[22], A[23], A[24], A[25], A[26], A[27], A[28], A[29], A[30], A[31]);
    xor u6(B[32], 0, A[32]);
endmodule

模拟的不是运行,就报这个错

Verilog 内置原语被分成几组,每组都有特定数量的输入和输出端口。

  • and nand or nor xor xnor有一个输出和多个输入。
  • bufnot 有多个输出和一个输入。

(还有更多类型,例如使能门和通过门,但我们暂时保留它们)

因此 buf 实例必须是 buf <name> (output, output, output,... input);
因此 xor 实例必须是 xor<name> (output, input, input, input ...);

如您所见,您的 p2(B[5:7], A[2:4]); 不遵循此规则,因为您有三个输入:A[2:4].

作为旁注:通常从高到低索引向量:B[13:8]并且从高到零:input [31:0] value,。您所做的 并没有错,但是如果您的代码必须与已建立的代码一起工作,这会让生活变得更加困难。