概要
vistaでquartusやってみた。
cpu作ってみた。
cpuの仕様
スタックマシン
スタック長 8word
命令長 16bit
データ長 16bit
アドレス長 12bit
実装メモリー 256word
アセンブラの作成
push
スタックトップに、データを直接積む。
get
メモリーから読み込んで、スタックトップに積む。アドレスを直接指示。
set
スタックトップを、メモリーへ格納。アドレスを直接指示。
jmp
アドレスに飛ぶ。
jz
スタックトップが0なら、アドレスへ飛ぶ。
out
スタックトップをシリアルへ出力。
op
算術計算。加算と比較のみ、実装。
アセンブラでhello_world
push 'h'
out
push 'e'
out
push 'l'
out
push 'l'
out
push 'o'
out
push ' '
out
push 'w'
out
push 'o'
out
push 'r'
out
push 'l'
out
push 'd'
out
push '!'
out
loop:
jmp loop
命令セット
ニーモニック | bit15 | bit14 | bit13 | bit12 | bit11 | bit10 | bit9 | bit8 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | 16進 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
push I | 0 | 0 | 0 | 1 | I | I | I | I | I | I | I | I | I | I | I | I | 1000+I |
get A | 0 | 0 | 1 | 0 | A | A | A | A | A | A | A | A | A | A | A | A | 2000+A |
set A | 0 | 0 | 1 | 1 | A | A | A | A | A | A | A | A | A | A | A | A | 3000+A |
jp A | 0 | 1 | 0 | 0 | A | A | A | A | A | A | A | A | A | A | A | A | 4000+A |
jz A | 0 | 1 | 0 | 1 | A | A | A | A | A | A | A | A | A | A | A | A | 5000+A |
jnz A | 0 | 1 | 1 | 0 | A | A | A | A | A | A | A | A | A | A | A | A | 6000+A |
out | 1 | 1 | 1 | 0 | - | - | - | - | - | - | - | - | - | - | - | - | E000 |
+ | 1 | 1 | 1 | 1 | - | - | - | - | - | - | - | 0 | 0 | 0 | 0 | 0 | F000 |
> | 1 | 1 | 1 | 1 | - | - | - | - | - | - | - | 0 | 0 | 0 | 0 | 1 | F001 |
< | 1 | 1 | 1 | 1 | - | - | - | - | - | - | - | 0 | 0 | 0 | 1 | 0 | F002 |
ハンドアセンブル
mem[0] = 16'h1068;//push 'h'
mem[1] = 16'he000;//out
mem[2] = 16'h1065;//push 'e'
mem[3] = 16'he000;//out
mem[4] = 16'h106c;//push 'l'
mem[5] = 16'he000;//out
mem[6] = 16'h106c;//push 'l'
mem[7] = 16'he000;//out
mem[8] = 16'h106f;//push 'o'
mem[9] = 16'he000;//out
mem[10] = 16'h1020;//push ' '
mem[11] = 16'he000;//out
mem[12] = 16'h1077;//push 'w'
mem[13] = 16'he000;//out
mem[14] = 16'h106f;//push 'o'
mem[15] = 16'he000;//out
mem[16] = 16'h1072;//push 'r'
mem[17] = 16'he000;//out
mem[18] = 16'h106c;//push 'l'
mem[19] = 16'he000;//out
mem[20] = 16'h1064;//push 'd'
mem[21] = 16'he000;//out
mem[22] = 16'h1021;//push '!'
mem[23] = 16'he000;//out
mem[24] = 16'h4018;//jmp 24
環境
windows vista 32bit
quartus ii v13.0
ep2c5t144ボード
コンパイル結果
実行結果
以上。