宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

叨叨

1、本来有打算写一篇长文来介绍的,但是无奈自身水平不足,再加上实在懒得写那么多字,所以本文相当于是一个缩减版,意思到了就行。

2、发现做验证如果想继续深入,可以去补充下编译原理的相关知识。

正文

先抛开vcs、systemverilog不谈。我们所编写的程序代码,需要经过编译和链接后才能得到可执行文件。

有关编译、链接的知识可以参考C语言中相关内容:

编译和链接的过程

当我们在用vcs进行仿真时,一般都会使用Makefile来控制编译仿真流程。

当我们敲下make compile后(target名字当然是你自己定的),Makefile会去调用vcs这个可执行文件,并把一堆参数丢给它:

当然,作为一个demo,上面这个参数算是少的了,正常的怎么说也有几十行。

vcs这个可执行文件实际上是一个脚本,作为一个能处理上百个参数的脚本,自然也是庞大无比:

在打开这个文件之前我是有读一遍的打算的,打开后我果断理智地放弃了这个想法。。。

这个vcs会去调用真正的编译器来编译我们的verilog/systemverilog代码:

当我们的代码编译完成后,此时得到的是一些目标文件、动态库,存在放csrc文件夹里面(注意里面有一个文件还是叫Makefile,又是一个套娃- -!):

紧接着,敲重点!!!vcs会调用g++来完成目标文件、动态库的链接,而指导g++工作的,正是上面提到的套娃Makefile

有关g++的参数解释,可以参考:

GCC参数详解

至此,我们得到了一个完整的simv

打开套娃Makefile,我们能找到和编译log对应的信息:

这里还可以看到,当使用g++完成链接后,会使用touch来对一个空白文件”product_timestamp”打上时间戳,记录生成simv的时间。