news 2026/2/12 10:13:57

数字电路实验图解说明:Quartus中时序逻辑电路设计流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数字电路实验图解说明:Quartus中时序逻辑电路设计流程

从零开始搞懂FPGA:用Quartus设计一个会“记数”的电路

你有没有想过,电脑是怎么记住当前状态的?键盘敲下的每一个字符、程序运行的每一步跳转,背后都离不开一类特殊的数字电路——时序逻辑电路。它不像组合逻辑那样“健忘”,而是能记住过去的状态,并据此决定下一步动作。

在电子工程实验中,我们常通过 FPGA(现场可编程门阵列)来实现这类电路。而Intel Quartus Prime就是打开这扇大门的钥匙。今天,我们就以一个经典的“四位计数器”为例,带你一步步走过从写代码到点亮数码管的全过程,把抽象的时序逻辑变成看得见、摸得着的结果。


为什么需要“记忆”?时序电路的本质是什么?

先问一个问题:如果只给你一堆与门、或门、非门,你能做出一个自动递增的计数器吗?

答案是——不能。因为这些元件属于组合逻辑,输出完全由当前输入决定,没有“记忆力”。比如一个加法器,你给它3+4,它就出7;但如果你不告诉它上一次是多少,它永远不知道“下一个该是多少”。

要让电路具备记忆能力,就必须引入触发器(Flip-Flop)。最常见的就是D触发器:它会在每个时钟上升沿把输入 D 的值“锁”进内部,然后从 Q 输出。只要时钟不来,Q 就一直保持不变。

这就构成了时序逻辑的核心机制:

输出 = f(当前输入, 当前状态)
而“当前状态”是由触发器保存的,靠时钟统一驱动更新。

于是我们可以构建出:
- 计数器(每拍加一)
- 状态机(按流程切换状态)
- 寄存器堆(暂存数据)
- 甚至CPU控制单元

它们共同的特点是:有序、可控、可预测,而这正是现代数字系统稳定运行的基础。


开发工具怎么选?Quartus到底强在哪?

市面上做FPGA开发的工具有不少,Xilinx有Vivado,Lattice有Diamond……但我们这里用的是Quartus Prime,原因很简单:高校教学用得多、资料全、免费版够用

更重要的是,它对初学者非常友好。哪怕你是第一次接触HDL语言,也能快速上手完成一次完整的设计闭环。

它能干什么?

功能说明
✅ 写代码支持 Verilog 和 VHDL
✅ 画图可以用原理图方式搭建模块(适合入门)
✅ 综合把你的代码翻译成实际的逻辑门和寄存器
✅ 引脚分配拖拽式指定哪个信号连哪个物理引脚
✅ 仿真看波形验证功能是否正确
✅ 下载一键烧录到开发板

而且它自带和ModelSim的联动功能,仿真起来毫不费力。

最关键的是,它的Lite Edition(免费版)完全支持 Cyclone IV/V 系列芯片,正好匹配很多学校实验室用的 DE0-CV、DE10-Lite 这类开发板。


实战案例:做个会自己数数的电路

我们现在就动手做一个带清零和使能的四位同步计数器,让它接在七段数码管上,自动从0数到9再归零,循环往复。

系统结构长什么样?

整个系统的信号流如下:

[50MHz晶振] ↓ [分频器] → 产生1Hz时钟(太快三位看不清) ↓ [计数器] → 每秒+1,到9后归零 ↓ [BCD译码器] → 转换成七段码 ↓ [数码管显示]

同时,我们还会用4个LED灯直接显示低四位二进制值,方便调试。

目标开发板是DE0-CV,主控为 Cyclone V FPGA(型号 EP4CE22E22C7)。


第一步:写代码——让电路“学会计数”

我们用 Verilog 来描述这个计数器的行为。别怕,不需要精通语法,关键是要理解逻辑意图。

// 文件名:counter_4bit.v module counter_4bit ( input clk, // 50MHz 主时钟 input rst_n, // 低电平有效复位 input en, // 计数使能 output reg [3:0] count // 4位计数输出 ); always @(posedge clk) begin if (!rst_n) count <= 4'b0000; // 异步清零 else if (en) begin if (count == 4'd9) count <= 4'b0000; // 数到9就归零 else count <= count + 1'b1; end end endmodule

