俺々CPUって、別に作るのは何も難しくない。 ただ、俺々CPUを作るのもいいんだけど、CPUって作ったらコードを動かさなきゃ意味ないし、その動かすコードをHexで書き続けることなんてできない。 最初のデバッグ時はHexで書くかもしれないが使い続けるのであれば、高級言語を使いたい。 Hexコードでしか動かないCPUって、結局、「わぁ〜い、できたぁ〜、動いたぁ〜、おしまぁ〜い」になりかねない。
以前、俺々CPUを作ろうとしてbinutilsやnewlibに手を入れてGCCを対応させようとしたけど、途中までやって面倒だったからやめた。
GCCが対応してて、合成な命令セットが用意されているCPUとかになるとこれまた作るのが面倒なんだけど、MicroBlaze命令セットだったらGCC Toolchainもあるし、MicroBlaze命令セットで作ろうとしたこともあった。 ただ、MicroBlazeMCSもあったし、作る意味もなかったのやめた。
システム作るのってけっこう、面倒・・・
そこで次はRISC-Vって・・・
RISC-VはI、D-I/FがAHBなのでZynqにも繋げやすいし楽そうなので・・・
まぁ、楽したいので使えるもので試してみようってことです。
HDLソースコードは次の3点が候補でとりあえず、一番最初のURLでRV32IMのHDLでZYBOに実装してみた。
https://github.com/ucb-bar/vscale
https://github.com/cliffordwolf/picorv32
https://github.com/qmn/riscv-invicta
当然、これがあったからRISC-Vを試したわけです。
とりあえず、ここを読めばツールチェーンが作れます。
https://riscv.org/software-tools/risc-v-gnu-compiler-toolchain/
% git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
% cd riscv-gnu-toolchain
% git submodule update --init --recursive
まぁ、1行目の引数で自動でやってくれるのですが、念の為。
Ubuntuの場合は次のパッケージも必要です。
% sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc
とりあえず、32bitのコンパイラも欲しかったのでmultilibを選択してみた。
% ./configure --prefix=/opt/riscv --enable-multilib
% make linux
RV32IMもZYBO向けにインプリメントできたし、gccのクロスコンパイル環境もできたし・・・
って、ところでタイムオーバ(^-^;
スキマ時間だけでは検証する時間まで取れなかった。
命令セットが単純でGCCが用意されていれば、何でも良かったのですが本題はこのRISC-Vを元にハードウェア・タスクエンジンを実装して、ハードウェア・リアルタイムOS+CPUとついでにマルチタスク付きってのを作りたい。
ハードウェア・タスクエンジン自体は作って放置しているんだけど、RISC-Vのソースコードを見てみたら、ペタペタ貼り付けやすそうだったので貼り付けてみようかなぁ〜と考えている。
ついでだから、μT-Kernelあたりを実装しても面白いかも。
などなど・・・