Encounter使用入门教程

2019-04-15 16:38

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软件正常启动后的界面如下图所示:


Encounter使用入门教程.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:自助银行选址方法与技巧

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: