MCPU - Minimal CPU for a 32 Macrocell CPLD
Opencoresに「MCPU - Minimal CPU for a 32 Macrocell CPLD 」という、わずか32マクロセルで構成できるCPUのIPがある。
データバス8bit、アドレスバス6bitで、命令は4つだけだ。
ジャンプは条件ジャンプJCC(Jump if Carry Clear)しかなく、演算命令は、NORとADDだけだ。
Mnemonic | Opcode | Description |
---|---|---|
NOR | 00AAAAAA | Accu = Accu NOR mem[AAAAAA] |
ADD | 01AAAAAA | Accu = Accu + mem[AAAAAA], update carry |
STA | 10AAAAAA | mem[AAAAAA] = Accu |
JCC | 11DDDDDD | Set PC to DDDDDD when carry = 0, clear carry |
Accにデータをロードする LDA memは、NOR allone、ADD memの2命令で実現する。(alloneは11111111が記録されているアドレス)
無条件ジャンプ JMP dstはJCC dst,JCC dstの2命令で実現する。JCCが実行されると分岐するしないにかかわらずCarryはクリアされるので、どちらかのJCC dstでジャンプできる。
Macro | Assembler Code | Description |
---|---|---|
CLR | NOR allone | Clear Accu (allone contains 0xFF) |
LDA mem | NOR allone,ADD mem | Load meminto Accu |
NOT | NOR zero | Invert content of Accu (zero contains 0x00) |
JMP dst | JCC dst, JCC dst | Unconditional jump to dst |
JCS dst | JCC *+2, JCC dst | Jump if carry set |
SUB mem | NOR zero, ADD mem, ADD one | Subtract mem from Accu (one contains 0x01) |
久しぶりに見たら、アセンブラとシミュレータがGitHubで公開されていた(https://github.com/cpldcpu/MCPU)のでDLしてみた。
このCPUの論文(mcpu.pdf)には、XilinxのWebPackとXC9536で合成できると書いてあるが、デフォルトの設定でコンパイルすると、Fitでエラーが発生する。
ERROR:Cpld:868 - Cannot fit the design into any of the |
だそうで、Fitのプロパティの Implementation Template を Optimize Density にすると合成できる。
秋月で売ってる XC9536XL-10 VQG44C だと、10.638MHzで動くらしい。
(今気づいたのだが、以前売ってたのは、たしかXC9536だったけどいつの間にかXC9536XLになってる。)
あとは、RAMとクロックがあれば動くが、何か制御しようとすると外付けでI/O必要だ。バッファ(74HC541)とラッチ(74HC574)とアドレスデコーダーで作れるが、アドレスデコーダーはXC9536に納まりそうだ。
(今気づいたのだが、秋月では東芝のTC74HC541APとTIのSN74HC541Nを売っているがSN74HC541Nの方が20円安い)
つづく
« マニュアルなんかじゃ人は育たず | トップページ | 仕事の減らし方 -新世代のプレイングマネジャー- »
「FPGA」カテゴリの記事
- SDR(2025.04.26)
- ADALM2000(4) <変調波を出してみる>(2020.03.16)
- ADALM2000(3) <AWG,OS,SA>(2020.03.01)
- ADALM2000(2) <開けてみた>(2020.02.14)
- ADALM2000 <1台の装置で複数の計測>(2020.02.10)
コメント