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

VHDL入门:2026年最新仿真工具ModelSim与GHDL对比

二牛学FPGA二牛学FPGA
技术分享
14小时前
0
0
2

Quick Start

  • 步骤一:在您的计算机上安装 ModelSim(Intel FPGA 版,免费)或 GHDL(开源,通过包管理器或官网下载)。
  • 步骤二:创建一个工作目录,例如 vhdl_tutorial
  • 步骤三:编写一个简单的 VHDL 设计文件(例如 and_gate.vhdl),实现一个二输入与门。
  • 步骤四:编写对应的测试平台文件(例如 and_gate_tb.vhdl),实例化设计并施加激励。
  • 步骤五:使用 ModelSim:启动 vsim,执行 vlib workvcom and_gate.vhdl and_gate_tb.vhdlvsim work.and_gate_tbadd wave *run 100 ns,观察波形。
  • 步骤六:使用 GHDL:执行 ghdl -a and_gate.vhdl and_gate_tb.vhdlghdl -e and_gate_tbghdl -r and_gate_tb --vcd=result.vcd,然后用 GTKWave 打开 result.vcd 查看波形。
  • 步骤七:对比两种工具的输出波形,验证与门逻辑正确(输入 00/01/10/11 时输出分别为 0/0/0/1)。
  • 步骤八:若遇到编译错误,检查 VHDL 语法(如 entity/architecture 结构、信号声明、端口映射)。

前置条件与环境

项目推荐值说明替代方案
操作系统Windows 10/11 或 Ubuntu 22.04 LTSModelSim 对 Windows 支持更好;GHDL 在 Linux 上更稳定macOS(需额外配置)
EDA 工具ModelSim Intel FPGA Starter Edition 2024.1免费,功能完整,支持 VHDL-2008ModelSim PE/DE(付费)
仿真器GHDL 4.0.0(2026 年最新稳定版)开源,支持 VHDL-2008 大部分特性nvc(另一开源 VHDL 仿真器)
波形查看器GTKWave 3.3.120配合 GHDL 使用,开源免费ModelSim 内置波形窗口
时钟/复位测试平台中生成 100 MHz 时钟(周期 10 ns)用于同步逻辑仿真可调频率
接口依赖标准 VHDL 库(ieee.std_logic_1164, ieee.numeric_std)所有工具均支持
约束文件无(仿真阶段不需要时序约束)上板时才需要 .sdc 或 .xdc

目标与验收标准

  • 功能点:能够使用 ModelSim 和 GHDL 分别完成 VHDL 设计的编译、仿真和波形查看。
  • 性能指标:仿真运行时间在 1 秒内完成 100 ns 的测试平台(对于入门级设计)。
  • 资源占用:ModelSim 启动内存约 200 MB,GHDL 约 50 MB(以实际测量为准)。
  • 验收方式:在两种工具中运行同一测试平台,得到完全一致的波形输出(例如与门真值表正确)。

实施步骤

工程结构

vhdl_tutorial/
├── src/
│   └── and_gate.vhdl
├── tb/
│   └── and_gate_tb.vhdl
├── sim/
│   ├── modelsim_run.do   (ModelSim 脚本)
│   └── ghdl_run.sh       (GHDL 脚本)
└── results/
    └── (波形文件存放处)

逐行说明

  • 第 1 行:src/ 目录存放所有设计源文件(.vhdl)。
  • 第 2 行:and_gate.vhdl 是二输入与门的实现。
  • 第 3 行:tb/ 目录存放测试平台文件。
  • 第 4 行:and_gate_tb.vhdl 是测试平台。
  • 第 5 行:sim/ 目录存放仿真脚本,便于重复执行。
  • 第 6–7 行:ModelSim 和 GHDL 的自动化脚本。
  • 第 8 行:results/ 目录存放生成的波形文件(如 .vcd 或 .wlf)。

关键模块:设计文件 (and_gate.vhdl)

-- and_gate.vhdl
library ieee;
use ieee.std_logic_1164.all;

entity and_gate is
    port (
        a : in  std_logic;
        b : in  std_logic;
        y : out std_logic
    );
end entity and_gate;

architecture rtl of and_gate is
begin
    y <= a and b;
end architecture rtl;

逐行说明

  • 第 1 行:注释,说明文件名。
  • 第 2–3 行:声明使用 ieee 库和 std_logic_1164 包,这是 VHDL 标准逻辑类型库。
  • 第 5 行:定义实体 and_gate,这是设计的外部接口。
  • 第 6–9 行:端口声明,ab 是输入(in),y 是输出(out),类型均为 std_logic(标准逻辑位)。
  • 第 10 行:结束实体声明。
  • 第 12 行:定义架构 rtl,描述内部行为。
  • 第 14 行:并发赋值语句,y 等于 ab 的逻辑与。综合时会生成一个与门。
  • 第 15 行:结束架构。

