3. RISC-V指令集基础
做FPGA项目,第一步就是选板子。我见过不少朋友,代码写得挺溜,结果板子选错了,资源不够用,或者外设对不上,最后折腾半天还得换板。说白了,选型这件事,比你想的要重要得多。
这一章,我们就来聊聊怎么给蜂鸟E203挑一块合适的FPGA开发板。我会拿几款主流板子做个对比,重点讲讲Nexys A7这块板子,最后再教你怎么评估资源够不够用。
3.1 主流FPGA开发板横向对比
目前市面上能跑RISC-V软核的FPGA板子,主要集中在Xilinx和Intel(原Altera)两家。我个人习惯用Xilinx的板子,因为Vivado的生态更成熟,调试工具也顺手。下面这张表,是我整理的四款主流板子的核心参数对比。
| 开发板型号 | FPGA芯片 | 逻辑单元(LC) | Block RAM | DSP Slice | 板载外设 | 参考价格 |
|---|---|---|---|---|---|---|
| Nexys A7-100T | XC7A100T-1CSG324C | 101,440 | 4,860 Kb | 240 | ETH、UART、GPIO、PMOD、VGA | 约 ¥2,500 |
| Arty A7-35T | XC7A35T-1CSG324C | 33,280 | 1,800 Kb | 90 | UART、GPIO、PMOD、Arduino | 约 ¥1,200 |
| DE10-Lite | MAX 10 10M50DAF484 | 50,000 | 1,664 Kb | 144 | UART、GPIO、VGA、ADC | 约 ¥1,000 |
| Basys 3 | XC7A35T-1CPG236C | 33,280 | 1,800 Kb | 90 | UART、GPIO、PMOD、VGA | 约 ¥1,800 |
从表格里能看出来,Nexys A7-100T的资源是最充裕的。Arty A7-35T和Basys 3虽然便宜,但逻辑单元只有3万3,跑蜂鸟E203的完整版会有点吃力。DE10-Lite用的是Intel的MAX 10系列,工具链是Quartus,如果你习惯用Vivado,迁移起来会多花点时间。
3.2 Nexys A7开发板深度介绍
Nexys A7是Digilent公司基于Xilinx Artix-7系列做的一块开发板。我最早接触它是在2018年,当时拿它跑一个MIPS软核,板子稳定性给我留下了很深的印象。后来做RISC-V项目,我第一个想到的就是它。
这块板子的核心配置,我列几个关键点:
- FPGA芯片:XC7A100T-1CSG324C,28nm工艺,101K逻辑单元
- 板载内存:128 MB DDR2 SDRAM,16位数据总线
- 存储:16 MB Quad-SPI Flash,可以用来固化bitstream
- 通信接口:10/100 Mbps Ethernet、USB-UART、USB-HID
- 扩展接口:4个PMOD口、VGA、PWM音频输出
- 时钟:100 MHz有源晶振,板载PLL可倍频
嗯,这里要注意一点。板子上的DDR2是128 MB,但蜂鸟E203的ICB总线默认只支持到4 GB地址空间,所以内存映射这块不需要做额外修改。不过DDR2的初始化时序比较复杂,后面移植的时候我会专门讲怎么调MIG IP核。
3.3 资源评估:蜂鸟E203到底需要多少资源?
选板子不能光看参数,得算清楚你的设计到底能吃多少资源。蜂鸟E203的默认配置,我直接拿Vivado综合过一次,结果如下:
| 资源类型 | 蜂鸟E203占用 | Nexys A7总量 | 占用率 |
|---|---|---|---|
| LUT | 约 12,000 | 63,400 | 18.9% |
| FF (寄存器) | 约 8,500 | 126,800 | 6.7% |
| Block RAM (36Kb) | 约 32 个 | 135 个 | 23.7% |
| DSP48E1 | 约 4 个 | 240 个 | 1.7% |
你看,光是蜂鸟E203核心,只占了Nexys A7不到20%的LUT。这意味着你还有大量资源可以加外设,比如Ethernet控制器、VGA显示控制器、甚至再塞一个小协处理器。如果你选的是Arty A7-35T,LUT占用率会飙到36%左右,再加点外设就逼近50%了,布线压力会大很多。
为什么会这样?因为FPGA的布线资源是有限的,LUT占用率超过70%以后,时序收敛会变得非常困难。我建议你留出至少30%的余量,给后续调试和功能扩展用。
3.4 适配分析:从板子到项目的映射
选好板子之后,下一步就是把蜂鸟E203的接口映射到Nexys A7的物理引脚上。这个过程,说白了就是做一张「逻辑信号 ↔ 物理引脚」的对照表。
我拿几个关键接口举例:
- 系统时钟:Nexys A7的100 MHz晶振接到FPGA的E3引脚,通过MMCM/PLL分频出50 MHz给蜂鸟E203用
- 复位按键:板载的CPU_RESET按键接到C12引脚,低电平有效
- UART:USB-UART芯片(FT2232)的TX/RX分别接到D10/D11引脚,波特率115200
- GPIO LED:板载的16个LED接到J15-L16等引脚,用来显示CPU状态
这里有个小技巧。我习惯在Vivado里用XDC文件来做引脚约束,而不是手动一个个点。XDC文件写起来很直观,比如:
# 系统时钟约束
set_property PACKAGE_PIN E3 [get_ports clk_100mhz]
set_property IOSTANDARD LVCMOS33 [get_ports clk_100mhz]
create_clock -period 10.000 -name sys_clk [get_ports clk_100mhz]
# UART约束
set_property PACKAGE_PIN D10 [get_ports uart_txd]
set_property PACKAGE_PIN D11 [get_ports uart_rxd]
set_property IOSTANDARD LVCMOS33 [get_ports uart_txd]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rxd]
嗯,这里要注意电平标准。Nexys A7的Bank 14和Bank 15默认是3.3V,所以IOSTANDARD统一设成LVCMOS33就行。如果你用到Bank 16(HR bank),它可以支持1.8V到3.3V,但需要检查板子上的VCCIO跳线设置。
3.5 本章知识结构图
下面这张SVG图,把本章的核心逻辑串起来了。你可以看到从「选型对比」到「资源评估」再到「引脚适配」的完整链路。
这张图其实就三件事:选板子、算资源、写约束。每一步都有坑,但只要你按流程走,基本不会出大问题。
3.6 小结
这一章我们聊了主流FPGA开发板的差异,重点分析了Nexys A7的硬件资源,也算了蜂鸟E203到底能吃多少资源。最后还讲了怎么把逻辑信号映射到物理引脚上。
选板子这件事,没有绝对的最好,只有最合适。Nexys A7-100T对我来说,是性价比和资源冗余的平衡点。如果你手头已经有其他板子,也别急着换,先看看资源够不够——不够的话,后面我会讲怎么裁剪蜂鸟E203的配置,让它能在小资源板子上跑起来。