掌桥专利:专业的专利平台
掌桥专利
首页

一种门级网表转换为可综合硬件描述语言代码的方法

文献发布时间:2023-06-19 16:06:26



技术领域

本发明涉及数字集成电路设计领域,特别是数字集成电路设计中门电路设计和硬件描述语言逻辑综合领域。

背景技术

数字集成电路的自顶向下设计一般是从行为级设计开始,然后编写可综合的硬件描述语言代码,之后使用综合工具将硬件描述语言代码转换为某个特定的标准单元库的门级网表。门级网表继续用于物理设计,最终得到用于生产制造的版图文件。

综合是与标准单元库相关的,综合工具进行综合之时就需要指定标准单元库,但是实际数字电路工程中,会遇到只有SPICE、CDL或Verilog格式的门级网表,需要将其用另一套标准单元库重新综合的情况,典型的场景之一是跨工艺库的数字电路“固核”移植。这些情况下,实际上新的标准单元库里具体的标准单元并不和原门级网表里的门电路一致,因此,需要一种办法将门级网表转换为可综合硬件描述语言代码,然后重新综合。

为了对本发明进行描述,使用了关于层次化电路网表的一些术语如下:

电路名:电路的名字。电路名是电路类型的识别符,同一个层次允许存在多个相同的电路名的电路;

实例名:电路的具体名字。电路的实例名是电路在同一个层次里的唯一识别符,同一个层次里不允许存在实例名相同的两个或多个电路;

端口列表:电路的输入输出端口的列表。电路名相同的电路,端口列表也应该相同。

子电路列表:电路调用的子电路的列表。

发明内容

本发明实现了门级网表到可综合硬件描述语言代码的转换。

本发明将生成的可综合硬件描述语言代码使用的硬件描述语言称为“目的语言”。本发明的具体内容如下:

步骤一:读取电路结构和内容,生成电路数据库、逻辑单元需求库。

步骤二:根据逻辑单元需求库生成目的语言格式的可综合代码模板库;

步骤三:根据逻辑单元需求库和可综合代码模板库,生成原电路网表中每一个门电路的目的语言格式的可综合代码;

步骤四:根据电路数据库得到目的语言格式的网表;

步骤五:步骤三得到的可综合代码和步骤四得到的网表合并生成与原网表逻辑等价的目的语言格式的可综合代码。

现对本发明中使用的三个数据库进行解释:

电路数据库:存储各个层次电路的电路名、实例名、端口列表、子电路列表,从而能够通过电路数据库还原整个电路网表。

逻辑单元需求库:存储整个电路需要的门电路的电路名、电路端口列表。

可综合代码模板库:是对逻辑单元需求库的简化,将同一类的逻辑门抽象为相同的模板。例如逻辑功能相同但是电路名不同的电路,会使用同样的模板进行表述。即,逻辑功能相同但是电路名不同的电路最终将会使用的同样的可综合代码进行表示。

本发明优选的方案是,使用Verilog作为目的语言。

在步骤一中,优选的方案是,将网表视为树形结构,根节点为顶层电路,中间各层为子电路,门电路为叶子节点,通过递归遍历读取网表。

在步骤二中,优选的方案是,使用Python格式化文本方式编写模板。

在步骤三中,优选的方案是,相同逻辑功能的门电路不重复生成代码,即在新的网表中这些门电路例化同一个电路名。

在步骤四中,优选的方案是,电路的实例名保持与原网表一致,且每一层电路网表例化子电路,使用端口名称相关的方式进行例化,便于异常调试。

本发明是门级网表跨标准单元库移植问题的解决方案之一。可以被应用到

(1)不同标准单元库之间的ASIC网表移植;

(2)ASIC到FPGA的网表移植;

(3)FPGA到ASIC的网表移植;

(4)不同FPGA设备之间的网表移植。

本发明在层次结构上保证和原网表一致,可以保证移植前后电路的逻辑严格等价。

附图说明

图1是本发明的流程图,其中S1、S2、S3、S4、S5依次指代本发明中的五个步骤。

图2是S1读取CDL格式电路网表的具体方法。

