公開日:2023/10/21
title.png

27th Season


#27-8 足回りの改定

 Cmod A7ボード(FPGA)を使って開発しているオリジナル16ビットCPUコアMoscoviumに於いて、今回はマイコンにとっての足回り、メモリ関係のブラッシュアップを実行して行きます。

 ショボい中華製PrimerボードのRAMマクロ仕様がヘボかったせいで、うまく構成できなかった足回りを一気に改定してしまいます。

Moscoviumマイコンのメモリ

 前提条件として、Moscoviumマイコンのメモリは以下の様な条件を満たしている必要があります。

 なぜ今このタイミングでメモリ関係の改定なのか?と申しますと、メモリ関係はMoscoviumコア設計当初からリリースしていて、CPUコアに新機能が追加となる度に、継ぎ足し、継ぎ足しで対応してきた経緯があるからです。ある意味、CPUコア側からの無理(無茶)な要求を受けて、歪みが溜まっていました。
 この時点で一気に見直して整理することが今回のテーマとなります。

 以上を踏まえて、命令ROM、命令RAM、メインメモリ(RAM)について、改定🛠️して行こうと思います。

命令ROM

 命令ROMは、Moscoviumで実行するプログラムを格納するROMです。命令ROMに要求される仕様は以下の通りです。

  命令ROM目標仕様:

 都合、命令ROMは、フェッチバス×2(デュアルコア対応)+メモリバスからの疑似3ポートROMとなります。以下図に命令ROMのブロック図と、CPU、バスステートコントローラ(BUSC)周辺のトポロジを示します。

a279_romblk.png

※薄緑の箱はハードマクロ、水色破線はハードマクロとRTLの境界線です。

 疑似3ポートROMですが、本当に同時アクセスが有り得るのは最大2ポートなので、RAMマクロはデュアルポートで充足します。疑似3ポート ⇔ デュアルポート間のインターフェイスはROMラッパが制御して吸収します。

32ビットRAMマクロ

 今回の改定で、32ビット幅のRAMマクロを使いました。その結果、変わってしまったことが一つ……。

 RAMマクロを32ビット幅とすることで、ROMの初期値を設定するためのVerilogメモリ(MEM)ファイルも、32ビットデータに変更する必要が生じてしまいました。

従来の16ビット
MEMファイル
新しい32ビット
MEMファイル
@0000
c080
b806
0802
c0ff
b8f5
c7f0
bf28
7bf8
0fff
0000

@0000
c080b806
0802c0ff
b8f5c7f0
bf287bf8
0fff0000

 これには、アセンブラ(asm_mcvm.olv)で対応済みです。asm疑似命令のオプションに以下を追加してあります。

  asm疑似命令:

※Moscoviumシリーズマクロアセンブラ(asm_mcvm.olv)の実行には、WindowsにOlive+のインストールが必要です。

 Moscoviumの命令は16ビット固定長なので、出力データが32ビット幅になったことで見た目が変わっています。最初はちょっと戸惑うかもしれませんが、情報量・情報の質には変わりありません。

命令RAM

 命令ROMは、RAMマクロを使っているとは言え、機能的にはROMなので、ブートモードに遷移したとき以外、書き込むことができません。
 命令RAM(IRAM;Instruction RAM)は、普通に読み/書きできてメインメモリ(RAM)としても使える、命令フェッチ用RAMユニットです。何らかの通信でプログラムコードを命令RAMにダウンロードしたら、そのプログラムを実行することができます。
 PCなどでは当然の機能なのですが、Moscoviumマイコンはハーバードアーキテクチャなので、フェッチ空間側にRAMをマッピングしておかないと上の様な機能を果たせないため、メインメモリ(RAM)とは別なメモリユニットとして存在しています(下図)。

a156_memap.png

 以下が命令RAMに対する目標仕様です。ほとんど命令ROMと同じですが、メモリバス側から読み出し/書き込みができることが相違点です。

  命令RAM目標仕様:

 下図に命令RAMユニットのブロック図を示します。

a279_iramblk.png

※薄緑の箱はハードマクロ、水色破線はハードマクロとRTLの境界線です。

 現時点では、命令RAMの用途が少なく、使用頻度が低いせいもあって、色々とCPU側の機能拡張に手が回っていなかったメモリユニットです。

 Cmod A7ボードへの移植を機に、歪みの溜まっていた命令RAMユニットを一気に改定してしまいます。

メインメモリ(RAM)

 最後はメインメモリ(RAM)です。フェッチとオペランドアクセスが有り、更にデュアルコアCPUへの対応まで必要だった命令ROMは、複雑な回路でしたが、メインメモリはメモリバスからのアクセスしか無いので、いたってシンプルです。

  メインメモリ(RAM)目標仕様:

 ブロック図は以下の様になります。

a279_ramblk.png

※薄緑の箱はハードマクロ、水色破線はハードマクロとRTLの境界線です。

 シンプルで良きです(1^−^)

デザイン

 Cmod A7ボード用Moscoviumマイコンの設計データ(Vivadoプロジェクト)は、Githubで提供します。以下リンクよりアクセスしてください。

btn_moscovium.png

 ダウンロード方法などについては、トップのREADME.mdをご覧ください。

 デザイン(回路)をCmod A7ボードに書き込む手順については、こちらをご確認ください。


 今回までに、以下のI/Oユニットを移植してリリースしました。

 今回リリースしたI/Oユニットによって、以下の型名が解禁されました。

 ざっとですが、シミュレーションで動作確認してあります。


 今回、メモリ周りの改定によってスーパスケイラ、デュアルコアからの要求事項に対応できたはずですが、Cmod A7ボード(FPGA)を使い始めてから、まだスーパスケイラもデュアルコアも移植できていません。それら機能の検証が現在進行中です。


btn_arduino.png

btn_prev.png btn_next.png

home