0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【CPU自作】AVR疑似コアをVHDLで制作した話

Last updated at Posted at 2025-06-14

Qiitaに初めての投稿になります。これまで趣味も含めて15年以上技術(電子回路・組み込み技術)とかかわってきましたが、こうやって公に自分の書いた制作物を出すのは初めてです。
私は学生時代AVRマイコン(Atmel社製、現在はMicrochipに統合)を使っていろいろ作るのが好きでした。今後記事にしようかと思っていますが(10年以上前なので制作物残ってるかな?)、MP3プレーヤをCADで基板設計~ソフトウェア作成までして作ったことがあります。PICマイコンも少しいじっていましたが、レジスタのバンク切り替えもろもろが面倒、とかいろいろな理由でAVRのほうが好きです(笑)。
AVRと聞いてご存じの方もいらっしゃると思いますが、有名なArduino UNOに使われているAtmega328Pが代表的なAVRマイコンです。

さて、本題に入りますが就職してよくFPGAを触るようになってから、CPU自作に関心を持つようになり「もしやAVRをFPGAで実装できるのでは?」と思いちょうど数年前の新型コロナが出た時期ぐらいにAVRをVHDLで実装し始めました。

仕様は以下になります。
・Atmega328Pに近い(一部レジスタのアドレスなどは一部変更)仕様
・基本的な算術命令(addなど)
・スタックを使いサブルーチンが構築できる仕様(rcall,ret)
・条件分岐命令
・まだ割り込みは実装していません
・PORTA~D実装
・アセンブラはavrasm2.exe(AtmelStudio7に付属)を使って吐き出されたHEXファイルをQuartusのOnChipRAMの初期値として設定
まだ実装していない命令もあり完璧なコードではないですが(更新予定)、ある程度動くようにはなっているのでGithubにあげてあります。
https://github.com/ykhr7121rkhy/AVR_single_cycle_core

・検証方法
① avrasm2.exeを使い任意のアセンブリコードからHEXファイルを生成
② modelsimでhexファイルを含めコードをコンパイルし、命令がちゃんと実行されているかどうか波形確認

これくらいの命令数であればLチカ~簡単なキャラクタLCD操作ぐらいであれば実現可能です。

●今後の目標、改善点など
・Arduinoで動かせたら面白い
・割り込みも付けたい
・現状シングルサイクルなのでパイプライン化したい(ハザードとか面倒そう)
・ほかのマイコンの疑似コアも作ったら面白そう

以上になります。
簡単な紹介ではありますが、読んでいただいてありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?