OSECPU_FPGA
の編集
http://osecpu.osask.jp/wiki/?OSECPU_FPGA
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
BracketName
FormattingRules
FrontPage
Fulyn
Fulyn-v2
Fulyn_Samples
Help
InterWiki
InterWikiName
InterWikiSandBox
K
KOR_PIT8254
KWVM.NET
Liva
MANA
MenuBar
OSECPU_FPGA
PG_MANA
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SandBox
WikiEngines
WikiName
WikiWikiWeb
YukiWiki
hikalium
hikarupsp
hikarupsp_ELCHNOS
hikarupsp_ELCHNOS_IDE
hikarupsp_FrontEndCode
hikarupsp_WebCPU-VM
hikarupsp_WebCPU-VM_internal
hikarupsp_study_hh4
impressions
impressions0000
jpag0000
jpag0001
jpag0002
jpag0003
jpag0004
jpag0005
lambdalice
mandel59
members
memo0000
memo0001
memo0002
memo0003
memo0004
memo0005
memo0006
memo0007
memo0008
memo0009
memo0010
osask
osecpu4android
page0000
page0001
page0002
page0003
page0004
page0005
page0006
page0007
page0008
page0009
page0010
page0011
page0012
page0013
page0014
page0015
page0016
page0017
page0018
page0019
page0020
page0021
page0022
page0023
page0024
page0025
page0026
page0027
page0028
page0029
page0030
page0031
page0032
page0033
page0034
page0035
page0036
page0037
page0038
page0039
page0040
page0041
page0042
page0043
page0044
page0045
page0046
page0047
page0048
page0049
page0050
page0051
page0052
page0053
page0054
page0055
page0056
page0057
page0058
page0059
page0060
page0061
page0062
page0063
page0064
page0065
page0066
page0067
page0068
page0069
page0070
page0071
page0072
page0073
page0074
page0075
page0076
page0077
page0078
page0079
page0080
page0081
page0082
page0083
page0084
page0085
page0086
page0087
page0088
page0089
page0090
page0091
page0092
page0093
page0094
page0095
page0096
page0097
page0098
page0099
page0100
page0101
page0102
page0103
page0104
page0105
page0106
page0107
page0108
page0109
pagenames
populars
seccamp2013
seccamp2014
seccamp2017
ttwilb
ttwilb-asmi
yao
* OSECPU-VMをFPGAに移植しよう by [[hikalium]], 2017-04-17 ** 関連ページ - 仕様まとめ -- https://github.com/osecpu/spec/blob/master/f0/index.md - 開発ブログ -- http://hikalium.hatenablog.jp/ ** 日次ログ ** 2017-05-22 レビューありがとうございました。 *** 現在の状況 形式的記述を現在追加中。 ブロックダイアグラムを追加した。 https://github.com/osecpu/spec/blob/master/f0/index.md メモリアクセス時の各テーブル・レジスタファイル間のデータフローについても別途図示した。 データのロード・ストアについて 先週までは書き込みも各データ型に合わせた幅で行う予定だったが、それだと32bit以外のサイズのときに2回のメモリアクセスが必要になるため、避けたいと思った。 ということで結局、実際のメモリへの読み書きは32bit単位でのみ行うことになった。 32bit未満のデータに関しては、ローダで32bit幅に拡張する。ただし、データ幅の検査と、ポインタとメモリのデータ・タイプ一致検査は行う。 ただし、読み込みに関しては、ローダでの変換を支援するため、32bit単位でない読み込みをハードウエアで支援する。 LMEMCNVという命令を新設し、この目的に使用する。この命令は、設定されたデータタイプでメモリ領域がパックされていると考えて、アクセスしてくれる。レジスタ代入時に自動的に符号拡張する。 この回路自体は前回までにすでに設計済みなので問題はない。 *** 次回までの目標 まずは形式的記述を完全にする。そして実装にとりかかる。 実装の流れとしては、最初は単純な32bitCPUを構成して、それにチェック部分・メモリアクセス支援部分を付け足す形になる。 次回までに各コンポーネントをVerilogで記述してFPGA上に書き込んでみて、意図したとおり動作するかを確認する。 ALUの遅延がどうなるのかわかっていないので(特に除算命令が不穏)、次々回までにそれを試して調べてみる。 こういう場合は各演算の種類に合わせてウェイトを可変にするというので問題ないか? ** 2017-05-15 *** GW前の進捗:命令セットをまとめたページを作成した。 - https://github.com/osecpu/spec/blob/master/f0/opcode.md *** GW期間中の進捗:RTLレベル設計(途中) - RTLレベルの設計を進めている。これを通して、いくつか命令セットの仕様を変更した。 -- 整数レジスタ:64bit -> 32bit --- メモリ(外部・内部とも)のデータ幅を32bitにしたかった。 --- もし64bitのデータ取得を許してしまうと、2回フェッチしなければならず複雑になるため避けた。 -- 同様の理由で、ポインタのデータ型も32の約数のbit数に制限することにした。 -- -> これらの処理を行うデータデコーダの設計は終わっている。 -- https://github.com/osecpu/spec/raw/master/f0/schem/datadecoder.pdf - 各コンポーネントの仕様も固まってきたが、 - 転送表の作成で時間がかかっている。SoCの授業で習ったような方法で転送表をつくれば大丈夫か?もっとよい方法がある? - まだ初心者でわからないところも多いので、並行してVerilogでの実装を始めつつ仕様を詰めていくことにしたい。 - IOの件 メモリマップドIOにしようとしている。ただ、メモリマップドIOをどのように記述すればいいのかわかっていないので調査する。 *** 報告事項 - セキュリティ・キャンプで使うFPGAボードが決定した -- Cyclone IV EP4CE -- https://www.aliexpress.com/item/FPGA-development-board-ALTERA-IV-EP4CE-four-generations-NIOSII-send-send-remote-control-to-send-video/32657715247.html -- ボードのドキュメントが中国語のため、載っているデバイスについては要調査(デバイスリストとピン配置のファイルは持っている) ** 2017-05-10 - 命令セットの設計を多少見直した。RTLレベルの設計に差し掛かっている。 -- レジスタ幅を32bitにした。メモリ幅と揃えたかったため。 ** 2017-04-24 *** ここまでの進捗 - CPU向け命令セットの設計はほとんどできた。 -- ラベルのある場所にしか飛べず、ポインタの型チェックと範囲チェックが強制されるという部分をメインの実装ポイントとする。 --- 範囲チェックはハードウエア的に行う予定。 -- CPUの実行が開始すると、ROMに書かれたローダプログラムが起動し、外部メモリからOSECPUのコード(VM向けのもの)を読み込んで、まずラベルのチェックをする。 --- 読み込んだラベルに相当するメモリ領域を作成するバイナリをまず生成する。 --- その後、プログラム本体とデータ領域を、CPU向けに変換しつつ読み込む。 -- 直接メモリ番地を操作できる命令は、ローダしか実行できないのでセキュアである。 -- プログラムの終端は、終端命令をバックエンドに追加してそれにより判定する。 -- 変換が終了したら、変換後のバイナリにジャンプする。 - 開発環境の構築も終わった -- Quartus Prime Liteを使う(旧Quartus II WebPack) -- 自分のコンピューターは非力なので、コンパイルサーバーを家に立てた。 - ブロック図を書き始めた。 *** これからすること - ブロック図を完成させる。 - 外部RAMをFPGAから操作する方法を調査・試してみる。 - シリアル通信は絶対に実装するので、FPGAからどのように操作するのか、命令セットからどのように操作するかを調査して試す。 - ラベルテーブルの容量をどうするか、FPGAの内部メモリ容量との兼ね合いで決める。 -- 現在は4096エントリ分の予定。 ** 2017-04-17 このページを作成 CPUの仕様をどのようにするか考えているところ。
タイムスタンプを変更しない
* OSECPU-VMをFPGAに移植しよう by [[hikalium]], 2017-04-17 ** 関連ページ - 仕様まとめ -- https://github.com/osecpu/spec/blob/master/f0/index.md - 開発ブログ -- http://hikalium.hatenablog.jp/ ** 日次ログ ** 2017-05-22 レビューありがとうございました。 *** 現在の状況 形式的記述を現在追加中。 ブロックダイアグラムを追加した。 https://github.com/osecpu/spec/blob/master/f0/index.md メモリアクセス時の各テーブル・レジスタファイル間のデータフローについても別途図示した。 データのロード・ストアについて 先週までは書き込みも各データ型に合わせた幅で行う予定だったが、それだと32bit以外のサイズのときに2回のメモリアクセスが必要になるため、避けたいと思った。 ということで結局、実際のメモリへの読み書きは32bit単位でのみ行うことになった。 32bit未満のデータに関しては、ローダで32bit幅に拡張する。ただし、データ幅の検査と、ポインタとメモリのデータ・タイプ一致検査は行う。 ただし、読み込みに関しては、ローダでの変換を支援するため、32bit単位でない読み込みをハードウエアで支援する。 LMEMCNVという命令を新設し、この目的に使用する。この命令は、設定されたデータタイプでメモリ領域がパックされていると考えて、アクセスしてくれる。レジスタ代入時に自動的に符号拡張する。 この回路自体は前回までにすでに設計済みなので問題はない。 *** 次回までの目標 まずは形式的記述を完全にする。そして実装にとりかかる。 実装の流れとしては、最初は単純な32bitCPUを構成して、それにチェック部分・メモリアクセス支援部分を付け足す形になる。 次回までに各コンポーネントをVerilogで記述してFPGA上に書き込んでみて、意図したとおり動作するかを確認する。 ALUの遅延がどうなるのかわかっていないので(特に除算命令が不穏)、次々回までにそれを試して調べてみる。 こういう場合は各演算の種類に合わせてウェイトを可変にするというので問題ないか? ** 2017-05-15 *** GW前の進捗:命令セットをまとめたページを作成した。 - https://github.com/osecpu/spec/blob/master/f0/opcode.md *** GW期間中の進捗:RTLレベル設計(途中) - RTLレベルの設計を進めている。これを通して、いくつか命令セットの仕様を変更した。 -- 整数レジスタ:64bit -> 32bit --- メモリ(外部・内部とも)のデータ幅を32bitにしたかった。 --- もし64bitのデータ取得を許してしまうと、2回フェッチしなければならず複雑になるため避けた。 -- 同様の理由で、ポインタのデータ型も32の約数のbit数に制限することにした。 -- -> これらの処理を行うデータデコーダの設計は終わっている。 -- https://github.com/osecpu/spec/raw/master/f0/schem/datadecoder.pdf - 各コンポーネントの仕様も固まってきたが、 - 転送表の作成で時間がかかっている。SoCの授業で習ったような方法で転送表をつくれば大丈夫か?もっとよい方法がある? - まだ初心者でわからないところも多いので、並行してVerilogでの実装を始めつつ仕様を詰めていくことにしたい。 - IOの件 メモリマップドIOにしようとしている。ただ、メモリマップドIOをどのように記述すればいいのかわかっていないので調査する。 *** 報告事項 - セキュリティ・キャンプで使うFPGAボードが決定した -- Cyclone IV EP4CE -- https://www.aliexpress.com/item/FPGA-development-board-ALTERA-IV-EP4CE-four-generations-NIOSII-send-send-remote-control-to-send-video/32657715247.html -- ボードのドキュメントが中国語のため、載っているデバイスについては要調査(デバイスリストとピン配置のファイルは持っている) ** 2017-05-10 - 命令セットの設計を多少見直した。RTLレベルの設計に差し掛かっている。 -- レジスタ幅を32bitにした。メモリ幅と揃えたかったため。 ** 2017-04-24 *** ここまでの進捗 - CPU向け命令セットの設計はほとんどできた。 -- ラベルのある場所にしか飛べず、ポインタの型チェックと範囲チェックが強制されるという部分をメインの実装ポイントとする。 --- 範囲チェックはハードウエア的に行う予定。 -- CPUの実行が開始すると、ROMに書かれたローダプログラムが起動し、外部メモリからOSECPUのコード(VM向けのもの)を読み込んで、まずラベルのチェックをする。 --- 読み込んだラベルに相当するメモリ領域を作成するバイナリをまず生成する。 --- その後、プログラム本体とデータ領域を、CPU向けに変換しつつ読み込む。 -- 直接メモリ番地を操作できる命令は、ローダしか実行できないのでセキュアである。 -- プログラムの終端は、終端命令をバックエンドに追加してそれにより判定する。 -- 変換が終了したら、変換後のバイナリにジャンプする。 - 開発環境の構築も終わった -- Quartus Prime Liteを使う(旧Quartus II WebPack) -- 自分のコンピューターは非力なので、コンパイルサーバーを家に立てた。 - ブロック図を書き始めた。 *** これからすること - ブロック図を完成させる。 - 外部RAMをFPGAから操作する方法を調査・試してみる。 - シリアル通信は絶対に実装するので、FPGAからどのように操作するのか、命令セットからどのように操作するかを調査して試す。 - ラベルテーブルの容量をどうするか、FPGAの内部メモリ容量との兼ね合いで決める。 -- 現在は4096エントリ分の予定。 ** 2017-04-17 このページを作成 CPUの仕様をどのようにするか考えているところ。
テキスト整形のルールを表示する