Chapter 4 用 FPGA 模擬 6502 開機

進度: 100% 7/19 (2021/7/15 started)
* 2021/7/15: 收到 Ben Eater 的 6502 CPU kit, 完成開機
* 2021/7/17: 下載 65C02 CPU VHDL 程式到 QMtech Cyclone IV Starter kit, 還不確定是否運作正常, Address bus 沒有訊號
* 2021/7/18: 將 65C02 VHDL code 下載到 QMtech Cyclone IV Starter kit 用 breadboard 接出來看訊號
* 2021/7/19: 用 Arduino Mega 2560 可以看得出 FPGA 上的 6502 power on 從 FFFC:FFFD 開始執行

之前的動作都是站在巨人的肩膀上實作, 接下來就要靠自己了.

4.1 用 FPGA 模擬 6502 CPU

  • FPGA-Based 6502 Processor in VHDL 下載檔案
    • 失敗
  • 改用另一個設計 OpenCores.org - cpu65c02_true_cycle
    • 有好幾個檔案, top level 是 r65c02_tc
  • 解壓縮後, 到目錄 cpu65c02_true_cycle/trunk/released/rtl/vhdl 下, 會有好幾個 .vhd 檔案, 找到 r65c02_tc.vhd (一開始, 有幾次在 r65c02_tc.vhd 或 core.vhd 間掙扎, 熟悉了 VHDL 的 hierarchical 架構才找到 r65c02_tc 是 top level)
  • 打開 Quartus
  • 建立新的 project, 命名為 r65c02_tc (project 名稱得跟 r65c02_tc.vhd 定義的 entity r65c02_tc 同名)
  • 到 Quartus 的 Processing - Start Compilation
  • 到 Quartus 的 Assignments - Pin Planner
    • 設定以下的 pin definition
    • 將 I/O Standard 全部設定為 3.3-V LVTTL
  • Pin Planner 後需要再一次 Quartus 的 Processing - Start Compilation
  • 到 Tools 的 programmer
  • 類似 Ben Eater 的 6502 Hello World 接上 Arduino Mega 2560, Mega 2560 接腳圖 可以看得到 6502 power on sequence 從 FFFC:FFFD 位址開始

Cyclone IV EP4CE15F23C8N

6502 CPU pin name / no. PCB PCB pin FGPA location FPGA PIN
A15 / pin / output J12 33 A10 IO,DIFFIO_T14N
A14 / pin J12 31 A13 FPGA J12 pin 31 的 A14 燒掉, 暫時改成 JP1 pin 6 的 B7
A13 / pin J12 29 A14 FPGA J12 pin 29 的 A13 燒掉, 暫時改成 pin 35 的 A9
A12 / pin J12 27 A15
A11 / pin J12 25 A16
A10 / pin J12 23 A17
A9 / pin J12 21 A18
A8 / pin J12 19 A19
A7 / pin J12 17 A20
A6 / pin J12 15 C17
A5 / pin J12 13 C19
A4 / pin J12 11 C20
A3 / pin J12 9 F20
A2 / pin J12 7 H20
A1 / pin J12 5 B22
A0 / pin J12 3 C22
clk_clk_i / pin / input J12 36 B9 B9 unconnected, use internal clock source clock_out
irq_n_i / pin / input J12 34 B10
nmi_n_i / pin / input J12 32 B13
rdy_i / pin / input J12 30 B14 FPGA J12 pin 30 的B14 燒掉, connected to Vcc, 暫時先接到 J12 pin 24 B17
rst_rst_n_i / pin /input J12 28 B15
so_n_i / pin / input J12 26 B16
D7 / pin / input J12 18 B20
D6 / pin / input J12 16 D17 FPGA J12 pin 16 的 D17 燒掉, 暫時改成 pin 22 的 B18
D5 / pin / input J12 14 D19 FPGA J12 pin 14 的 D19 燒掉, 暫時改成 pin 20 的 B19
D4 / pin / input J12 12 D20
D3 / pin / input J12 10 F19
D2 / pin / input J12 8 H19
D1 / pin / input J12 6 B21
D0 / pin / input J12 4 C21
:———————- :—- :———– :————– :———
rd_o / pin / output JP1 5 A7
sync_o / pin / output JP1 7 A6
wr_n_o / pin / output JP1 9 A5
wr_o / pin / output JP1 11 A4
Result (Clock step debounce) JP1 13 A3 unconnected, 訊號接到 clock_out
Clock T2 unconnected, debounce clock 輸入, 接到 50MHz T2 訊號
Clock 1Hz JP1 14 B3 unconnected, 訊號經過邏輯運算接到 clock_out
Clock 1MHz JP1 15 B1 unconnected, 訊號經過邏輯運算接到 clock_out
sw2_in JP1 13 A3
sw1_in JP1 14 B3
clock_out JP1 15 B1
Button (for step clock) JP1 16 B2
Clock_reset_n JP1 17 C1 connected to Vcc
:———————- :—- :———– :————– :———
d_o[0-7] / pin / output J10