首页> 中国专利> 用于系统芯片集成设计的子系统集成方法及其子系统集成系统

用于系统芯片集成设计的子系统集成方法及其子系统集成系统

摘要

一种用于系统芯片集成设计的子系统集成方法,包括如下步骤:1)采用IP-XACT标准封装子系统,子系统器件XML文件、子系统设计XML文件和子系统生成器;2)采用脚本语言编写一个子系统XML文件分析工具,分析子系统中实例化的器件,同时迭代地分析子系统中实例化的其它子系统,为每个实例化器件建立目录,并把工作目录转到对应的目录下,调用器件生成器生成器件RTL代码和测试激励模板;当对子系统完成迭代分析后,生成子系统顶层代码;3)采用脚本语言编写代码修改工具;4)采用脚本语言编写子系统顶层RTL代码生成工具。以及提供子系统集成系统。本发明可配性高、移植性良好、灵活性高、提升集成效率。

著录项

  • 公开/公告号CN102012954A

    专利类型发明专利

  • 公开/公告日2011-04-13

    原文格式PDF

  • 申请/专利权人 杭州中天微系统有限公司;

    申请/专利号CN201010561655.8

  • 发明设计人 葛海通;李春澍;黄凯;严晓浪;

    申请日2010-11-29

  • 分类号G06F17/50;

  • 代理机构杭州天正专利事务所有限公司;

  • 代理人王兵

  • 地址 310012 浙江省杭州市西湖区华星路99号创业大厦A409

  • 入库时间 2023-12-18 02:09:16

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-01-02

    授权

    授权

  • 2011-06-01

    实质审查的生效 IPC(主分类):G06F17/50 申请日:20101129

    实质审查的生效

  • 2011-04-13

    公开

    公开

说明书

技术领域

本发明涉及系统芯片(SoC)集成设计领域,具体涉及子系统集成过程中子系统的反复迭代自动实现方法,以及子系统集成系统。

背景技术

随着集成电路制造水平的不断提高,设计者可以在单芯片上集成几百万门的复杂系统,即片上系统(System-On-Chip)。近年来,SoC已经成为当今集成电路设计的主流方向,随着嵌入式产品性能要求的不断提高,SoC设计的复杂度也越来越高。当前,SoC设计者主要面临两个方面的挑战:一方面, SoC集成度的提高促使SoC设计愈加复杂,带来巨大的验证难度;另一方面,嵌入式产品更新换代日趋频繁,SoC产品的TTM(time-to-market)也需较大缩短。如何快速、正确和高效的完成复杂SoC设计已经成为设计师必须面对的问题。

在系统芯片集成过程中,复用已有的子系统可有效地降低设计复杂度,提高设计效率。子系统由一系列IP或者其它子系统组成,并具有特定的功能,该功能在系统芯片中有比较广泛的应用。如图1所示,一个典型的多媒体应用系统芯片1由音频子系统2,视频子系统3及主控系统4组成。音频子系统2和视频子系统3又可以构成新的子系统5。在系统芯片集成前,如果基于已有的音频子系统2和视频子系统3或音视频子系统5将显著提高系统芯片集成的效率。但在不同的系统芯片中,对同一子系统可能有不同的性能要求。例如对于音频应用,在不同的系统芯片中对于音频声道有不同的要求,这就要求子系统具有灵活的可配性。

目前存在的子系统复用一般基于硬件描述语言Verilog或者VHDL,由于基于Verilog或者VHDL的子系统必须通过修改参数或者代码来完成配置,这样导致子系统可配置性降低,而且容易在配置过程中引入人为错误,降低系统芯片集成效率。同时,基于Verilog或者VHDL的子系统往往具有较大的平台依赖性,很难在不同的集成平台之间移植,降低子系统的复用性。

发明内容

为了克服现有系统芯片设计中子系统集成可配性低、移植性差、灵活性低、集成效率较低的不足,本发明提供一种可配性高、移植性良好、灵活性高、提升集成效率的用于系统芯片集成设计的子系统集成方法及其子系统集成系统。

本发明解决其技术问题所采用的技术方案是: 

一种用于系统芯片集成设计的子系统集成方法,所述子系统集成方法包括如下步骤:

1)采用IP-XACT标准封装子系统,所述子系统包括子系统器件XML文件、子系统设计XML文件和子系统生成器;

