我们将使用 功能仿真 作为核心,因为它验证的是设计逻辑的正确性,速度快,是仿真流程中最关键的一步,本教程将以一个简单的 2选1多路选择器 为例,带你一步步完成整个仿真过程。

教程概述
- 准备工作:安装软件和创建工程。
- 设计输入:编写 Verilog HDL 代码。
- 创建波形文件:设置仿真激励信号。
- 运行仿真:执行仿真并查看结果。
- 分析结果:判断仿真是否通过。
- 总结与进阶:回顾流程和推荐下一步学习。
第一步:准备工作
1 软件安装
确保你已经安装了 Quartus II 软件,对于初学者,建议使用 Quartus II Web Edition,它是免费的,功能足够强大。
2 创建新工程
如果你还没有一个工程,需要先创建一个。
- 打开 Quartus II。
- 选择
File->New Project Wizard...。 - 按照向导提示,填写工程名称、保存路径,并选择你之前创建的顶层设计文件(在下一步中创建)。
- 在
Family和Device设置页面,你可以暂时选择一个通用的 FPGA/CPLD 器件,或者选择Auto device selected by Filter,因为我们现在只做仿真,不涉及综合和布线,所以具体型号不重要。 - 完成向导,工程创建完毕。
第二步:设计输入
我们将创建一个 2选1 多路选择器。
1 创建 Verilog 文件
- 在 Quartus II 主界面,选择
File->New。 - 在弹出的对话框中,选择
Verilog HDL File,然后点击OK。 - 打开一个空的文本编辑器窗口。
2 编写代码
在文本编辑器中输入以下 2选1 多路选择器的 Verilog 代码:

