Encounter使用入门教程.docx
《Encounter使用入门教程.docx》由会员分享,可在线阅读,更多相关《Encounter使用入门教程.docx(82页珍藏版)》请在冰豆网上搜索。
Encounter使用入门教程
Encounter使用入门教程
本教程介绍一下自动布局布线工具Encounter的使用知识,开始以一个简单的十进制计数器版图的自动实现为例子,之后介绍包含block模块的复杂的版图自动实现。
在DesignerCompiler使用入门教程中,笔者设计了一个十进制计数器,并经过DesignCompiler对其进行综合后获得了门级综合网表文件以及约束文件,根据这两个文件,我们就可以使用SOCEncounter实现十进制计数器的物理版图设计了。
首先,我们要准备使用Encounter进行版图自动设计时所需要的数据:
时序库文件:
,,
物理库文件:
,
门级网表文件:
时序约束文件:
IO位置放置文件:
eset_n(top_reset),.clk(top_clk),.in_ena(top_in_ena),t(top_cnt),.carry_ena(top_carry_ena));AD(clk),.C(top_clk));
PDIDGZPAD_RESET(.PAD(reset_n),.C(top_reset));
PDIDGZPAD_IN_ENA(.PAD(in_ena),.C(top_in_ena));
(
PDO02CDGPAD_CARRY_ENA(.I(top_carry_ena),.PAD(carry_ena));
PDO02CDGPAD_CNT_0(.I(top_cnt[0]),.PAD(cnt[0]));
PDO02CDGPAD_CNT_1(.I(top_cnt[1]),.PAD(cnt[1]));
PDO02CDGPAD_CNT_2(.I(top_cnt[2]),.PAD(cnt[2]));
PDO02CDGPAD_CNT_3(.I(top_cnt[3]),.PAD(cnt[3]));
endmodule
说明:
关于PAD如何例化,首先要查看厂家提供的工艺库中的关于PAD的verilog文件,如本例子中使用tsmc18工艺库,描述PAD的verilog文件为973g,这个文件是PAD文件的verilog描述,包括输入输出的端口等信息。
编写好加入PAD的十进制计数器网表后,从新使用DC对其进行综合,关于综合这里就不做介绍了,下面把新的综合脚本给出,由于加入了PAD,所以在设计约束文件时,输入驱动和输出负载约束就不需要了,考虑到后面布局布线后还要进行LVS检查,在设计约束中加入了大小写敏感设置,详细的综合脚本内容如下:
#Setthecurrent_design#
read_verilog{}
current_designCnt10_PAD
;
link
set_operating_conditions-maxslow-max_libraryslow-minfast-min_libraryfast
set_wire_load_modeenclosed
set_wire_load_model-nametsmc18_wl10-libraryslow
set_local_link_library{}
set_max_area0
set_max_fanout5[get_portsreset_n]
set_max_fanout4[get_portsclk]
set_max_fanout4[get_portsin_ena]
(
set_max_transition[get_portsreset_n]
set_max_transition[get_portsclk]
set_max_transition[get_portsin_ena]
create_clock[get_portsclk]-period10-waveform{05}
set_clock_latency1[get_clocksclk]
set_clock_latency-source1[get_clocksclk]
set_clock_uncertainty-setup[get_clocksclk]
set_clock_uncertainty-hold[get_clocksclk]
set_dont_touch_network[get_clocksclk]
set_clock_transition-fall[get_clocksclk]
《
set_clock_transition-rise[get_clocksclk]
set_input_delay-clockclk-max3[get_portsin_ena]
set_output_delay-clockclk-max4[get_portscnt]
set_output_delay-clockclk-min[get_portscnt]
set_output_delay-clockclk-max4[get_portscarry_ena]
set_output_delay-clockclk-min[get_portscarry_ena]
compile
report_timing-delaymax>./reports/
report_timing-delaymin>./reports/
report_constraint-verbose>./reports/
report_qor>./reports/
remove_unconnected_ports-blast_buses[get_cells-hierarchical*]
setbus_inference_style{%s[%d]}
setbus_naming_style{%s[%d]}
sethdlout_internal_bussestrue
change_names-hierarchy-ruleverilog
define_name_rulesname_rule-allowed{a-zA-Z0-9_}-max_length255-typecell
define_name_rulesname_rule-allowed{a-zA-Z0-9_[]}-max_length255-typenet
define_name_rulesname_rule-map{{"\\*cell\\*""cell"}}
~
define_name_rulesname_rule-case_insensitive
change_names-hierarchy-rulesname_rule
write-formatverilog-hier-o./outputs/
write-formatddc-hier-o./outputs/
write_sdc./outputs/
write_sdf./outputs/
设置好DC的启动文件.后,启动DC,在DC的命令行输入处运行命令:
design_vision-xg-t>source
等待DC完成综合后就可以在指定的目录中看到输出文件、等文件了。
进行布局布线前,在网表中加入电源PAD和拐角连接PAD,如下图所示:
)
图1添加电源PAD和拐角PAD
添加好后保存文件,到此就完成了给设计加入PAD了。
一般在设计导入到Encounter时,为了实现既定的PAD位置放置,都会在设计导入的时候同时指定设计中各个PAD在Encounter中具体的位置,这可以通过在导入设计的同时导入分配PAD位置的文件来完成。
如果不指定PAD的分配文件,则设计在输入Encounter后PAD的具体位置是随机分配的。
IOAssignmentFile可以自动产生或手动编写,本例的文件内容如下:
Version:
1
pad:
PAD_CLKN
pad:
PAD_RESETN
pad:
PAD_IN_ENAN
pad:
PAD_CARRY_ENAN
pad:
PAD_CNT_0S
pad:
PAD_CNT_1S
…
pad:
PAD_CNT_2S
pad:
PAD_CNT_3S
pad:
PAD_VDD1W
pad:
PAD_VDD2W
pad:
PAD_VSS1E
pad:
PAD_VSS2E
pad:
CORNER1NW
pad:
CORNER2NE
pad:
CORNER3SE
pad:
CORNER4SW
其中S/N/W/E分别是PAD在Core的南/北/西/东,四个角分别是CORNER1、2、3、4。
)
二、十进制计数器的APR
新建一个目录,将准备好的文件放入对应目录下面,启动Encounter。
启动Encounter图形界面的方式如下,在终端中输入下面的命令:
$encounter
然后按回车,Encounter软件将被打开,下图显示的是SOCEncounter软件正常启动显示的信息:
图2Encounter软件的启动
SOCEncounter软件正常启动后的界面如下图所示:
图3Encounter启动后的界面
上图是对Encounter软件图形界面的介绍,图中介绍了Encounter软件图形界面的各部分的名称,先做一个初步的了解。
1、导入设计文件
}
在Encounter图形界面中选择Design→DesignImport…打开导入设计对话框,如图:
图4DesignImport对话框
按照图示填好相应的设计文件,然后切换到Advanced项,如下图:
图5AdvancedTab
选择Power选项,如图中所示填入VDD和VSS。
设置好后,点击OK,设计被导入Encounter中,如下图所示:
图6设计导入到Encounter
2、设计布局
选择Floorplan→SpecifyFloorplan打开SpecifyFloorplan对话框,如下图:
%
图7SpecifyFloorplan
按图所示进行设置,完成后点击OK,指定布局后的效果如下:
图8SpecifyFloorplan后的效果
3、添加电源环
选择Power→PowerPlanning→AddRings…打开AddRings对话框:
图9AddRings对话框
在Net(s):
处填入VSSVDD,其它要设置的地方如上图所示,Offset处要选择Centerinchannel,否则后面电源线连接时会出现连接不上的情况。
设置完成后,点击OK完成设置,设置后在Core四周放置好了电源环如下:
(
图10AddRings后的效果
4、放置标准单元
设计导入Encounter后,数据都是存储在Memory中的,需要人为操作进行放置,当然最终还是软件根据特定算法自己自动放置的。
在菜单栏中选择Place→StandardCellsandBlocks…打开Place设置框:
图11Place1
在BasicTab中取消选择RunTimingDrivenPlacement和ReorderScanConnection项,转到AdvancedTab中,在CongestionEffort中选择Medium项,如图:
图12Place2
设置好以上条件后,点击OK,Encounter执行Place命令,标准单元就被放入Core中了。
5、Globalnetconnection
下面要连接设计中所有的globalnet,包括所有标准单元的power/groundpin连接到VDD/VSS,以及把单元里连接1的连接到VDD,把和0连接的连接到VSS。
选择Floorplan→Globalnetconnections…项,打开GlobalNetConnections设置框,按下图所示进行设置:
;
图13GlobalNetConnections
Connect处选择Pins,里面填入VDD,Scope处选择UnderModule,然后在ToGlobalNet:
处填入VDD,之后点击AddtoList后,在ConnectionList中第一行就设置好了,其他进行类似操作,都设置完成后,先点击Apply按钮,然后点击Check,最后点击Close关闭GlobalNetConnections设置框,完成设置。
6、Routingthepower/groundNets
选择Route→SpecialRoute…,打开SRoute设置框,如下进行设置:
图14SRoute设置
在Route处,去选Blockpins、Padrings、Stripes(unconnected)项,其它的使用默认设置即可,然后点击OK完成设置,设置完成后的效果如下图所示:
图15SRoute后的效果
7、时钟树综合
!
选择Clock→CreateClockTreeSpec…打开CreateClockTreeSpec对话框,如下图:
图16CreateClockTreeSpec
按图中所示进行设置,完成后点击OK。
然后选择Clock→SpecifyClockTree…选项打开SpecifyClockTree设置框,在ClockTreeFile处选择我们刚才创建的文件,然后点击OK完成设置。
最后选择Clock→SynthesizeClockTree命令进行时钟树综合。
这一步完成后,检查设计是否有时序问题,在终端中输入report_timing,查看显示信息,如果没有时序问题,就可以进行下一步的详细布线了。
8、详细布线NanoRoute
选择Route→NanoRoute→Route…打开NanoRoute对话框,如下图所示:
图17NanoRoute设置
按图中进行设置,完成点击OK,该项命令执行后的效果如下:
—
图18NanoRoute后的视图
9、添加IOFiller
在终端中执行如下命令:
$addIoFiller–cellPFEED50–prefixIOFILLER
$addIoFiller–cellPFEED35–prefixIOFILLER
$addIoFiller–cellPFEED20–prefixIOFILLER
$addIoFiller–cellPFEED10–prefixIOFILLER
$addIoFiller–cellPFEED5–prefixIOFILLER
$addIoFiller–cellPFEED2–prefixIOFILLER
$addIoFiller–cellPFEED1–prefixIOFILLER
$addIoFiller–cellPFEED01–prefixIOFILLER–fillAnyGap
-
$redraw
这样就在I/OPAD之间加入了IOFiller,可以拉看到原先PAD之间的缝隙被填充了,如下图所示:
图19添加IOFiller后的效果
10、保存设计
选择Design→SaveDesign…保存当前设计,这样在下次要进行其他操作时可以直接打开该设计,使其处于当前的设计状态。
选择Design→Save→GDS…导出版图设计为,保存设计如下所示:
设置完成后点击OK,保存版图信息。
保存用于后面LVS的网表文件。
选择Design→Save→Netlist…打开保存Netlist对话框,在保存的文件名处填入,然后点击OK保存版图对应的网表信息。
三、版图后的DRC和LVS
;
1、版图导入到IC5141工具中
需要的文件有Encounter输出文件的工艺文件、Virtuoso显示设置文件、DRC和LVS规则文件:
25a,
,
,
Calibre-lvs-cur_soce,
,
,
,
新建一个目录,将这些文件放入此目录下,从终端中打开IC5141:
。
$icfb&
启动IC5141后在CIW中,选择File→Import→Stream…,在StreamInform里inputfile处点击Browse…选择,TopCellName中填Cnt10_PAD,ASCIITechnologyFileName处点击Browse…,选择文件:
图21版图导入到Virtuoso中
完成设置后,点击OK,这样就把版图导入到版图设计工具中了。
如图所示:
图22版图成功导入
在LibraryManager中找到pad_counter,然后在其中找到Cnt10_PAD,双击layout,打开设计的版图:
图23十进制版图
刚打开的版图显示需要设置一下才会如上图所示,在视图中选择Options→Display打开显示设置对话框,如图:
^
图24显示设置
按照图中所示进行设置后就可以看到图23所示的显示效果。
2、DRC检查
选择Calibre→RunDRC打开DRC设置框如下所示:
图25Rules设置
在Rules项中设置DRC规则文件13a25a,然后点击RunDRC项,运行DRC检查,运行结果显示如下图:
图26DRC结果
图中显示中大红叉的地方显示有7个Results,这7个Results是由于材料密度问题引起的,一般是有芯片制造商去解决的,因此本设计DRC没有错误。
·
2、LVS检查
在做LVS检查时,可以不在IC5141里面做,我们这里在终端中通过执行命令来完成。
首先需要把Encounter输出的文件转换为Calibre做LVS认识的文件文件,即是要先将.v文件转换为.spi文件。
在终端中运行如下命令:
$v2lvs–v–l–o–s–ccic_-n
这条命令执行完后,会在当前工作目录下生成文件,即hspice网表文件。
然后打开Calibre-lvs-cur_soce文件修改里面的内容如下图所示:
图27修改Calibre-lvs-cur_soce文件
修改后保存。
在终端中运行如下命令:
$calibre–lvs–spice–hier–autoCalibre-lvs-cur_soce
这条命令执行完后会在当前目录下生成LVS报告文件及其其他一些LVS报告文件,打开查看LVS报告:
》
图28查看LVS报告
可以看到,报告结果显示LVS是CORRECT的,也就是版图与电路原理图是一致的。
到此,一个以十进制计数器的版图自动设计就完成了,当然这是没有实际意义的,仅仅是为了介绍使用Encounter进行自动版图设计的流程。
实际的版图设计中要经过很多其他的详细的操作,一个芯片版图的实现也远远不止这么容易。
接下来将以一个复杂的包含IP模块的设计来进一步深入的学习一下Encounter在APR时可能要进行的步骤,也介绍一下一个版图应当进行那些检查设计。
四、使用Encounter进行包含Block核的版图设计
文件准备:
DTMF数据包文件,网上有下载,、设计文件和数据文件导入Encounter
将输入文件导入到Encounter中如图所示:
图
在verilognetlist中指定DC输出的门级网表文件:
所有的.v文件
在TimingLibraries中指定相应的时序库:
fast、slow
在LEFFiles中指定.lef文件
在TimingConstraintfile:
指定.sdc文件
》
在IOAssignmentFile中指定.io文件:
点击advanced,进如如图所示界面,会出现11项设置,填其中的5项即可,
图
下一步,完成PowerPage的填写,如图所示,填入电源、地的节点名称以便创建电源、地环。
图
下一步,完成RCExtraction页的填写,如图所示。
在CapacitanceTableFile栏中指定captablefile文件,以便后面步骤中的信号完整性分析。
图
$
图
最后一步,完成SIAnalysispage的填写,如上图所示。
添加theCeltICDB(cdB)noiselibrary,该库用于CeltICcrosstalkanalysis。
到现在为止,我们已经对设计的输入、同时也指定了物理库、工艺规则文件、时序库、时序约束文件。
将这些配置保存到文件中,下次操作时,只须load该文件,工具将自动进行以上配置。
图
完成以上步骤后点击OK键,出现如图所示的界面。
图
2、Floorplanning
对窗口SpecifyFloorplanform进行设置,来指定thecorebox,IObox,diebox的尺寸大小。
步骤如下:
》
Floorplan→EditFloorplan→SpecifyFloorplan
在AspectRatio中,使用默认值选项
CoreMargins选择CoretoIOBoundary,
键入–CoretoLeft:
100
键入–CoretoRight:
100
键入–CoretoTop:
100
键入–CoretoBottom:
100
Click“Apply”按钮。
完了后,IOPAD自动调整到离thecorebox边界100微米处。
(该距离根据设计要求决定)
图
<
在也可对thecorebox的高宽比率进行调整,在ratio(H/W)中将默认值:
1设置成,则thecorebox的高是宽的2倍了。
3、CreatingafloorplanwithRelativeFloorplan
对于芯片版图的布局来说,block的布局起非常重要的作用。
下面对四个blocks进行布局。
Floorplan→RelationFloorplan→EditConstraint...,首先对DTMF_INST/ARB_INST/ROM_512x16_0_INST进行放置,完成如图所示的填写点击Apply。
图
图
然后以同样的方法对DTMF_INST/RAM_256x16_TEST_INST/RAM_256x16_INSTBlock进行放置如图所示:
图
%
然后以同样的方法对
DTMF_INST/RAM_128x16_TEST_INST/RAM_128x16_INSTBlock进行放置如图所示:
图
然后以同样的方法对DTMF_INST/PLLCLK_INSTBlock进行放置如图所示:
图
注意:
如果你不想这样方式对4个blocks进行布局,可以通过Design→Load→Floorplan,load文件。
Encounter会根据该文件所定义的位置对4个blocks进行自动布局。
也可将手动布局保存到该文件以便下次调用。
布局完成后的效果如下:
》
图
如果不想显示黄色指示箭头,可以如上图进行设置。
图
4、Creatingblockhalos
当对blocks进行布局后,接下来创建blockhalos。
其目的为了在对标准单元进