irun增量编译bind操作遇到的问题
0赞使用irun的增量编译,可以在环境修改情况下,加快编译速度。在实际的使用过程中,在bind操作,遇到了编译的问题。下面将该问题进行分享。
TB部分,有bind的操作,将一些模块,或者interface,bind到RTL的一些模块上,此时如果使用增量编译,出现bind不成功。
如以下示例代码。
TB部分,有bind_tb模块,需要bind在RTL中。而bind_tb.v是在TB部分进行编译的。
增量编译命令为
#编译RTL irun –sv -mkprimsnap –f flist.rtl –top dut –snapshot dut #增量编译TB irun –sv –f flist.tb –primname dut –c |
irun的选项的说明:
- -mkprimsnap: 表示生成primary snapshot
- -snapshot: 指定生成snapshot的名字
- -primname: 指定载入的primary snapshot
- -c: 只生成snapshot,不仿真
在增量编译TB时,会打印信息,不能将bind_tb模块,bind到RTL中。既然没有bind成功,那仿真的过程中,那这个bind_tb模块,就不能进行仿真。
对于增量编译的bind,irun工具提供了 –nncbind 选项。
此时增量编译命令为
#编译RTL irun –sv -mkprimsnap –f flist.rtl –top dut –snapshot dut #增量编译TB irun –sv –f flist.tb –primname dut –c –nncbind |
重新增量编译,出现如下错误。
ncelab: *N,HREFAC (.xxxx): Hierarchical reference to primary partition requires permissions. the referenced object needs permission to be read. .. ncelab: *F,HREFIF: Terminating due to hierarchical reference permission problems(generated HREF file: autohref.txt) |
待bind的模块bind_tb,要使用RTL中的clk信号,但是bind_tb却没有对该信号的读取权限。
这个就涉及到增量编译中,信号权限的问题了。对此,不介绍这块内容。因为,了解这部分内容,意义并不大。
下面,说一下,怎么解决这个问题。
增量编译,是将RTL和TB进行分开编译,RTL首先被编译,那么RTL在编译的时候,是不知道,自己的哪些内部信号,是会被环境所使用的,因此默认为,这些内部信号,对于TB部分,均是不能访问。
而bind操作,那么待bind的模块,肯定是会使用RTL中的内部信号,因此需要在RTL编译时,告诉irun工具,哪些信号,会被TB所使用,并且指定相应的权限,这样TB部分增量编译,才不会出错。irun工具,提供了href.txt文件,来执行信号的权限。并且搭配了-href选项,来指定href文件。
当然,我们是不会去手动填写这文件,因为太过麻烦,irun工具,提供了自动生成该文件的方法。使用-genhref选项。
增量编译的命令
#1、编译RTL irun –sv -mkprimsnap –f flist.rtl –top dut –snapshot dut #2、生成href.txt文件 irun –sv –f flist.tb –primname dut –genhref href.txt –nncbind #3、重新编译RTL irun –sv -mkprimsnap –f flist.rtl –top dut –snapshot dut –href href.txt #4、增量编译TB irun –sv –f flist.tb –primname dut -c –nncbind |
在第二步,-genhref,指定生成的href.txt文件。执行后,不会生成snapshot,但是会生成href.txt文件。
href.txt文件内容,将dut.clk信号,设置为可读。
在第三步,重新编译RTL,使用-href选项,指定href.txt文件。
在第四步,增量编译TB,编译成功。最后生成snapshot。