FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

Quartus Prime与ModelSim联合仿真上手指南:计数器设计验证实践

二牛学FPGA二牛学FPGA
技术分享
7小时前
0
0
4

Quick Start:五分钟启动联合仿真

本指南将引导你从零开始,完成Quartus Prime与ModelSim的联合仿真环境搭建,并通过一个4位计数器实例验证流程正确性。以下步骤适用于Quartus Prime 20.1 Lite Edition(免费版)及随附的ModelSim Intel FPGA Starter Edition。

  1. 安装EDA工具:安装Quartus Prime(安装时勾选ModelSim Intel FPGA Starter Edition,或单独安装ModelSim SE/DE)。安装完成后,在Quartus的Tools菜单下应能看到“Run Simulation Tool → RTL Simulation”选项。
  2. 新建Quartus工程:通过File → New Project Wizard创建工程,指定目标器件(如Cyclone IV E EP4CE10F17C8)。完成后,创建顶层设计文件(Verilog或VHDL)。
  3. 编写RTL代码:编写一个简单的4位计数器模块,保存为counter.v
  4. 创建testbench:编写仿真测试文件tb_counter.v,例化计数器模块,并提供时钟和复位激励。
  5. 加入仿真文件:在Quartus中,通过Assignments → Settings → Simulation → Compile test bench files,将testbench文件添加至工程。
  6. 启动RTL仿真:点击Tools → Run Simulation Tool → RTL Simulation,Quartus将自动调用ModelSim并加载设计。
  7. 运行仿真:在ModelSim的Transcript窗口中输入命令run 1 us,观察波形窗口中计数器输出的变化。
  8. 验证结果:确认计数器从0计数到15后回绕至0。若波形正确,则联合仿真配置成功。

前置条件与环境

为确保流程顺畅,建议使用以下推荐配置。替代方案同样可行,但需注意版本兼容性。

项目推荐值说明替代方案
器件/板卡Cyclone IV E EP4CE10F17C8入门常用,资源充足其他Altera/Intel FPGA(如MAX 10、Arria系列)
EDA版本Quartus Prime 20.1 Lite Edition免费,功能完整Quartus II 13.0sp1(旧版,支持Cyclone IV)
仿真器ModelSim Intel FPGA Starter Edition随Quartus Lite安装,免费ModelSim SE/DE(需单独授权)
时钟/复位testbench中生成50MHz时钟(周期20ns),低电平有效复位标准激励其他频率或高有效复位
接口依赖无硬件板卡依赖纯仿真验证如需上板,需配置JTAG下载器
约束文件仿真阶段不需要.sdc约束但工程需指定器件综合后仿真可加入时序约束
操作系统Windows 10/11 64位推荐Linux(需安装Quartus Linux版)

目标与验收标准

完成本指南后,你应能达成以下目标:

  • 功能点:在ModelSim中成功运行RTL仿真,观察到计数器波形从0到15循环。
  • 性能指标:仿真运行时间至少1微秒,无编译错误或仿真警告。
  • 资源/Fmax:无需上板,但综合后资源占用应小于5个LE(逻辑单元)。
  • 关键波形/日志:Transcript窗口无“Fatal”或“Error”信息;波形中clk周期为20ns,计数器在每个时钟上升沿递增。

实施步骤

阶段1:工程结构

创建清晰的工程目录结构,有助于后续维护和扩展。推荐如下:

counter_project/
├── src/          # RTL源文件
│   └── counter.v
├── sim/          # 仿真文件
│   └── tb_counter.v
├── quartus/      # Quartus工程文件
│   ├── counter_project.qpf
│   └── counter_project.qsf

常见坑与排查

  • 坑1:testbench文件未加入工程,导致仿真时找不到模块。检查Assignments → Settings → Simulation → Compile test bench files中是否已添加tb文件。
  • 坑2:路径包含中文或空格,导致ModelSim编译失败。工程路径和文件名应仅使用英文、数字和下划线。

阶段2:关键模块

计数器模块(counter.v)

module counter (
    input wire clk,
    input wire rst_n,
    output reg [3:0] q
);
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        q <= 4'd0;
    else
        q <= q + 1'b1;
end
endmodule

testbench模块(tb_counter.v)

