在这个问题上需要分两种情况来说明:
1、动态链接库由纯C/C++文件编译而成,即不含有任何SC部分
在此情况下,一般
verilog/SV中只使用DPI技术来使用动态链接库中的某些函数,那么主要是用如下几步命令:
1)gcc -fPIC a.c b.c .........
2) gcc -shared -o libxxx.so
3) vcs ... -LDFLAGS "-Lpath -lxxx" xxx.v......
4) simv
在此情况下,如果改变C/C++的部分,则只需要重新执行1和2,然后直接执行4即可,3一般是一个相当耗时的过程,这个时候动态链接库的好处就出来了。
2、不止有C/C++,还有SC
在此情况下,通过需要使用不同的命令来达到效果,因为对SC部分需要特殊处理。
一般来说,这种情形是top是verilog的,然后sc的module在verilog下被例化。
1)syscan a.cpp:a b.cpp:b
2) syscan -shared
3) vcs .....
4) simv
可以看出,单纯是使用gcc命令已经不能工作,至于原因和每一步的命令是做什么用的,在VCS的user guide的Using SystemC章节的Incremental Comile of SystemC Source Files条目中有清晰的示例。
当有SC的文件改动之后,只需要重新执行1和2,然后执行4即可。
另外需要注意的是,sc的端口列表不能变,否则需要执行全编译;不过一般来说SC主要作为reference model,需要经常变动端口的情况不多见,在初期主要是修改reference model的内部处理过程,端口应该很早就确定好了。