Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Verilog 在原语输出连接中获取错误必须是标量变量或网络_Verilog - Fatal编程技术网

Verilog 在原语输出连接中获取错误必须是标量变量或网络

Verilog 在原语输出连接中获取错误必须是标量变量或网络,verilog,Verilog,我是一个使用HDL的初学者,并用Verilog制作了几个基本模块。今天,在Verilog中创建一个项目时,我在第5行遇到了一个奇怪的错误: 基元输出连接必须是标量变量或网络 我不知道怎么解决这个问题 我尝试将缓冲模块更改为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]); bu

我是一个使用HDL的初学者,并用Verilog制作了几个基本模块。今天,在Verilog中创建一个项目时,我在第5行遇到了一个奇怪的错误:

基元输出连接必须是标量变量或网络

我不知道怎么解决这个问题

我尝试将缓冲模块更改为
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内置原语被分成多个组,每个组具有特定数量的输入和输出端口

  • 和nand或nor xor xnor
    具有一个输出和多个输入
  • buf
    not
    具有多个输出和一个输入
(有更多类型,如启用门和通过门,但我们暂时不谈这些类型)

因此,buf实例必须是
buf(输出,输出,输出,…输入)
因此,xor实例必须是
xor(输出、输入、输入、输入…)

你可以看到你的
p2(B[5:7],A[2:4])不遵循此规则,因为您有三个输入:A[2:4]


作为旁注:通常从高到低索引向量:
B[13:8]
,也从高到零:
输入[31:0]值,
。您所做的没有错,但如果您的代码必须与已建立的代码一起工作,则会使生活更加困难

还需要注意的是,每个位必须用逗号分隔。这是非法的:
buf(B[3:5],A[2])。但是,这是合法的:
buf(B[3],B[4],B[5],A[2])