FPGA基础 -- 仿真初识

什么是仿真(Simulation)?

FPGA 开发 中,仿真(Simulation) 是指在硬件电路真正部署到 FPGA 之前,通过 计算机软件 来模拟 FPGA 设计的功能和时序,以验证设计的正确性。仿真主要用于调试 RTL 代码(Verilog/VHDL/SystemVerilog)和验证逻辑功能,避免在实际硬件上调试时可能遇到的高昂成本和复杂问题。

仿真通常分为 功能仿真(Functional Simulation)时序仿真(Timing Simulation) 两大类。


1. 功能仿真(Functional Simulation)

目标 :验证设计的逻辑正确性,不考虑门延迟和时序约束。

主要特点:

  • 仅考虑逻辑功能,不涉及实际硬件时序延迟。
  • 适用于 RTL 级别(Verilog/VHDL 代码)的调试。
  • 运行速度较快,适用于快速验证设计逻辑。
  • 适合在 FPGA 综合(Synthesis)前进行调试。

示例:

假设我们设计了一个简单的 4 位加法器,其 RTL 代码如下:

verilog 复制代码
module adder4 (
    input [3:0] a, 
    input [3:0] b, 
    output [3:0] sum, 
    output carry
);
    assign {carry, sum} = a + b;
endmodule

测试激励(Testbench)示例

verilog 复制代码
module tb_adder4;
    reg [3:0] a, b;
    wire [3:0] sum;
    wire carry;
    
    adder4 uut (
        .a(a),
        .b(b),
        .sum(sum),
        .carry(carry)
    );

    initial begin
        // 施加不同的测试输入
        a = 4'b0011; b = 4'b0101; #10;  // 3 + 5 = 8
        a = 4'b1111; b = 4'b0001; #10;  // 15 + 1 = 16 (溢出)
        a = 4'b0110; b = 4'b0011; #10;  // 6 + 3 = 9
        $stop;
    end
endmodule
  • 通过功能仿真 可以观察 sumcarry 是否按照预期输出。

2. 时序仿真(Timing Simulation)

目标 :验证设计在综合、布局布线后,是否满足时序约束,确保时钟和信号传输延迟符合要求。

主要特点:

  • 考虑门延迟和互连延迟,确保设计满足时序要求。
  • 适用于综合(Synthesis)和布局布线(Place & Route)之后的仿真。
  • 运行速度慢于功能仿真,但更接近真实硬件行为。
  • 需要结合 SDC 时序约束文件 进行验证。

示例:

时序仿真会在综合后生成一个网表文件(Netlist),用于加载到仿真工具中进行测试,例如:

shell 复制代码
vsim -t 1ps -L work -L unisim -voptargs="+acc" tb_adder4

通过波形查看工具(如 ModelSim、QuestaSim)分析信号延迟、时钟抖动、信号翻转等时序行为


3. 仿真工具

以下是常见的 FPGA 仿真工具:

仿真工具 开发商 适用范围
Vivado Simulator Xilinx 适用于 Xilinx FPGA,集成在 Vivado 中
QuestaSim Siemens EDA (原 Mentor Graphics) 适用于大多数 FPGA 设计,支持高级验证
ModelSim Siemens EDA 适用于 Intel FPGA 和其他 FPGA 设计
VCS Synopsys 适用于 ASIC 设计,也支持 FPGA
Xilinx ISIM(已淘汰) Xilinx 旧版仿真工具,被 Vivado Simulator 取代
GHDL 开源 适用于 VHDL 设计的免费仿真工具

4. 仿真与硬件调试的区别

对比项 仿真(Simulation) 硬件调试(On-Chip Debugging)
运行环境 计算机软件(ModelSim/QuestaSim) 真实 FPGA 硬件
速度 受限于计算资源,较慢 真实时钟频率,接近实际应用
适用阶段 设计早期,验证 RTL 逻辑 设计后期,验证综合后行为
调试手段 观察波形、断点调试 通过 Signal Tap、ILA 等工具实时查看数据
能否修改设计 可随时修改代码并重新仿真 需重新烧录 FPGA

5. 仿真 vs 硬件验证 vs 现场调试

  1. 仿真阶段(Simulation)

    • 主要用于 RTL 级别的功能和时序验证。
    • 不依赖于实际硬件,加快开发迭代。
  2. 硬件验证(Hardware Validation)

    • 在 FPGA 硬件上运行,结合调试工具(ILA、SignalTap)。
    • 适用于综合后验证,确保真实 FPGA 行为正确。
  3. 现场调试(Field Debugging)

    • 在实际应用场景中(如工业控制、通信设备)进行调试,发现环境干扰、温度等问题。

6. 结论

仿真是 FPGA 设计的关键环节 ,帮助工程师:

提前发现问题,减少硬件调试成本

优化 RTL 代码,提高设计效率

确保功能正确,降低项目风险

相关推荐
我爱C编程1 小时前
基于FPGA的16QAM软解调+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
fpga开发·16qam·软解调·帧同步·卷积编码·viterbi译码
南棱笑笑生1 小时前
20250726让荣品的PRO-RK3566开发板使用TF卡启动
fpga开发
水果里面有苹果9 小时前
1-FPGA的LUT理解
fpga开发
千宇宙航1 天前
闲庭信步使用图像验证平台加速FPGA的开发:第二十七课——图像腐蚀的FPGA实现
图像处理·计算机视觉·fpga开发·图像腐蚀
小白到大佬1 天前
High Speed SelectIO Wizard ip使用记录
fpga开发·lvds·高速接口
嵌入式-老费1 天前
再谈fpga开发(fpga开发的几个特点)
fpga开发
范纹杉想快点毕业2 天前
基于C语言的Zynq SOC FPGA嵌入式裸机设计和开发教程
c语言·开发语言·数据库·嵌入式硬件·qt·fpga开发·嵌入式实时数据库
YONYON-R&D2 天前
LAYOUT 什么时候需要等长布线?
嵌入式硬件·fpga开发
我不是程序猿儿2 天前
【Servo】裸机还是RTOS驱动架构如何选?
驱动开发·fpga开发·架构·伺服驱动器·伺服
乌恩大侠2 天前
USRP X440
fpga开发