2)采用脚本语言编写一个子系统XML文件分析工具,在子系统实例化过程中,分析子系统中实例化的器件,同时迭代地分析子系统中实例化的其它子系统, 为每个实例化器件建立目录,并把工作目录转到对应的目录下,调用器件生成器生成器件RTL代码和测试激励模板并使用步骤3)中代码修改工具对模块和宏名进行修改;当对子系统完成迭代分析后,调用步骤4)中子系统顶层RTL代码生成工具生成子系统顶层代码;

3)采用脚本语言编写代码修改工具,根据步骤2)中子系统设计XML文件分析工具传递的参数,对当前目录下下所有代码的模块和宏名进行修改;

4)采用脚本语言编写子系统顶层RTL代码生成工具,根据步骤2)中子系统设计XML文件分析工具分析获得各子系统中实例化的器件及器件之间的互连信息,为每个子系统生成一个顶层RTL文件。 

进一步,所述步骤2)中,子系统XML文件分析工具的处理过程如下:

(2.1)在工作目录workdir下以子系统的实例化名建立目录;根据子系统的VNLV信息,从库中把子系统的器件XML文件拷贝到workdir中对应的子系统目录下,脚本工作目录转到该目录下;

(2.2)分析子系统的设计XML文件,得到子系统的顶层模块名;

(2.3)根据系统芯片中子系统的配置,把子系统器件XML文件中各参数改成对应的值;

(2.4)分析子系统器件XML文件获得子系统设计XML和生成器的信息,从库中把对应子系统的设计XML文件和生成器脚本拷贝到当前工作目录下;

(2.5)如果子系统有生成器,调用子系统生成器得到修改后的器件和设计XML文件;否者直接到步骤(2.6)

(2.6)对子系统的设计XML文件进行修改,为所有子系统中实例化的IP都加上前缀“subi_”以体现层次性,防止与其它IP重名,其中“i”为当前子系统的序号,“0”表示系统芯片中第一个子系统;

(2.7)分析子系统的设计XML文件得到子系统中所有实例化的器件及配置,保存到脚本内部数据结构中;若实例化的器件为子系统,把对应子系统的VLNV信息压入子系统堆栈;

(2.8)对于非子系统的器件,调用其生成器,生成对应IP的RTL代码和测试激励并根据实例化名对模块名和宏定义进行修改;

(2.9)分析子系统设计XML文件获得子系统中各个器件之间的连接信息。

(2.10) 判断子系统堆栈是否为空,若非空,从堆栈中取出子系统的VLNV信息,回到步骤(2.1),进行子系统的迭代处理,否者到步骤(2.11);

(2.11) 调用子系统顶层RTL代码生成工具产生各子系统顶层RTL代码。

更进一步,所述步骤(2.8)中,非子系统器件实现步骤如下:

(2.8.1)  在工作目录work_dir下建立以器件实例化名命名的目录,根据器件的VLNV信息,从库中把器件的XML文件拷贝到对应目录中,脚本工作目录转换到该目录下;

(2.8.2)  根据子系统设计XML文件中器件的配置信息,修改器件的XML文件参数值;

(2.8.3)  从器件的XML文件中判断器件是否有生成器,若有则进行步骤(2.8.4),否者直接跳到步骤(2.8.5);

(2.8.4)  调用器件的生成器,生成RTL代码与测试激励,同时生成器将更新器件XML文件;

(2.8.5)  分析器件的XML的文件,得到下列信息并保存到内部数据结构中:

①器件的顶层模块名;

②器件的总线接口与物理端口;

③寄存器与缓存的地址空间;

④器件是否为子系统;

⑤器件的所有RTL代码和测试激励列表;

(2.8.6)  在整个项目的src_rtl与src_diag目录下分别建立以器件实例化名命名的目录,从分析器件的XML文件获得RTL代码和测试激励文件路径,把对应的RTL代码拷贝到src_rtl中对应目录下,把测试激励拷贝到src_diag对应目录下;

(2.8.7)  当实例化名与器件的名不统一时,在目录src_rtl中对应的器件目录下调用代码修改工具修改对应的模块名和宏定义。

更进一步,所述步骤3)中,代码修改工具的工作步骤如下:

(3.1)判断是否具有宏文件,如果没有,直接转到步骤(3.4);

