Chapter 5 用 FPGA 來模擬 Ben Eater 的可調式 clock
5.1 單獨在 FPGA 上測試 clock source
進度: 100% 7/21 (started on 2021/7/18)
* Youtube - “Hello, world” from scratch on a 6502 — by Ben Eater
* Debounce circuit
* Debounce circuit - VHDL - from DigiKey
* Clock with various frequency
* How to write a VHDL code for 1Hz signal?
* intel / Altera - AN 496: Using the Internal Oscillator IP Core
* 參考 How combine multiple VHDL codes to make one system 文章
應用於 65C02 CPU 的 single step, 1Hz 都可以在 Arduino Mega 2560 上抓到精準的資料, 跑到 1MHz 時, Arduino 抓到的資料就亂了 (正常, Mega 的速度不夠快到足以處理 1MHz CPU 的頻率)
* 曾經 single step 時會跳行, 嘗試了
* 加了電容到地 ==> 有幫助, 但無法徹底解決
* 修改 debounce 的 stable 值, 發現值越大反而有問題, 最後用原始設定的 10ms 反而是最好…..
stable_time : INTEGER := 10); --time button must remain stable in ms
5.2 整合 65C02 CPU 跟 clock source
進度: 100% 7/25 (started on 2021/7/21)
- 期間出現無法執行, 位址都是 0001, 嘗試 debug 了幾天
- 在 debug 過程中, FPGA 的 I/O Standard 改成 3.3-V LVCMOS 也行 (後來還是改回來 3.3-V LVTTL)
- 發現 FPGA 很燙, 似乎 Vcc 有接錯, 重新接線後, 發現還是有幾個地方可以改善
- clock/reset 線路的 3.3V 電壓改由 Arduino Mega 2560 提供, 不由 QMTech 板子提供 (應該沒有較大影響)
- 多按幾次 FPGA 上 6502 CPU 的 reset, 才可以順利 reset 從 FFFC:FFFD 開始執行
- 最後發現, FPGA 的 2 個 port 被我燒掉, 換個 port 就可以順利進行.
- 後來, 又不行了, address 一直停留在 0001h, 原來又有幾個 port 燒掉 (其中一條是 rdy_i), 換了 port 後也好了.
- 有一次不小心, 發現 address 都是 0000h 時, 以為又是哪裡出問題, 原來是 Clock 線脫開了, 接回去就好了.
- 有一次, 把 Arduino 的 3.3V 接到地, 也都是 address 都是 0001h
- clock/reset 線路的 3.3V 電壓改由 Arduino Mega 2560 提供, 不由 QMTech 板子提供 (應該沒有較大影響)
- 在 debug 過程中, FPGA 的 I/O Standard 改成 3.3-V LVCMOS 也行 (後來還是改回來 3.3-V LVTTL)
5.3 整合 65C02 CPU 跟 clock source 之加強版
進度: 100% 7/27 (started on 2021/7/25)
* 改用 DIP switch 來決定 clock 頻率 (1Hz / 1MHz) 或 single step
* 且 clock_out 輸出, 也同時在 FPGA 內部連接至 65c02 CPU clk_clk_i
Clock 選擇 | Switch 1 | ||
---|---|---|---|
On | Off | ||
Switch 2 | On | Single step | 1Hz |
Off | Single step | 1MHz |
5.4 將 clock source 獨立成一個 VHDL entity module
進度: 100% 08/08 (started on 2021/08/08)
* 2021/08/08 - Modulize clock source and selection