这段代码的关键点在于:

  • always @(posedge clk)表示“只有当时钟上升沿到来时才执行”
  • !rst_n判断复位是否按下(低电平有效),优先级最高
  • en是使能信号,相当于“启动开关”
  • count == 4'd9实现模10计数,正好对应一位数码管
  • 使用非阻塞赋值<=,这是时序逻辑的标准写法

⚠️ 注意:如果你在else分支里漏写了en的情况,综合器可能会误判并生成锁存器(latch),带来功耗和时序问题!一定要确保所有路径都有明确赋值。


第二步:测试一下——别急着下载,先仿真!

代码写完不能直接下板子,万一逻辑错了呢?我们要先做功能仿真,看看它是不是真的会“数数”。

写个 Testbench(测试激励)

// 文件名:tb_counter.v `timescale 1ns / 1ps module tb_counter; reg clk, rst_n, en; wire [3:0] count; // 实例化被测模块 counter_4bit uut ( .clk(clk), .rst_n(rst_n), .en(en), .count(count) ); // 生成50MHz时钟(周期20ns) initial begin clk = 0; forever #10 clk = ~clk; // 半周期10ns end // 施加测试信号 initial begin rst_n = 0; // 上电复位 en = 0; #25; // 延迟25ns rst_n = 1; // 释放复位 #100; en = 1; // 启动计数 #400; // 观察四个周期 $stop; // 停止仿真 end endmodule

这个 testbench 干了三件事:
1. 生成一个稳定的 50MHz 方波作为时钟;
2. 模拟真实上电过程:先拉低复位,再释放;
3. 在适当时间打开使能,观察计数行为。

然后我们在 Quartus 中点击Tools → Run Simulation Tool → RTL Simulation,自动调起 ModelSim,就能看到波形了。

波形结果说明什么?

你会看到这样的关键信号变化:

  • clk:规整的方波,周期20ns
  • rst_n:开始为0,约25ns后变高
  • count:复位期间为0;使能后开始递增,每次+1
  • count=9后,下一拍回到0,完美循环

✅ 至此,功能正确性已验证。但这只是理想情况,还没考虑走线延迟、竞争冒险等问题。


第三步:编译 + 时序分析——现实世界没那么理想

接下来执行全编译(Processing → Start Compilation)。这个过程包括:

  1. 综合(Synthesis):将Verilog转为逻辑网表
  2. 布局布线(Fitter):把逻辑映射到FPGA的具体资源上
  3. 时序分析(Timing Analyzer):检查能否跑在目标频率下

编译完成后,打开Timing Analysis Report,重点关注两个指标:

项目含义
Minimum Clock Period最小时钟周期,本例约为8ns → 支持约125MHz
Setup Slack建立时间裕量,必须 >0 才安全

我们的设计工作在50MHz(周期20ns),远低于极限,所以肯定没问题。

但如果出现负的 slack(即时序违例),你就得优化设计了——比如拆分成更多级流水、减少组合逻辑层级,或者降低频率。


第四步:连接真实世界——引脚分配与下载

现在可以把它“焊”到开发板上了。当然不是真焊接,而是通过Pin Planner把信号绑定到具体引脚。

打开 Assignment → Pin Planner,填入以下典型配置:

信号FPGA引脚对应硬件
clkPIN_Y2板载50MHz晶振
rst_nPIN_R8KEY0 按键(低电平触发)
enPIN_T8SW0 拨码开关
count[0]PIN_A13LEDR0
count[1]PIN_B13LEDR1
count[2]PIN_C13LEDR2
count[3]PIN_E13LEDR3

📌 提醒:务必核对开发板手册,避免误用配置引脚或电源引脚!

配置完成后重新编译,生成.sof文件。

插入 USB-Blaster 下载线,打开 Programmer 工具,选择 JTAG 模式,点击 “Start” —— 几秒钟后,你就会看到LED灯开始闪烁,数码管也开始自动递增!

🎉 成功了!你的第一个时序逻辑电路跑起来了。


高阶技巧与避坑指南

别高兴太早,实战中还有很多细节需要注意。下面是一些老工程师都不会轻易告诉你的经验。

1. 模块化设计才是王道

不要把所有逻辑写在一个文件里。建议拆分为:
-counter_4bit.v:核心计数
-seg7_decoder.v:BCD转七段码
-clock_divider.v:分频器(把50MHz降到1Hz)