(3.2)分析宏文件获得所有的宏定义,同时在宏文件名前添加前缀“instanceName_”;

(3.3)分析当前目录下所有RTL代码中出现的宏,若在宏文件中有定义,则在对应的宏前面添加前缀“instanceName_”;

(3.4)分析当前目录下的RTL代码,得到所有的模块名;

(3.5)在所有RTL代码中出现的模块名前添加前缀“instanceName_”,同时在RTL文件名前添加前缀”instanceName_”。

所述步骤4)中,子系统顶层RTL代码生成工具的工作步骤如下:

(4.1)获得各子系统的顶层模块名,即子系统在系统中的实例化名;

(4.2)获得各子系统中实例化的器件;

(4.3)获得各子系统中实例化器件间的连接关系;

(4.4)在工程主目录的src_rtl目录下建立top目录,在该目录下依次打印出各子系统顶层模块的RTL代码。

一种用于系统芯片集成设计的子系统集成系统,所述子系统集成系统包括:子系统器件XML文件,用于描述子系统的VLNV信息,总线接口,物理端口,配置参数、子系统生成器及参考的子系统设计XML文件,在系统芯片集成过程中,把子系统作为一个普通IP集成,通过VLNV信息从IP库中索引;

子系统设计XML文件,用于描述子系统中实例化的IP及IP之间的互连;

子系统生成器,用于根据配置参数对子系统的器件及设计XML文件做相应的修改;

子系统设计XML文件分析工具,用于从子系统XML文件中按步骤提取各部分信息并保存到脚本的内部数据结构中,然后调用子系统顶层RTL代码生成工具产生子系统的顶层RTL代码;

代码修改工具,用于当器件的名称与实例化名不同时,对RTL代码的模块和宏定义进行修改,把实例名作为前缀添加到各模块和宏名之前;

子系统顶层RTL代码生成工具,用于由子系统设计XML文件分析工具调用,根据子系统设计XML文件分析工具传递的信息完成子系统顶层模块的RTL代码生成,如果子系统中嵌着其它子系统,则将为各个子系统生成一个顶层模块。

本发明的技术构思为:由于IP-XACT标准开放性及其在系统配置与集成自动化方面的优越性而被越来越广泛地应用。IP-XACT标准规定了一种基于XML的数据结构,可用于描述IP(Intellectual Property) 和系统的完整信息。利用IP-XACT标准的这一特点,可以把它作为子系统信息的载体,用于描述子系统的配置参数、接口信息及IP间互连等,然后通过脚本从子系统的XML文件中提取相关信息,自动实现子系统。关于IP-XACT标准的描述,参见参考文献1::工具链中知识产权封装集成和复用结构标准(Standard Structure for Packaging, Integrating and Re-Using IP Within Tool-Flows),其网址为:http://www.accellera.org/activities/ip-xact/。

脚本在电子设计自动化(EDA)中起着重要作用。脚本script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。使用脚本可以是实现流程控制,文本处理等功能。Perl作为一种脚本语言,具有编程简单、可移植性高、文本处理能力强等特点,再加上其专门处理XML的免费软件包,可以大大提高子系统分析和集成的自动化程度,提高集成效率。

因此,可采用IP-XACT标准提供的XML数据结构描述子系统,通过脚本自动从子系统的XML文件中提取信息,把子系统中实例化IP的配置参数传递给各个IP生成器,生成IP的RTL代码。同时利用提取的连接信息,自动生成子系统的顶层RTL文件,这样显著提高了子系统的集成效率。

本发明的有益效果主要表现在:

1.  通用性强,以符合IP-XACT标准的XML文件为信息媒介,适用于任何符合IP-XACT标准的子系统集成;

2.  子系统可配性强,因为所有的配置信息都通过XML文件传输给子系统生成器,所以可以有较大的灵活性。 

3.  自动化程度高,所有的子系统代码都通过脚本自动产生,可以避免人工引入错误。

4.  支持子系统的迭代实例化和同一子系统的多次实例化。

附图说明

图1是典型SoC架构的示意图。

图2是对器件XML文件的修改过程的示意图。

图 3是design_parser的工作流程图。

图4是散列system的数据存储结构的示意图。

图5是散列signal_connect的数据存储结构的示意图。

图 6是脚本top_gen工作流程图。

