Skip to content

Latest commit

 

History

History
59 lines (45 loc) · 3.46 KB

File metadata and controls

59 lines (45 loc) · 3.46 KB

OSECPU rev.f0 Specification

  • rev.f0は、FPGA上で直接実装することを念頭において設計された命令セットです。

何を大事にするのか

  • OSECPUは「セキュリティを重視した命令セット」と「バイトコード密度」が主要な特徴であるから、これを直接サポートしたCPUを実装する。
  • この命令セットは4ビット単位なので、4ビット単位のメモリアクセスをハードウエアでサポートしたい。

セキュリティを重視した命令セットとはなにか

  • ラベル位置にしか飛べない。データはもちろん実行できない。
  • メモリアクセス時の範囲チェックおよびタイプチェックを強制する。

バイトコード密度

  • バイトコードには複数のレベルがある。
  • CPUで直接可変長(hh4)エンコードの命令を実行するのは効率が悪い。
  • そこで、CPUの命令セットとしては固定長のものを新たに設計する。
    • ただし、CPUに入力する命令セットとしては、可変長のバックエンドコード(すでに設計されているもの)を採用する。

参考になるページ

実装する機能

  • ラベルのみにジャンプできる

実装しないがOSECPU-VMで特徴的な機能

構成図

トップレベル

トップレベルブロックダイアグラム

メモリアクセス時のデータフロー

メモリアクセスデータフロー

実行環境と命令セットの詳細

opcode.mdを参照。

起動シーケンス

  • 電源投入後はROMの変換プログラム(位置と範囲は予め設定しておく)が実行される。
    • 電源投入直後のローダ実行用に、CPUは一定のメモリ範囲をコード領域としてラベルテーブルに追加する。
  • その後、ローダがRAM上のバックエンドコードを読み込んで、CPUコードに変換して展開する。
    • ラベルテーブルへ追加する命令(LBSET)もローダが生成する。(プログラム本体の実行に先立って実行される。)
  • 詳細についてはback2cpu.mdを参照のこと。