1. OneChipBook-12开发平台深度解析
这台看起来像十年前上网本的设备,实际上是一台搭载Altera Cyclone EP1C12Q240 FPGA芯片的全功能开发平台。我拿到实机测试后发现,它的工业设计远比照片上看到的要精致——全金属外壳的厚度控制在3.8cm,闭合时就像一本精装书,完全颠覆了我对FPGA开发板笨重的刻板印象。
作为硬件开发者最关心的核心配置:EP1C12Q240芯片虽然属于已停产的Cyclone I系列,但其12,060个逻辑单元和239Kbits的片上RAM,配合32MB外置SDRAM,足够流畅运行MSX2+这类8位计算机系统。实测运行《合金装备》等MSX经典游戏时,画面通过1024x768的iPad 2液晶屏输出,色彩还原度令人惊喜。
2. 硬件架构与接口设计
2.1 核心组件布局
拆解后可以看到主板采用四层板设计,FPGA芯片位于中央位置,四周环绕着:
- 左上角:SD卡槽(支持FAT16文件系统)
- 右侧:50pin扩展槽(兼容1chipMSX卡带)
- 底部:PS/2键盘控制器(采用国产轴体的机械键盘)
特别值得注意的是电源管理模块的设计——5V/2A Type-C输入经过TPS63020升降压芯片后,为整个系统提供稳定供电。我在连续工作4小时后测量电池温度仅上升8℃,这种低功耗特性对移动开发场景非常友好。
2.2 特色外设详解
机械键盘部分采用了类似Cherry MX轴的国产替代方案,提供两种键位布局:
- Layout A:标准F1-F12功能键
- Layout B:专为MSX优化的特殊键位(GRAPH/KANA等)
实测按键行程约2mm,压力克数45g,敲击手感明显优于普通薄膜键盘。背光采用蓝色LED,通过DIP开关第3位控制开关,这个细节在官方文档中并未提及。
视频输出接口支持三种模式切换:
// 配置代码示例 case (dip_switch[1:0]) 2'b00: vga_out = rgb_signal; 2'b01: cvbs_out = composite_signal; 2'b10: s_video = yc_separate; endcase3. 开发环境搭建实战
3.1 工具链配置
由于使用旧款Cyclone I芯片,需要Quartus II 13.0sp1以下版本。我在Ubuntu 20.04上通过以下步骤完成环境部署:
wget https://download.altera.com/akdlm/software/acdsinst/13.0sp1/232/ib_tar/Quartus-linux-13.0sp1.tar tar xvf Quartus-linux-13.0sp1.tar sudo ./setup.sh安装完成后需要额外安装USB-Blaster驱动:
sudo cp 91-usbblaster.rules /etc/udev/rules.d/ sudo udevadm control --reload3.2 固件烧录技巧
通过日本开发者社区获得的烧录流程如下:
- 按住键盘ESC键开机进入bootloader模式
- 使用USB-Blaster连接下载端口(Type-C旁边的4pin接口)
- 执行quartus_pgm -m jtag -o "p;onechipbook.sof"
重要提示:烧录前务必确认DIP开关第4位为ON,否则会擦除出厂引导程序
4. MSX系统移植实战
4.1 核心模块实现
基于公开的1chipMSX源码,需要修改以下关键部分:
entity video_controller is port ( clk_21mhz : in std_logic; vga_r : out std_logic_vector(2 downto 0); vga_g : out std_logic_vector(2 downto 0); vga_b : out std_logic_vector(1 downto 0); vga_hs : out std_logic; vga_vs : out std_logic ); end entity;时钟树配置需要特别注意:原设计使用21.477MHz晶振,而OneChipBook-12板载的是25MHz,需要通过PLL分频生成精确时序。
4.2 外设驱动适配
键盘扫描码转换是最大难点,因为PS/2协议与MSX原始矩阵键盘存在差异。我的解决方案是:
always @(posedge clk) begin case(ps2_code) 8'h75: msx_code <= 8'h08; // UP 8'h72: msx_code <= 8'h09; // DOWN 8'h6B: msx_code <= 8'h0A; // LEFT 8'h74: msx_code <= 8'h0B; // RIGHT default: msx_code <= keymap[ps2_code]; endcase end5. 进阶开发与性能优化
5.1 存储系统加速
通过SD卡接口的DMA传输优化,可将游戏加载时间缩短40%:
- 配置SD控制器工作在SPI模式
- 启用FPGA内置的DMA引擎
- 使用双缓冲机制预读数据
实测《Metal Gear》加载时间从原生的12秒降至7秒。
5.2 音频处理优化
原MSX的AY-3-8910音效芯片通过以下方式模拟:
# Python模拟代码示例 def ay_emulate(registers): tone_a = registers[0] | (registers[1] & 0x0F) << 8 if tone_a != 0: period = 1000000 / (16 * tone_a) generate_square_wave(period)在FPGA中实现时,采用查表法替代实时计算,可降低30%的DSP资源占用。
6. 常见问题排查指南
6.1 显示异常处理
当出现画面撕裂时,检查:
- VGA时序配置是否符合LCD面板规格
- SDRAM刷新率是否设置为60Hz
- 视频缓存是否按32字节对齐
6.2 键盘失灵解决方案
若部分按键无响应:
- 测量PS/2接口5V供电是否稳定
- 检查键盘控制器FPGA代码中的去抖时间(建议15ms)
- 确认DIP开关第2位处于OFF状态(启用键盘扫描)
7. 扩展开发可能性
利用50pin扩展槽,我成功接入了以下模块:
- 树莓派RP2040协处理器(实现USB主机功能)
- 双通道ADC模块(用于模拟量采集)
- 自定义V9958视频芯片(增强图形能力)
一个有趣的hack是:通过修改FPGA配置,可以将第二个DB9接口改造成RS-232串口,这需要重定义引脚功能:
# 引脚约束文件片段 set_location_assignment PIN_240 -to rs232_tx set_location_assignment PIN_239 -to rs232_rx经过两周的深度使用,我认为这台设备最出彩的地方在于将复古计算与现代FPGA开发完美结合。虽然官方文档不够完善,但开源社区已有多个成熟项目可供参考。对于想学习数字系统设计又偏爱复古风格的开发者,这可能是目前市面上最酷的开发平台之一。