具体实施方式

下面结合附图对本发明作进一步描述。

实施例1

参照图1~图6,一种用于系统芯片集成设计的子系统集成方法,所述子系统集成方法包括如下步骤:

1)采用IP-XACT标准封装子系统,所述子系统包括子系统器件XML文件、子系统设计XML文件和子系统生成器;

2)采用脚本语言编写一个子系统XML文件分析工具,在子系统实例化过程中,分析子系统中实例化的器件,同时迭代地分析子系统中实例化的其它子系统, 为每个实例化器件建立目录,并把工作目录转到对应的目录下,调用器件生成器生成器件RTL代码和测试激励模板并使用步骤3)中代码修改工具对模块和宏名进行修改;当对子系统完成迭代分析后,调用步骤4)中子系统顶层RTL代码生成工具生成子系统顶层代码;

3)采用脚本语言编写代码修改工具,根据步骤2)中子系统设计XML文件分析工具传递的参数,对当前目录下下所有代码的模块和宏名进行修改;

4)采用脚本语言编写子系统顶层RTL代码生成工具,根据步骤2)中子系统设计XML文件分析工具分析获得各子系统中实例化的器件及器件之间的互连信息,为每个子系统生成一个顶层RTL文件。 

所述的子系统设计XML文件分析工具用于从子系统XML文件中按步骤提取各部分信息并保存到脚本的内部数据结构中,然后调用子系统顶层RTL代码生成工具产生子系统的顶层RTL代码。子系统的实现步骤如下:

(2.1)在工作目录workdir下以子系统的实例化名建立目录。根据子系统的VNLV信息,从库中把子系统的器件XML文件拷贝到workdir中对应的子系统目录下,脚本工作目录转到该目录下。

(2.2)分析子系统的设计XML文件,得到子系统的顶层模块名。

(2.3)根据系统芯片中子系统的配置,把子系统器件XML文件中各参数改成对应的值。

(2.4)分析子系统器件XML文件获得子系统设计XML和生成器的信息,从库中把对应子系统的设计XML文件和生成器脚本(如果存在)拷贝到当前工作目录下。

(2.5)如果子系统有生成器,调用子系统生成器得到修改后的器件和设计XML文件。否者直接到步骤(2.6)

(2.6)对子系统的设计XML文件进行修改,为所有子系统中实例化的IP都加上前缀“subi_”以体现层次性,防止与其它IP重名,其中“i”为当前子系统的序号,“0”表示系统芯片中第一个子系统。

(2.7)分析子系统的设计XML文件得到子系统中所有实例化的器件及配置,保存到脚本内部数据结构中。若实例化的器件为子系统,把对应子系统的VLNV信息压入子系统堆栈。

(2.8)对于非子系统的器件,调用其生成器,生成对应IP的RTL代码和测试激励并根据实例化名对模块名和宏定义进行修改。

(2.9)分析子系统设计XML文件获得子系统中各个器件之间的连接信息。

(2.10) 判断子系统堆栈是否为空,若非空,从堆栈中取出子系统的VLNV信息,回到步骤(2.1),进行子系统的迭代处理,否者到步骤(2.11).

(2.11) 调用子系统顶层RTL代码生成工具产生各子系统顶层RTL代码。

对于步骤(2.8)中非子系统器件实现步骤如下:

(2.8.1) 在工作目录work_dir下建立以器件实例化名命名的目录,根据器件的VLNV信息,从库中把器件的XML文件拷贝到对应目录中,脚本工作目录转换到该目录下。

(2.8.2) 根据子系统设计XML文件中器件的配置信息,修改器件的XML文件参数值。

(2.8.3) 从器件的XML文件中判断器件是否有生成器,若有则进行步骤(2.8.4),否者直接跳到步骤(2.8.5);

(2.8.4) 调用器件的生成器,生成RTL代码与测试激励,同时生成器将更新器件XML文件。生成器对XML文件的更新过程如图2。

(2.8.5) 分析器件的XML的文件,得到下列信息并保存到内部数据结构中:

①器件的顶层模块名;

②器件的总线接口与物理端口;

③寄存器与缓存的地址空间;

④器件是否为子系统;

⑤器件的所有RTL代码和测试激励列表;

