在原始输出连接中获取错误必须是标量 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
有一个输出和多个输入。
buf
和 not
有多个输出和一个输入。
(还有更多类型,例如使能门和通过门,但我们暂时保留它们)
因此 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,
。您所做的 并没有错,但是如果您的代码必须与已建立的代码一起工作,这会让生活变得更加困难。
我是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
有一个输出和多个输入。buf
和not
有多个输出和一个输入。
(还有更多类型,例如使能门和通过门,但我们暂时保留它们)
因此 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,
。您所做的 并没有错,但是如果您的代码必须与已建立的代码一起工作,这会让生活变得更加困难。