ひでみのアイデア帳

くだらないことなんだけど、忘れないために・・・

なんとなく、RISC-V...

俺々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コード

HDLソースコードは次の3点が候補でとりあえず、一番最初のURLでRV32IMのHDLでZYBOに実装してみた。

https://github.com/ucb-bar/vscale

https://github.com/cliffordwolf/picorv32

https://github.com/qmn/riscv-invicta

GCC Toolchain

当然、これがあったから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あたりを実装しても面白いかも。

などなど・・・