(2.8.6) 在整个项目的src_rtl与src_diag目录下分别建立以器件实例化名命名的目录,从分析器件的XML文件获得RTL代码和测试激励文件路径,把对应的RTL代码拷贝到src_rtl中对应目录下,把测试激励拷贝到src_diag对应目录下。

(2.8.7) 当实例化名与器件的名不统一时,在目录src_rtl中对应的器件目录下调用代码修改工具修改对应的模块名和宏定义。

所述的代码修改工具主要用于当器件的名称与实例化名不同时,对RTL代码的模块和宏定义进行修改,把实例名作为前缀添加到各模块和宏名之前。在子系统设计XML文件分析工具的步骤(2.5)中对子系统中实例化的器件都进行了重命名,所以系统芯片中组成各子系统的器件一定具有不同的实例化名称,这样就避免了不同子系统实例化同一器件所引起的冲突。代码修改工具在调用时需支持两个参数,依次为:添加的前缀和宏文件。前缀即为器件的实例化名加下划线,接下来的章节中以“instanceName_”代替;而宏文件给出了RTL代码中全部的宏定义,当有多个宏文件时,用逗号分隔。代码修改工具的工作步骤如下:

(3.1)判断是否具有宏文件,如果没有,直接转到步骤(3.4);

(3.2)分析宏文件获得所有的宏定义,同时在宏文件名前添加前缀“instanceName_”;

(3.3)分析当前目录下所有RTL代码中出现的宏,若在宏文件中有定义,则在对应的宏前面添加前缀“instanceName_”;

(3.4)分析当前目录下的RTL代码,得到所有的模块名;

(3.5)在所有RTL代码中出现的模块名(包括模块定义和模块实例化)前添加前缀“instanceName_”,同时在RTL文件名前添加前缀”instanceName_”。

所述的子系统顶层RTL代码生成工具由子系统设计XML文件分析工具调用,根据子系统设计XML文件分析工具传递的信息完成子系统顶层模块的RTL代码生成,如果子系统中嵌着其它子系统,则将为各个子系统生成一个顶层模块。主要包括如下步骤:

(4.1) 获得各子系统的顶层模块名,即子系统在系统中的实例化名;

(4.2) 获得各子系统中实例化的器件。

(4.3) 获得各子系统中实例化器件间的连接关系。

(4.4) 在工程主目录的src_rtl目录下建立top目录,在该目录下依次打印出各子系统顶层模块的RTL代码。

实例:把杭州中天微系统所拥有的IP用IP-XACT标准封装成库,杭州中天微系统公司的IP有两部分组成:一是公司独立开发的IP,包括拥有自主知识产权的CKCore嵌入式处理器、h.264视频解码器等;二是基于Synoposis的DesignWare IP。基于杭州中天微系统的SoC架构,把常用功能模块封装成子系统,主要包括:视频子系统、音频子系统、外围接口子系统等。把所有封装好的IP和子系统放入IP库中,IP库被命名为aphrodite。

用Perl语言编写子系统设计XML文件分析工具并命名为design_parser用于从子系统的XML文件中提取相关信息并通过Perl的内部数据结构传递给子系统顶层RTL代码生成工具,生成子系统的顶层模块代码。为了简化对XML文件各的分析,design_parser脚本通过调用Perl的XML:DOM免费软件包来完成对XML中各个元素的分析。design_parser脚本的主要流程如图3所示,具体步骤如下:

(2.1) 在工作目录workdir下以子系统的实例化名建立目录。根据子系统的VNLV信息,从库中把子系统的器件XML文件拷贝到workdir中对应的子系统目录下,脚本工作目录转到该目录下。

(2.2) 分析子系统器件XML文件的<spirit:modelName>元素获得子系统的顶层模块名。

(2.3) 根据子系统的配置,把子系统器件XML文件中<spirit:parameters>元素中的各参数改成对应的值。

(2.4) 分析子系统器件XML文件的<spirit:hierarchyRef>元素的各个属性获得子系统设计XML文件的VLNV信息,从库中把对应子系统的设计XML文件拷贝到当前工作目录下。

(2.5) 分析子系统器件XML文件中是否有<spirit:componentGenerator>元素,如果存在,则获得生成器的信息并把它从库中拷贝到当前工作目录下,否则直接到步骤(2.7)。 

(2.6) 调用子系统生成器得到修改后的子系统器件和设计XML文件。

