在 verilog 中嵌套 for 循环,第二个 for 循环取决于第一个 for 循环的输出

nested for loops in verilog that second for loop depends upon output of first for loop

我正在为中值滤波器开发累积直方图方法的 verilog 代码。它使用嵌套 for 循环,第二个 for 循环的输入取决于第一个 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

只看这段代码:

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 的每次选择都是包含 0 或 1 的 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 位整数。