微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > HELP!错在哪儿?

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中没试过。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top