вложенные циклы for в verilog, что второй цикл 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

person Bharath Kotari    schedule 27.02.2016    source источник
comment
Это комбинаторный цикл, который для симулятора будет выполняться за 0 раз, но у вас есть счетчик цикла n в качестве выхода, в моделировании это всегда будет выглядеть как максимальное значение. Я бы рекомендовал писать как синхронизированный процесс и использовать несколько тактов для вычисления результата.   -  person Morgan    schedule 27.02.2016


Ответы (1)


Просто взглянув на этот участок кода:

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

n составляет 256 бит, но для этого цикла идет только от 0 до 4.
Это выбирает значение из (5 бит), поэтому мы выбираем биты от 0 до 4 из a.

Каждый выбор a — это 1 бит, содержащий либо 0, либо 1, поэтому мы выбираем и увеличиваем b[0] или b[1] на каждой итерации цикла for.

Однако b также является 256-битным, поэтому b[0] и b[1] также являются 1-битными значениями, при увеличении которых они будут переключаться между 1 и 0.

Я предполагаю, что приведенное выше поведение не предназначено и что вы действительно хотите использовать векторы:

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

Над b есть 5 выбираемых позиций, каждая из которых содержит 256-битное целое число. Это означает, что b[0] будет 256-битным целым числом, а не 1-битным целым числом, как в вашем текущем примере.

person Morgan    schedule 27.02.2016