HELP!错在哪儿?
时间:10-02
整理:3721RD
点击:
各位:
verilog中使用for循环出错,但是不知道错在哪里,帮忙看看。
module DW_minmax(
a,
tc,
min_max,
value,
index
);
parameter WIDTH = 4; // element WIDTH
parameter NUM_INPUTS = 8; // number of elements in input array
parameter INDEX_WIDTH = 3; // size of index pointer = ceil(log2(NUM_INPUTS))
input [WIDTH*NUM_INPUTS-1:0] a; //Concatenated input vector
input tc; //0=unsigned,1=signed
input min_max; //0=find min,1=find max
output [WIDTH-1:0] value; //min or max value found
output [INDEX_WIDTH-1:0] index; //index to value found
reg [WIDTH-1:0]b[NUM_INPUTS-1:0];
always @(a)
begin: takeout
reg [INDEX_WIDTH-1:0] pi;
for (pi=0;pi<NUM_INPUTS;pi=pi+1)
b[pi]=a[WIDTH*pi+WIDTH-1:WIDTH*pi];
end
endmodule
用的是MOdelsim6.5C,提示错误信息是:** Error: D:/modeltech_6.5c/examples/DW_minmax/DW_minmax.v(24): near "[": syntax error, unexpected '[', expecting ':'
24行是 b[pi]=a[WIDTH*pi+WIDTH-1:WIDTH*pi];
分号是全角的。
()有问题。这种问题不该来占用论坛的带宽
注意编码时应该尽量关闭输入法 ,以防止半角或者全角输入 引起编译器或者仿真软件不识别
如果不是标点符号问题的话,
地址寻址不能用指针的方式吧。
不是标点的问题。
a[WIDTH*pi+WIDTH-1:WIDTH*pi];
不能用变量取数组的一段数,可以改为a[WIDTH*pi +: WIDTH-1 ] 试试
这种for循环综合出来大概是什么结构?
是不是因为赋值符号,两边的数据宽度不一样啊~
确实这个地方有问题。不过改为这样也不行,因为"[]"中只能存在常量,不能存在变量。
所以只有用移位来解决这个问题了。
不知道,没综合。boss说这个模块只是仿真的时候使用,他说因为没有时钟,所以会有些问题,真正IP里面肯定不是这样的。
记得以前在哪里看到过,用for的话,会综合出“循环次数”个同样的电路,用for只是减少我们敲键盘的工作量而已。
reg [INDEX_WIDTH-1:0] pi;
for (pi=0;pi<NUM_INPUTS;pi=pi+1)
b[pi]=a[WIDTH*pi+WIDTH-1:WIDTH*pi];
死循环地说,pi<NUM_INPUTS恒成立,因为pi只有三位
楼上正解。
verilog中是不是有规定,数组的index不能有表达式的,不知道SV中可以用表达式不
b[pi]=a[WIDTH*pi+WIDTH-1:WIDTH*pi];
你这个左右的位宽似乎也不一样,一看你的CODE就。
b变量似乎也没define
正解。
SV中没试过。
