最近有遇到使用VCS仿真带有Vivado IP的情况,一开始被组里老师劝退说vcs和vivado版本不容易适配,被推荐了ies。后来想想,其实还是可以自己试一试的,于是有了这篇学习记录。
IP仿真库编译
Vivado提供TCL和GUI形式的库编译方式,2020版的vivado开始需要指定gcc的位置了,这其实也是课题组里服务器不能对较新版vcs编译出仿真库的原因——系统gcc太老了系统也太老了,还在用centos 6.7 ╮(╯▽╰)╭ 。2020版的Vivado的一些IP使用SystemC进行仿真建模,需要gcc在6.8以上,binutil在2.30以上。这些系统上都没有,然后我也没有sudo权限,只能之后有时间自己编译折腾了。不过2019的vivado可以成功编出部分库的。
编出的库目录类似这样:
|____lib_dir
| |____axi_data_fifo_v2_1_18
| |____interlaken_v2_4_3
| |____...(一些IP核)
| |____synopsys_sim.setup
其中关键的就是这个synopsys_sim.setup
,它的作用是帮助vcs索引这个目录下的IP库。
VCS Library
VCS也有Library的概念,在使用vhdlan
和vlogan
分析HDL代码设计的时候,做的事情和编译器前端很类似,都是将原来的HDL代码分析编码为VCS自己的一种中间件表示。值得一提的是,在这一阶段,不要求分析的代码中每个实例化的模块都有对应的实现定义。最后编出来的东西是一些.db结尾的文件。
所有的Library管理都是通过synopsys_sim.setup
,并且可以分别在系统位置、用户位置、项目根目录位置、命令行指定,这四种方式指定对应的synopsys_sim.setup
。通过在这个文件内部OTHERS = [lib_dir/synopsys_sim.setup]
指定vivado编译出的仿真库目录位置,就可以加入对应IP的中间件表示。
VCS Elaborating
最后,通过运行vcs,调用gcc进行最后的编译,输出得到可以执行的二进制仿真程序。这一步骤,则需要保证所有实例化的模块都有相应的对应实现,并且通过指定某个library下的某个顶层模块,vcs会自动去寻找所有相关的中间件表示,并得到最后的结果可执行文件。