Verilog网表转化为Hspice网表的程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
生成一棵二叉树来储存所有的库单元元件 名、模块名及它们包含的输入输出节点。
33
明 , 将 组 成 Verilog模 块 中的子模块转换为以X关 键字开头的子电路即 可。
以分号间隔为一个处理单元将Verilog网 表转换为Hspice网表。
这样,程序设计要 解决的问题集中于两个 方 面 : 一 是 Verilog 到
例如:
module register(r,clk,data,ena,rst);
output [7:0] r; input [7:0] data;
wire [7:0] connect ;
wire load; and a1(load ,clk, ena);
DFF d7(r[7] , load ,data[7] , rst); … 对此,我在链表建立函数mtable中作这样的处理,在建 立链表时,一开始还是将关键字module后的 register,r,clk, data,ean,rst首尾相连地建立一个链,并用mcurrent 指针表示 该链模块名register这个node。接着从Verilog网表中读到了 output [7:0] r后,从mcurrent开始搜寻r,找到后将r这个node中 的另一个字符串成员address写为r<7>, 并在其后依次插入7个 新节点。这7个新节点的字符串成员变量name均为r,但有不 同的总线名字,即它们的字符串成员address分别为: r<6> , r<5>,r<4>,r<3>,r<2>,r<1>,r<0>。再将链表中由于插入新节点 而引起的各个节点的数据成员pin_positions的值改为它们在 链表中新位置的值。经过这样处理后的链表为:
A Program to Transform Verilog Netlist to Hspice Netlist
YANG Dayu, LIN Zhenghui
(LSI Research Inst., Shanghai Jiaotong Univ., Shanghai 200030) 【 Abstract】 Gate_level netlists need to be verified before being put into layout . Hspice has its advantages in verifying them. Most netlists are
单元库是ASIC设计与制造的界面,要去哪家微电子厂 加工流片,就要使用该制造厂家提供的库。所以电路验证时 必须提供库,而本程序网表的转换也是建立在已有的单元库 的基础上的。其中,单元库文件可包含在生成的Hspice网表 中,也可不包含在其中。本程序未将其包含在生成的Hspice 网表中,单元库需在用starsim仿真时另行加入。
register->r<7>->r<6>->r<5>->r<4>->r<3>->r<2>->r<1>->r<0>
->clk->data<7>->data<6>->data<5>->data-><4>->data<3>->data<2 >->data<1>->data<0>->ena->rst
这样,在转换为Hspice网表时,读到关键字module后的 register后,在链表中搜寻register并将register和其后所有的节 点输出,结果为:
module1
pin1
pin2
pin3
pin4
module2
pin1
pin2
module3 module4
pin1 ......
pin2
pin3
module5
......
...
图2 搜索表结构
从图2中我们可以看到一个已定义的模块的各个节点是 固定顺序排列的。而Verilog网表中的模块调用时,它的节 点调用顺序往往是与定义的顺序不一致的并经常有浮空节点 (有的节点根本没有被调用)。这就要求在调用一个模块时, 先要在表中查找出所有被调用节点的位置,然后在按顺序放 置各个被调用的节点,未被调用的节点也要在其定义的位置 上用特殊的符号表记。
verilog codes. A program is thus designed in order to transform a Verilog netlist to a Hspice netlist. The experimental results generated by
LVS shows that this program works well. 【 Key words】 Verilog ; Hspice ; Netlist ; Cell library
.SUBCKT register r<7> r<6> r<5> r<4> r<3> r<2> r<1> r<0>
+clk data<7> data<6> data<5> data <4> data<3> data<2> data<1
> + data<0> ena rst 注意,Hspice中一个语句若在一行中写不下,要以'+'续行。
杨大宇,林争辉 (上海交通大学大规模集成电路研究所,上海 200030) 摘 要 :在数字电路设计中,采用EDA逻辑综合工具(如Design compile)完成硬件设计流图向门级结构描述的转换。综合出来的Verilog网 表将作为版图综合的输入数据。在此之前,需要对门级的Verilog网表进行模拟验证。在门级电路的仿真方面,Hspice一直有着优势。该文编 写了一个软件,旨在将门级的Verilog网表转化为相应的Hspice网表,以便于用Starsim来验证电路是否能实现预期的功能。 关 键 词 :Verilog; Hspice;网表;单元库
条存放库单元元件及Verilog模块的链表以方便转换时的查
找。考虑用二叉树来实现链表是由于它建立、释放、查找、
插入等操作的方便性。定义链表中的一个node类如下大宇(1977~) ,男,硕士生,主研EDA软件开发及 ASIC设计;林争辉,教授、博导 收 稿 日 期 :2001-08-06
在 Hspice 网 表[3]中 有 子 电 路 描 述 语 句 ( .SUBCKT 或 .MACRO语 句 ) 。 子 电 路 是 以 .SUBCKT 或 .MACRO 开 头 , 以.END结束的一组语句,一旦定义好,它可看作以X关键字 开头的器件。在单元库中的元件如nand ,nor门都是用子电路 的形式描述的。而且,Hspice 允许用户在程序执行的过程中 调用各种Hspice元件或器件构成新的子电路。生成的子电路 又可被其它子电路调用。这样,子电路的大小或复杂性没有
—112—
单元和模块链表。若该模块存在于表中,则按链表中规定的端口顺 序以调用子电路的形式将该模块调用写入Hspice网表中。若该模块 不存在于链表中,则报错"Cannot find the module …"并忽略其后所 有的词直至分号结束。
4 一些问题的处理方法
4.1 总线问题 在Verilog网表中总存在着数据总线和内部连接总线[4],
另外,在程序设计中要求能将Verilog网表中的注释语 句同样转换为Hspice网表中的注释语句,以增加网表的可读 性和可维护性。
1 程序设计思路
Verilog网表主要由一个个基本模块构成,每一个模块 由关键字module和endmodule来标识首位。模块既可以由标 准单元库中的元件组成又可以由Verilog网表中定义的其它 模块组成。这样,一个模块可以嵌套其它模块。
4.2 总线的调用问题 总线调用有3种情况: (1) 直接指定单根数据线调用,如:DFF d8(r[8], load,
data[8] ,rst); (2) 一一指定各个数据线调用,如:.Addr({eeprom_addr
[7], eeprom_addr[6], eeprom_addr[5], eeprom_addr[4], eeprom
程序对读入的词分情况处理,可能的情况如下: (1) 读入的词为Verilog中的注释符号// 或/*……*/,处理方法是在 Hspice网表中输入*,再将Verilog中的注释语句原搬照抄至Hspice 网 表中的*号后面。 (2) 读入的词为Verilog中模块的关键字module,处理方法是对应 在Hspice网表中输入.SUMCKT,在将module后的各个端口以 Hspice 的形式写在.SUBCKT后。 (3) 读入的词为Verilog中模块的结束关键字endmodule,处理方 法是对应在Hspice网表中输入.ENDS。 (4) 读入Verilog网表一行中第一个词,若该词为关键词input, output,……则忽略其后所有的词直至分号为止。 (5) 读入一行中的第一个词若不符合情况4,则搜索已生成的库
第 28卷 第 5期 Vol.28 № 5
计 算 机 工 程 Computer Engineering
2002年 5月 May 2002
· 软件技术与数据库· 文章编号:1000—3428(2002)05 —00111—02
文献标识码:A
中图分类号: TN79
Verilog网表转化为Hspice网表的程序设计
11
限制,子电路可嵌套其 它子电路。
从磁盘上读入转换所需要的所有单元库文 件及Verilog 网表文件。
22
从上述中可以看 出 ,Verilog 中 的 模 块 与 Hspice中 的 子 电 路 很 相 似。程序设计时只需将
搜索单元库及Verilog网表以找出所有的 库单元元件及模块名。
Verilog中 的 模 块 说 明 转 换为Hspice中的子电路说
综合与模拟是相辅相成的,在分阶段自上而下对大规 模集成电路进行设计的过程中,从设计者最初对电路功能、 行为的描述,到每个层次的设计结果,每一个阶段都要进行 正确性验证,以保证设计中的错误早期发现,早期消除。由 综合软件生成的门级Verilog[1]网表也需要验证。在门级仿真 方面,Hspice[2]十分优秀,它是将外部激励信号施加于电路 模型,通过观察该模型在外部激励信号作用下的反应来判断 该电路系统是否实现预期的功能。但目前尚无直接将 Verilog网表转化为Hspice网表的工具。本程序实为一个线路 网表转换器并可弥补这一不足。
—111—
{ friend class search_table;
private: node *left_module, *right_pins;
char *name; char *address;
int pins, pin_positions; } 这里,一个node类既可以表示一个module名又可以表示 模块的端口(pin)名。若一个node表示一个模块名,它的数据 成员pins的值表示该模块的端口个数。若一个node表示模块 的一个端口,则它的数据成员pins的值为0,它的另一个数 据成员pin_position表示该端口在模块的位置。 一个node类有left_module、right_pins左右两棵子树。表 示模块的node的左子树指向下一个模块名,右子树指向该模 块的第一个节点。而表示端口的node的左子树都指向空,它 的右子树指向下一个端口。一个搜索表的结构如图2。
3 程序主体设计的实现
图1中第3 步到第4 步为程序的主体。它处理的对象是 Verilog文本,输出为Hspice网表文本。基本上是以分号为间 隔的单元来处理文本。在处理一个单元文本时又是以词为单 位。文本中标识一个词的结束有多种特殊字符如:空格,逗 号,分号,回车,括号等。程序中设计的函数int gword( char *word)的功能就是从文本中读出一个词并返回表示该词 结束时的特殊字符的整数标记以便后继处理,例如: 文本中 有load, …,gword函数读出词load并返回标识','的整数4。
输出生成的Hspice网表 及相关信息。
44
Hspice的 文 本 格 式 的 转 换;二是建立一个数据 结构将的单元库和
图1 程序流程图
Verilog网 表 中 定 义 的 元
件读到内存中以便转换时随时查找调用。 程序设计流图如
图1。
2 二叉树实现搜索链表
在图1中2至3步是实际转换前的准备工作。它生成了一