(2.7) 对子系统的设计XML文件进行修改,为所有子系统中实例化的IP都加上前缀“subi_”以体现层次性,防止与其它IP重名,其中“i”为当前子系统的序号,“0”标志系统芯片中第一个子系统。

(2.8) 分析子系统的设计XML文件中的<spirit:componentInstances>元素,得到子系统中所有实例化的器件以及配置信息。把对应器件的模块名和实例化名称保存到散列%systems中,散列的键值为子系统系统的序号,对应的值为保存该子系统中实例化器件信息的散列。若实例化的器件为子系统,把对应子系统的VLNV信息压入堆栈@sub_systems.

(2.9) 对于非子系统的器件,调用其生成器,生成对应IP的RTL代码和测试激励,并调用change_rtl脚本对模块及宏定义进行重命名。

(2.10)  分析子系统设计XML文件的<spirit:interconnections>、<spirit:adHocConnections>和<spirit:hierConnections>元素,得到子系统中各个器件之间的连接信息,保存到散列%connect_signals中。

(2.11)  判断堆栈@sub_systems是否为空,若非空,从栈顶取出子系统的VLNV信息,回到步骤(2.1),进行子系统的迭代处理,否者到步骤(2.11)

(2.12)  调用子系统顶层RTL代码生成工具生成各个子系统的顶层RTL模块。

步骤(2.8)中所述散列%system的组织结构如图5所示。 序号“0”索引的为顶层子系统,其它子系统为该子系统中迭代实例化的子系统。$system{0}索引到的是子系统sub0中实例化的所有器件的散列%sub0,键为器件的实例化名,值为器件的顶层模块名。例如子系统sub0中实例化了器件A,B,C,D,E,F,对应的实例化名分别是在各模块名前添加“sub0_”,这与步骤(2.7)中所述相符。器件模块名索引的数字表示该器件是否为子系统,当为0时表示非子系统,大于0时表示为子系统,该系统的相关信息可以通过对应的数字从散列%system中索引。例如模块名为“C ”对应的数值为1,表示该器件即为子系统sub1。通过这样的存储组织架构,子系统及其内部实例化的子系统都可以迭代地保存下来。

步骤(2.10)中所述信号连接信息保存散列%signal_connect的结构如图5所示。通过器件实例化名可以索引得到一个数组,该数组中保存的是该模块中各个输出信号的连接信息,数组的每个元素为一个散列,散列的结构如图5表格所示。信号名表示当前连接的器件的信号端口名,方向表示是输入还是输出,连接器件表示该信号连接的目标器件,连接信号名表示连接器件中与该信号相连的信号名称,左右边界表示该信号当前连接的位宽范围,连接信号左右边界表示与该信号相连信号的位宽边界,信号完整性表示该信号是否所有位均被连接,连接信号完整性标志被连信号是否所有位均被连接。 

对于步骤(2.8)中提到非子系统器件实现过程如下:

(2.8.1)  在工作目录work_dir下建立以器件实例化名字命名的目录,根据器件的VLNV信息,从库中把器件的XML文件拷贝到对应目录中,脚本工作目录转换到该目录下。

(2.8.2)  根据子系统设计XML文件中器件的配置信息,修改器件XML文件的<spirit:parameters>元素中的各参数值。

(2.8.3)  分析器件XML文件中的<spirit:componentGenerator>元素判断器件是否有生成器,若有则进行步骤(2.8.4),否者直接跳至步骤5

(2.8.4)  分析<spirit:componentGenerator>元素获得生成器信息并把生成器拷贝到当前目录下,调用器件生成器,生成RTL代码与测试激励,同时生成器将修改器件XML文件,RTL代码与激励的文件路径将在新的XML文件的<spirit:fileSets>元素表示。生成器对XML文件的更新过程如图2。

(2.8.5)  分析器件的XML的文件,得到下列信息并保存到内部数据结构中:

①分析<spirit:modelName>元素获得器件的顶层模块名;

②分析<spirit:busInterfaces>和<spirit:ports>元素分别获得器件的总线接口与物理端口;

③分析<spirit:memoryMaps>元素获得寄存器与缓存的地址空间;

④通过分析<spirit:views>元素下的子元素<spirit:envIdentifier>和<spirit:hierarchyRef> 判断器件是否为子系统;