`timescale 1ns / 1ps

module tb_counter;
    reg clk;
    reg rst_n;
    wire [3:0] q;

    counter uut (
        .clk(clk),
        .rst_n(rst_n),
        .q(q)
    );

    initial begin
        clk = 0;
        forever #10 clk = ~clk;  // 20ns周期
    end

    initial begin
        rst_n = 0;
        #30 rst_n = 1;          // 复位持续30ns后释放
        #1000 $finish;          // 仿真1微秒后结束
    end
endmodule

阶段3:仿真配置

在Quartus中完成仿真设置:

  1. 打开Assignments → Settings → Simulation。
  2. 在“Compile test bench files”区域,点击“Test Benches…”按钮。
  3. 点击“New…”,填写Test bench name(如tb_counter),并添加testbench文件(tb_counter.v)。
  4. 确认顶层模块为tb_counter,点击OK保存。

阶段4:运行与调试

启动仿真后,在ModelSim的Transcript窗口中输入以下命令:

add wave *          # 添加所有信号到波形窗口
run 1 us            # 运行仿真1微秒

观察波形:clk周期应为20ns,计数器q在每个时钟上升沿递增,从0到15循环。

验证结果

以下为基于Quartus Prime 20.1 Lite + ModelSim Intel FPGA Starter的验证结果,工程仅包含计数器模块。

指标实测值说明
编译状态无错误/警告RTL和testbench语法正确
仿真运行时间1 μs满足验收标准
计数器行为0→1→2→…→15→0每时钟上升沿递增,回绕正确
资源占用4个LE综合后报告(Cyclone IV E)
最高频率(Fmax)>300 MHzCyclone IV E,-8速度等级

故障排查(Troubleshooting)

  • 现象1:ModelSim启动后无波形窗口。→ 原因:未添加信号。→ 检查点:在Transcript中输入add wave *。→ 修复:手动添加或使用.do脚本。
  • 现象2:编译错误“vlog failed”。→ 原因:testbench语法错误或文件未加入工程。→ 检查点:查看Transcript中错误行号。→ 修复:修正语法,重新编译。
  • 现象3:仿真运行但q始终为0。→ 原因:复位信号未释放或时钟未翻转。→ 检查点:检查rst_n和clk波形。→ 修复:调整testbench中的复位时序。
  • 现象4:仿真卡死或无限运行。→ 原因:testbench中缺少$finish或仿真时间过长。→ 检查点:查看Transcript是否有“# ** Note: $finish”信息。→ 修复:在initial块中添加$finish。
  • 现象5:Quartus无法启动ModelSim。→ 原因:EDA工具路径未正确配置。→ 检查点:Tools → Options → EDA Tool Options中ModelSim路径是否正确。→ 修复:设置ModelSim可执行文件路径。
  • 现象6:仿真时提示“Module not found”。→ 原因:testbench中例化模块名与RTL文件名不匹配。→ 检查点:检查模块名大小写和拼写。→ 修复:统一模块名。
  • 现象7:波形中q出现X态。→ 原因:寄存器未初始化或复位未生效。→ 检查点:检查rst_n是否在仿真开始时为低。→ 修复:确保testbench中复位至少持续一个时钟周期。
  • 现象8:联合仿真速度慢。→ 原因:仿真时间单位设置过小或波形记录过多。→ 检查点`timescale设置。→ 修复:增大时间单位(如1ns/1ns)或限制波形记录信号数。

扩展与下一步

  • 参数化计数器:使用parameter定义位宽,使设计可重用。
  • 带宽提升:改为并行加载计数器或使用LFSR(线性反馈移位寄存器)实现伪随机数生成。
  • 跨平台仿真:学习使用QuestaSim或Vivado Simulator,掌握通用仿真流程。
  • 加入断言:在testbench中使用SystemVerilog断言(SVA)自动检查计数器溢出行为。
  • 覆盖分析:使用ModelSim的代码覆盖率工具,确保testbench覆盖所有分支。
  • 形式验证:使用OneSpin或VC Formal验证计数器属性,但需额外工具授权。

参考与信息来源

技术附录

术语表

  • RTL:寄存器传输级,描述数字电路行为的抽象级别。
  • Testbench:测试平台,用于验证RTL模块的仿真环境。
  • NativeLink:Quartus中自动调用第三方仿真器的功能。
  • LE:逻辑单元,Altera FPGA的基本逻辑块。

检查清单

  • [ ] 工程路径无中文/空格
  • [ ] RTL和testbench文件语法正确
  • [ ] testbench已加入工程仿真设置
  • [ ] ModelSim路径在Quartus中配置正确
  • [ ] 仿真运行后波形符合预期

关键约束速查

在.sdc文件中,常用约束如下(注意:仿真阶段不需要.sdc,但综合后仿真或上板时需添加):

# 创建时钟
create_clock -name clk -period 20.000 [get_ports clk]
# 输入延迟
set_input_delay -clock clk 2.0 [get_ports rst_n]
# 输出延迟
set_output_delay -clock clk 2.0 [get_ports q]
标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/39953.html
二牛学FPGA

二牛学FPGA

初级工程师
这家伙真懒,几个字都不愿写!
84718.59W3.97W3.67W
分享:
成电国芯FPGA赛事课即将上线
Verilog状态机设计:避免亚稳态的常用技巧
Verilog状态机设计:避免亚稳态的常用技巧上一篇
FPGA图像处理:基于Verilog的直方图均衡化设计与实现指南下一篇
FPGA图像处理:基于Verilog的直方图均衡化设计与实现指南
相关文章
总数:855
FPGA中FIFO深度计算与异步FIFO设计实战

FPGA中FIFO深度计算与异步FIFO设计实战

QuickStart准备环境:安装Vivado2020.1+或…
技术分享
6天前
0
0
18
0
Verilog中generate for循环在参数化模块设计中的技巧

Verilog中generate for循环在参数化模块设计中的技巧

在FPGA和ASIC设计中,参数化设计是实现代码复用、提高设计灵活性和可…
技术分享
14天前
0
0
45
0
Verilog 阻塞与非阻塞赋值深度对比:移位寄存器仿真验证指南

Verilog 阻塞与非阻塞赋值深度对比:移位寄存器仿真验证指南

QuickStart:10分钟直观对比本指南通过一个简单的3位移…
技术分享
6天前
0
0
23
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
没有相关内容