三浦/TINYCPU/CPU
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[三浦/TINYCPU]]
#contents
*仕様 [#pc9ded33]
-スタックマシンアーキテクチャ。
-マルチサイクル版。
-データサイズは16-bit。
-アドレスサイズは12-bit。
-とにかく動く物。性能は二の次。
**命令セット [#i4339e7d]
|アセンブラ|動作|
|HALT|CPUの動作を停止させる|
|PUSH I|符号付き12-bitの即値をスタックにプッシュする|
|PUSH A|メモリA番地の値をスタックにプッシュする|
|POP A|スタック・トップの値をメモリA番地に格納する|
|JMP A|A番地に強制ジャンプ|
|JZ A|スタック・トップが0の時、A番地にジャンプする|
|JNZ A|スタック・トップが0でない時、A番地にジャンプする|
|ADD|スタック・トップとその次の値を加算し、スタック・トップにプッシュする|
|SUB|スタック・トップとその次の値を減算し、スタック・トップにプッシュする|
|SHL|SHift Left。b(トップの次の値)<< a(スタック・トップ)|
|SHR|SHift Right。b>>a|
|BAND|Bit AND。a&b|
|BOR|Bit OR。a OR b|
|BXOR|Bit XOR|
|AND||
|OR||
|EQ|EQual。stack top = (a==b)? 1:0|
|NE|Not Equal。stack top = (a !=b)? 1:0|
|GE|Greater Equal。stack top = (a=<b)? 1:0|
|LE|Less Equal。stack top = (a=>b)? 1:0|
|GT|Greater Than。stack top = (a<b)? 1:0|
|LE|Less Than。stack top = (a>b)? 1:0|
|NEG|NEGative。-a|
|BNOT|Bit NOT。|
|NOT|stack top = (a==0)? 1:0|
*ブロック図 [#h4044c3b]
CENTER:&ref(三浦/TINYCPU/CPU/TINYCPU.png,60%);
*デモ [#u5ca5937]
-0から9の総和。なぜか0から。
**アセンブラ [#m1806f7d]
@00 PUSH A
@01 PUSH 0
@02 PUSH 0
@03 POP @100
@04 POP @101
@05 POP @102
@06 PUSH @101
@07 PUSH 1
@08 PUSH @101
@09 PUSH @100
@0A ADD
@0B POP @100
@0C ADD
@0D POP @101
@0E PUSH @101
@0F PUSH @102
@10 LT
@11 JNZ @06
@12 JMP @12
-In-System Memory Content Editorを使用して、命令をメモリに書き込む。
CENTER:&ref(三浦/TINYCPU/CPU/TINY_Demo00_01.PNG,50%);
-実行後のメモリ内部
CENTER:&ref(三浦/TINYCPU/CPU/TINY_Demo00_02.PNG,50%);
*評価 [#r055943c]
-FPGA:Altera DE2-70 Cyclone II (EP2C70F896C6N)
-Tool:Altera Quartus II 9.0
-Balanced Optimization
|LEs|Registers|Memory bits|Frequency|
|772|287|131,072|130.02MHz|
----
#comment
終了行:
[[三浦/TINYCPU]]
#contents
*仕様 [#pc9ded33]
-スタックマシンアーキテクチャ。
-マルチサイクル版。
-データサイズは16-bit。
-アドレスサイズは12-bit。
-とにかく動く物。性能は二の次。
**命令セット [#i4339e7d]
|アセンブラ|動作|
|HALT|CPUの動作を停止させる|
|PUSH I|符号付き12-bitの即値をスタックにプッシュする|
|PUSH A|メモリA番地の値をスタックにプッシュする|
|POP A|スタック・トップの値をメモリA番地に格納する|
|JMP A|A番地に強制ジャンプ|
|JZ A|スタック・トップが0の時、A番地にジャンプする|
|JNZ A|スタック・トップが0でない時、A番地にジャンプする|
|ADD|スタック・トップとその次の値を加算し、スタック・トップにプッシュする|
|SUB|スタック・トップとその次の値を減算し、スタック・トップにプッシュする|
|SHL|SHift Left。b(トップの次の値)<< a(スタック・トップ)|
|SHR|SHift Right。b>>a|
|BAND|Bit AND。a&b|
|BOR|Bit OR。a OR b|
|BXOR|Bit XOR|
|AND||
|OR||
|EQ|EQual。stack top = (a==b)? 1:0|
|NE|Not Equal。stack top = (a !=b)? 1:0|
|GE|Greater Equal。stack top = (a=<b)? 1:0|
|LE|Less Equal。stack top = (a=>b)? 1:0|
|GT|Greater Than。stack top = (a<b)? 1:0|
|LE|Less Than。stack top = (a>b)? 1:0|
|NEG|NEGative。-a|
|BNOT|Bit NOT。|
|NOT|stack top = (a==0)? 1:0|
*ブロック図 [#h4044c3b]
CENTER:&ref(三浦/TINYCPU/CPU/TINYCPU.png,60%);
*デモ [#u5ca5937]
-0から9の総和。なぜか0から。
**アセンブラ [#m1806f7d]
@00 PUSH A
@01 PUSH 0
@02 PUSH 0
@03 POP @100
@04 POP @101
@05 POP @102
@06 PUSH @101
@07 PUSH 1
@08 PUSH @101
@09 PUSH @100
@0A ADD
@0B POP @100
@0C ADD
@0D POP @101
@0E PUSH @101
@0F PUSH @102
@10 LT
@11 JNZ @06
@12 JMP @12
-In-System Memory Content Editorを使用して、命令をメモリに書き込む。
CENTER:&ref(三浦/TINYCPU/CPU/TINY_Demo00_01.PNG,50%);
-実行後のメモリ内部
CENTER:&ref(三浦/TINYCPU/CPU/TINY_Demo00_02.PNG,50%);
*評価 [#r055943c]
-FPGA:Altera DE2-70 Cyclone II (EP2C70F896C6N)
-Tool:Altera Quartus II 9.0
-Balanced Optimization
|LEs|Registers|Memory bits|Frequency|
|772|287|131,072|130.02MHz|
----
#comment
ページ名: