简介:面向DE1-SoC开发板初学者、高校实验用户及嵌入式与FPGA工程师的硬件与开发参考文档,围绕板卡认知、硬件结构、FPGA配置和常用外设展开,适合课程实验、项目选型与自学查阅。资源包仅含1个PDF文件,约7.1MB,按开发套件、板卡介绍、开发板使用三部分编排:先交代包装清单、系统光盘和资料获取途径,再解析布局、组件与块图,帮助建立板载资源与接口位置的整体印象;随后说明FPGA配置模式、Cyclone V SoC FPGA配置、状态与复位元素、时钟电路,并覆盖按键、开关、LED、数码管、GPIO扩展、音频编解码、I2C多路复用、VGA、TV解码及红外等外设。已有1323人学习,对接口定义、模块连接和实验环境搭建具有直接参考价值,也便于在板级调试时快速定位相关模块,可作为核对硬件连接、理解ARM与FPGA协同、搭建基础实验和排查板级问题的案头手册。
1. 拿到板子先别插电:DE1-SoC 不是 STM32 那一挂
某实验室一次进了六块 DE1-SoC,新人拆箱后看到 USB 口和排针,下意识按单片机那套流程走:插线、找串口、打开下载工具。结果设备管理器里多出两个说不清道不明的未知设备,串口一个都没冒出来,折腾一下午连个 LED 都没点亮。翻车的根因很简单——DE1-SoC 是 Cyclone V SoC FPGA 开发板,板子上跑的是一颗 800MHz 双核 ARM Cortex-A9 硬核处理器加 85K 逻辑单元的 FPGA,跟平时玩的 STM32 单片机虽然都挂着 ARM 嵌入式硬件的名头,配置链路完全是两码事。这份 DE1-SoC 硬件原理图及开发手册,价值就在于把板级结构、配置模式、外设连接和烧录流程一次讲全。适合手上已经有板子、准备搭 FPGA 与 HPS 联合开发环境的人。
2. 装前清单:Cyclone V SoC 的版本对齐与文件核对
装 FPGA 环境最怕的不是装不上,是装上了发现版本对不上,软件能打开、编译能过,一到联调就报莫名其妙的错。Quartus II、SoC EDS、板卡 System CD 这三样东西存在强绑定关系,先把版本摊开对一遍,比装完再回滚省事得多。
2.1 三件套版本对照表
DE1-SoC 手册第 8 章明确提到 Quartus II v16.0 环境下从 EPCS 器件启动 Nios II 的流程,这个版本号是整个环境的基础。SoC EDS 必须与 Quartus 主版本号一致,混搭会出现 ARM 工具链找不到、GHRD 编译链接失败这类问题。
| 组件 | 建议版本 | 作用 | 装错的表现 |
|---|---|---|---|
| Quartus II | 16.0(与手册对齐) | 综合、布局布线、Programmer 烧录 | 器件库里找不到 5CSEMA5F31 |
| SoC EDS | 16.0 | ARM 交叉编译、Embedded Command Shell、System Builder 依赖 | 命令行里找不到 arm-altera-eabi-gcc |
| DE1-SoC System CD | 与板卡批次对应 | 原理图、GHRD 例程、Linux 镜像、System Builder | 例程路径和手册对不上 |
后续的 Quartus Prime Standard 版本也能支持 Cyclone V,但一旦升到 Pro 版就会发现这颗器件根本不在支持列表里——这是很多人第一次踩的版本坑。我一般会保守选 16.0,把手册页码和实际界面一一对得上,少一层解释成本。
提示:先把安装包和 System CD 全部下载到本地并核对 SHA 校验,中途断网重下导致安装包损坏,报错会伪装成"器件库缺失",很难查。
2.2 从 System CD 落盘:目录结构与校验
System CD 是一个压缩包或镜像,直接双击往桌面解压是坏习惯。路径里带空格、带中文、带&,Quartus 的 Tcl 脚本会在某些环节断掉,报错信息还不指向路径。我固定建一个短路径根目录,把内容铺进去。
# 统一放到短路径根目录,避免空格与中文 mkdir -p /data/de1soc/cd cd /data/de1soc/cd # 解压 System CD,解压后应有 demonstrations / documents / tools 三类 unzip DE1-SoC_SystemCD.zip -d . # 核对关键目录是否齐全 ls -d demonstrations documents tools du -sh demonstrationsdemonstrations下是 FPGA 例程(Audio、Karaoke、SDRAM Test、TV Box、PS2 Mouse、IR、ADC)与 HPS 例程(Hello、LED/KEY、G-sensor、I2C MUX);documents下是用户手册、原理图 PDF 和器件数据手册;tools下是 System Builder 与烧录相关工具。这三个目录缺任何一个,后面都会卡住。解压完顺手du -sh看一下体量,明显偏小就是包不完整。
注意:路径里的中文和空格属于玄学级故障源,凡是 Quartus、SoC EDS、Nios II 相关的工程,一律放纯英文短路径。
2.3 硬件清点:包装盒里该有的四样和板上丝印
手册第 1 章列得很清楚:开发板本体、快速入门指南、USB Type-A 转 Type-B 线(FPGA 下载与板载 USB-Blaster II 用)、USB Type-A 转 Mini-B 线(UART 串口用)、12V 直流电源适配器。缺 Type-B 那根线是最常见的情况——它不是普通打印机线的替代品,板载 USB-Blaster II 就在 Type-B 口后面。
板子拿到手先对着手册第 2 章的布局图认丝印,别急着上电。重点确认四个位置:SW10 那一排配置模式拨码、HPS_RESET_n 与 HPS_WARM_RST_n 两个复位按键、Micro SD 卡槽、以及两个 40-pin 扩展排针的防反二极管方向。板上 FPGA 侧是 64MB SDRAM(16 位数据总线)加 EPCS128 配置器件,HPS 侧是 1GB DDR3(32 位数据总线)加千兆以太网 PHY,这两套存储体系分属不同域,认错域是后面配错地址的源头。
3. 软件安装:Quartus II 16.0 落地与 USB-Blaster II 认卡
3.1 安装路径、组件勾选与盘符习惯
Quartus II 完整装下来十几个 GB,勾选不当会翻倍。安装向导里器件家族只勾 Cyclone V,其余全取消;工具组件勾上 Quartus II、Nios II EDS、Programmer、SignalTap II 即可,DSP Builder 之类用不到的先不装。安装路径同样守短路径原则,我习惯C:\altera\16.0或/opt/altera/16.0。
# Linux 下静默安装的常见做法,setup.sh 后跟组件与路径参数 ./QuartusSetup-16.0.run --mode unattended \ --installdir /opt/altera/16.0 \ --accept-altera-eula # 装完确认 quartus_sh 可用,这是后续所有脚本的入口 export PATH=/opt/altera/16.0/quartus/bin:$PATH quartus_sh --version--installdir一旦定下别改,Quartus 内部大量绝对路径写进了配置文件,挪目录等于重装。quartus_sh --version能正常回显版本号,说明主程序与授权读取链路是通的。这一步失败通常是环境变量没生效,或者 shell 里还残着旧版本的 PATH。
装完别直接开工程,先确认器件库落地:在安装目录下找quartus/common/devinfo之类的器件信息目录,里面应该能找到 Cyclone V 对应的条目。器件库缺失的典型表现是新建工程时 Family 下拉框里根本没有 Cyclone V,而界面不会弹任何错。
3.2 USB-Blaster II 驱动与 JTAG 链自检
板载 USB-Blaster II 是这颗板子最省心也最容易翻车的部分。省心在于不用外接下载器,翻车在于 Windows 下驱动签名与端口占用。
# Linux 下先看有没有认到,正常应出现 Altera 相关设备 lsusb | grep -i altera # 确认 USB-Blaster 的 udev 规则存在,否则普通用户无权访问 sudo cp /opt/altera/16.0/quartus/drivers/usb-blaster/*.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && sudo udevadm triggerlsusb里出现 Altera 字样,说明 USB 层通了,但 JTAG 层未必通。真正的验证手段是打开 Quartus Programmer,Hardware Setup 里选中 USB-Blaster II,然后点 Auto Detect。能扫出5CSEMA5这个器件,才算 JTAG 链完整。Windows 下如果设备管理器里是带感叹号的未知设备,手动更新驱动指向quartus\drivers\usb-blaster-ii目录,不要用系统自动搜索。
提示:Auto Detect 扫不到器件,先查供电(12V 适配器是否插上),再查 MSEL 拨码,最后才怀疑驱动。顺序反了会白折腾很久。
3.3 SoC EDS 与串口终端:115200 8N1
SoC EDS 提供 ARM 侧的交叉编译环境和 Embedded Command Shell。装完必须用它的专用 shell,不要在系统默认终端里直接调arm-altera-eabi-gcc,工具链路径是那个 shell 注入的。
# 启动 SoC EDS 的 Embedded Command Shell 后验证交叉工具链 arm-altera-eabi-gcc --version # 常见做法是同时导出 GHRD 顶层目录,便于反复生成 export TOP_FOLDER=/data/de1soc/cd/demonstrations/SoC_FPGA/DE1_SoC_Default串口这边,UART to USB 走的是 Mini-B 口,参数固定 115200、8 位数据、无校验、1 位停止位、无流控。Linux 下用minicom -D /dev/ttyUSB0 -b 115200,Windows 下用 PuTTY 选对应 COM 口。连上后按一下回车,如果 U-Boot 已经在跑,应该能看到提示符;一片空白不代表坏了,可能只是板子还没启动到那一步,这个区别后面验证环节会用到。
4. 板级配置:MSEL 拨码、SOF 转 JIC 与 SD 卡镜像
4.1 MSEL[4:0] 与三种配置模式的取舍
Cyclone V 上电后从哪儿取配置数据,由 SW10 上的 MSEL 拨码决定。手册 3.1 节把三种模式讲得很细,落到实操就是三种场景对应三组拨法。
| 模式 | 典型 MSEL 组合 | 什么时候用 |
|---|---|---|
| JTAG | 00000 | 首次调试、反复下载 .SOF 验证逻辑 |
| AS(EPCS128) | 10010 | 脱机上电自启动,产物是 .JIC |
| FPP x16(HPS 引导) | 01010 | HPS 侧 Linux 启动后再配置 FPGA |
具体位序和 ON/OFF 与逻辑电平的对应关系,各批次板子的丝印标注略有差异,拨之前先拍张照记下出厂状态,再对照手册的配置模式表逐位核对。拨完用 Programmer 的 Auto Detect 反向验证:能认出器件,说明当前模式至少没把 JTAG 通道堵死。
注意:拨码开关手感很轻,容易只拨了一半。拨完用手指压一遍确认全部到位,接触不良表现为"有时能扫到有时扫不到"。
4.2 .SOF 转 .JIC 写进 EPCS128
JTAG 模式下载的是 .SOF,掉电即失,适合调试。要让板子脱机上电就跑起来,得把配置数据烧进 EPCS128(128Mbit,即 16MB)。这一步的关键是把 .SOF 转成 .JIC。
图形界面在 Programmer 里走 File → Convert Programming Files,选 JTAG Indirect Configuration File (.jic),Configuration device 选 EPCS128,Flash Loader 指定 Cyclone V 对应器件,然后 Add File 把 .SOF 加进 SOF Data 区,生成。熟练之后我更喜欢用转换设置文件,改一次参数反复用。
# 先生成 convert.cof 转换设置,之后一条命令反复出 JIC quartus_cpf -c de1soc_top.cof # 产物 de1soc_top.jic 用 Programmer 烧到 EPCS128-c表示按设置文件执行转换,.cof里固化了输入 .SOF、输出 .JIC、目标器件和 Flash Loader 版本。改逻辑后只要重新综合出 .SOF,同名覆盖再跑一次这条命令即可,比每次点一遍向导稳。烧写时 Programmer 里 Mode 选 Active Serial Programming,Program/Configure 勾上,Start 之后看进度条走完。
烧完把 MSEL 拨回 AS 组合,断电再上电。判断是否真烧进去了,看板上的配置完成指示:如果 FPGA 没配起来,用户 LED 和行为会明显不对——这时候别怀疑逻辑写错,先回头确认 .JIC 里的 Flash Loader 器件型号和板上器件一致。
4.3 HPS 侧:System Builder 生成 GHRD 与 SD 卡首次启动
HPS 侧是另一条线。手册第 4 章讲 DE1-SoC System Builder,它的作用是根据板级参数生成一份 Qsys 系统加配套的 GHRD 工程,把 HPS 的引脚复用、时钟、存储接口一次性配好。不跑这一步直接手搓 Qsys,DDR3 时序和引脚分配能让人怀疑人生。
# 在 SoC EDS 的 Embedded Command Shell 中生成 Qsys 系统 cd $TOP_FOLDER/ghrd qsys-generate soc_system.qsys --synthesis=VERILOG --output-directory=.--synthesis=VERILOG指定输出 Verilog 形式的系统,--output-directory控制产物落点,务必和 Quartus 工程的引用路径一致。生成完成后在 Quartus 里打开顶层工程,全编译应该能过;编译报 HPS 相关引脚冲突,八成是 System Builder 里板卡型号选错了。
系统跑起来需要 SD 卡里有可引导镜像。把 System CD 里的 Linux 镜像写到卡上,Windows 用 Win32DiskImager,Linux/macOS 下用 dd,注意of=后面必须是整盘设备而不是分区。
# 写卡前用 diskutil list / lsblk 确认目标盘,写错盘会把主机系统干掉 sudo dd if=de1soc_linux.img of=/dev/disk4 bs=4m && sync写完插卡、MSEL 拨到 HPS 引导 FPGA 的组合、上电,串口终端里应该能看到 U-Boot 的启动日志一路走到 Linux 登录提示符。第一次启动可能要一两分钟,别急着断电。
5. 排查:五条翻车记录和对应的救法
5.1 Programmer 扫不到 5CSEMA5
现象:Hardware Setup 里已经选中 USB-Blaster II,Auto Detect 转圈之后报"Unable to scan device chain"。
原因:三种可能,MSEL 拨在非 JTAG 组合把 JTAG 通道让出去了;12V 电源没接只靠 USB 供电;或者驱动装了但被另一个进程占用(比如之前开的 SignalTap 没关)。
解决:先确认 12V 适配器灯亮,再把 MSEL 整体拨到 JTAG 组合,关掉所有 Quartus 相关进程重开 Programmer。三步走完还不行,才去设备管理器里卸掉设备重新指驱动目录。
5.2 LED 能亮但串口一片空白
现象:板上用户 LED 有反应,说明 FPGA 配起来了,但串口终端回车无回显。
原因:波特率或流控不对,或者根本没跑到 Linux 那一层。DE1-SoC 的 UART 固定 115200 8N1 无流控,PuTTY 默认流控是 RTS/CTS,这个默认值会直接把回显吃掉。
解决:流控改 None,重新连。仍然空白就确认当前跑的到底是 FPGA 例程还是 HPS 镜像——纯 FPGA 例程根本不会输出串口,属于正常而非故障。
5.3 JIC 烧完断电重启不生效
现象:Active Serial Programming 显示 100% 成功,拨回 AS 模式断电重启,板子行为跟没烧一样。
原因:转换 .JIC 时 Flash Loader 器件选成了别的容量,或者 SOF Data 里的偏移地址没按默认页对齐;也可能是烧写过程中 MSEL 还停在 JTAG,Programmer 实际写到了错误区域。
解决:重新走一遍 Convert Programming Files,Flash Loader 严格选 5CSEMA5,页偏移保持默认。烧写前先把 MSEL 拨到 AS,烧完直接断电重启,中间不再改拨码。
5.4 Qsys 生成成功但 Quartus 全编译报引脚冲突
现象:qsys-generate无报错,回到 Quartus 编译时一堆 HPS 引脚分配冲突。
原因:System Builder 里板卡型号或 DDR3 参数选错,生成了一套和实物不匹配的引脚约束;或者工程里残着上一版.qsf的旧分配。
解决:用 System Builder 重新生成,覆盖前把工程里旧的引脚分配段清干净。改板级参数这种事,宁可重跑一遍生成器,也不要手工去.qsf里打补丁。
5.5 SD 卡写完插上没反应
现象:dd 或 Win32DiskImager 显示写入成功,插卡上电后串口毫无输出,板子像是没启动。
原因:写到了分区而不是整盘;或者卡本身兼容性差,板子对 Micro SD 卡的识别比较挑。
解决:用lsblk或diskutil list确认of=是/dev/sdX、/dev/disk4这种整盘节点。换一张容量适中、速度等级普通的卡再试,超大容量高速卡反而容易出问题。
6. 装完怎么验证:三道关都过才算跑通
环境装完不能只看"软件能打开",要分三层验证,每一层都有明确的通过标志。这套顺序我每次都强制走一遍,因为跳过任何一层,后面出的问题都会伪装成别的原因。
第一层,JTAG 链。打开 Programmer,Hardware Setup 选中 USB-Blaster II,Auto Detect 扫描。能在链上看到 5CSEMA5 这个器件,并且后面跟着 EPCS128,就说明下载通道和配置器件都活着。
第二层,FPGA 侧。找一个最简单的例程编译下载,比如手册第 3.6.1 节的用户按键、拨码开关和 LED 部分。烧 .SOF 后拨动 SW 开关,看对应的红色用户 LED 是否跟随变化;按一下 KEY,看行为是否符合预期。这一层过不了,问题一定在引脚分配或时钟,别往 HPS 那边找。
第三层,HPS 侧。SD 卡插好、MSEL 拨到 HPS 引导组合、串口 115200 8N1 无流控、上电。串口里应该依次出现 U-Boot 版本信息、DDR3 容量、内核解压日志,最后停在登录提示符。
| 验证层 | 通过标志 | 失败优先查 |
|---|---|---|
| JTAG 链 | Auto Detect 列出 5CSEMA5 与 EPCS128 | 12V 供电、MSEL 拨码、驱动 |
| FPGA 逻辑 | 拨码/按键能驱动对应 LED | 引脚分配、.qsf 残留 |
| HPS 系统 | 串口输出到 Linux 登录提示符 | SD 卡写入方式、流控、MSEL |
想再确认时钟和存储没暗病,可以跑手册 3.5 节的时钟电路相关例程,配合 SDRAM Test 例程做一轮读写。这类测试跑通,说明 64MB SDRAM 的数据总线和那四路 50MHz 时钟源都是好的,后面写自己的逻辑才有底气。
从那以后我每次拿到一块新板子,都会把这三层验证当固定动作走完,哪怕只是借来临时跑个例程——因为省下的那二十分钟,往往要用两个下午来还。希望帮到你。
本文还有配套的精品资源,点击获取