• ベストアンサー

verilogで配列の任意の8bitを取り出す方法

配列の中の任意の8bitを取り出すのに、  hoge[fuga:fuga + 8] と書きましたが、エラーになってしまいました。 配列の添え字には、変数は記述できないのでしょうか? とすると、他にどの様な書き方があるのでしょうか? 教えてください。よろしくお願いします。 (verilog初心者です)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

1. Verilog2001ならばできます。相対バス幅指定構文がありますので。 2. Verilog1995での逃げとしては、 hoge[fuga:fuga + 8] と書かないで {hoge[fuga],hoge[fuga+1],hoge[fuga+2],・・(省略)・・・,hoge[fuga+8]}と書くことです。 試してみてください。

fugafugahogehoge
質問者

お礼

ありがとうございます。 すごく参考になりました!

その他の回答 (3)

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.3

>配列の添え字には、変数は記述できないのでしょうか? できない。 解決策は、まあ#1様の通りです。 hoge[fuga:fuga + 8] って簡単に書いてますけど、 これ、もし実現できたとして、どんな感じの回路になるかイメージできますか? イメージできれば、そのイメージ通りに記述してください。 セレクタ回路はけっこう厄介なんです。 たとえば、メモリなんかでも、情報を記憶しておくメモリ本体よりも、周辺回路(≒セレクタ)のほうが面積が大きいなんてことは、よくあります。 もし、hogeのビット数を可変にしたいとかであれば、Verilog2001以降であれば、generate文が使えます。

fugafugahogehoge
質問者

お礼

できないんですね。 分かりました。 明確な回答ありがとうございます。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

すいません訂正します。 >またはセレクタスイッチ(要するにif文です)で1ビットづつ選択する回路を16ビット分作るかです(8x8個のif文が必要です)。 if文は9個で良いです。 正しくは↓ またはセレクタスイッチ(要するにif文です)で8ビットづつ選択する回路を16ビット分作るかです(9個のif文が必要です)。

fugafugahogehoge
質問者

お礼

ありがとうございます。 参考になりました。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

私はVHDL派なのでverilogHDLの文法では書けませんが、HDLで記述するのは回路であってプログラムじゃないことを意識してください。 任意の8ビットは回路の動作時に変更すると考えてよいでしょうか? 回路して配列はレジスタなので例えば16ビットあって任意の8ビットを得たいときは、シフトレジスタでクロックを与えて任意のビット数シフトして値を得るか(最大8クロック必要です)。 またはセレクタスイッチ(要するにif文です)で1ビットづつ選択する回路を16ビット分作るかです(8x8個のif文が必要です)。

関連するQ&A