ROM: 1-PORTの使いかた

参考: 動かしてわかる CPUの作り方10講, pp.256ff.

練習として8ビット×16本のROMを作ってみる。16本なのでアドレスは4ビット。

  1. まずROMの初期化データ(.mif)を作る。mifはmemory initialization file。
    f:id:ti-nspire:20210127151501p:plain:w200

  2. 8ビット×16本。
    f:id:ti-nspire:20210127151544p:plain:w200

  3. こういうテーブルが表示されるので、ここに初期化データを入力して保存する。
    f:id:ti-nspire:20210127151816p:plain:w200

    表の形式、アドレスの書式、初期化データの書式については、このメニューで好きなように調整する。ここでは、テーブルは1列、アドレスは10進数、データは2進数にした。radix、基数、/イディクス/。
    f:id:ti-nspire:20210127151750p:plain:w200

    下のように入力した。
    f:id:ti-nspire:20210128051952p:plain:w100

  4. 今度はROM本体のVHDLを作る。ROM: 1-PORTをダブルクリックする。
    f:id:ti-nspire:20210128054207p:plain:w200

  5. ファイル名を指定する。
    f:id:ti-nspire:20210128054302p:plain:w300

  6. 8ビット×16本。ほかはデフォルトのまま。
    f:id:ti-nspire:20210128054523p:plain:w500

  7. 出力側のクロック入力は今回は使わないので外す。
    f:id:ti-nspire:20210128054649p:plain:w500

  8. 前に作っておいた.mifファイルを指定する。
    f:id:ti-nspire:20210128054844p:plain:w500

  9. デフォルトのまま。
    f:id:ti-nspire:20210128054934p:plain:w500

  10. 生成するファイルを指定する。今回は回路図エディターのシンボルとしても使うので.bsfファイルも選ぶ。
    f:id:ti-nspire:20210128062842p:plain:w500

  11. デフォルトのまま。
    f:id:ti-nspire:20210128055123p:plain:w500

  12. プロジェクトにシンボルが追加された。
    f:id:ti-nspire:20210128055159p:plain:w500

  13. 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)]を選択する。 f:id:ti-nspire:20210128060258p:plain:w500

  14. 適当に配線する。
    f:id:ti-nspire:20210128061415p:plain:w500

  15. 適当にアドレスを設定してからクロックを送り込んで、そのアドレスに対応したデータの読み出されることを確かめる。今アドレスを13番地にしているので、0b 1101 1111が出力されている。
    f:id:ti-nspire:20210128075930p:plain:w80
    f:id:ti-nspire:20210128063056j:plain:w500

    ちょうど8ビット×16本=128ビットだけメモリーが消費された。
    f:id:ti-nspire:20210128110542p:plain