这样便于复用和调试。

2. 参数化让你更灵活

别写死宽度和模值,改成参数:

module counter_param #( parameter WIDTH = 4, MODULUS = 10 )(...);

以后想做个8位计数器?改个参数就行。

3. 时钟要用全局网络

高频时钟信号一定要走专用全局时钟线(Global Clock Buffer),否则偏移太大容易出错。Quartus 通常会自动推断,但最好显式使用 PLL 或create_clock约束。

4. 调试神器:SignalTap II

你想看内部某个中间信号?可以用SignalTap II Logic Analyzer,相当于在FPGA里嵌入一台示波器。

设置触发条件,抓取内部寄存器值,特别适合查状态机卡死、信号异常等问题。

5. 防止锁存器意外生成

再次强调:always 块中必须覆盖所有分支赋值

错误示范:

if (sel) out = a; // else 没写 → 综合出锁存器!

正确做法是补上else out = b;或默认赋值。


写在最后:从实验走向系统设计

通过这样一个简单的计数器实验,你已经走完了FPGA开发的完整流程:

写代码 → 仿真 → 编译 → 引脚约束 → 下载验证

这不是终点,而是起点。有了这套方法论,你可以继续挑战:

  • 设计一个交通灯控制器(有限状态机)
  • 实现UART串口收发(时序+状态管理)
  • 构建流水线CPU(多模块协同)

每一次成功下载,都是你对数字世界的又一次掌控。

如果你也曾在仿真波形里找bug到深夜,也曾在引脚配错时怀疑人生——欢迎留言分享你的“踩坑史”。毕竟,每个优秀的FPGA工程师,都是从一次次$stop中走出来的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 14:37:27

低成本语音定制方案:基于GPT-SoVITS的轻量级训练实践

低成本语音定制方案&#xff1a;基于GPT-SoVITS的轻量级训练实践 在智能语音助手、虚拟主播和无障碍服务日益普及的今天&#xff0c;用户对“个性化声音”的需求正从奢侈走向必需。然而&#xff0c;传统语音合成系统动辄需要数小时的专业录音与高昂的训练成本&#xff0c;让大多…

作者头像 李华
网站建设 2026/2/10 9:41:38

GPT-SoVITS能否实现语音性别转换?技术实测

GPT-SoVITS能否实现语音性别转换&#xff1f;技术实测 在虚拟主播、AI配音和无障碍交互日益普及的今天&#xff0c;一个现实而迫切的问题摆在开发者面前&#xff1a;如何用最少的数据&#xff0c;把一段男声自然地“变”成女声&#xff0c;或者反过来&#xff0c;而不失真、不…

作者头像 李华
网站建设 2026/2/11 2:18:14

B站音频下载终极指南:无损提取与批量处理完整教程

B站音频下载终极指南&#xff1a;无损提取与批量处理完整教程 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…

作者头像 李华
网站建设 2026/2/12 8:34:43

HashCheck Windows文件校验工具完全指南

HashCheck Windows文件校验工具完全指南 【免费下载链接】HashCheck HashCheck Shell Extension for Windows with added SHA2, SHA3, and multithreading; originally from code.kliu.org 项目地址: https://gitcode.com/gh_mirrors/ha/HashCheck HashCheck 是一款专为…

作者头像 李华
网站建设 2026/2/7 21:46:45

5个真实痛点告诉你为什么需要.NET Windows Desktop Runtime

当你开发Windows桌面应用时&#xff0c;是否经常遇到这些问题&#xff1a;不同系统版本兼容性差、部署过程复杂、多语言支持困难&#xff1f;这些问题正是.NET Windows Desktop Runtime要帮你解决的核心痛点。作为专门支持Windows Forms和WPF应用程序的运行时环境&#xff0c;它…

作者头像 李华
网站建设 2026/2/8 11:18:59

Boss-Key隐私保护工具终极指南:告别职场尴尬时刻

还记得那个让你心跳加速的场景吗&#xff1f;老板突然出现在身后&#xff0c;而你正在浏览私人网页&#xff1b;同事无意间瞥见你的聊天窗口&#xff1b;会议投影时不小心打开了不该出现的应用……这些尴尬时刻是否曾让你手足无措&#xff1f; 【免费下载链接】Boss-Key 老板来…

作者头像 李华