// File: mux2to1.v
// Description: A 2-to-1 Multiplexer
module mux2to1 (
input wire a, // Data input 0
input wire b, // Data input 1
input wire sel, // Select signal
output wire out // Output
);
// Use a continuous assignment statement to model the mux
// If sel is 1, choose b. Otherwise, choose a.
assign out = sel ? b : a;
endmodule
3 保存并添加到工程
- 点击保存按钮,将文件命名为
mux2to1.v。 - 在工程导航窗口(
Project Navigator->Hierarchy或Files标签页)中,右键点击Add/Remove Files in Project...。 - 在弹出的对话框中,选择刚刚保存的
mux2to1.v,点击Add,然后点击OK。
第三步:创建波形文件
这是仿真的核心步骤,我们需要告诉仿真器在什么时间、给输入信号施加什么样的值。
1 创建 Vector Waveform File (VWF)
- 在 Quartus II 主界面,选择
File->New。 - 在弹出的对话框中,选择
Vector Waveform File,然后点击OK。 - 一个空白的波形编辑器窗口会打开。
2 添加节点
我们需要将设计的输入/输出信号添加到波形图中。
- 在波形编辑器窗口左侧的
Name区域空白处右键单击,选择Insert->Insert Node or Bus...。 - 在弹出的对话框中,点击
Node Finder...按钮。 - 在
Node Finder窗口中:Filter下拉菜单选择Pins: all。- 点击
List按钮。 - 在
Nodes Found列表中,会显示出你设计中的所有信号(a,b,sel,out)。 - 使用
>>按钮将所有信号添加到右侧的Selected Nodes列表中。 - 点击
OK关闭Node Finder。
- 再次点击
OK关闭Insert Node or Bus对话框,所有信号都出现在波形编辑器中。
3 设置仿真时间
- 在波形编辑器顶部,你会看到时间刻度(如
100 ns)。 - 在时间刻度上右键单击,选择
End Time...。 - 设置一个合适的总仿真时间,
1 us(1000000 ns),然后点击OK。
4 编辑激励信号
我们需要为输入信号 a, b, sel 设置变化,以测试我们的多路选择器。
-
选中信号:在
Name列中点击sel信号名,选中整行。
(图片来源网络,侵删) -
设置初始值:在左侧工具栏中,点击 高电平 按钮
1,将sel初始值设为1。 -
设置变化时间:
- 在时间轴上,将光标拖动到
200 ns的位置。 - 在
sel信号行上,从0 ns到200 ns的区域左键拖动选中它。 - 点击左侧工具栏的 低电平 按钮
0,将sel在0-200ns区间设为0。 sel的波形是:0-200ns为0,200ns-1us为1。
- 在时间轴上,将光标拖动到
-
为
a和b设置不同波形:- 选中
a信号,点击工具栏的 时钟周期 按钮,在弹出的对话框中,设置Count every为100 ns,这样a信号就会以 100ns 的周期(50%占空比)自动在 0 和 1 之间切换。 - 选中
b信号,同样点击时钟周期按钮,但这次设置Count every为50 ns,这样b信号的频率是a的两倍。
- 选中
你的波形图现在应该看起来像这样:
| Time (ns) | sel | a | b | out (预期) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 50 | 0 | 0 | 1 | 0 |
| 100 | 0 | 1 | 0 | 1 |
| 150 | 0 | 1 | 1 | 1 |
| 200 | 1 | 1 | 1 | 1 |
| 250 | 1 | 1 | 0 | 0 |
| 300 | 1 | 0 | 0 | 0 |
| 350 | 1 | 0 | 1 | 1 |
| 400 | 1 | 1 | 0 | 0 |
| ... | ... | ... | ... | ... |
- 保存波形文件:点击保存按钮,将其命名为
simulation.vwf。
第四步:运行仿真
1 设置仿真器
- 在 Quartus II 主界面,选择
Assignments->Settings...。 - 在左侧导航栏中,展开
EDA Tool Settings,然后选择Simulation。 - 在右侧的
NativeLink settings中:Tool name选择ModelSim(这是 Quartus II 集成的标准仿真器)。Format选择Verilog HDL。- 确保
Run simulation script after compilation勾选。
- 点击
OK保存设置。
2 启动功能仿真
- 在 Quartus II 主界面,选择
Processing->Start Simulation。 - Quartus II 会自动完成以下步骤:
- 分析:检查代码语法。
- 综合:将 HDL 代码转换为门级网表。
- 生成仿真网表:为仿真器创建一个专门的模型。
- 启动 ModelSim:自动调用 ModelSim-Altera (现在是 Intel® Quartus® Prime Pro Edition 自带的 ModelSim),并加载你的设计、波形文件和仿真库。
3 在 ModelSim 中查看结果
如果一切顺利,ModelSim 界面将会弹出。
- 在 ModelSim 的主窗口中,会自动执行
vsim -do vsim.do等脚本,加载了设计并运行了仿真。 - 在 Objects 窗口中,你应该能看到
a,b,sel,out这些信号。 - 在 Wave 窗口中,你会看到
a,b,sel的波形,out信号的波形也已经根据计算结果绘制出来了。
第五步:分析结果
最关键的一步来了:检查 out 信号是否正确。
-
分析逻辑:
- 当
sel = 0时(0-200ns),out应该等于a的值,观察波形,out是否完全跟随a变化?(在 100ns 时a变为 1,out也应该立即变为 1)。 - 当
sel = 1时(200ns-1us),out应该等于b的值,观察波形,out是否完全跟随b变化?(在 250ns 时b变为 0,out也应该立即变为 0)。
- 当
-
判断成功:
out的波形完全符合上述逻辑,那么恭喜你,你的设计在功能上是正确的,仿真通过!
第六步:总结与进阶
你已经成功完成了 Quartus II 的完整功能仿真流程:
- 创建工程和设计文件。
- 创建波形文件并设置激励。
- 运行仿真。
- 分析波形结果。
这个流程是数字设计验证的基础,无论是做 FPGA 还是 ASIC 项目,都离不开它。
常见问题与解决
- 仿真没有启动:检查
Settings->EDA Tool Settings->Simulation中的设置是否正确,特别是Tool name和Format。 - 波形为全 X (Unknown):
- 通常是因为没有正确地将设计文件添加到工程中。
- 或者是
Node Finder中没有找到信号。 - 检查你的 Verilog 代码是否有语法错误。
- ModelSim 报错:仔细阅读错误信息,通常是文件路径或库路径的问题,确保 Quartus II 能找到 ModelSim 的可执行文件。
进阶学习
- 时序仿真:功能仿真只验证逻辑,不考虑实际硬件中的延迟,时序仿真会包含综合后布局布线产生的延时信息,能更真实地反映电路在 FPGA 上的行为,时序仿真的前提是成功完成
Processing->Start Compilation(全编译)。 - Testbench:对于复杂的设计,手动编辑波形文件非常繁琐,更专业的方法是编写一个 Testbench(测试平台)文件,Testbench 本身也是一个 Verilog 模块,它实例化你的设计(DUT - Design Under Test),并使用
initial和always块等结构来动态生成激励信号,这是工业界标准的验证方法。
希望这份详细的教程能帮助你顺利入门 Quartus II 仿真!
