0

8 ビット入力の 1 の数をカウントし、何個含まれているかを出力したいと考えています。私がこれを見つけている方法は非常に粗雑で冗長です。それらを見つける簡単で良い方法があれば知りたいです。私のコードは次のようになります:

module my_8to4bit(in,out);

input [7:0]in;
output [3:0]out;


assign out=(input == 1 || input == 2 || input == 4 || input == 8 || input == 16 || input == 32 || input == 64 || input == 128)?1:
(input == 3 || input == 5 || input == 6 || input == 9 || input == 10 || input == 12 || input == 24 || input == 128)?2:0;

... 8 ビット入力のすべての 1 まで同じです。

それらを見つける簡単な方法はありますか?

4

3 に答える 3

5

どうですか

always @* begin
  out = 0;
  for(i=0;i<8;i=i+1) begin
    out = out + in[i];
  end
end

各ビットに 1 つずつ、合計 8 つの加算器に合成する必要があります。

于 2013-03-03T07:00:00.293 に答える
2

コードを合成する必要がなく、シミュレーターが SystemVerilog 構文をサポートしている場合は、$countonessystem 関数を使用できます。たとえば、IEEE Std 1800-2009 を参照してください。

于 2013-03-03T14:37:10.657 に答える
0

Bit Twiddling Hacksで答えを探すことができます。速度が重要でスペースが問題にならない場合は、256 バイトのルックアップ テーブルを検討してください。それ以外の場合は、おそらくBrian Kernighan の方法を使用します(そして、ルックアップ テーブルより実際に遅いかどうかを測定します。メモリが遅く、CPU が速い場合は、ルックアップ テーブルよりも速い可能性があります)。

于 2013-03-03T05:57:36.160 に答える