weiqi7777

irun增量编译bind操作遇到的问题

0
阅读(4228)

使用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。