QUARTUSでBRAM(Block Ram)を生成する
初めてQUARTUSで回路設計をしました.Quartusは公式ドキュメントが充実してるし,日本語版もあるし素晴らしいと思ったらドキュメントが2007,2011とかで全然仕様が変わっていて却って混乱を招くように感じました.
##BRAM生成方法
QUARTUSではbramの生成に2種類方法があるようです.
一つはverilogコード内で
(* ramstyle = "M-RAM" *) reg [7:0] b_memory[0:127];
のように宣言する方法.
また下記のように種類がいくつかあるようです.
M-RAM : ブロックRAM
M4K : M4KブロックRAM
M512 : M512ブロック
logic : 通常のロジックセル
等々...
(http://cpu-labs.com/verilog_synth_technic)
この種類に関しても曲者で,公式のドキュメントを参照すると,対応しているデバイスファミリとそうでないものがあります.仕様上,ここら辺を参照しながらでないと論理合成時にエラーが起きてBRAMができてくれません.(エラーメッセージは忘れました.)
(https://www.intel.co.jp/content/dam/altera-www/global/ja_JP/pdfs/literature/ug/ug_ram_rom_j.pdf)
二つ目のBRAM生成の方法としてQUARTUS内の標準機能IPカタログを利用することです.
IPカタログ>Library>Basic Function > On Chip Memory>RAM:~
を選択することでUI上ではBRAMのコードを生成できるようです.
設定の際に参考にしたページ(http://japanese.sugawara-systems.com/tutorial/tutorial/sram.htm)
紛らわしいことにドキュメントが古いせいか(20200529現在)MEGAFUNCTIONWIZARDという謎の言葉が,どのドキュメントを見ても出てくるので注意.
### 反省
自分はMAX10というデバイスファミリを利用予定だったのでblock memoryが載っていることを下記公式ページで確認したうえで一つ目の方法でBRAM生成を行おうとしたのですがデバイスファミリが非対応であるというエラーメッセージが出続け発狂しそうでした.
(https://www.intel.co.jp/content/dam/www/programmable/us/en/pdfs/literature/pt/max-10-product-table.pdf)
下記ドキュメントからはM9K式のブロックメモリを搭載していること等も確認できました.しかし以下のコマンドでも非対応ですのエラーが出るのです.
(* ramstyle = "M9K" *) reg [7:0] b_memory[0:127];
(https://www.intel.co.jp/content/dam/altera-www/global/ja_JP/pdfs/literature/hb/max-10/ug_m10_memory_j.pdf)
理由はわかりませんでいたが結局IP catalogからM9K BRAMを生成できました,やはり公式以外の文献が少なくて苦労しました.
追記:HW初心者でQUARTUSも初めて触ったので,ちぐはぐなことを言っていたらご指摘ください.