The Electronics Project
エレクトロニクスの概念を再訪し、プロセッサを作ろうとしています。学習用リポジトリ。目標はPCB設計とデジタル回路を学ぶこと。Verilog、Arduino、ESP32、Raspberry PI。
エレクトロニクスプロジェクト
学習用リポジトリです。目標はPCB設計とデジタル回路を学ぶことです。Verilog、Arduino、ESP32、Raspberry Piを使用します。進捗状況をここに随時投稿していきます。
最終目標は実際の回路またはPCBを製作することです。
そのために、まず基礎から取り組んでいます。Arduinoスケッチは、ボタン、LED、信号読み取りといった物理コンポーネントに慣れるためのものです。Verilog側は、レジスタ、カウンタ、メモリといった基本的な構成要素が実際にどのように連携するか、デジタルロジックをより深く理解するためのものです。
プロセッサは、電子機器が最低レベルでどのように動作するかを、可能な限り苦痛を伴う方法で学ぶために作成しています。
どうやら苦しみは良いものらしい。
SAP-1 — Simple as Possible Computer(参考):https://karenok.github.io/SAP-1-Computer/
構成
arduino/ Arduinoでの物理ハードウェア実験
processor/ Verilogモジュール — デジタルロジック実験
プロセッサ(Verilog)
Digitalを使用して構築・シミュレーションしています。完全な回路図はmain.digにあります。
| モジュール | ファイル | 説明 |
|---|---|---|
| 8ビット加算器 | adder_8bit.v |
キャリーイン/アウト付きで2つの8ビット値を加算 |
| 8ビットレジスタ | register_8bit.v |
書き込みイネーブルと同期リセット付きクロックドレジスタ |
| プログラムカウンタ | program_counter.v |
クロック毎にインクリメント、停止とリセットをサポート |
| メモリ | memory_256x8.v |
256バイト同期RAM |
| 8-to-1マルチプレクサ | mux_8_to_1.v |
8本のデータ線から1本を選択 |
| 8ビットカウンタ | counter_8bit.v |
クロック毎にカウントアップ、ロードとリセット付き |
| ワンショット | do_once.v |
ワンショットラッチ — 信号を1回だけ通過させる |
Arduinoスケッチ
1. オンオフデバイス(完全に役立たず)
説明:
物理的なボタンと2つのLED(赤と青)を使った基本的なトグルデバイス。
動作:
- 電源投入時、赤色LEDが点灯します。
- ボタンを押すと赤色LEDが消灯し、青色LEDが点灯します。
- ボタンを離すと状態が元に戻ります。
回路: ボタンはピン9(INPUT_PULLUP)、青色LEDはピン2、赤色LEDはピン7。
私の祖先はこのデバイスが発明される瞬間を待っていました。そしてついにここに辿り着きました。
2. ボタンテスト
ピンをHIGHに設定します。以上です。
3. 読み取りテスト
ピンを読み取り、値をシリアルに出力します。基本的な入門用です。
4. 交通制御
説明:
3状態の自動交通信号機です。タイマーで緑→黄→赤を循環します。ボタンで割り込み、即座に赤に強制します(横断歩道)。
動作:
- 緑(状態0):緑色LEDが5秒間点灯、2サイクル(合計10秒)実行後、黄色に進みます。
- 黄(状態1):赤+緑色LEDが点灯(混ざって黄色に)、ブザーが2秒間鳴動後、赤に進みます。
- 赤(状態2):赤色LEDが5秒間点灯、2サイクル(合計10秒)実行後、緑にループバックします。
- いつでもボタン押下:500msのデバウンス付きで直接赤にジャンプします。
- ボタン押下は遅延中(
responsiveDelay)にチェックされるため、信号は常に割り込み可能です。
回路: ボタンはピン9(INPUT_PULLUP)、赤色LEDはピン2、緑色LEDはピン3、青色LEDはピン4、ブザーはピン7。
