verilog - 为什么线变量会导致连续赋值中的非法左侧?
问题描述
我已经阅读了所有类似的帖子,但没有一个解决我遇到的问题,即第 41 行assign Y[b]=~Y[b];
导致错误“连续分配中的非法左侧”。
我没有分配任何规则,所以我看不出问题出在哪里。如果我b
用一个实际的数字(比如 3)替换它就可以了。但我需要b
在这里作为一个变量。
// Hamming code 1-bit error correction
module HCG(I,e,O);
input [4:1] I; // input BCD
input [7:1] e; // noise simulation
wire [7:1] X; // Hamming code
wire [7:1] Y; // Hamming code after addition of noise
wire [3:1] P; // Parity at start
wire [3:1] S; // Parity at end
wire b; // the error bit
output [4:1] O; // corrected output
assign X[1]=I[1]^I[2]^I[4]; // Hamming code generator
assign X[2]=I[1]^I[3]^I[4];
assign X[3]=I[1];
assign X[4]=I[2]^I[3]^I[4];
assign X[5]=I[2];
assign X[6]=I[3];
assign X[7]=I[4];
assign P[1]=X[1]; // Parity at start
assign P[2]=X[2];
assign P[3]=X[4];
assign Y[1]=e[1]^X[1]; // noise added
assign Y[2]=e[2]^X[2];
assign Y[3]=e[3]^X[3];
assign Y[4]=e[4]^X[4];
assign Y[5]=e[5]^X[5];
assign Y[6]=e[6]^X[6];
assign Y[7]=e[7]^X[7];
assign S[1]=Y[3]^Y[5]^Y[7]; // Parity at end
assign S[2]=Y[3]^Y[6]^Y[7];
assign S[3]=Y[5]^Y[6]^Y[7];
assign b=(S[1]!=P[1])? b:b+1; // if parity of 2^0 not the same, add 1 to b
assign b=(S[2]!=P[2])? b:b+2; // if parity of 2^1 not the same, add 2 to b
assign b=(S[3]!=P[3])? b:b+4; // if parity of 2^2 not the same, add 4 to b
assign Y[b]=~Y[b]; // correct the incorrect bit
assign O[1]=Y[3]; // assigning outputs
assign O[2]=Y[5];
assign O[3]=Y[6];
assign O[4]=Y[7];
endmodule
解决方案
module
和之间的行endmodule
是同时执行的。(您似乎认为它们是按顺序执行的。)因此,您正在驱动Y
这些行中的所有位
assign Y[1]=e[1]^X[1]; // noise added
assign Y[2]=e[2]^X[2];
assign Y[3]=e[3]^X[3];
assign Y[4]=e[4]^X[4];
assign Y[5]=e[5]^X[5];
assign Y[6]=e[6]^X[6];
assign Y[7]=e[7]^X[7];
然后Y
在这一行中再次驱动其中一个位:
assign Y[b]=~Y[b]; // correct the incorrect bit
所以(a)你有短路和(b)哪个位有短路?这取决于b
. 因此,短路的位置取决于其中一根内部导线的状态。您已经描述了一个可以根据其输入重新配置自身的电路。Verilog 不会让你这样做。Verilog 是一种硬件描述语言。传统的数字硬件无法根据其输入状态重新配置自身。
推荐阅读
- .net - 如何修复错误“初始化字符串的格式不符合从索引 0 开始的规范。”
- asp.net-mvc - 从 javascript\ajax 传递对象参数以在 Controller 中运行
- python - 更新特定列 PANDAS 中的所有行
- python - 在每行中查找具有重复值的列并获取相关值
- haxe - Haxe 中 Rest 客户端的路径不正确
- .net - 枚举列表的验证消息
- angular - 资产/appconfig.production.json 找不到角天蓝色
- wpf - 设置 XamDataGrid 字段的最小值和最大值
- python - 将 ctypes args 从 c++ 翻译成 python
- android - RecyclerView:没有附加适配器;跳过布局 Surface 无效