ROM: 1-PORTの使いかた
参考: 動かしてわかる CPUの作り方10講, pp.256ff.
練習として8ビット×16本のROMを作ってみる。16本なのでアドレスは4ビット。
まずROMの初期化データ(.mif)を作る。mifはmemory initialization file。
8ビット×16本。
こういうテーブルが表示されるので、ここに初期化データを入力して保存する。
表の形式、アドレスの書式、初期化データの書式については、このメニューで好きなように調整する。ここでは、テーブルは1列、アドレスは10進数、データは2進数にした。radix、基数、/レイディクス/。
下のように入力した。
今度はROM本体のVHDLを作る。ROM: 1-PORTをダブルクリックする。
ファイル名を指定する。
8ビット×16本。ほかはデフォルトのまま。
出力側のクロック入力は今回は使わないので外す。
前に作っておいた.mifファイルを指定する。
デフォルトのまま。
生成するファイルを指定する。今回は回路図エディターのシンボルとしても使うので.bsfファイルも選ぶ。
デフォルトのまま。
プロジェクトにシンボルが追加された。
MAX 10の場合はConfiguration modeをSingle Compressed Image with Memory Initializationにしておく(こうしないとコンパイルできない。使っているFPGAが上掲のテキストと違うので詳細不明)。
Quartus Primeの[Assignments]メニューから[Device]を選択する。[Device]ダイアログボックスが開くので、その[Device]タブにある[Device and Pin Options]ボタンをクリックする。左ペインの[Category]フィールドにある[Configuration]を選択する。右ペインの[Configuration mode:]ドロップダウンメニューから[Single Compressed Image with Memory Initialization (256Kbits UFM)]を選択する。適当に配線する。
適当にアドレスを設定してからクロックを送り込んで、そのアドレスに対応したデータの読み出されることを確かめる。今アドレスを13番地にしているので、0b 1101 1111が出力されている。
ちょうど8ビット×16本=128ビットだけメモリーが消費された。