图3是S2生成可综合代码模板库的流程。

具体实施方式

以下结合附图阐述本发明的具体实施方式。

本实施例使用Python作为具体编程语言,必须指出本发明还可以用其它计算机语言实现。

本实施例使用Verilog作为目的语言。

图1是本发明的流程图,图2是本实施例对本发明S1的具体实现流程。

S1读取电路网表,完成的是从原电路网表文件到Python数据结构的转换。原网表文件包括但不限于文本格式的CDL网表。

电路数据库使用Python“字典”格式存储,有两个嵌套的字典作为条目。第一个字典是存储电路结构的字典,在这个字典中以电路实例名作为键名,键值记录该电路实例的电路名、调用的子电路的实例名、调用的子电路的电路名和调用的子电路的端口信号名。第二个字典是存储所有电路信息的字典,在这个字典中以电路名为键名,键值记录该电路的端口名、端口方向。这两个字典数据的来源不同,第一个字典是从原网表调用子电路的代码出获取子电路的信息,由图2中S102获得。第二个字典是从原网表声明子电路定义处获取电路信息,由图2中S101获得。

逻辑单元需求库使用Python“列表”格式存储,由图2中S102获得。一般门电路在命名上会有所特征,例如,以AND开头的电路名,表示该电路是与门。

S101使用Python对字符串处理的相关函数实现。

S102使用对树形结构的递归遍历完成。在递归过程中,对访问的电路的电路名使用正则表达式识别逻辑门电路,将识别到的门电路电路名存入一个Python列表,最后进行去除重复处理,就的得到了逻辑单元需求库。

S2生成可综合代码模板库的过程可以人工完成。对于本领域的技术人员而言,编写门电路可综合硬件描述语言代码是非常容易的。门电路的逻辑功能一般直接体现在门电路的电路名上,如AND2,为二输入与门。S2是非常关键的一步,可综合代码模板库的正确性直接影响最终的到的目的语言格式的可综合代码的正确性。本实施案例以门电路的电路名为初步依据,然后根据门电路的SPICE电路图作为主要依据,必要时进行简单的SPICE仿真,从而获取门电路的逻辑功能。值得一提的是,实现S2的全自动化也是可行的,因为通过门电路SPICE网表识别门电路逻辑功能是可以通过软件算法实现的,事实上,常见的数字电路标准单元特征化EDA工具都具有此功能。例如Synopsys公司的Siliconsmart可以读取电路的SPICE网表,生成电路的逻辑功能描述文件,从而可以得到输出引脚关于输入引脚的逻辑表达式,对于时序电路,也可以得到状态转移描述。

S3为逻辑单元需求库里每一个门电路都生成一个可综合代码。这些可综合代码以Verilog“module”的方式声明和描述,存储在一个Verilog文件里。

S4生成的是Verilog网表,存储在一个Verilog文件中。S4的本质是使用Verilog的语法对网表进行描述。在这一步,首先读取电路数据库中存储的顶层网表的结构信息,生成顶层电路的Verilog代码,然后根据所调用的子电路的电路名读取电路数据库中存储的该子电路的结构信息生成该子电路的Verilog代码,如此递归,就可以得到和原网表结构一致的Verilog网表。

S5将S3与S4生成的Verilog文件合并,得到最终的可综合Verilog代码。

从理论上来说,通过本发明转换前后的网表是就是逻辑等价的。此外,本实施例还使用了仿真的方法进行验证。使用同一个Verilog测试平台,

(1)通过数字-模拟混合仿真的方式对原网表进行仿真测试;

(2)在转换之后,使用同样的Verilog测试平台对RTL代码进行仿真;

(3)使用新的标准单元库重新综合,使用同样的Verilog测试平台结合综合工具生成的SDF进行反标延迟信息的综合后门级仿真;

(4)使用新的标准单元库进行物理实现后,抽取版图带寄生参数的SPICE网表,使用同样的Verilog测试平台通过数字-模拟混合仿真的方式进行仿真测试;

测试结果表明,四次仿真的波形在逻辑上是一致的。

技术分类

06120114708549