#概要
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ボード
#コンパイル結果
#実行結果
以上。