跳转到内容
新建笔记

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 为准。

目标:能区分设计源、仿真源和约束文件,并建立一个可重复运行的最小工程。

建议任务:

  1. 用逻辑仿真器搭建两个输入的基本门电路,逐项核对真值表。
  2. 建立一个 SystemVerilog 工程,分别放置 RTL、Testbench 和约束文件。
  3. 确认目标 FPGA 的完整料号、输入时钟、I/O 电压、板载外设有效电平和官方约束文件。
  4. 跑通一次“仿真 -> 综合 -> 实现 -> 生成 Bitstream”,但暂不把“生成成功”当作功能正确。

完成标准:工程可从干净目录重建;器件型号和时钟频率有明确依据;能解释各类输入与各阶段产物。具体流程见 Vivado 从 RTL 到上板。

目标:从规格和真值表得到无锁存器、无组合环的组合电路。

实验应掌握最低检查
基本逻辑门布尔表达式、真值表、结构级与数据流描述穷举全部输入
多路选择器条件选择、默认赋值、优先级每路选择和非法选择
编码器/译码器独热码、优先编码、有效位多输入同时有效与无输入
加法器/比较器位宽、进位、有符号与无符号边界值、溢出和随机向量
七段显示译码查表逻辑、段选极性0~F 和空白显示

实现前先写输入、输出、位宽和非法输入行为。always_comb 必须对所有输出完整赋值;常量写明尺寸和进制。相关理论见组合逻辑与时序逻辑和组合逻辑与时序 RTL。

完成标准:Testbench 能穷举小输入空间或使用参考模型自动比较;综合报告无意外锁存器、位宽截断和多驱动。

目标:理解状态只在时钟事件更新,并能把复位、使能、装载和计数优先级写成明确规格。

推荐顺序:D 触发器 -> 并行寄存器 -> 移位寄存器 -> 可装载计数器 -> 分频计数与时钟使能。

flowchart LR
D["组合逻辑 D"] --> FF["触发器 / 寄存器"] --> Q["状态 Q"]
Q --> D
CLK["全局时钟"] --> FF
RST["复位"] --> FF
EN["使能"] --> D

关键检查:

  • 明确同步/异步复位及其有效电平;异步复位释放需要同步处理。
  • 用 always_ff 和非阻塞赋值描述寄存器。
  • 用时钟使能产生慢速更新,不在普通逻辑中随意制造新时钟。
  • 机械按键先同步、消抖、边沿检测,不能直接充当 FPGA 时钟。
  • 测试复位、保持、装载、回绕以及多个控制同时有效时的优先级。

完成标准:波形和断言都能证明状态只在规定边沿改变;时钟与复位结构通过综合和 CDC 检查。继续阅读时序基础和时钟、复位与 CDC。

目标:先从协议或行为画出状态图,再实现可读、可恢复、可验证的控制器。

可选题目:序列检测器、交通灯控制器、按键密码锁或简化串行接收控制器。题目不是重点,重点是完整定义:状态含义、转移条件、输出时机、复位状态、非法状态恢复。

stateDiagram-v2
[*] --> Idle
Idle --> Active: start
Active --> Done: complete
Active --> Error: timeout / invalid
Done --> Idle: acknowledge
Error --> Idle: clear

对 Moore/Mealy 的选择取决于输出是否需要立即响应输入,以及接口能否接受组合路径。采用二段式或三段式都可以,但状态寄存器、下一状态逻辑和输出逻辑的职责必须清楚。实现方法见有限状态机。

完成标准:自动覆盖每个合法状态和转移;验证非法输入、超时、复位中断与默认恢复;状态输出不存在未预期毛刺。

每个实验至少保留一套自检 Testbench,不以肉眼看波形代替判定。

flowchart LR
GEN["激励"] --> DUT["DUT"] --> OBS["采样"] --> CHECK["参考模型 / 断言"]
GEN --> CHECK
CHECK --> RESULT["通过 / 失败与上下文"]

最低要求:

  1. Testbench 声明 timeunit / timeprecision,驱动和采样避开竞态。
  2. 覆盖正常、边界、复位、非法输入和恢复场景,并设置超时。
  3. XDC 定义真实主时钟、I/O 管脚与电气标准;不能只抄另一块板的约束。
  4. 综合后检查锁存器、组合环、位宽、多驱动和资源推断。
  5. 实现后检查未约束路径、建立/保持时序、DRC、CDC 和资源利用率。

详细方法见仿真与自检 Testbench和约束与时序收敛。

按“基础设施优先、一次只增加一个变量”的顺序联调:

  1. 核对板卡型号、电源、JTAG、配置模式和主时钟。
  2. 先验证时钟与复位,再验证一个 LED 或串口等最小可观测通路。
  3. 给异步输入加同步器;给按键加消抖;确认 LED、数码管的有效电平和限流电路。
  4. 分模块暴露状态或计数值,必要时使用 ILA,不依赖反复猜测。
  5. 记录 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 等内容只适合作为选题线索;协议、电平、时序和连接方式必须回到器件及板卡资料核验。
  • 原仓库没有许可证。本页未复制其图片、代码或大段正文,只保留来源、实验主题与经过重新校核的学习路线。

原始目录、维护状态和已知问题记录在来源页。