FPGA开发选Linux环境的工具
俗话说,隔行如隔山。非微电子专业没有做过芯片的同学,是不知道这个世界上还有效率更高的用来对Verilog/VHDL程式码进行模拟的工具的。具体来讲,对于做FPGA开发的同学而言,需要知道除了ModelSim、ISE/Vivado或Quartus以外的模拟除错工具。一般来说,拿FPGA综合工具如ISE/Vivado或Quartus做模拟纯粹是小孩子过家家瞎胡闹,ModelSim做模拟虽然是正道但也存在诸多问题(如ModelSim的模拟结果用来做芯片是不被认可的),用做ASIC芯片的EDA模拟工具来做FPGA的模拟除错,对于FPGA开发者而言才是真正的鸟枪换炮。本文就以较为古老的Windows版本的Verdi工具为例说明做ASIC模拟的EDA工具在做FPGA模拟除错时也非常有用,能够提高效率。
除错FPGA,大家常用的工具主要有以下几种:Quartus,ISE或Vivado ,而模拟工具则常用ModelSim,个别初学者甚至还拿ISE/Vivado或Quartus做过模拟。
用ModelSim建工程,然后开始模拟,看波形,对比生成的档案。

或者把Vivado和ModelSim关联起来,联合模拟。

长期以来,对于没有做过芯片设计的FPGA开发人员来讲,早已习惯了上述工具的配合使用,找一个BUG也是借助于上面的工具,费时又费力。

尤其是ModelSim,如果要做芯片,ModelSim的模拟结果是不被认可的。同样的工程,ModelSim模拟通过的testcase,再拿专业做芯片用的模拟工具VCS或者NCVerilog等再做模拟就不一定通过。但,上面提到的VCS或者NCVerilog等软件是没有Windows版本的,只有Linux版本的工具,这对于习惯了Windows系统环境的FPGA开发人员来讲,为了一个软件,再去熟悉Linux系统的开发环境实在是太麻烦。
然而,对从芯片设计跨界到FPGA开发的人员来讲,上述除错手段太过于落后。本文就推荐一款做ASIC芯片的模拟工具,可以大幅度提高FPGA开发过程中的模拟除错效率。
最最重要的是,这些软件版本都是Windows的!!!并且,都是Windows绝版软件,此后再没有Windows版本的更新版。
找了一下十几年前的行动硬盘,连到2019年WIN7系统的电脑上,开启EDA工具资料夹,安装后发现竟然真的可以用!

nLint
NOVAS nLint 是一个广泛的HDL语言的设计规则检查工具,它整合于Verdi和Debussy除错平台。Verdi和Debussy系统帮助工程师加速了解复杂设计以提高设计、验证和除错的效率。nLint提供的功能在于帮助工程师完整的分析HDL程式码的语法和语义的正确性。 nLint通过对源代码的检查,以确保源代码的描述对于诸如同步设计、可测试性设计,命名等设计规则保持一致。nLint帮助工程师在设计的初期尽早的发现问题,以减少验证、综合和除错的时间。并且可以帮助工程师书写出易于阅读和维护的源代码程式,从而实现可以在不同的设计小组之间重复应用的设计描述。在nLint的环境中,可以很方便的进行需测试的档案和规则的整理,工程师可以在nLint提供的图形界面中指定哪些源代码档案需要检查,哪些设计规则需要检查,并且可以针对不同的设计规则赋予不同的引数以符合自身的规则定义。安装完成后,便可汇入RTL程式码。

