GHDL 为什么比解释型仿真器快?
更新时间
GHDL 比解释型仿真器快,核心原因在于它采用“编译—执行”的方式:先把 VHDL 代码编译成机器可执行的形式,再直接运行,而不是在仿真过程中逐条解释源码。根据 GHDL 官网说明,它借助代码生成器(LLVM、GCC 或内置代码生成器)实现这一点,因此“比任何解释型仿真器都快得多”。这一结论适用于用 GHDL 做 VHDL 仿真、且对仿真速度敏感的场景;具体加速幅度取决于设计规模、代码风格和所选代码生成器,官网未给出量化数据。
两种执行方式的差别
解释型仿真器在运行时读取设计描述并逐条解释执行,每一轮仿真都要重复“解析—调度”的开销。GHDL 则把 VHDL 源码编译为可执行程序,仿真时执行的是已生成的机器代码,省去运行期的解释环节。
用一个具体场景说明:假设有一个包含大量进程和信号赋值的测试平台,需要跑数百万个时钟周期。解释型仿真器每个周期都要重新解释相关语句;GHDL 编译后,这些语句已变成可直接执行的指令序列,循环仿真的单位时间开销明显更低。设计越大、仿真时间越长,这种差距通常越明显。
三种代码生成后端
GHDL 提供三种代码生成方式,官网列出的选项是:
| 代码生成器 | 说明 |
|---|---|
| LLVM | 使用 LLVM 作为后端生成代码 |
| GCC | 使用 GCC 作为后端生成代码 |
| 内置(builtin) | GHDL 自带的代码生成器 |
官网只说明三者都通过“代码生成”获得速度优势,未给出各后端之间的性能对比。选择时可将后端可用性作为条件:如果本机已有相应工具链,可优先考虑对应后端;否则使用内置后端即可完成编译执行流程。
适用条件与边界
- 标准支持:GHDL 完整支持 IEEE 1076 VHDL 标准的 1987、1993、2002 版本,部分支持 2008 修订版(官网称足以支持
fixed_generic_pkg或float_generic_pkg)。若设计依赖 2008 版的其他特性,需先确认兼容性。 - 平台:可在 Linux、Windows 和 Apple OS X 上运行。
- 获取方式:官网提供各操作系统的二进制发行版下载,也可从 GitHub 获取发布版或源码自行编译。官网未提及价格或登录限制,实际下载条件以 GitHub 页面为准。
验证速度是否如预期
要确认编译执行带来的加速,可做一次对照:用同一测试平台和同一组仿真时长,分别记录编译后仿真的运行时间,并与你手头的解释型仿真器结果比较。注意保持设计、激励和仿真停止条件一致,否则时间差异不能归因于执行方式。若速度提升不明显,先检查是否误用了每次重新编译的流程,以及测试平台中是否存在大量文件 I/O 等非仿真计算开销。