自分の通っていた小学校のあるある

配列の中の任意の8bitを取り出すのに、
 hoge[fuga:fuga + 8]
と書きましたが、エラーになってしまいました。

配列の添え字には、変数は記述できないのでしょうか?
とすると、他にどの様な書き方があるのでしょうか?
教えてください。よろしくお願いします。
(verilog初心者です)

A 回答 (4件)

1. Verilog2001ならばできます。

相対バス幅指定構文がありますので。

2. Verilog1995での逃げとしては、
hoge[fuga:fuga + 8] と書かないで
{hoge[fuga],hoge[fuga+1],hoge[fuga+2],・・(省略)・・・,hoge[fuga+8]}と書くことです。

試してみてください。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/09/11 01:38

>配列の添え字には、変数は記述できないのでしょうか?


できない。

解決策は、まあ#1様の通りです。
hoge[fuga:fuga + 8]
って簡単に書いてますけど、
これ、もし実現できたとして、どんな感じの回路になるかイメージできますか?
イメージできれば、そのイメージ通りに記述してください。

セレクタ回路はけっこう厄介なんです。
たとえば、メモリなんかでも、情報を記憶しておくメモリ本体よりも、周辺回路(≒セレクタ)のほうが面積が大きいなんてことは、よくあります。

もし、hogeのビット数を可変にしたいとかであれば、Verilog2001以降であれば、generate文が使えます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/11 01:37

すいません訂正します。


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

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

お礼日時:2007/09/11 01:36

私はVHDL派なのでverilogHDLの文法では書けませんが、HDLで記述するのは回路であってプログラムじゃないことを意識してください。


任意の8ビットは回路の動作時に変更すると考えてよいでしょうか?

回路して配列はレジスタなので例えば16ビットあって任意の8ビットを得たいときは、シフトレジスタでクロックを与えて任意のビット数シフトして値を得るか(最大8クロック必要です)。
またはセレクタスイッチ(要するにif文です)で1ビットづつ選択する回路を16ビット分作るかです(8x8個のif文が必要です)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A