可以自己设定一些规则,对程式码规范进行检测,提前把一些问题消灭在萌芽状态。
本公众号之前一篇文章分享程式--Verilog HDL程式码分析及整理软件,也可以用来对程式码规范进行分析,甚至进行整理。这些规范化的约定,在整个FPGA开发流程中,往往是最能达到事半功倍效果的一个步骤。但往往对于FPGA开发人员而言,常常给忽略了。认为等到后面发现问题再修改也不迟,殊不知,不从一开始就注重程式码规范,可能某些严重的问题甚至导致整个设计需要重做。
主要原因还是因为做芯片承担的风险成本要远高于FPGA的开发。
有了上面的原因,很少见做FPGA开发的人去做后模拟的。因为后模拟不但速度超慢,并且如果出现问题后也无法准确的定位到具体的程式码中,只能通过FPGA网表中对应的位置去猜测问题可能出现在RTL程式码中的具体位置,还不如直接上板执行来的快,出问题了,大不了再重新新增ChipScope观测讯号或者SignalTAP观测讯号重新执行抓讯号判断就是了。
debussy
大家在用ModelSim做模拟时,常常遇到这样一个问题。为了追某个BUG的原因,经常发现,跑出来的波形讯号里面没有自己想看的变数讯号,因此,不得不重新把想看的讯号新增进波形中,重新跑一遍波形。对于大的设计而言,重新跑一遍波形也需要耗费不少的时间。最坏的情况是,上述过程可能需要反复的做很多次才能找到BUG的产生源头。那么,有没有一种办法,只需要跑一次模拟,就可以把整个波形储存下来且不占太大的空间,然后在追踪BUG时,还可以方便的把波形中出错的地方直接对应到程式码中具体的某一行上,还可以方便的对某个变数进行后向或者前向的追中?答案是有!这款软件就是Debussy。现在也整合到了Verdi软件中。
1、Debussy 软件简介
Debussy 是 NOVAS Software, Inc(思源科技)开发的 HDL Debug & Analysistool,这个软件主要不是用来跑模拟或看波形,它最强大的功能是能够在 HDLsource code、schematic diagram、waveform、state bubble diagram 之间,即时做 trace,协助 FPGA 工程师 debug。
Debussy 是非常实用的 Verilog 或 VHDL 的除错工具,可以帮助设计者快速理解复杂的设计,尤其是初次接触他人写的程式码的时候,另外还能够查询和定位设计中存在的 bug,提高效率。
可能您会觉的只要有模拟器,如 ModelSim,就可以做 debug 了,我何必再学习这个软件?实际上这个软件能够帮助设计者快速理解程式码、波形和原理图之间的联络,使得除错变得十分地便捷。
Debussy V5.0 以后的版本,还提供了 nLint 检查工具(见本文前面介绍),它的检查规则十分严苛,能够帮助 check coding style & synthesizable,从某些方面可以协助工程师了解 coding style,并养成好的编写程式码的习惯。 当然良好的 coding style 也需要结合厂商的 FPGA 底层结构单元来具体分析,而 nLint 工具并不会从这个方面对程式码进行检查。所以,如何提高 coding style 是一个综合性很高的话题,不是单从某一方面入手就能解决问题,这些都是后话了。
Debussy 是支援 Windows 环境的,它的新版本改名为 Verdi,增加了一些功能,但是新版本的 Verdi 只能支援 Linux 环境。
2、用modelsim产生fsdb档案与Debussy协同工作
第一步:挂 PLI
在 modelsim.ini中搜索Veriuser,找到相应行之后进行修改,将文件中
;Veriuser = veriuser.sl
一行修改为:
Veriuser=c: ovasdebussyshareplimodelsim_pliwinnt ovas.dll
去掉前面的分号。

第二步:新建两个环境变数
第一个新建环境变数:D_LIBRARY_PATH
变数值:
C: ovasdebussyshareplimodelsim_pliwinnt ovas.dl
第二个新建环境变数:PLIOBJS
变数值:
C: ovasdebussyshareplimodelsim_pliwinnt ovas.dl
第三步:在 TestBench 中新增语句
initial
begin
$fsdbDumpfile("filename_you_want.fsdb");
$fsdbDumpvars;
end

如果上述步骤无法正确完成,则用ModelSim模拟时会报出Warning,导致无法生成fsdb波形档案。

另外,笔者试了一下64位的ModelSim软件,按照上述方法无法正确产生fsdb档案,换回32位的ModelSim软件,如Modelsim SE 6.5b,则能够顺利产生波形档案。如下图所示

3、Debussy软件使用方法
在使用 Debussy 软件过程中,软件并不能直接智慧地识别 Verilog-2001 程式码,需要对软件进行一下设定,否则新增档案时软件就会报出很多错误告警,而且也看不到原理图,设定的方法如下:
点选工具栏的 File,选择 Import Design,点选From File,再点选对话方块右侧的 Options,在弹出的 Import Design Options 对话方块中输入“-2001”,如下图所示:

新增支援 Verilog-2001 标准的设定
设定完成后,就能正常汇入档案,进行模拟和除错了,汇入方法是点选工具栏的 File,选择 Import Design…,在档案列表框中选中待观察的资料夹,接着全部选中出现的档案,再点选 Add 即可完成档案汇入,如下图 所示:

程式码新增到Debussy之后,就可以点选检视各个模组的组成及呼叫关系了。还可以逐级的点进去检视到具体程式码一级,包括状态机等。方便大家进行程式码的分析及消化理解。

关键的内容来了!
结合上面产生的fsdb档案,下一步就需要把波形档案test.fsdb汇入到debussy中,这样就可以跟程式码对应上!这一点很重要,可以双击波形中某个时刻的某个讯号的波形,直接跳转到对应的程式码!

找到对应的程式码后,还可以继续找该变数的前驱和后继,同时,随时可以新增进波形中进行检视(这要比ModelSim方便多了,常常因为波形中没有提前新增某个讯号,而不得不重新跑一下模拟)。

当然,Windows版本的debussy还存在不少的问题,使用起来某些地方不如Linux下最新版的Verdi,所以还是建议大家最后自己装个虚拟机器,体验一下Linux下程式码除错的高效,相比笨拙的ModelSim而言,你会立刻有鸟枪换炮的感觉!
如下动图,是Linux下使用SimVision工具(跟Verdi类似)通过波形上状态机讯号对应到实际框图的例子,注意,框图中会实时显示出游标具体时刻对应的讯号数值,还可以跟踪到相关的其它讯号,彻底使得程式码除错视觉化!

如需上述软件的安装包,或安装使用过程中遇到了问题可留言联络。
FPGA除错不易,且行且珍惜!也请对你身边做芯片或做FPGA开发的同学好一点,他们的压力比较大。据说,海思最近疯狂立项,疯狂招人,人才严重缺乏,也希望同学们多多选择FPGA开发或者芯片设计方向就业,为我们国家的芯片设计和积体电路产业早日摆脱别人的束缚做出自己的贡献!
全文完。