Encounter使用入门教程

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

相关文档
最新文档