CN112364581B - 自动在寄存器传输级设计文件中插入特定代码的方法及装置 - Google Patents
自动在寄存器传输级设计文件中插入特定代码的方法及装置 Download PDFInfo
- Publication number
- CN112364581B CN112364581B CN202011266605.7A CN202011266605A CN112364581B CN 112364581 B CN112364581 B CN 112364581B CN 202011266605 A CN202011266605 A CN 202011266605A CN 112364581 B CN112364581 B CN 112364581B
- Authority
- CN
- China
- Prior art keywords
- module
- code
- rtl
- statement
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/39—Circuit design at the physical level
- G06F30/398—Design verification or optimisation, e.g. using design rule check [DRC], layout versus schematics [LVS] or finite element methods [FEM]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种自动在寄存器传输级(Register Transfer Level,RTL)设计文件中插入特定代码的方法,包括:读入一RTL文件,并根据上述RTL文件取得一储存信息;读入一插入信息,其中上述插入信息包括一待插入代码及上述待插入代码所对应一模块在上述RTL文件中的一绝对路径;由上述绝对路径中取得模块实例化名称,并将上述模块实例化名称存入一队列中;执行一插入程序,以取得一最终模块定义语句;以及在上述最终模块定义语句中插入上述待插入代码。
Description
技术领域
本发明有关于芯片设计与芯片验证领域,且特别有关于一种自动在寄存器传输级(Register Transfer Level,RTL)设计文件中插入特定代码(Code)的方法及装置。
背景技术
当前大规模集成电路大多是片上系统的形式。在各子模块组成为片上系统之前,各模块常常会有往特定位置插入特定代码的需求。
目前想要在寄存器传输级设计文件(Register Transfer Level,RTL)设计中的特定模块中插入特定的代码时,需要通过人工方式先定位到寄存器传输级设计文件代码中模块所在的位置,接着在模块内部插入特定的代码。然而,这个过程一般必须由芯片设计人员手动来完成,而且RTL文件里为数庞大的批注也造成搜寻过程的困扰,故造成效率低落的缺点。此外,就一般的状况来说,较大的芯片(例如SoC)对应RTL文件代码数也较多,因此利用人工搜寻插入代码的方式会浪费芯片设计者更多时间。
因此,需要一种自动在寄存器传输级设计文件中插入特定代码的方法及装置,以改善上述问题。
发明内容
以下揭示的内容仅为示例性的,且不意指以任何方式加以限制。除所述说明方面、实施方式和特征之外,通过参照附图和下述具体实施方式,其他方面、实施方式和特征也将显而易见。即,以下揭示的内容被提供以介绍概念、重点、益处及本文所描述新颖且非显而易见的技术优势。所选择,非所有的,实施例将进一步详细描述如下。因此,以下揭示的内容并不意旨在所要求保护主题的必要特征,也不意旨在决定所要求保护主题的范围中使用。
因此,本发明的主要目的即在于提供一种自动在寄存器传输级设计文件中插入特定代码的方法及装置,以改善上述缺点。
本发明提出一种自动在寄存器传输级(Register Transfer Level,RTL)设计文件中插入特定代码的方法,包括:读入一RTL文件,并根据上述RTL文件取得一储存信息;读入一插入信息,其中上述插入信息包括一待插入代码及上述待插入代码所对应一模块在上述RTL文件中的一绝对路径;由上述绝对路径中取得模块实例化名称,并将上述模块实例化名称存入一队列中;执行一插入程序,其中上述插入程序包括以下步骤:步骤(a):由上述队列中依序取出上述模块实例化名称;步骤(b):在上述RTL文件中搜索对应上述模块实例化名称的模块实例化语句,得到上述模块实例化语句对应的模块定义名称;步骤(c):根据上述储存信息跳转到对应上述模块定义名称的模块定义语句的开始位置;重复执行上述步骤(a)~(c),直到上述队列中已无上述模块实例化名称为止,并取得一最终模块定义语句;以及在上述最终模块定义语句中插入上述待插入代码。
在一些实施例中,上述方法还包括在上述最终模块定义语句的一最终开始位置及上述最终模块定义语句的一最终结束位置之间插入上述待插入代码。
在一些实施例中,上述储存信息包括:上述RTL文件中每一模块定义语句的所在行数;上述RTL文件中每一模块实例化语句的所在行数;以及每一模块实例化名称与每一模块定义名称之间的对应关系。
在一些实施例中,在读入上述插入信息后,上述方法还包括:过滤上述 RTL文件中的注释语句;以及将上述注释语句储存至临时文件中。
在一些实施例中,在上述最终模块定义语句中插入上述待插入代码之后,上述方法还包括:恢复上述RTL文件中的上述注释语句。
在一些实施例中,上述插入信息还包括:上述待插入代码所属的一第一层级(hierarchy);其中上述方法还包括:读入一新插入信息,其中上述新插入信息至少包括一新待插入代码及上述新待插入代码所属的一第二层级;当上述第一层级与上述第二层级相同时,合并上述待插入代码及上述新待插入代码为一代码组;以及当执行上述插入程序之后,在上述最终模块定义语句中插入上述代码组。
本发明提出一种自动在寄存器传输级设计文件(Register Transfer Level,RTL)中插入特定代码的装置,包括:一处理器;以及一或多个计算机储存介质,储存计算机可读指令,其中上述处理器使用上述计算机储存介质以执行指令:读入一RTL文件,并根据上述RTL文件取得一储存信息;读入一插入信息,其中上述插入信息包括一待插入代码及上述待插入代码所对应一模块在上述RTL文件中的一绝对路径;由上述绝对路径中取得模块实例化名称,并将上述模块实例化名称存入一队列中;执行一插入程序,其中上述插入程序包括以下步骤:步骤(a):由上述队列中依序取出上述模块实例化名称;步骤(b):在上述RTL文件中搜索对应上述模块实例化名称的模块实例化语句,得到上述模块实例化语句对应的模块定义名称;步骤(c):根据上述储存信息跳转到对应上述模块定义名称的模块定义语句的开始位置;重复执行上述步骤(a)~(c),直到上述队列中已无上述模块实例化名称为止,并取得一最终模块定义语句;以及在上述最终模块定义语句中插入上述待插入代码。
附图说明
图1是能够结合本发明实施例的处理器的计算系统的示例的框图。
图2是显示根据本发明一实施例所述的自动在寄存器传输级设计文件中插入特定代码的方法流程图。
图3是显示根据本发明一实施例所述的处理器执行插入程序的方法流程图。
图4A显示本发明一实施例执行插入代码的RTL文件内容示意图。
图4B显示本发明一实施例储存于队列中插入信息的内容示意图。
图4C显示本发明一实施例的具有多个层级的插入代码。
图4D显示本发明一实施例中,使用批处理输入以插入代码至图4A所示 RTL文件的第一种实施方式示意图。
图4E显示本发明一实施例中,使用批处理输入以插入代码至图4A所示 RTL文件的第二种实施方式示意图。
具体实施方式
本发明实施例提供一种自动在寄存器传输级设计文件(Register TransferLevel,RTL)中插入特定代码的方法及装置。在不改变原始设计功能的情况下插入特定代码,并采用跳转方式寻找待插入代码的位置,提升寄存器传输级设计文件的运行速度。此外,当待插入代码是连接线时,可以实现信号跨层级(hierarchy)引出的功能。本发明能使整个插入过程不受注释语句的影响,并且不会影响原先注释语句。
现在将详细参考本发明的各实施例,其示例在附图中示出。虽然本发明将结合这些实施例进行描述,但是应该理解它们并非旨在将本发明限定于这些实施例。相反,本发明旨在覆盖可以包括在如随附权利要求所限定的本发明的精神和范围内的替换、修改和等同物。此外,在本发明的实施例的以下详细描述中,阐述了许多具体细节以提供对本发明的透彻理解。然而本领域的技术人员将认识到本发明可以没有这些具体细节而实施。在其他实例中,没有详细描述已知的方法、步骤、元件和电路,以免对本发明的实施例的各方面造成不必要的混淆。
接下来的部分详细描述以过程、逻辑块、处理以及对计算机存储器内数据位进行操作其他象征性表示来呈现。这些描述和表示是由数据处理领域技术人员所使用的手段,以向本领域的其他技术人员最有效地传达他们工作的实质。在本发明中,过程、逻辑块、处理等等,被设想为得出期望结果的步骤或指令的自洽序列。步骤利用物理量的物理操纵。通常,尽管不是必要地,这些量采用能在计算机系统中被储存、转移、组合、对比和另外操纵的电或磁信号的形式。己经证明,主要是出于共同使用的原因,将这些信号称为事务处理、位、值、元素、符号、字符、样本、像素等等有时是方便的。
然而,要牢记的是,所有的这些和类似的术语都要与适当的物理量相关联,且仅仅是应用于这些量的便捷标签。除非特别声明,否则在下面的论述中很明显,应意识到贯穿本发明,利用术语诸如“选择”、“分派”、“确定”、“储存”、“派送”、“决定”、“验证”等等的讨论,指的是计算机系统的动作与过程(如图2的方法流程图200及图3的方法流程图300)或类似的电子计算设备或处理器(如图1的系统100)。计算机系统或类似的电子计算设备对计算机系统存储器、寄存器或其他这类信息储存、传输或显示设备内以物理(电子)量表示的数据进行操纵和转换。
本发明描述的实施例可一般围绕着驻留在某一形式的计算机可读储存介质上的计算机可执行指令加以讨论,诸如由一台或多台计算机或其他设备执行的程序模块。以示例的方式但非限制,计算机可读储存介质可以包括非暂时性计算机可读储存介质和通信介质;非暂时性计算机可读介质包括除了暂时性传播信号之外所有的计算机可读介质。通常,程序模块包括例行程序、程序、对象、元件、数据结构等等,其执行特定任务或实现特定的抽象数据类型。程序模块的功能可以在各种实施例中按照期望加以组合或分配。
计算机储存介质包括易失性和非易失性、可移动的和不可移动的以任何方法或技术实现的介质,用于储存信息诸如计算机可读指令、数据结构、程序模块或其他数据。计算机储存介质包括但不限于,随机存取存储器(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM)、电可擦除只读存储器(Electrically-Erasable ProgrammableRead-Only Memory,EEPROM)、闪存或其他存储器技术、只读光盘(Compact Disc Read-OnlyMemory,CD- ROM)、数字多功能光盘(Digital Versatile Disc,DVD)或其他光盘储存装置、盒式磁带、磁盘、磁盘储存装置或其他磁性储存装置,或可用于储存所需的信息并且可被计算机存取的其它任何介质。计算机储存介质本身不包括信号。
通信介质一般包含计算机可读指令、数据结构、程序模块或其它采用诸如载波或其他传输机制之类的模块化数据信号形式的数据,并包括任何信息传递介质。术语“模块化数据信号”指具有一或多个特征集合或以在信号中编码信息之一方式更改的信号。举例但不局限于,通信介质包括例如有线网络或直接有线连接的有线介质及无线介质,例如声频、射频(RF)、红外线以及其它无线介质。上述介质的组合包括在计算机可读介质的范围内。
图1是能够结合本发明实施例的处理器104的计算系统100的示例的框图。计算系统100宽泛地代表任何能执行计算机可读指令的单处理器或多处理器计算设备或能够执行计算机可读指令的系统。计算系统100的示例包括但不限于,工作站、膝上型计算机、客户端终端、服务器、分布式计算系统、手持设备或任何其他计算系统或设备。在其最基本的配置中,计算系统100可以包括至少一个本发明的实施例的处理器104和系统存储器106。
处理器104包含本发明的实施例,并且通常代表任何类型或形式的、能处理数据或解释并执行指令的处理单元。在某些实施例中,处理器104可以从软件应用或模块接收指令。这些指令可以使处理器104实施一个或多个本发明描述和/或示出的示例性实施例的功能。在不同的实施例中,处理器104 可以包括并行运行的多处理器。
系统存储器106通常代表任何类型或形式的、能储存数据和/或其他计算机可读指令的易失性或非易失性储存装置或介质。系统存储器106的示例包括但不限于,RAM、ROM、闪存或任何其他适合的存储器设备。虽然不加以要求,但在某些实施例中计算系统100可以包括易失性存储器单元(例如,系统存储器106)和非易失性储存装置(例如,主储存设备122)这两者。
计算系统100除处理器104和系统存储器106外还可以包括一个或多个组件或元件。例如,在图1的实施例中,计算系统100包括存储器控制器108、输入/输出(I/O)控制器110以及通信接口112,它们每个都可以经由通信基础设施102互相连接。通信基础设施102通常代表任何类型或形式的、能促进计算设备中一个或多个元件之间通信的基础设施。通信基础设施102的示例包括但不限于,通信总线(诸如工业标准体系结构(ISA)、外设组件互连标准 (Peripheral Component Interconnect,PCI)、PCI Express(PCIe)或类似总线)和网络。
存储器控制器108通常代表任何类型或形式的、能处理存储器或数据或者能控制计算系统100的一个或多个元件间通信的设备。举例来说,存储器控制器108可以经由通信基础设施102来控制处理器104、系统存储器106 及I/O控制器110之间的通信。
I/O控制器110通常代表任何类型或形式的、能协调和/或控制计算设备的输入输出功能的模块。举例来说,I/O控制器110可以控制或促进计算系统 100的一个或多个元件之间的数据的转移,诸如处理器104、系统存储器106、通信接口112、显示适配器116、输入接口120以及储存接口124。
通信接口112宽泛地代表任何类型或形式的、能促进示例性计算系统100 和一个或多个附加设备之间通信的通信设备或适配器。举例来说,通信接口 112可以促进计算系统100和包括附加计算系统的私人或公共网络之间的通信。通信接口112的示例包括但不限于,有线网络接口(诸如网络适配器)、无线网络接口(诸如无线网络适配器)、调制解调器以及任何其他适合的接口。在一个实施例中,通信接口112经由至诸如因特网的网络的直接链路提供了到远程服务器的直接连接。通信接口112也可以通过任何其他适合的连接来间接提供这种连接。
通信接口112也可以代表主机适配器,配置为经由外部总线或信道来促进计算系统100与一个或多个附加网络或储存装置之间的通信。主机适配器的示例包括但不限于,小型计算机系统接口(Small Computer System Interface, SCSI)主机适配器、通用串行总线(USB)主机适配器、IEEE(电气与电子工程师协会)1394主机适配器、串行高级技术附件(SATA)和外部SATA(eSATA)主机适配器、高级技术附件(ATA)和并行ATA(PATA)主机适配器、光纤信道接口适配器、以太网适配器等等。通信接口112也可以允许计算系统100参与分布式或远程计算。例如,通信接口112可以从远程设备接收指令,或向远程设备发送指令用于执行。
如图1所示,计算系统100还可以包括至少一个经由显示适配器116耦合到通信基础设施102的显示设备114。显示设备114通常代表任何类型或形式的、能视觉显示由显示适配器116所转发的信息的设备。类似地,显示适配器116通常代表任何类型或形式的、配置为转发图形、文本和其他数据用于在显示设备114上显示的设备。
如图1所示,计算系统100也可包括至少一个经由输入接口120耦合到通信基础设施102的输入设备118。输入设备118通常代表任何类型或形式的、能向计算系统100提供计算机生成或人工生成输入的输入设备。输入设备118的示例包括但不限于,键盘、定点设备、语音识别设备、或任何其他输入设备。
如图1所示,计算系统100也可包括主储存装置122和经由储存接口124 耦合到通信基础设施102的可选备用储存装置123。储存装置122和123通常代表任何类型或形式的、能储存数据和/或其他计算机可读指令的储存装置或介质。举例来说,储存装置122和123可以是磁盘驱动器(例如,所谓的硬盘驱动器)、软盘驱动器、磁带驱动器、光盘驱动器、闪盘驱动器等等。储存接口124通常代表任何类型或形式的、用来在储存装置122和123与计算系统100的其他元件之间转移数据的接口或设备。
在一个示例中,数据库130可储存在主储存装置122内。数据库130可代表单个数据库或计算设备的一部分,或者它可代表多个数据库或计算设备。举例来说,数据库130可代表(储存于)计算系统100的一部分。可替代地,数据库130可代表(储存于)一个或多个能被诸如计算系统100的计算设备所存取的物理上分离的设备。
继续参考图1,储存装置122和123可配置为,对配置为储存计算机软件、数据或其他计算机可读信息的卸除式储存装置单元进行读取和/或写入。适合的卸除式储存装置单元的示例包括但不限于,软盘、盒式磁带、光盘、闪存设备等等。储存装置122和123还可包括其他类似结构或设备,以允许计算机软件、数据或其他计算机可读指令加载计算系统100。举例来说,储存装置122和123可配置为读取和写入软件、数据或其他计算机可读信息。储存设备122和123还可以是计算系统100的一部分,或可以是通过其他接口系统存取的单独设备。
许多其他设备或子系统可连接至计算系统100。相反,无需具备图1标出的所有组件和设备来施行本发明所述的实施例。上文涉及的设备和子系统还可以不同于图1所示的方式互相连接,例如在计算机系统架构中,处理器 104通过芯片组(Chipset)与系统存储器106、I/O控制器110、通信接口112、显示设备114、以及输入接口120、储存接口124等进行桥接,并与对应外界装置进行信息交互。计算系统100还可采用任意数量的软件、固件和/或硬件配置。举例来说,本发明的示例性实施例可在计算机可读介质上编码为计算机程序(也称作计算机软件、软件应用、计算机可读指令或计算机控制逻辑)。
包含计算机程序的计算机可读介质可加载计算系统100。储存于计算机可读介质上的全部或部分计算机程序随后可储存于系统存储器106和/或储存装置122和123的各部分中。当由处理器104执行时,加载计算系统100中的计算机程序可使处理器104实施和/或作为实施本发明描述和/或示出的示例性实施例的功能的手段。附加地或替代地,本发明描述和/或示出的示例性实施例可在固件和/或硬件中实现。
图2描绘了根据本发明实施例的自动在寄存器传输级设计文件中插入特定代码的示例性计算器控制的过程。虽然顺序表示和描述流程图中各步骤,本领域的技术人员应该理解一些或所有步骤都可以按不同顺序执行,并且一些或者所有步骤可以并行执行。此外,在本发明的一个或多个实施例中,以下所描述的一个或多个步骤可以省略、重复和/或以不同的顺序实现。相应地,图2中步骤的布置不应解释为对揭示的方面进行限制。此外,对于参照本发明所提供教导的相关领域的技术人员来说显而易见的是,其他功能流程也在本发明的范围与精神内。方法流程200可以继续参考上述示例性实施例来描述,虽然方法不限于这实施例。
图2是显示根据本发明一实施例所述的自动在寄存器传输级设计文件中插入特定代码的方法流程图200,为使本领域技术人员理解本发明的技术内容,在说明图2/3流程时也一并搭配图4A所例示的RTL代码与图4B例示的储存于队列的插入信息作阐释。此方法可执行于如图1所示的处理器104中。
在步骤S205中,处理器读入一芯片设计者欲插入代码的RTL文件,并根据上述RTL文件取得一储存信息,其中上述储存信息至少包括:上述RTL 文件中每一模块定义语句的所在行数、上述RTL文件中每一模块实例化语句的所在行数,以及每一模块实例化名称与每一模块定义名称之间的对应关系。更详细地说明,当处理器读入RTL文件后,会通过格式匹配分析出各模块实例化语句所在的行数与模块定义语句所在的行数,以及每一模块实例化名称与每一模块定义名称之间的对应关系。处理器并将上述对应关系储存至储存信息中。请参考图4A所示的RTL代码,可发现第120行有模块实例化语句,其中显示模块实例化名称ins_a的模块定义名称为mod_a,而mod_a的模块定义语句则位于第200行(并结束于第250行);同样的,第225行也有有模块实例化语句,其中显示模块实例化名称ins_b的模块定义名称为mod_b,而 mod_b的模块定义语句则位于第300行(并结束于第340行)。因此,通过步骤 205可取得RTL文件文件中所有模块实例化语句所在行数,并从中取得模块实例化名称以及与其对应的模块定义名称,进而取得各模块定义名称语句等对应关系与所在行数,最后将这些对应关系都储存起来。
接着,在步骤S210中,处理器读入一插入信息,其中上述插入信息包括一待插入代码及上述待插入代码所对应一模块在上述RTL文件中的一绝对路径。在步骤S215中,处理器由上述绝对路径中取得模块实例化名称,并将上述模块实例化名称存入一队列中。举例来说,若芯片设计者欲将下列代码插入在mod_b中:
mod_c ins_c(…);//要插入在mod_b的代码
依据图4A RTL文件中显示的模块top与模块实例化名称ins_a与ins_b 的关系而言,其绝对路径是“top.ins_a.ins_b”,这代表模块mod_b的模块实例化名称ins_b包含在模块实例化名称ins_a(模块定义为mod_a)内部,而模块实例化名称ins_a又包含在模块top之中,而步骤S210将读入插入代码与绝对路径这两项信息。接下来的步骤S215中,由于欲插入代码对应的绝对路径是“top.ins_a.ins_b”,因此将在绝对路径中去除顶层路径(亦即去除“top”,因 top是模块定义名称而非模块实例化名称),并保留其余的模块实例化名称(亦即“ins_a.ins_b”)后,再将模块实例化名称存入队列中,结果即如图4B所示。
再来,在步骤S220中,处理器执行一插入位置搜索程序。插入程序的详细流程于图3说明。图3是显示根据本发明一实施例所述的处理器执行插入程序的方法流程图300。在步骤S305中,处理器由队列中依序取出上述模块实例化名称。接着,在步骤S310中,处理器在上述RTL文件中搜索对应上述模块实例化名称的模块实例化语句,得到上述模块实例化语句对应的模块定义名称。在步骤S315中,处理器根据上述储存信息跳转到对应上述模块定义名称的模块定义语句的开始位置。在步骤S320中,处理器判断上述队列中是否已无上述模块实例化名称。当处理器判断上述队列中已无上述模块实例化名称时(在步骤S320中的“是”),并结束上述流程。而处理器将可取得在步骤S315中一最终模块定义语句。当处理器判断上述队列中还有上述模块实例化名称时(在步骤S320中的“否”),回到步骤S305中,处理器依序由队列中取出上述模块实例化名称。处理器接着将重复执行上述步骤S305~S315,直到上述队列中已无上述模块实例化名称为止,并取得一最终模块定义语句。以图4B为例,队列中储存的是“ins_a.ins_b”的实例化名称,而在步骤S305 会先取出实例化名称ins_a,随后的步骤S310会在图4A的RTL文件的第120 行发现模块实例化名称ins_a的模块实例化语句,并在该行发现模块ins_a的模块定义名称是mod_a。因此,在接下来的步骤S315中,将搜索mod_a的模块定义语句,并在图4A的RTL文件的第200行找到mod_a的模块定义语句后,接着跳转到mod_a的开始位置(亦即第200行),最后在步骤S320中判断队列中是否还有模块实例化名称。因此时还有模块实例化名称ins_b还没搜索,所以将获得“否”的判断结果,接下来就回到步骤S305。随后,在步骤 S305会取出模块实例化名称ins_b,并在随后的步骤S310于RTL文件的第 225行找到ins_b的模块实例化语句,其中有ins_b的模块定义名称mod_b,随后在步骤S315执行搜索并在第300行找到mod_b模块定义语句并跳转至该行,最后在后续的步骤S320的判断步骤中发现已无模块实例化名称未处理,因此将获得“是”的判断结果并结束图3流程而回到图2。
回到图2,在执行完步骤S220的插入位置搜索程序后,在步骤S225中,处理器在上述最终模块定义语句中插入上述待插入代码。更详细地说明,处理器在上述最终模块定义语句的一最终开始位置及上述最终模块定义语句的一最终结束位置之间插入上述待插入代码。举例而言,如上面段落所述,由于要插入的代码是“mod_c ins_c(…);//要插入在mod_b的代码”,且要插入在模块定义名称mod_b之中,于是步骤S220中的最终模块定义语句就是 mod_b的模块定义语句,依据图4A显示的RTL代码,其最终开始位置为第 300行(关键词module所在行数)、最终结束位置为第340行(关键词endmodule 所在行数),而插入代码则被插入在第310行中。应注意的是,图4B显示的是将代码插入在关键词module与endmodule之间的行数,但本领域技术人员应知,代码插入的位置可以依据实际情况而定,例如插入在模块定义语句的最后面(亦即插入在关键词“endmodule”的前一行)、最前面(例如关键词“module”的下一行)。
值得注意的是,本发明插入代码的操作基本上不会影响原始RTL文件所定义的芯片行为,但是在插入代码后却可能衍生一些问题,这部分就需要芯片设计者自行处理。举例来说,图4A例示的欲插入代码为未曾出现在RTL 文件的新模块mod_c,因此芯片设计者虽可以通过本发明在mod_b里插入代码“mod_c ins_c(…);//要插入在mod_b的代码”,还是需要在插入这个代码后的RTL文件中,自行增加模块mod_c的模块定义语句(例如增加图4A第400-420行所示的内容)。再者,由于图4A所例示的模块mod_c中又包含了半加器(halfadder)HA1的模块实例化语句(半加器的模块定义语句在第500- 505行),因为半加器将产生一个在原始RTL文件中未曾出现的信号“carry_out”,所以芯片设计者仍须自行处理这个未知信号(unknown signal)的问题。由于本领域技术人员熟知这些部分的操作故不再赘述。
在一实施例中,在执行完步骤S205后,处理器还可过滤上述RTL文件中的注释语句,并将上述注释语句储存至临时文件中。在执行完步骤S220后,处理器才恢复上述RTL文件中的上述注释语句。举例来说,在图4A第120 行的注释语句“//top里包含宣告为mod_a的ins_a”可被暂时从RTL文件中移除并储存在临时文件中,并在执行步骤S220完成插入代码操作后再恢复至 RTL文件的第120行里,这样本发明的搜索操作就不会受到注释的影响而得以正确且顺利进行。
在另一实施例中,上述插入信息还包括上述待插入代码所属的一第一层级(hierarchy)。而处理器可在读入插入信息后又读入另一新插入信息,或是同时读入多个插入信息,其中上述新插入信息至少包括一新待插入代码、上述新待插入代码所对应一模块在上述RTL文件中的一绝对路径,以及上述新待插入代码所属的一第二层级。处理器可比较包括在新插入信息中新待插入代码所属的一第二层级与上述待插入代码所属的一第一层级是否相同。当上述第一层级与上述第二层级相同时,处理器合并上述待插入代码及上述新待插入代码为一代码组,并在执行上述插入程序之后,在上述最终模块定义语句中插入上述代码组。以图4C例示的具有多个层级的插入代码为例,若芯片设计者希望在模块mod_b插入下列四条插入代码(其中第四条是注释语句):
模块实例化名称插入代码
ins_a.ins_b mod_c ins_c(…);//要插入在mod_b的第一组代码
ins_a.ins_b mod_d ins_d(…);//要插入在mod_b的第二组代码
tire1.tire2mod_e ins_e(…);//要插入在tire2的第一组代码
ins_a.ins_b//mod_b这个模块被SoC里被广泛运用不要随便修改
由于第1、2、4行插入代码的绝对路径都是“ins_a.ins_b”,因此这三组插入代码可以合并处理(例如合并成一个代码组再同时执行插入操作),并在模块定义语句mod_b中同时执行插入代码的操作。应注意的是,图4C第3行插入代码的绝对路径为“tire1.tire2”而非“ins_a.ins_b”,因此无法与上面的三个代码的插入操作合并处理。此外,从图4C的第4行插入代码内容可知其是是一条批注,因此本发明也可用来插入一条批注或任何语句,而非仅能用来插入模块实例化语句等代码。
图4D例示以批处理方式(Batch processing)将代码插入至RTL文件中的第一种实施方式,其包含芯片设计者所有想要插入的代码与相对应的绝对路径,其中第1-4行的内容与图4C相同。同样的,本发明可以在检查所有插入代码的绝对路径后,发现第1、2、4行插入代码的绝对路经相同,因此由于第1、2、4行的插入操作能合并处理。另一方面,图4D第3、5行插入代码的绝对路径不仅与第1、2、4行插入代码的绝对路径不同,而且第3、5行彼此的绝对路径也不同,因此也只能分别单独处理代码插入操作。
图4E描述通过本发明以批处理方式将代码插入至所指示的RTL文件中的第二种实施方式。图4E与图4D的差异,在于图4E所输入的并非插入代码的绝对路径而是模块定义名称。由于步骤S205在分析RTL文件时,会储存各模块定义语句所在的行数,因此芯片设计者可直接输入欲插入代码的模块定义名称,而本发明便可依据在步骤S205所得知的模块定义语句所在行数,直接跳往对应的模块定义语句的开头并执行插入操作。举例来说,在步骤S205执行后可得知模块定义名称mod_b的模块定义语句位于第300行,因此当读取图4E第1行可取得mod_b的模块定义名称后,可直接跳转至图 4A的RTL文件第300行以执行代码插入的操作。同样的,因图4E的第1、 2、4行插入代码对应的模块定义名称都是mod_b,因此代码插入操作也可以合并处理,例如在跳转至mod_b的模块定义语句后,同时执行第1、2、4行的代码插入操作。
值得注意的是,本发明可以利用Perl、PHP、ASP、JSP、Python等撰写所需的脚本(script)或程序。在一实施例中,在芯片设计者需要插入代码至特定 RTL文件时,可在准备好要插入代码的RTL文件以及插入信息直接执行脚本,来进行插入代码的操作。在另一实施例中,利用本发明精神所撰写的程序可启动在后开启或弹出一窗口,以提示芯片设计者输入要插入代码的RTL文件以及插入信息,接着在芯片设计者确认后,本发明程序/脚本将通过图2-3的流程将代码插入RTL文件后并输出之,而芯片设计者最后可针对插入代码后的RTL文件确认RTL文件的正确性、或是确认/调整在代码插入后所衍生的未知信号等问题(例如在前面提到的,在插入半加器实例化名称ins_c后,因 carry_out所衍生的问题)。此外,在又一实施例中,本发明也可在芯片设计者启动同时,将欲插入代码的RTL文件与图4D的输入批处理文件当成输入参数(例如将本发明写成一应用程序,并将RTL文件与包含输入代码等信息两个文件当成呼叫该应用程序的参数),因此本发明功能可在启动后便自动执行代码插入操作,随后将完成代码插入的RTL文件输出给芯片设计者。
如上叙述可知,由于本发明的处理器已事先取得储存信息,芯片设计者无须对RTL文件进行逐行搜索,可显著降低RTL逐行搜索的无效时间,也大幅减少查找模块所在位置所需要的时间。此外,由于本发明可在不改变原始设计功能的情况下插入特定代码,省时省力,不易出错。芯片设计者可在仅提供待插入代码的位置或相关信息,以及待插入代码的具体内容,即可通过本发明自动实现插入,使得处理器运行效率提升,耗时少,且不会随着待插入代码数量的增多影响运行的速度,更不需要考虑注释带来的影响。
在此所揭示程序的任何具体顺序或分层的步骤纯为一举例的方式。基于设计上的偏好,必须了解到程序上的任何具体顺序或分层的步骤可在此文件所揭示的范围内被重新安排。伴随的方法权利要求以一示例顺序呈现出各种步骤的元件,也因此不应被此所展示的特定顺序或阶层所限制。
权利要求中用以修饰元件额“第一”、“第二”、“第三”等序数词的使用本身未暗示任何优先权、优先次序、各元件之间的先后次序、或方法所执行的步骤的次序,而仅用作标识来区分具有相同名称(具有不同序数词)的不同元件。
虽然本发明已以实施范例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可做些许更动与润饰,因此本发明的保护范围当视后附的权利要求所界定者为准。
[符号说明]
100:计算系统
102:通信基础设施
104:处理器
106:系统存储器
108:存储器控制器
110:I/O控制器
112:通信接口
114:显示设备
116:显示适配器
118:输入设备
120:输入接口
122:储存装置
123:备用储存装置
124:储存接口
130:数据库
200:方法流程图
S205,S210,S215,S220,S225:步骤
300:方法流程图
S305,S310,S315,S320:步骤。
Claims (10)
1.一种自动在寄存器传输级RTL设计文件中插入特定代码的方法,包括:
读入一RTL文件,并根据上述RTL文件取得一储存信息;
读入一插入信息,其中上述插入信息包括一待插入代码及上述待插入代码所对应一模块在上述RTL文件中的一绝对路径;
由上述绝对路径中取得模块实例化名称,并将上述模块实例化名称存入一队列中;
执行一插入位置搜索程序,其中上述插入位置搜索程序包括以下步骤:
步骤(a):由上述队列中依序取出上述模块实例化名称;
步骤(b):在上述RTL文件中搜索对应上述模块实例化名称的模块实例化语句,得到上述模块实例化语句对应的模块定义名称;
步骤(c):根据上述储存信息跳转到对应上述模块定义名称的模块定义语句的开始位置;
重复执行上述步骤(a)~(c),直到上述队列中已无上述模块实例化名称为止,并取得一最终模块定义语句;以及
在上述最终模块定义语句中插入上述待插入代码,
其中上述储存信息包括:
上述RTL文件中每一模块定义语句的所在行数;
上述RTL文件中每一模块实例化语句的所在行数;以及
每一模块实例化名称与每一模块定义名称之间的对应关系。
2.如权利要求1所述的自动在寄存器传输级RTL设计文件中插入特定代码的方法,还包括:
在上述最终模块定义语句的一最终开始位置及上述最终模块定义语句的一最终结束位置之间插入上述待插入代码。
3.如权利要求1所述的自动在寄存器传输级RTL设计文件中插入特定代码的方法,其中在读入上述插入信息后,上述方法还包括:
过滤上述RTL文件中的注释语句;以及
将上述注释语句储存至临时文件中。
4.如权利要求3所述的自动在寄存器传输级RTL设计文件中插入特定代码的方法,其中在上述最终模块定义语句中插入上述待插入代码之后,上述方法还包括:
恢复上述RTL文件中的上述注释语句。
5.如权利要求1所述的自动在寄存器传输级RTL设计文件中插入特定代码的方法,其中上述插入信息还包括:
上述待插入代码所属的一第一层级;
其中上述方法还包括:
读入一新插入信息,其中上述新插入信息至少包括一新待插入代码及上述新待插入代码所属的一第二层级;
当上述第一层级与上述第二层级相同时,合并上述待插入代码及上述新待插入代码为一代码组;以及
当执行上述插入位置搜索程序之后,在上述最终模块定义语句中插入上述代码组。
6.一种自动在寄存器传输级RTL设计文件中插入特定代码的装置,包括:
一处理器;以及
一或多个计算机储存介质,储存计算机可读指令,其中上述处理器使用上述计算机储存介质以执行:
读入一RTL文件,并根据上述RTL文件取得一储存信息;
读入一插入信息,其中上述插入信息包括一待插入代码及上述待插入代码所对应一模块在上述RTL文件中的一绝对路径;
由上述绝对路径中取得模块实例化名称,并将上述模块实例化名称存入一队列中;
执行一插入位置搜索程序,其中上述插入位置搜索程序包括以下步骤:
步骤(a):由上述队列中依序取出上述模块实例化名称;
步骤(b):在上述RTL文件中搜索对应上述模块实例化名称的模块实例化语句,得到上述模块实例化语句对应的模块定义名称;
步骤(c):根据上述储存信息跳转到对应上述模块定义名称的模块定义语句的开始位置;
重复执行上述步骤(a)~(c),直到上述队列中已无上述模块实例化名称为止,并取得一最终模块定义语句;以及
在上述最终模块定义语句中插入上述待插入代码,
其中上述储存信息包括:
上述RTL文件中每一模块定义语句的所在行数;
上述RTL文件中每一模块实例化语句的所在行数;以及
每一模块实例化名称与每一模块定义名称之间的对应关系。
7.如权利要求6所述的自动在寄存器传输级RTL设计文件中插入特定代码的装置,其中上述处理器还执行:
在上述最终模块定义语句的一最终开始位置及上述最终模块定义语句的一最终结束位置之间插入上述待插入代码。
8.如权利要求6所述的自动在寄存器传输级RTL设计文件中插入特定代码的装置,其中在读入上述插入信息后,上述处理器还执行:
过滤上述RTL文件中的注释语句;以及
将上述注释语句储存至临时文件中。
9.如权利要求8所述的自动在寄存器传输级RTL设计文件中插入特定代码的装置,其中在上述最终模块定义语句中插入上述待插入代码之后,上述处理器还执行:
恢复上述RTL文件中的上述注释语句。
10.如权利要求6所述的自动在寄存器传输级RTL设计文件中插入特定代码的装置,其中上述插入信息还包括:
上述待插入代码所属的一第一层级;
其中上述处理器还执行:
读入一新插入信息,其中上述新插入信息至少包括一新待插入代码及上述新待插入代码所属的一第二层级;
当上述第一层级与上述第二层级相同时,合并上述待插入代码及上述新待插入代码为一代码组;以及
当执行上述插入位置搜索程序之后,在上述最终模块定义语句中插入上述代码组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011266605.7A CN112364581B (zh) | 2020-11-13 | 2020-11-13 | 自动在寄存器传输级设计文件中插入特定代码的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011266605.7A CN112364581B (zh) | 2020-11-13 | 2020-11-13 | 自动在寄存器传输级设计文件中插入特定代码的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112364581A CN112364581A (zh) | 2021-02-12 |
CN112364581B true CN112364581B (zh) | 2023-07-25 |
Family
ID=74515485
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011266605.7A Active CN112364581B (zh) | 2020-11-13 | 2020-11-13 | 自动在寄存器传输级设计文件中插入特定代码的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112364581B (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6721937B2 (en) * | 2000-06-06 | 2004-04-13 | Fujitsu Network Communications, Inc. | Method and system for automated processor register instantiation |
US20070237146A1 (en) * | 2006-03-31 | 2007-10-11 | Ilija Hadzic | Methods and apparatus for modeling and synthesizing packet processing pipelines |
US20070294647A1 (en) * | 2006-06-01 | 2007-12-20 | Via Technologies, Inc. | Transferring software assertions to hardware design language code |
CN102819419B (zh) * | 2012-07-25 | 2016-05-18 | 龙芯中科技术有限公司 | 指令执行流信息处理系统和装置及方法 |
CN109471618A (zh) * | 2018-11-16 | 2019-03-15 | 北京金和网络股份有限公司 | 程序集成多语言化工具 |
CN109783079A (zh) * | 2018-12-21 | 2019-05-21 | 南京航空航天大学 | 一种基于程序分析和循环神经网络的代码注释生成方法 |
WO2020237508A1 (zh) * | 2019-05-28 | 2020-12-03 | 深圳市大疆创新科技有限公司 | 一种断言验证代码绑定方法及装置 |
CN111427582B (zh) * | 2020-03-30 | 2023-06-09 | 飞腾信息技术有限公司 | Rtl代码的管理方法、装置、设备及计算机可读存储介质 |
-
2020
- 2020-11-13 CN CN202011266605.7A patent/CN112364581B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112364581A (zh) | 2021-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109614625B (zh) | 标题正文相关度的确定方法、装置、设备及存储介质 | |
CN110276023B (zh) | Poi变迁事件发现方法、装置、计算设备和介质 | |
CN109815147B (zh) | 测试案例生成方法、装置、服务器和介质 | |
US20130154685A1 (en) | Boolean logic in a state machine lattice | |
Denti et al. | ASGAL: aligning RNA-Seq data to a splicing graph to detect novel alternative splicing events | |
CN110795938B (zh) | 文本序列分词方法、装置及存储介质 | |
KR20140103143A (ko) | 상태 기계 격자에서의 카운터 동작 | |
US20160188569A1 (en) | Generating a Table of Contents for Unformatted Text | |
WO2024060452A1 (zh) | 信号路径自动提取方法、系统、设备和存储介质 | |
US8850371B2 (en) | Enhanced clock gating in retimed modules | |
CN113553854B (zh) | 实体关系的联合抽取方法和联合抽取装置 | |
CN109101603B (zh) | 一种数据比对方法、装置、设备及存储介质 | |
CN110688111A (zh) | 业务流程的配置方法、装置、服务器和存储介质 | |
CN114610957A (zh) | 数据处理方法、装置、设备及计算机存储介质 | |
CN111813670A (zh) | 一种非侵入式mc/dc覆盖率统计分析方法 | |
CN111354354B (zh) | 一种基于语义识别的训练方法、训练装置及终端设备 | |
CN112560463B (zh) | 文本多标注方法、装置、设备及存储介质 | |
CN110069455B (zh) | 一种文件合并方法及装置 | |
CN117216279A (zh) | Pdf文件的文本提取方法、装置、设备及存储介质 | |
CN112364580A (zh) | 自动在寄存器传输级设计文件中插入特定代码的方法及装置 | |
CN112364581B (zh) | 自动在寄存器传输级设计文件中插入特定代码的方法及装置 | |
CN117540757A (zh) | 用于自动翻译的方法、电子设备及计算机可读存储介质 | |
US11221856B2 (en) | Joint bootstrapping machine for text analysis | |
US8239717B2 (en) | Logic verification apparatus | |
CN114841281A (zh) | 一种数据表的识别方法、装置、设备、介质及程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Applicant after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Applicant before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |