私は、累積ヒストグラム法を使用してメディアンフィルタのためのVerilogでいくつかのコードを書いています。ザイリンクスでコードを合成しようとすると、最大1時間処理され、最後に「プログラムがメモリ不足になりました」というエラーが表示されます。コードを改善して合成時間を短縮するにはどうすればよいですか?
私のコードは次のとおりです。
//***** MEDIAN FILTER BY USING CUMULATIVE HISTOGRAM METHOD******//
module medianfilter(median_out,clk,a1,a2,a3,a4,a5,a6,a7,a8,a9);
output median_out;
input [7:0]a1,a2,a3,a4,a5,a6,a7,a8,a9;
integer i,j;
reg[7:0]b[255:0];
reg [7:0]buff[0:8];
input clk;
reg [7:0]median_out;
[email protected](negedge clk)
begin
//**************************************************************************//
for(i=0;i<256;i=i+1) // initilize the memory bins with zeros
b[i]=0;
//*************************************************************************//
buff[0]=a1;
buff[1]=a2;
buff[2]=a3;
buff[3]=a4;
buff[4]=a5;
buff[5]=a6;
buff[6]=a7;
buff[7]=a8;
buff[8]=a9;
for(i=0;i<9;i=i+1) // this loop is for cumulative histogram method
begin
b[buff[i]]=b[buff[i]]+1; // incrementing the value in b[i]th memory address
for(j=0;j<256;j=j+1)
if(j>buff[i])
b[j]=b[j]+1; // incrementing the bins below b[i]th bin
end
//**************************************************************************//
for(i=0;i<256;i=i+1) // loop for finding the median
begin
if(b[i]>4) ///////// condition for checking median
begin
b[i]=1;
median_out=i;
i=256; // loop breaks here
end
end
//*************************************************************************//
end
endmodule
どのように私は、コードの論理合成を行うことができますか?
私は累積ヒストグラム法を使って入力ピクセルをソートする必要があります。私はforループ内のforループの代わりに考えています。どうすれば変更できますか? –
[median filter](https://en.wikipedia.org/wiki/Median_filter)がどのように機能するのか、ヒストグラムや蓄積はありません。あなたの9入力値によると、私はあなたが2-D 3x3メジアンフィルターを使用していると仮定します。すべての9つの値がソートされ、リストの値4が出力として選択されます。平均フィルタを実装する場合、値を累積する必要があり、分割アルゴリズム=>これは大きな遅延があります。しかし、平均!=中央値。 – Paebbels