在数字电路前端设计流程中,前端仿真用于验证电路设计逻辑功能的正确性,常用的仿真软件有商业软件VCS和ModelSim(现在好像叫Questa了),国外大学里教学也常用一些开源软件,如iverilog和verilator。
iverilog全称Icarus Verilog,是一个用c++实现的轻量级跨平台开源verilog仿真软件。它能够对verilog描述的硬件电路进行逻辑仿真,仿真结果可以通过gtkwave来查看。
verilator是一款支持systemverilog和verilog的开源数字电路仿真器,也是c++实现的。verilator仿真具有良好的性能,也有厂商采用verilator来降低成本。现阶段,verilator也被纳入了芯片联盟(CHIPS Alliance)。
在众多仿真软件中,由于verilog语言设计问题,有一些corner case处理比较困难,因而不同仿真器在一些问题的处理结果并不相同。有时候一些厂商会保留两套工具做交叉检查。CIRCT项目尝试将LLVM和MLIR的设计哲学应用到硬件设计工具中,希望构建一套模块化、语义清晰一致、可重用的硬件设计基础设施。其中,很重要的一部分内容就是硬件设计的中间表示IR的设计,目前CIRCT中包含了FIRRTL
和LLHD
两大类IR。
LLHD有公开的论文,下文主要对论文LLHD: A Multi-level Intermediate Repres
entation for Hardware Description Languages论文的大概内容和实现进行简要说明:
该论文提出了用于一种硬件设计语言的IR表示,该IR设计借鉴了LLVM中的设计思想,目标是能够将该IR应用于硬件电路设计的整个流程。论文主要包括以下内容:
硬件电路设计具有三大特性:层次性,并行性和时序依赖性。LLHD采用了多层IR的设计,能够较好地符合上述特性,具体包含以下几种类型:
LLHD对应的实现包括了一个针对systemverilog/VHDL的编译器moore
和一个数字电路仿真器llhd-sim
。二者的关系类似与clang和llvm的关系,moore
对systemverilog源码进行编译综合,转换为LLDH IR的表现形式;llhd-sim
基于LLHD IR对电路进行仿真,仿真结果可以出处为VCD格式,通过gtkwave可以查看仿真波形。
此外,LLHD还被整合到了CIRCT项目中,可以编译生成llhd-sim
应用,moore
应用暂时还没有迁移到CIRCT项目镇南关。注意当前CIRCT项目编译出的的llhd-sim
应用输出格式是自定义的,还没有支持VCD格式,需要自己写脚本转换一下。