Verilog HDLの多次元配列
Verilog HDLでは、
reg [31:0] mem [0:255];
と宣言することによってメモリを表現する。この例は32ビットデータが256個あるメモリである。別の言い方をすればデータが32ビットでアドレスが8ビットのメモリである。このような多次元配列を便利だからと多用していたら、なんとVerilog HDLでは多次元配列はネット型に使えないではないか*1。
本で調べてみると、どうやらVerilog-1995ではネット型での多次元配列はサポートしていないが、Verilog-2001では使えるらしい。そうか、さっきはLeonardoSpectrumに食わせたからな。あれはVerilog-2001をサポートしてないんだった。では試しにVerilog-2001をサポートしているModelSimでやってみると、果たして実行可能であった。
しかし、ModelSimはシミュレーション、LeonardoSpectrumは論理合成、両方使えなくちゃ意味ない。めんどくさいがVerilog-1995で書き直すか。ていうか、Verilog-2001でも入出力ポートに多次元配列使えないのかよ!うーん、スーパースカラープロセッサの設計には多次元配列ないとやってられない気がするのだが。
多次元配列なんて展開して、それぞれに新しい名前をつければ良いのだけど、なんかやる気しない。使い始めたときからそうだが、Verilogはやる気をなくさせる言語*2。
とりあえずシミュレーションができなきゃどうにもならないわけだからVerilog-2001で書いても問題はないのか。シミュレーションが終った頃にはLeonardoも多次元配列をサポートしているかもしれないし。まあ、シミュレーションすら終らない可能性はそうとう高いし・・・