Encounter使用入门教程

更新时间:2023-10-22 08:51:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Encounter使用入门教程

本教程介绍一下自动布局布线工具Encounter的使用知识,开始以一个简单的十进制计数器版图的自动实现为例子,之后介绍包含block模块的复杂的版图自动实现。

在Designer Compiler使用入门教程中,笔者设计了一个十进制计数器,并经过Design Compiler对其进行综合后获得了门级综合网表文件counter.sv以及约束文件counter.sdc,根据这两个文件,我们就可以使用SOC Encounter实现十进制计数器的物理版图设计了。首先,我们要准备使用Encounter进行版图自动设计时所需要的数据:

时序库文件:fast.lib,slow.lib,tpz973gwc.lib,tpz973gbc.lib

物理库文件:tsmc18_6lm_cic.lef,tpz973g_5lm_cic.lef,tsmc18_6lm_antenna_cic.lef 门级网表文件:pad_counter.sv 时序约束文件:pad_counter.sdc

IO位置放置文件:pad_counter.io //在设计导入Encounter中指定PAD的放置位置文件,不是必须文件

还有其它一些文件在后面用到时进行介绍。 一、网表中添加PAD、编写IO Assignment File

这里,pad_counter.sv是加入PAD后综合得到的门级网表。工程项目中设计制作完成后的芯片要进行封装,PAD就是芯片在封装时连接封装引线的地方。一般信号输入/输出PAD即I/O PAD要在综合前添加进入网表中,电源电压PAD可以在综合时添加也可以在综合后添加。接下来就先介绍一下如何在网表中加入PAD,其实给网表加入PAD就是一般的module例化,和Verilog中一般的module模块例化是一样的。

这里介绍在综合时给设计中加入I/O PAD。十进制计数器的Verilog源程序如下: module Cnt10(reset_n,clk,in_ena,cnt,carry_ena); input clk; input reset_n; input in_ena; output [3:0] cnt; output carry_ena; reg [3:0] cnt; reg carry_ena;

always @(posedge clk or negedge reset_n) begin

if(!reset_n)

cnt<=4'b0;