⑤器件的所有RTL代码和测试激励列表及路径;

(2.8.6)  在整个项目的src_rtl与src_diag目录下分别建立以器件实例化名命名的目录,把对应的RTL代码拷贝到src_rtl对应目录下,把测试激励拷贝到src_diag目录下。

(2.8.7)  当实例化名与器件的名不统一时,在目录src_rtl中对应的器件目录下调用代码修改工具,在所有模块名与宏名前添加“instanceName_”,其中instanceName表示器件的实例化名称。

用Perl语言编写代码修改工具并命名为change_rtl,用于修改RTL代码中的模块名和宏定义,change_rtl以添加前缀的形式对模块名和宏定义进行修改,添加的前缀和需要修改的宏定义通过参数的形式传递给change_rtl脚本。集体工作流程如下:

(3.1)判断传递的参数个数,若只有一个参数,则认为没有宏定义文件,直接转到步骤(3.4);

(3.2)分析宏文件,得到所有的宏定义名称,放入散列%macro,同时在宏文件名前添加前缀;

(3.3)得到当前目录下所有的RTL代码和宏文件,分析每个文件中出现的宏,如在散列%macro中有定义,则在对应的宏前面添加前缀;

(3.4)分析当前目录下的RTL代码,得到所有的模块名;

(3.5)在所有RTL代码中出现的模块名前添加前缀,同时在RTL文件名前添加前缀;

用Perl语言编写子系统顶层RTL代码生成工具并命名为top_gen。 top_gen脚本将根据design_parer分析得到的散列%systems 和%signal_connect中的信息完成子系统顶层模块的RTL代码生成,如果子系统中嵌着其它子系统,则将为各个子系统生成一个顶层模块。

top_gen脚本的工作流程如图6所示,主要包括如下步骤:

(4.1) 通过分析散列%system获得各子系统的顶层模块名,即子系统在系统中的实例化名;

(4.2) 通过分析散列%system获得各子系统中实例化的器件名称。

(4.3) 通过分析散列%signal_connect获得各子系统中实例化器件间的连接关系。

(4.4) 在工程主目录的src_rtl目录下建立top目录,在该目录下依次打印出各子系统顶层模块的RTL代码。

在分析各子系统的顶层模块名过程中,最上层子系统的实例化名从变量$sub_system_top中获得,在该子系统中迭代实例化的其它子系统顶层模块名从散列%system中获得,例如子系统sub2的实例化顶层模块名为sub0_E。 根据从%system索引到的对应子系统散列的所有键值即为该子系统中实例化的器件名,例如,子系统sub0中实例化的器件为sub0_A、sub0_B、sub0_E、sub0_F。为各个子系统建立以“实例化名_顶层模块名”规则命名的文件,然后以硬件描述语言的语法在对应文件中打印出个实例化模块和连接信息,这样就可以得到各子系统的顶层文件。

通过以上步骤自动了实现系统芯片中子系统集成的全部流程,基于该流程显著提高了系统芯片集成过程中子系统的可配性和通用性,使杭州中天微系统公司的系统芯片设计变得更加高效。

实施例2

参照图1~图6,一种用于系统芯片集成设计的子系统集成系统,所述子系统集成系统包括:子系统器件XML文件,用于描述子系统的VLNV信息,总线接口,物理端口,配置参数、子系统生成器及参考的子系统设计XML文件,在系统芯片集成过程中,把子系统作为一个普通IP集成,通过VLNV信息从IP库中索引;

子系统设计XML文件,用于描述子系统中实例化的IP及IP之间的互连;

子系统生成器,用于根据配置参数对子系统的器件及设计XML文件做相应的修改;

子系统设计XML文件分析工具,用于从子系统XML文件中按步骤提取各部分信息并保存到脚本的内部数据结构中,然后调用子系统顶层RTL代码生成工具产生子系统的顶层RTL代码;

代码修改工具,用于当器件的名称与实例化名不同时,对RTL代码的模块和宏定义进行修改,把实例名作为前缀添加到各模块和宏名之前;

子系统顶层RTL代码生成工具,用于由子系统设计XML文件分析工具调用,根据子系统设计XML文件分析工具传递的信息完成子系统顶层模块的RTL代码生成,如果子系统中嵌着其它子系统,则将为各个子系统生成一个顶层模块。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号