我是使用HDL的初学者,并且已经在Verilog中制作了几个基本模块。今天,今天,在Verilog中创建我的项目时,在第5行出现了这个奇怪的错误,内容为:“原始输出连接必须是标量var或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
模拟未运行并显示此错误。
答案 0 :(得分:1)
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,
。您所做的是没错,但是如果您的代码必须与已建立的代码一起使用,则会使工作变得更加困难。