else if(in_ena && cnt==4'd10)

cnt<=4'b0;

else if(in_ena && cnt<4'd10) cnt<=cnt+1'b1; end

always @(posedge clk or negedge reset_n) begin

if(!reset_n)

carry_ena<=1'b0;

else if(in_ena && cnt==4'd10) carry_ena<=1'b1; else

carry_ena<=1'b0; end endmodule

加入PAD后的十进制计数器Verilog网表如下:

module Cnt10_PAD(reset_n,clk,in_ena,cnt,carry_ena); //顶层模块

input reset_n; input clk; input in_ena; output [3:0] cnt; output carry_ena;

wire top_clk,top_reset,top_in_ena; wire top_carry_ena; wire [3:0] top_cnt; Cnt10

CNT10(.reset_n(top_reset),.clk(top_clk),.in_ena(top_in_ena),.cnt(top_cnt),.carry_ena(top_carry_ena)); //这里是对Cnt10 module的例化 //下面是I/O PAD module的例化

PDIDGZ PAD_CLK(.PAD(clk),.C(top_clk));

PDIDGZ PAD_RESET(.PAD(reset_n),.C(top_reset)); PDIDGZ PAD_IN_ENA(.PAD(in_ena),.C(top_in_ena));

PDO02CDG PAD_CARRY_ENA(.I(top_carry_ena),.PAD(carry_ena)); PDO02CDG PAD_CNT_0(.I(top_cnt[0]),.PAD(cnt[0])); PDO02CDG PAD_CNT_1(.I(top_cnt[1]),.PAD(cnt[1])); PDO02CDG PAD_CNT_2(.I(top_cnt[2]),.PAD(cnt[2])); PDO02CDG PAD_CNT_3(.I(top_cnt[3]),.PAD(cnt[3])); endmodule 说明:关于PAD如何例化,首先要查看厂家提供的工艺库中的关于PAD的verilog文件,如本例子中使用tsmc18工艺库,描述PAD的verilog文件为tpz973g.v,这个文件是PAD文件的verilog描述,包括输入输出的端口等信息。

编写好加入PAD的十进制计数器网表pad_conter.v后,从新使用DC对其进行综合,关于综合这里就不做介绍了,下面把新的综合脚本给出,由于加入了PAD,所以在设计约束文件时,输入驱动和输出负载约束就不需要了,考虑到后面布局布线后还要进行LVS检查,在设计约束中加入了大小写敏感设置,详细的综合脚本pad_run.con内容如下:

# Set the current_design #

read_verilog {counter_pad.v counter.v} current_design Cnt10_PAD link

set_operating_conditions -max slow -max_library slow -min fast -min_library fast set_wire_load_mode enclosed

set_wire_load_model -name tsmc18_wl10 -library slow set_local_link_library {slow.db fast.db} set_max_area 0

set_max_fanout 5 [get_ports reset_n] set_max_fanout 4 [get_ports clk] set_max_fanout 4 [get_ports in_ena]

set_max_transition 0.3 [get_ports reset_n] set_max_transition 0.3 [get_ports clk] set_max_transition 0.5 [get_ports in_ena]

create_clock [get_ports clk] -period 10 -waveform {0 5} set_clock_latency 1 [get_clocks clk]

set_clock_latency -source 1 [get_clocks clk] set_clock_uncertainty -setup 0.5 [get_clocks clk] set_clock_uncertainty -hold 0.4 [get_clocks clk] set_dont_touch_network [get_clocks clk] set_clock_transition -fall 0.3 [get_clocks clk] set_clock_transition -rise 0.3 [get_clocks clk]

set_input_delay -clock clk -max 3 [get_ports in_ena] set_output_delay -clock clk -max 4 [get_ports cnt] set_output_delay -clock clk -min 0.5 [get_ports cnt]

set_output_delay -clock clk -max 4 [get_ports carry_ena] set_output_delay -clock clk -min 0.5 [get_ports carry_ena]

compile

report_timing -delay max > ./reports/pad_setup_rt.rpt report_timing -delay min > ./reports/pad_hold_rt.rpt report_constraint -verbose > ./reports/pad_rc.rpt report_qor > ./reports/pad_rq.rpt

remove_unconnected_ports -blast_buses [get_cells -hierarchical *] set bus_inference_style {%s[%d]} set bus_naming_style {%s[%d]} set hdlout_internal_busses true change_names -hierarchy -rule verilog

define_name_rules name_rule -allowed {a-z A-Z 0-9 _} -max_length 255 -type cell define_name_rules name_rule -allowed {a-z A-Z 0-9 _[]} -max_length 255 -type net define_name_rules name_rule -map {{\define_name_rules name_rule -case_insensitive change_names -hierarchy -rules name_rule

write -format verilog -hier -o ./outputs/pad_counter.sv write -format ddc -hier -o ./outputs/pad_counter.ddc write_sdc ./outputs/pad_counter.sdc write_sdf ./outputs/pad_counter.sdf

设置好DC的启动文件.synopsys_dc.setup后,启动DC,在DC的命令行输入处运行命令:

design_vision-xg-t> source pad_run.con

等待DC完成综合后就可以在指定的目录中看到输出文件pad_counter.sv、pad_counter.sdc等文件了。

进行布局布线前,在pad_counter.sv网表中加入电源PAD和拐角连接PAD,如下图所示:

图1 添加电源PAD和拐角PAD

添加好后保存pad_counter.sv文件,到此就完成了给设计加入PAD了。一般在设计导入到Encounter时,为了实现既定的PAD位置放置,都会在设计导入的时候同时指定设计中各个PAD在Encounter中具体的位置,这可以通过在导入设计的同时导入分配PAD位置的文件pad.io来完成。如果不指定PAD的分配文件,则设计在输入Encounter后PAD的具体位置是随机分配的。IO Assignment File可以自动产生或手动编写,本例的pad_counter.io文件内容如下:

Version: 1 pad: PAD_CLK N

pad: PAD_RESET N pad: PAD_IN_ENA N pad: PAD_CARRY_ENA N pad: PAD_CNT_0 S pad: PAD_CNT_1 S pad: PAD_CNT_2 S pad: PAD_CNT_3 S pad: PAD_VDD1 W pad: PAD_VDD2 W pad: PAD_VSS1 E pad: PAD_VSS2 E pad: CORNER1 NW pad: CORNER2 NE pad: CORNER3 SE pad: CORNER4 SW

其中S/N/W/E分别是PAD在Core的南/北/西/东,四个角分别是CORNER1、2、3、4。

二、十进制计数器的APR

新建一个目录,将准备好的文件放入对应目录下面,启动Encounter。启动Encounter图形界面的方式如下,在终端中输入下面的命令: $ encounter

然后按回车,Encounter软件将被打开,下图显示的是SOC Encounter软件正常启动显示的信息:

图2 Encounter软件的启动

SOC Encounter软件正常启动后的界面如下图所示:

图3 Encounter启动后的界面

上图是对Encounter软件图形界面的介绍,图中介绍了Encounter软件图形界面的各部分的名称,先做一个初步的了解。 1、导入设计文件

在Encounter图形界面中选择Design→Design Import…打开导入设计对话框,如图:

图4 Design Import对话框

按照图示填好相应的设计文件,然后切换到Advanced项,如下图:

图5 Advanced Tab

选择Power选项,如图中所示填入VDD和VSS。设置好后,点击OK,设计被导入Encounter中,如下图所示:

图6 设计导入到Encounter

2、设计布局

选择Floorplan→Specify Floorplan打开Specify Floorplan对话框,如下图:

图7 Specify Floorplan

按图所示进行设置,完成后点击OK,指定布局后的效果如下:

图8 Specify Floorplan后的效果

3、添加电源环

选择Power→Power Planning→Add Rings…打开Add Rings对话框:

图9 Add Rings对话框

在Net(s):处填入VSS VDD,其它要设置的地方如上图所示,Offset处要选择Center in channel,否则后面电源线连接时会出现连接不上的情况。设置完成后,点击OK完成设置,设置后在Core四周放置好了电源环如下:

图10 Add Rings后的效果

4、放置标准单元

设计导入Encounter后,数据都是存储在Memory中的,需要人为操作进行放置,当然最终还是软件根据特定算法自己自动放置的。在菜单栏中选择Place→Standard Cells and Blocks…打开Place设置框:

图11 Place1

在Basic Tab中取消选择Run Timing Driven Placement和Reorder Scan Connection项,转到Advanced Tab中,在Congestion Effort中选择Medium项,如图:

图12 Place2

设置好以上条件后,点击OK,Encounter执行Place命令,标准单元就被放入Core中了。

5、Global net connection

下面要连接设计中所有的global net,包括所有标准单元的power/ground pin连接到VDD/VSS,以及把单元里连接1的连接到VDD,把和0连接的连接到VSS。选择Floorplan→Global net connections…项,打开Global Net Connections设置框,按下图所示进行设置:

图 13 Global Net Connections

Connect处选择Pins,里面填入VDD,Scope处选择Under Module,然后在To Global Net:处填入VDD,之后点击Add to List后,在Connection List中第一行就设置好了,其他进行类似操作,都设置完成后,先点击Apply按钮,然后点击Check,最后点击Close关闭Global Net Connections设置框,完成设置。 6、Routing the power/ground Nets

选择Route→Special Route…,打开SRoute设置框,如下进行设置:

图14 SRoute设置

在Route处,去选Block pins、Pad rings、Stripes(unconnected)项,其它的使用默认设置即可,然后点击OK完成设置,设置完成后的效果如下图所示:

图15 SRoute后的效果

7、时钟树综合

选择Clock→Create Clock Tree Spec…打开Create Clock Tree Spec对话框,如下图:

图16 Create Clock Tree Spec

按图中所示进行设置,完成后点击OK。然后选择Clock→Specify Clock Tree…选项打开Specify Clock Tree设置框,在Clock Tree File处选择我们刚才创建的Cnt10_PAD.ctstch文件,然后点击OK完成设置。最后选择Clock→Synthesize Clock Tree命令进行时钟树综合。

这一步完成后,检查设计是否有时序问题,在终端中输入report_timing,查看显示信息,如果没有时序问题,就可以进行下一步的详细布线了。 8、详细布线NanoRoute

选择Route→NanoRoute→Route…打开NanoRoute对话框,如下图所示:

图17 NanoRoute设置

按图中进行设置,完成点击OK,该项命令执行后的效果如下:

图18 NanoRoute后的视图

9、添加IO Filler

在终端中执行如下命令:

$ addIoFiller –cell PFEED50 –prefix IOFILLER $ addIoFiller –cell PFEED35 –prefix IOFILLER $ addIoFiller –cell PFEED20 –prefix IOFILLER $ addIoFiller –cell PFEED10 –prefix IOFILLER $ addIoFiller –cell PFEED5 –prefix IOFILLER $ addIoFiller –cell PFEED2 –prefix IOFILLER $ addIoFiller –cell PFEED1 –prefix IOFILLER

$ addIoFiller –cell PFEED01 –prefix IOFILLER –fillAnyGap $ redraw

这样就在I/O PAD之间加入了IO Filler,可以拉看到原先PAD之间的缝隙被填充了,如下图所示:

图19 添加IO Filler后的效果

10、保存设计

选择Design→Save Design…保存当前设计,这样在下次要进行其他操作时可以直接打开该设计,使其处于当前的设计状态。

选择Design→Save→GDS…导出版图设计为pad_counter.gds,保存设计如下所示:

设置完成后点击OK,保存版图信息。

保存用于后面LVS的网表文件Cnt10_PAD.v。选择Design→Save→Netlist…打开保存Netlist对话框,在保存的文件名处填入Cnt0_PAD.v,然后点击OK保存版图对应的网表信息。 三、版图后的DRC和LVS 1、版图导入到IC5141工具中

需要的文件有Encounter输出文件0.18um的工艺文件、Virtuoso显示设置文件、DRC和LVS规则文件: T18drc_13_a25a.drc, 0.18um_Vituoso4.4.tf, display.drf,

Calibre-lvs-cur_soce, tsmc18_lvs.spi, tsmc18_lvs.v, pad_counter.gds, Cnt10_PAD.v

新建一个目录,将这些文件放入此目录下,从终端中打开IC5141: $ icfb&

启动IC5141后在CIW中,选择File→Import→Stream…,在Stream In form里input file处点击Browse…选择pad_counter.gds,Top Cell Name中填Cnt10_PAD,ASCII

Technology File Name处点击Browse…,选择0.18um_Vituoso4.4.tf文件:

图21 版图导入到Virtuoso中

完成设置后,点击OK,这样就把版图导入到版图设计工具中了。如图所示:

图22 版图成功导入

在Library Manager中找到pad_counter,然后在其中找到Cnt10_PAD,双击layout,打开设计的版图:

图23 十进制版图

刚打开的版图显示需要设置一下才会如上图所示,在视图中选择Options→Display打开显示设置对话框,如图:

图24 显示设置

按照图中所示进行设置后就可以看到图23所示的显示效果。

2、DRC检查

选择Calibre→Run DRC打开DRC设置框如下所示:

图25 Rules设置

在Rules项中设置DRC规则文件T18drc_13a25a.drc,然后点击Run DRC项,运行DRC检查,运行结果显示如下图:

图26 DRC结果

图中显示中大红叉的地方显示有7个Results,这7个Results是由于材料密度问题引起的,一般是有芯片制造商去解决的,因此本设计DRC没有错误。 2、LVS检查

在做LVS检查时,可以不在IC5141里面做,我们这里在终端中通过执行命令来

完成。首先需要把Encounter输出的Cnt10_PAD.v文件转换为Calibre做LVS认识的文件pad_counter.spi文件,即是要先将.v文件转换为.spi文件。在终端中运行如下命令:

$ v2lvs –v Cnt10_PAD.v –l tsmc18_lvs.v –o pad_counter.spi –s tsmc18_lvs.spi –c cic_ -n

这条命令执行完后,会在当前工作目录下生成pad_counter.spi文件,即hspice网表文件。然后打开Calibre-lvs-cur_soce文件修改里面的内容如下图所示:

图27 修改Calibre-lvs-cur_soce文件

修改后保存。

在终端中运行如下命令:

$ calibre –lvs –spice layout.spi –hier –auto Calibre-lvs-cur_soce

这条命令执行完后会在当前目录下生成LVS报告文件lvs.rep及其其他一些LVS报告文件,打开lvs.rep查看LVS报告:

图28 查看LVS报告

可以看到,报告结果显示LVS是CORRECT的,也就是版图与电路原理图是一致的。到此,一个以十进制计数器的版图自动设计就完成了,当然这是没有实际意义的,仅仅是为了介绍使用Encounter进行自动版图设计的流程。实际的版图设计中要经过很多其他的详细的操作,一个芯片版图的实现也远远不止这么容易。接下来将以一个复杂的包含IP模块的设计来进一步深入的学习一下Encounter在APR时可能要进行的步骤,也介绍一下一个版图应当进行那些检查设计。

四、使用Encounter进行包含Block核的版图设计

文件准备:DTMF数据包文件,网上有下载,workshoplab1.dtmf.pdf 1、设计文件和数据文件导入Encounter 将输入文件导入到Encounter中如图所示:

图4.1

在verilog netlist中指定DC输出的门级网表文件:所有的.v文件 在Timing Libraries中指定相应的时序库: fast 、slow 在LEF Files 中指定.lef文件

在Timing Constraint file:指定.sdc文件 在IO Assignment File中指定.io文件:

点击advanced,进如如图所示界面,会出现11项设置,填其中的5项即可,

图4.2

下一步,完成Power Page 的填写,如图所示,填入电源、地的节点名称以便创建电源、地环。

图4.3

下一步,完成RC Extraction 页的填写,如图所示。在Capacitance Table File 栏中指定cap table file文件,以便后面步骤中的信号完整性分析。

图4.4

图4.5

最后一步,完成SI Analysis page的填写,如上图所示。添加 the CeltIC DB (cdB) noise library,该库用于 CeltIC crosstalk analysis。

到现在为止,我们已经对设计的输入、同时也指定了物理库、工艺规则文件、时序库、时序约束文件。将这些配置保存到DIMF_CHIP.conf文件中,下次操作时,只须load 该文件,工具将自动进行以上配置。

图4.6

完成以上步骤后点击OK键,出现如图所示的界面。

图4.7

2、Floorplanning

对窗口Specify Floorplan form进行设置,来指定 the core box ,IO box,die box 的尺寸大小。步骤如下:

Floorplan→Edit Floorplan→Specify Floorplan 在Aspect Ratio中,使用默认值选项 Core Margins选择Core to IO Boundary, 键入 – Core to Left: 100 键入– Core to Right: 100

键入– Core to Top: 100 键入– Core to Bottom: 100

Click “ Apply”按钮。完了后,IO PAD 自动调整到离the core box边界100微米处。(该距离根据设计要求决定)

图4.8

在也可对the core box的高宽比率进行调整,在ratio(H/W)中将默认值:1设置成0.5,则the core box的高是宽的2倍了。

3、 Creating a floorplan with Relative Floorplan

对于芯片版图的布局来说,block的布局起非常重要的作用。下面对四个blocks进行布局。

Floorplan→Relation Floorplan→Edit Constraint...,首先对

DTMF_INST/ARB_INST/ROM_512x16_0_INST进行放置,完成如图所示的填写点击Apply。

图4.9

图4.10

然后以同样的方法对

DTMF_INST/RAM_256x16_TEST_INST/RAM_256x16_INST Block进行放置如图所示:

图4.11

然后以同样的方法对

DTMF_INST/RAM_128x16_TEST_INST/RAM_128x16_INST Block进行放置如图所示:

图4.12

然后以同样的方法对DTMF_INST/PLLCLK_INST Block进行放置如图所示:

图4.13

注意:如果你不想这样方式对4个blocks进行布局,可以通过Design→Load→Floorplan, load文件DTMF.sample.fp。Encounter会根据该文件所定义的位置对4个blocks进行自动布局。也可将手动布局保存到该文件以便下次调用。布局完成后的效果如下:

图4.14

如果不想显示黄色指示箭头,可以如上图进行设置。

图4.15

4、 Creating block halos

当对blocks进行布局后,接下来创建block halos。其目的为了在对标准单元进行布局时,能保证晕内不被放置标准单元,以利于其他走线。 首先对前面3个blocks进行操作,按住shift 选中前3个blocks(DTMF_INST/PLLCLK_INST,

DTMF_INST/ARB_INST/ROM_512x16_0_INST,

DTMF_INST/RAM_128x16_TEST_INST/RAM_128x16_INST blocks.) 再选择Floorplan→Edit Floorplan→Edit Halos

选中,Selected Blocks,Placement Halo,Add/Update Block Halo。 键入 – Top: 20 键入– Bottom: 20 键入– Left: 20 键入– Right: 20

Click“ Apply”按钮。

图4.16

图4.17

再对最后一个block进行操作,步骤同上, 键入 – Top: 20 键入– Bottom: 34 键入– Left: 20 键入– Right: 20

Click the OK button when ready.

图4.18

图4.19

5、Global net connection

接下来,我们要连接所有的global Net,包括所有单元的power/ground pin连接到

VDD/GND,以及把单元里连接到1的连到VDD,把连接到0的连接到GND。

执行Floorplan→Global Net Connections

图4.20

在Global Net Connections form里,Pins 栏填如VDD,To Global Net 栏位填入VDD,然后按Add To List,你会看到左边Connection List里多一份记录:

图4.21

整个设置需要六步,完成后的设置如下:

图4.22

到目前为止,左边的Connection List 里有了六份记录,按Apply,然后按Check,最后按CLOSE 关闭此窗口。在Check时,你会看到很多Warning,说IO PAD及CORNER PAD 没有连接到SPECIAL NET,这是正常的,因为PAD用的POWER和Core Cell用的本来就不一样。 6、Creating Power and Ground Rings

执行Floorplan→Power planning→Add Rings,在Nets的栏位只留下VSS VDD,Ring Configuration部分Top和Bomttom的LAYER 改成Metal6,Width设成8,Left和Right的LAYER 改成Metal5,WIDTH也是设成8,Spacing中都统一设置间距为1,其他如图中进行设置:

图4.23

图4.24

另一种方法:采用模板文件

本文来源:https://www.bwwdw.com/article/xr7f.html

Top