20 |
RISC-Vプロセッサの設計 (3) |
「ハードウェアインタプリター」に食わせる機械語列が必要です。そこで、この記事を参考に、Fibonacciプログラムをコンパイルし機械語化しました。試みにFibonacciが通るための「インタプリター」を書いていきます。前述のとおりこの「インタプリター」は実行ステージが逆アセンブル相当の表示をするだけのものです。
入力するFibonacciのソースは以下のように短いプログラムです。
fibo.c:
int fib(int n) { if(n <= 1) return 1; return fib(n-1) + fib(n-2); } int main() { fib(10); for(;;) {} return 0; }
これをクロスコンパイルしてRISC-Vの命令を作成し、BSVの入力とします。シーケンサの自動生成を利用して1サイクル毎に、命令デコーダに命令を供給します。
Stmt main = seq instr <= 32'h074000ef; instr <= 32'hfe010113; instr <= 32'h00112e23; instr <= 32'h00812c23; instr <= 32'h00912a23; instr <= 32'h02010413; instr <= 32'hfea42623; instr <= 32'hfec42703; instr <= 32'h00100793; instr <= 32'h00e7c663; instr <= 32'h00100793; instr <= 32'h0300006f; instr <= 32'hfec42783; instr <= 32'hfff78793; instr <= 32'h00078513; instr <= 32'hfc9ff0ef; instr <= 32'h00050493; instr <= 32'hfec42783; instr <= 32'hffe78793; instr <= 32'h00078513; instr <= 32'hfb5ff0ef; instr <= 32'h00050793; instr <= 32'h00f487b3; instr <= 32'h00078513; instr <= 32'h01c12083; instr <= 32'h01812403; instr <= 32'h01412483; instr <= 32'h02010113; instr <= 32'h00008067; instr <= 32'hff010113; instr <= 32'h00112623; instr <= 32'h00812423; instr <= 32'h01010413; instr <= 32'h00a00513; instr <= 32'hf7dff0ef; instr <= 32'h0000006f; endseq;
今回はまだデコーダのテストだけなので、PCは実装していません。