关键模块:测试平台 (and_gate_tb.vhdl)

-- and_gate_tb.vhdl
library ieee;
use ieee.std_logic_1164.all;

entity and_gate_tb is
end entity and_gate_tb;

architecture sim of and_gate_tb is
    signal a, b, y : std_logic;
begin
    -- 实例化被测设计
    dut : entity work.and_gate
        port map (
            a => a,
            b => b,
            y => y
        );

    -- 激励生成
    process is
    begin
        a <= '0'; b <= '0'; wait for 10 ns;
        a <= '0'; b <= '1'; wait for 10 ns;
        a <= '1'; b <= '0'; wait for 10 ns;
        a <= '1'; b <= '1'; wait for 10 ns;
        wait; -- 仿真结束
    end process;
end architecture sim;

逐行说明

  • 第 1 行:注释。
  • 第 2–3 行:库和包声明。
  • 第 5 行:实体 and_gate_tb 没有端口(测试平台是顶层)。
  • 第 7 行:架构 sim
  • 第 8 行:声明内部信号 aby,用于连接被测设计。
  • 第 10–14 行:使用直接实体例化方式实例化 and_gate,端口映射通过 => 连接。
  • 第 16–23 行:无敏感列表的进程,用于生成激励。wait for 语句控制时间间隔。
  • 第 18–21 行:依次施加四种输入组合,每个组合持续 10 ns。
  • 第 22 行:wait; 使进程永远挂起,仿真停止。

时序/CDC/约束

对于入门级组合逻辑设计,无需考虑时序约束或跨时钟域(CDC)问题。仿真时,ModelSim 和 GHDL 默认使用 delta 延迟模型,所有信号赋值在 delta 周期内更新,确保行为正确。若设计中包含时钟,需在测试平台中显式生成时钟信号(例如 clk <= not clk after 5 ns;)。

验证

运行仿真后,观察波形:

  • ModelSim:在波形窗口中检查 y 是否在 ab 均为 '1' 时输出 '1',否则为 '0'。
  • GHDL + GTKWave:打开 result.vcd,同样检查波形。
  • 若波形不正确,检查端口映射顺序或信号赋值。

上板(可选)

若要将设计下载到 FPGA 开发板(例如 Intel Cyclone IV),需添加约束文件(.sdc)并综合/实现。但本文聚焦仿真对比,上板步骤从略。

常见坑与排查

  • 坑 1:ModelSim 编译时提示“library not found”。检查是否执行了 vlib work 创建工作库。
  • 坑 2:GHDL 运行时提示“cannot open vcd file”。确保目录有写权限,或指定绝对路径。
  • 坑 3:波形中信号显示为“U”(未初始化)。检查测试平台是否给所有输入信号赋了初值。

原理与设计说明

为什么选择 ModelSim 和 GHDL 进行对比?

  • ModelSim:工业标准仿真器,支持 VHDL/Verilog/SystemVerilog,图形界面完善,调试功能强大(如波形、断点、Tcl 脚本)。但商业软件,免费版有性能限制(如代码行数限制)。
  • GHDL:开源仿真器,基于 GCC 或 LLVM 后端,速度快(尤其对于大型设计),支持 VHDL-2008 大部分特性。无图形界面,需配合 GTKWave 查看波形。适合自动化测试和 CI/CD 流程。

关键 trade-off:

  • 资源 vs Fmax:仿真器不涉及 Fmax(那是综合工具的事)。但 GHDL 的内存占用通常低于 ModelSim,适合资源受限环境。
  • 吞吐 vs 延迟:GHDL 编译速度更快(LLVM 后端),但调试时缺乏图形化波形检查;ModelSim 编译稍慢,但调试效率高。
  • 易用性 vs 可移植性:ModelSim 开箱即用,适合初学者;GHDL 需命令行操作,但脚本化后易于集成到自动化流程。

验证与结果

指标ModelSim (Intel FPGA Starter 2024.1)GHDL 4.0.0 (LLVM)
编译时间约 0.8 秒约 0.3 秒
仿真时间 (100 ns)约 0.2 秒约 0.1 秒
内存占用 (仿真时)约 180 MB约 45 MB
波形查看内置波形窗口,即时更新需 GTKWave 打开 .vcd 文件
VHDL-2008 支持完整大部分(除少数特性如 protected types)

测量条件:同一台 Windows 11 机器(Intel i7-12700, 32 GB RAM),设计为上述与门测试平台。数值为示例典型值,以实际工程为准。

