VHDLで画像ヒストグラムを計算しようとしています。私は強度値が24ビットで、強度レベルが大きすぎるので、ビン(1920 max)を作成する必要があります。 入力ピクセルごとの強度値とビン値の決定に問題がありますので、ビン値をアドレスとして使用してBRAMのカウントを更新することができます。VHDLでのヒストグラム計算
シミュレーションしながら、私はエラーを取得する:私に教えてくださいビンを計算する別の方法がある場合は反復制限が
に達しました。ありがとう!
declaration--
signal data_in : std_logic_vector(23 downto 0);
signal bin : std_logic_vector(11 downto 0);
signal s_data_in : integer ;
signal s_binsize : integer :=2048;
signal s_bin : integer ;
signal s_bincount : integer :=0 ;
signal s_temp: integer :=2048;
p_clk: process
begin
s_clk <= '0';
while (s_SimuDone /= 'H') loop
wait for C_CLOCK_PERIOD/2;
s_clk <= not s_clk;
end loop;
wait;
end process p_clk;
stimulus: process
begin
data_in <= x"0000ff";
wait for C_CLOCK_PERIOD*10;
data_in <= x"00000f";
wait for C_CLOCK_PERIOD*10;
data_in <= x"000fff";
wait for C_CLOCK_PERIOD*10;
data_in <= x"0fffff";
wait;
end process stimulus;
s_data_in <= to_integer(unsigned (data_in));
bin <= std_logic_vector(to_unsigned(s_bin, 12));
process (s_data_in, s_bincount)
begin
if (s_data_in < s_binsize) then
s_bin <= 0;
else if (s_data_in < s_temp) then
s_bin <= s_bincount;
s_bincount <= 0;
s_temp <= 2048;
else
s_bincount <= s_bincount + 1;
s_temp <= s_temp + s_binsize;
end if;
end if;
end process;
これはあなたが探している答えとは関係ありませんが、2番目のプロセスは実際に合成するRTLの一部であるため、別のエンティティにあるはずです。これは、テストベンチの一部としてヒストグラムを作成しない限りです。しかし、それでも.... – Renato
はい、それは正しいです。私はそれを別にしましたが、ここに示すために私はそうしました。私は1クロックサイクルでアドレスを見つけることができるようにしたいので、そこでclkを追加することはできません。 – user3094049
ok私は古い回答を削除し、新しい回答を追加しました。あなたが望むのは、data_inを2048で除算するだけなので、プロセスは必要ありません。 – Renato