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



我正在为累积直方图方法开发一个 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 位整数。

最新更新