在verilog中嵌套for循环,第二个for循环依赖于first for循环的输出

时间:2016-02-27 06:44:16

标签: verilog xilinx-ise

我正在为累积直方图方法开发一个verilog代码,用于中值滤波器。它使用嵌套for循环,第二个for循环的输入依赖于first for循环的输出。问题在于此处。第二个for循环不接受该输入。请帮忙。 代码是

module median(a, b,k,n,h);
    input  [4:0] a;
    output [255:0] b;
    output k,n,h;
    reg [255:0] b;
    reg [255:0]k,n,h;

    always @(a) begin
      for (n=0;n < 256;n=n+1)
        b[n]=0;
      for (n=0;n<=4;n=n+1) begin
        b[a[n]]=b[a[n]]+1;
        h=a[n]+1;
        for ( k = h;k <=255;k = k+1) begin
          b[k]=b[k]+1;
        end
      end
      for (n=0;n<=255 ;n=n+1) begin
        if(b[n]==3)begin
          $display ("the median is %d",n);
        end
      end
    end
 endmodule

1 个答案:

答案 0 :(得分:1)

只看这段代码:

for (n=0;n<=4;n=n+1) begin
    b[a[n]]=b[a[n]]+1;

n是256位,但是这个循环只从0到4 这将从a(5位)中选择一个值,因此我们选择a的第0位到第4位。

a的每个选择都是1位,包含0或1,因此我们在for循环的每次迭代中选择并递增b [0]或b [1]。

然而b也是256位,因此b [0]和b [1]也是1位值,当递增时它们将在1和0之间切换。

我猜测上述行为并非意图,而您实际上想要使用向量:

reg [255:0] b [0:4) ;

b以上有5个可选位置,每个位置保持256位整数。这意味着b [0]将是256位整数,而不是当前示例的1位整数。