ハードウェア記述言語と検証
上のように8ビットのdの中の1の数を数える記述を論理合成すると、どのような回路になるか。
always @(*) begin
count = 0;
for (i = 0; i < 8; i = i + 1)
count = count + d[i];
end
- A8クロックかけて1ビットずつ数える順序回路になる
- Bループが8回分に展開され、足し算の回路が並んだ組み合わせ回路になる
- Cforループは合成できないので、エラーになる
答えと解説を見る
正解:B. ループが8回分に展開され、足し算の回路が並んだ組み合わせ回路になる
HDLのforループは、ソフトウェアのように同じ回路を繰り返し使うのではなく、論理合成で回数分の回路に展開されます。この例では8回分の足し算の回路が並んだ組み合わせ回路になり、1クロックのうちに全部を計算します。ループの回数が多いと回路が大きく、遅延も長くなるので注意が必要です。時間をかけて少ない回路で計算したいなら、クロックで動く状態機械として書きます。
- A. クロックを使っていないので、時間をかけて数える回路にはなりません。
- B. 正しい。繰り返しの回数が決まっているので展開できます。
- C. 回数が固定のforループは合成できます。