++ 8051をつくる ++ 



 前置き・・・

おそらく、電子回路を作ったことがあるヒトなら、1度は「自分でCPUを作ってみたい!」と思ったことがるのではないでしょうか?
昨今のFGPA(とHDL)の進化はスゴイもので、HDLを使えば自前のCPUくらいはインプリメントできそうです。
目標はあくまでも8051ライクなCPUの実装です。仕事ではありませんので、実装が難しそうな仕様は(とりあえず)独断でバッサリ割愛しつつも、多少は実用的な8051コアの実現を目指します。
8051を選んだ理由は、下記のとおりです。

 C言語の開発環境が用意に入手可能 
中でも KEIL と SDCC の存在は魅力です。
このトシでフルアセンブラでっていうのは体力的にツライですから・・


 
EZ-USBを使ったことがあるので8051がスキ
ひところ、電子工作の世界では、EZ-USB がHOTでした。
このCPUはライタも必要なく、開発環境もフリーで入手可能、Cypressのドキュメントも充実、そしてそして先人たちの凄いパワーと国内の圧倒的な情報量により、私でもなんとか扱う事ができたCPUでした。このCPUに8051コアが積まれていました。

 
ソフトエミュレータ(ソース公開)の存在
海外には幾つもこのCPUのエミュレータが公開されています。ソースの公開されているものも結構あります。
こういったものが利用できるとデバッグや細かい仕様の解析がラクです。
あくまでもラクして自己満足、なのです。


 開発環境

HDLはVerilogです。そしてシミュレータは
 Icarus Verilog

波形ビューアは
 gtkwave(WIn32版)

です。初めて使ってみましたが、フリーとはいえ十分実用性があります。
コチラにインストールなどの説明があります。
gtkwaveは最初はどうにもダメかな?と思いましたが、カスタマイズをすればかなりイケることが分かりました。
参照しているDIRに、 gtkwave.ini というカスタマイズファイルを置いておくと自動的に読み込んで表示をカスタマイズしてくれます。
これにより、信号名のフルパス表示をやめたり、信号の表示色を変えたりできます。
また、表示する信号の定義ファイルはプレーンテキストなので、自由に編集できます。テキストエディタで出来る分だけ、この方がラクで早いですね。

私が使っているgtkwave.iniを置いておきます。何かの役に立てば・・・
 gtkwave.ini

ついでに、秀丸用Verilogハイライト定義ファイル(自家製なのでテキトーです。)
 verilog2.hilight

 主な仕様

 1マシンサイクル(MC)は6クロック(オリジナルは12クロック)
 DIV以外のすべてのインストラクションは1MC(DIVは2MC)(オリジナルは1~3)
 タイマモードは0,1,2のみ
 UARTはモード2のみ
 XRAM、コードROMは積めるだけ(笑)、iRAMは256バイト
 できればUARTからROMを書き換えてリセットできるように
 サイズターゲットはCyclone-EP1C3に入る程度

 進行状況

現在、コア部分はほぼインプリメント完了。(デバッグはソコソコ)
タイマとUARTも機能限定ながらシミュレーション完了デス。
但し、コア部分だけで2700LEを超えてしまっています。Cyclone-EP1C3(要するにDesignWaveマガジン10月号の付録)の実に90%以上!これではCPUだけでもALTERAに入りきらないです。時間が出来たら正規版Leonaldで論理合成を試さないと・・・
割り込みを実装できたら、実験開始と思っていたんですが。