热度 14| ||
1.
一般而言,ECO就是在芯片设计流程中到了后期,综合网表、PR网表都已经做好了,或者是芯片已经流片回来在测试中,发现有部分功能需要修改,在不对网表进行重新综合、布局布线的前提下(非常耗时间),对综合网表和PR网表进行小范围的功能修改,以修复bug或者增加某些小功能。
2.
需要准备的文件:
RTL源码 综合网表 PR网表 工艺库Cell单元文档 DC/formality脚本
3.
步骤:
a. 修改RLT源码并完成验证,确保功能正常;
b. 将RTL源码中修改的部分翻译成网表格式代码,使用工艺库中的cell单元进行设计;注意综合网表中使用的cell的工艺角(HVT SVT LVT),及cell面积大小(7T 9T 12T);
c. 使用DC-TCL脚本将b中翻译的网表改写成TCL脚本,主要关键字:current_instance, create_cell, create_net, disconnect_net, connect_net, 搭配些for循环,if语句;另外,如果要断开已有的cell的某些接口,最好使用get_pins -of_objects [get_nets xxx] -filter “XXX”语句来获取cell的pin,这样方便修改;
d, 综合网表和PR网表,PR网表已经插入了时钟树、做好了时序的网表,信号的名字和极性都会有变化,使用c中方法写的TCL脚本,很大概率在PR网表中找不到对应的信号且信号极性相反;并非一定要写TCL脚本,也可以直接在网表上修改;但是,一旦修改的逻辑多了,写TCL脚本的优势就会体现出来。PR TCL脚本同理。
e, 使用c中的综合TCL脚本生成新的综合网表(在原来综合网表基础上,加入新增加的修改逻辑),接着再与a中的RTL代码进行形式验证(formality),如果形式验证不通过,则需要打开formality的图形界面进行debug,通过了,则进行下一个步骤。
f, 使用d中的PR TCL脚本生成新的PR网表(在原来PR网表基础上,加入新增加的修改逻辑),接着再与e中的新生成且通过形式验证的综合网表进行形式验证(formality),如果形式验证不通过,则需要打开formality的图形界面进行debug,通过了,则本次ECO基本结束。
g, 关于formality图形界面debug, 使用start_gui打开formality的图像界面之后,会列出一系列没有对比通过的点,这些点是寄存器。Formality会将这些寄存器的输入端D的一部分逻辑显示出来,并标上1和0;对比REF和IMP的两个寄存器,会发现他们有1和0不一致的某些输入端,追踪这些输入端,直到定位到我们修改的部分,再观察是哪些逻辑没有比对上;往前追信号是很繁琐的,寄存器输入端D前面的有些逻辑在REF和IMP中是不一样的,很可能会追迷惑,导致追丢,会比较耗精力,直到追溯到我们修改的部分。
h, 注意,如果ECO修改不是基于寄存器来修改的,而是基于某些组合逻辑信号,那么很可能在PR网表中是找不到这个信号的,其次,即使能找到信号,但是信号的极性是反的;如果修改的信号不多,这种极性相反的情况也还好处理,一旦多起来,就要耗费很多时间去修改-验证-再修改-再验证,甚至可能无法修改(非寄存器信号极多的时候)。