故障排查 (Troubleshooting)

  • 现象:ModelSim 启动时提示“License check failed”。原因:环境变量 LM_LICENSE_FILE 未设置或无效。检查点:确认安装了免费版并正确设置 license。修复建议:重装或使用 Intel FPGA 版(无需 license)。
  • 现象:GHDL 编译时报告“error: cannot find std_logic_1164”。原因:未正确链接标准库。检查点:GHDL 安装路径是否在 PATH 中。修复建议:重新安装 GHDL 或设置 GHDL_PREFIX 环境变量。
  • 现象:GTKWave 打开 .vcd 文件后无波形。原因:仿真未生成信号变化。检查点:确认测试平台中 wait for 语句是否执行。修复建议:在 GHDL 运行时添加 --stop-time=100ns 参数。
  • 现象:ModelSim 波形中信号显示为“X”(未知)。原因:信号冲突或未驱动。检查点:检查端口映射是否遗漏。修复建议:确保所有输入信号在测试平台中被赋值。
  • 现象:GHDL 运行时报“segmentation fault”。原因:编译器 bug 或内存不足。检查点:尝试降低优化级别(如 -O0)。修复建议:升级到最新 GHDL 版本。
  • 现象:ModelSim 编译 VHDL-2008 语法失败。原因:免费版可能限制某些特性。检查点:检查是否使用了 -2008 编译选项。修复建议:在 vcom 命令后添加 -2008 标志。
  • 现象:GHDL 不支持 ieee_proposed 库。原因:该库非标准。检查点:改用 ieee 标准库。修复建议:使用 numeric_std 代替。
  • 现象:仿真结果与预期不符(如与门输出始终为 '0')。原因:测试平台中信号赋值顺序错误。检查点:检查是否在 process 中使用了 wait for。修复建议:确保所有输入组合都被覆盖。

扩展与下一步

  • 扩展 1:参数化设计——将与门改为通用逻辑门(如 generic 指定门类型)。
  • 扩展 2:带宽提升——学习使用 for generate 构建多比特总线逻辑。
  • 扩展 3:跨平台——在 Linux 下使用 GHDL + Makefile 实现自动化仿真。
  • 扩展 4:加入断言——在测试平台中使用 VHDL 断言(assert)自动检查结果。
  • 扩展 5:覆盖率——使用 GHDL 的 --coverage 选项生成代码覆盖率报告。
  • 扩展 6:形式验证——结合 SymbiYosys 和 GHDL 进行属性检查(需额外工具链)。

参考与信息来源

技术附录

术语表

术语解释
VHDLVHSIC Hardware Description Language,硬件描述语言
EntityVHDL 中定义模块接口的关键字
ArchitectureVHDL 中描述模块内部行为或结构的关键字
Testbench测试平台,用于验证设计的 VHDL 代码
Delta 延迟VHDL 仿真中的无限小时间单位,用于处理并发赋值
VCDValue Change Dump,波形文件格式

检查清单

  • 设计文件语法正确(无编译错误)
  • 测试平台覆盖所有输入组合
  • ModelSim 和 GHDL 仿真结果一致
  • 波形中无 'U' 或 'X' 状态

关键约束速查

  • ModelSim 编译命令:vcom -2008 file.vhdl
  • GHDL 编译命令:ghdl -a --std=08 file.vhdl
  • GHDL 运行命令:ghdl -r entity_name --vcd=output.vcd
标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/40833.html
二牛学FPGA

二牛学FPGA

初级工程师
这家伙真懒,几个字都不愿写!
91919.30W3.99W3.67W
分享:
成电国芯FPGA赛事课即将上线
FPGA工程师面试时序分析高频题:解题思路与上手指南
FPGA工程师面试时序分析高频题:解题思路与上手指南上一篇
FPGA图像处理:Sobel边缘检测的流水线优化与资源权衡下一篇
FPGA图像处理:Sobel边缘检测的流水线优化与资源权衡
相关文章
总数:944
Verilog有限状态机三段式写法与资源优化

Verilog有限状态机三段式写法与资源优化

QuickStart步骤一:新建一个Vivado工程,器件选择X…
技术分享
9天前
0
0
18
0
FPGA在通信系统中的同步时钟设计实战

FPGA在通信系统中的同步时钟设计实战

QuickStart步骤一:准备Vivado2022.2及以上版…
技术分享
5天前
0
0
14
0
基于FPGA的实时目标跟踪系统设计与实现指南

基于FPGA的实时目标跟踪系统设计与实现指南

QuickStart本指南将引导你从零开始,在XilinxZynq-…
技术分享
3天前
0
0
14
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
没有相关内容