Welcome to Our Company
Home
Tutorial
Download
Opencores
F.A.Q.
Support
Purchase
Links
 8051

 例によってOpencoresから頂いてきます。筆者が追加修正したものをここに置いておきます。
 なお以下は、Veritak REV1.0.1で行っています。


・Cコンパイル
SDCCを使いました。以下は筆者環境でのバッチファイルです。
..\bin\sdcc --debug -mmcs51 --model-large 8051test2.c
hex2rom 8051test2.ihx rom52 15l8v > rom52.dat
copy rom52.dat F:\vhdl\t51\*.*
hex2romは、作者のものを改変し、Verilogの$readmembで読み込めるオプションv/Vを追加しました。
・VHDソース修正
 RAMサイズの修正を行いました。

・トランスレート(VHDL->Verilogに変換します。)
 translated.vが生成されます。

・Verilogソース追加修正
  • デバッガを埋め込みます。
  • module rom52を改変し、rom52.datを読み込む仕様としました。というのは、ソースデバッグのため、何回もROMの内容を変更して必要がありその度にVHDLからVerilogに変換するのが面倒だったからです。
  • Stack Pointerを設定した直後のサブルーチンコールで、Stack Pointerの設定がおかしくなるソース上のバグがあったので修正(ワークアラウンド)しました。(module t51)(作者に報告済み)なお、このようなCPUソースのデバッグには、CPUシミュレータが有効です。今回はJSIM51を使いました。
  • CLOCK周期を50MHzとします。
 以上変更したものをdemo.vとします。

・シミュレーション 
 t51.prj をLoadVerilogします。





Test時間は、5404650-574130=約4.8msとなりました。AVRより遅いのは、当然としてZ80よりかなり速いという結果になりました。SDCCのコードジェネレータは、8051Nativeで、Z80は後からポートされました。CPU自体の能力差がそんなにあるとは思えないので、多分コンパイラに起因するところが大きいのでしょう。