USTC VLab 数字电路实验路线
这条路线保留原教程“门电路 -> 组合逻辑 -> 时序逻辑 -> 有限状态机 -> FPGA 验证”的主线,但不复刻旧页面。实验说明、完成条件和工程规则均按当前笔记体系重新编排。
全程路线
跳转到“全程路线”flowchart TD A["0. 工具与硬件准备<br/>仿真器、工程、板卡资料"] --> B["1. 门与组合逻辑<br/>真值表、化简、译码与运算"] B --> C["2. 时序逻辑<br/>触发器、寄存器、计数器"] C --> D["3. 有限状态机<br/>状态、转移、输出与恢复"] D --> E["4. 验证与实现<br/>自检仿真、约束、时序报告"] E --> F["5. 上板联调<br/>时钟复位、I/O 与问题定位"] T["Testbench 与检查清单"] -. "贯穿每一步" .-> B T -.-> C T -.-> D T -.-> E先阅读数字逻辑基础,再根据需要补充 Verilog-2001 图解教程。准备写工程级 RTL 时,以 Verilog / SystemVerilog 为准。
0. 工具与硬件准备
跳转到“0. 工具与硬件准备”目标:能区分设计源、仿真源和约束文件,并建立一个可重复运行的最小工程。
建议任务:
- 用逻辑仿真器搭建两个输入的基本门电路,逐项核对真值表。
- 建立一个 SystemVerilog 工程,分别放置 RTL、Testbench 和约束文件。
- 确认目标 FPGA 的完整料号、输入时钟、I/O 电压、板载外设有效电平和官方约束文件。
- 跑通一次“仿真 -> 综合 -> 实现 -> 生成 Bitstream”,但暂不把“生成成功”当作功能正确。
完成标准:工程可从干净目录重建;器件型号和时钟频率有明确依据;能解释各类输入与各阶段产物。具体流程见 Vivado 从 RTL 到上板。
1. 门与组合逻辑
跳转到“1. 门与组合逻辑”目标:从规格和真值表得到无锁存器、无组合环的组合电路。
| 实验 | 应掌握 | 最低检查 |
|---|---|---|
| 基本逻辑门 | 布尔表达式、真值表、结构级与数据流描述 | 穷举全部输入 |
| 多路选择器 | 条件选择、默认赋值、优先级 | 每路选择和非法选择 |
| 编码器/译码器 | 独热码、优先编码、有效位 | 多输入同时有效与无输入 |
| 加法器/比较器 | 位宽、进位、有符号与无符号 | 边界值、溢出和随机向量 |
| 七段显示译码 | 查表逻辑、段选极性 | 0~F 和空白显示 |
实现前先写输入、输出、位宽和非法输入行为。always_comb 必须对所有输出完整赋值;常量写明尺寸和进制。相关理论见组合逻辑与时序逻辑和组合逻辑与时序 RTL。
完成标准:Testbench 能穷举小输入空间或使用参考模型自动比较;综合报告无意外锁存器、位宽截断和多驱动。
2. 时序逻辑
跳转到“2. 时序逻辑”目标:理解状态只在时钟事件更新,并能把复位、使能、装载和计数优先级写成明确规格。
推荐顺序:D 触发器 -> 并行寄存器 -> 移位寄存器 -> 可装载计数器 -> 分频计数与时钟使能。
flowchart LR D["组合逻辑 D"] --> FF["触发器 / 寄存器"] --> Q["状态 Q"] Q --> D CLK["全局时钟"] --> FF RST["复位"] --> FF EN["使能"] --> D关键检查:
- 明确同步/异步复位及其有效电平;异步复位释放需要同步处理。
- 用
always_ff和非阻塞赋值描述寄存器。 - 用时钟使能产生慢速更新,不在普通逻辑中随意制造新时钟。
- 机械按键先同步、消抖、边沿检测,不能直接充当 FPGA 时钟。
- 测试复位、保持、装载、回绕以及多个控制同时有效时的优先级。
完成标准:波形和断言都能证明状态只在规定边沿改变;时钟与复位结构通过综合和 CDC 检查。继续阅读时序基础和时钟、复位与 CDC。
3. 有限状态机
跳转到“3. 有限状态机”目标:先从协议或行为画出状态图,再实现可读、可恢复、可验证的控制器。
可选题目:序列检测器、交通灯控制器、按键密码锁或简化串行接收控制器。题目不是重点,重点是完整定义:状态含义、转移条件、输出时机、复位状态、非法状态恢复。
stateDiagram-v2 [*] --> Idle Idle --> Active: start Active --> Done: complete Active --> Error: timeout / invalid Done --> Idle: acknowledge Error --> Idle: clear对 Moore/Mealy 的选择取决于输出是否需要立即响应输入,以及接口能否接受组合路径。采用二段式或三段式都可以,但状态寄存器、下一状态逻辑和输出逻辑的职责必须清楚。实现方法见有限状态机。
完成标准:自动覆盖每个合法状态和转移;验证非法输入、超时、复位中断与默认恢复;状态输出不存在未预期毛刺。
4. 验证、约束与实现
跳转到“4. 验证、约束与实现”每个实验至少保留一套自检 Testbench,不以肉眼看波形代替判定。
flowchart LR GEN["激励"] --> DUT["DUT"] --> OBS["采样"] --> CHECK["参考模型 / 断言"] GEN --> CHECK CHECK --> RESULT["通过 / 失败与上下文"]最低要求:
- Testbench 声明
timeunit/timeprecision,驱动和采样避开竞态。 - 覆盖正常、边界、复位、非法输入和恢复场景,并设置超时。
- XDC 定义真实主时钟、I/O 管脚与电气标准;不能只抄另一块板的约束。
- 综合后检查锁存器、组合环、位宽、多驱动和资源推断。
- 实现后检查未约束路径、建立/保持时序、DRC、CDC 和资源利用率。
详细方法见仿真与自检 Testbench和约束与时序收敛。
5. 上板联调
跳转到“5. 上板联调”按“基础设施优先、一次只增加一个变量”的顺序联调:
- 核对板卡型号、电源、JTAG、配置模式和主时钟。
- 先验证时钟与复位,再验证一个 LED 或串口等最小可观测通路。
- 给异步输入加同步器;给按键加消抖;确认 LED、数码管的有效电平和限流电路。
- 分模块暴露状态或计数值,必要时使用 ILA,不依赖反复猜测。
- 记录 Bitstream 对应的提交、约束、工具版本和关键报告。
完成标准:板级结果可由仿真和报告解释;重新构建后行为一致;失败能定位到时钟/复位、约束、逻辑或物理接口中的一层。排查方法见 FPGA 调试。
现代化改写规则
跳转到“现代化改写规则”| 原教程情境 | 本笔记采用的规则 |
|---|---|
| Verilog 示例与无尺寸常量 | 优先 SystemVerilog:logic、always_comb、always_ff、明确位宽 |
| 固定延时后观察波形 | 事件驱动、自检、断言、超时和参考模型 |
| 用按键或逻辑分频输出作时钟 | 使用全局时钟、同步输入和时钟使能;新时钟必须经过时钟设计与约束 |
| 按旧界面逐步点击 Vivado | 关注源文件、约束和构建阶段;稳定工程保留 Tcl 或等价构建记录 |
| 直接套用开发板引脚 | 只接受目标板原理图、用户手册和官方约束提供的电气事实 |
| 看到 LED/数码管现象即完成 | 同时保留自动仿真、综合/时序报告和板级结果 |
适用边界
跳转到“适用边界”- 原教程的 Vivado 界面主要来自 2015.1/2019.1,当前版本的菜单和器件支持可能不同。
- Nexys4 DDR、Basys3 的管脚、极性和外设电路不能推广到其他开发板。
- VGA、RS-232、PS/2、LCD1602 等内容只适合作为选题线索;协议、电平、时序和连接方式必须回到器件及板卡资料核验。
- 原仓库没有许可证。本页未复制其图片、代码或大段正文,只保留来源、实验主题与经过重新校核的学习路线。
原始目录、维护状态和已知问题记录在来源页。