960 likes | 1.53k Views
数字 IC 的逻辑综合 及可测性设计. 2013 年 12 月 17 日. 主要内容. 逻辑综合基本概念 逻辑综合工具 --Design Compiler 可测性基础 可测性设计工具. 功能要求. 功. 能. 要. 求. 系统建模. 系统建模. 行为设计. 不满足. Verilog. /. VHDL. (. ). 不满足. 电路仿真. 行为仿真. 满足. 满足. 综合. 、. 优化. 手工设计. 网表. 版图. 不满足. 不满足. 时序仿真. 满足. 后仿真. 版图自动. 满足. 布局.
E N D
数字IC的逻辑综合 及可测性设计 2013年12月17日
主要内容 • 逻辑综合基本概念 • 逻辑综合工具--Design Compiler • 可测性基础 • 可测性设计工具 共84页
功能要求 功 能 要 求 系统建模 系统建模 行为设计 不满足 Verilog / VHDL ( ) 不满足 电路仿真 行为仿真 满足 满足 综合 、 优化 手工设计 网表 版图 不满足 不满足 时序仿真 满足 后仿真 版图自动 满足 布局 、 布线 流片 、 封装 、 测试 不满足 后仿真 满足 流片 、 封装 、 测试 IC典型流程 数字VLSI 流程 模拟IC 流程 Matlab Matlab 半定制?全定制 Modelsim Questasim Muxplus II Spectre Virtuoso, laker Design Compiler Astro(IC Compiler) Encounter Calibre 参数提取 共84页
主要内容 • 逻辑综合基本概念 • 逻辑综合工具--Design Compiler • 可测性设计基础 • 可测性设计工具 共84页
逻辑综合基本概念 • 什么是逻辑综合? • 时间路径 • 时序:setup/hold • 常见术语 共84页
什么是逻辑综合? • 综合就是把HDL 代码转换为门级电路的过程,用公式表示 就是:综合= 翻译 + 优化 + 映射( Synthesis = Translation + Optimization + Mapping ) 共84页
assign mux_out=!mux_control&mux_in1 |mux_control&mux_in2|mux_in1&mux_in2; 翻译 映射 assign mux_out=mux_control ?mux_in1:mux_in2; 共84页
时间路经 • 时间路径:信号传播经过的逻辑通道,简称路径。 • 起点一般为:基本输入端口或寄存器的时钟CK端口; • 终点一般为:基本输出端口或寄存器的数据D端口。 • 时间路径通常分为4种: • 基本输入到基本输出: • 基本输入到寄存器: • 寄存器到基本输出: • 寄存器到寄存器: 共84页
时间路经 基本输入到基本输出 基本输入到寄存器 寄存器到寄存器 寄存器到基本输出 共84页
时序:setup/hold • 建立(setup)时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。 • 保持(hold)时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。 • 裕度(slack):是时序要求与实际时序之间的差值,反映了时序是否满足要求。裕度为正,满足要求;反之不满足。 裕度=要求的时间-实际的时间 共84页
DC常见术语 • 库(Library) • 设计(Design) • 单元(Cell or Instance) • 参考(Reference) • 端口(Port) • 管脚(Pin) • 线网(Net) • 时钟(Clock) 共84页
DC常见术语—库 • 库:一组逻辑单元的集合。 • 库包括库申明、库属性、库应用环境和每个单元的功能描述、时间延时、面积、功耗等。 • 逻辑综合库包含两种格式: 1.自由文件格式 .lib(任何文本编辑器都可以打开) 2. synopsys应用程序可使用的格式.db(不可查看) 存放路径 Astro布局布线库 LVS文件 文本文件,datasheet, handbook 可测性矢量压缩文件 标准单元版图 Cadence布局布线库 物理参数库 符号库 逻辑综合库 标准单元verilog模型 标准单元清单 库说明文件 共84页
DC常见术语 design • module top(A,B,C,D,CLK,OUT1); • input A,B,C,D,CLK; • output OUT1; • …. • INV U2(.A(BUS0),.Z(INV0)); • …. • endmodule clock port net reference cell pin 共84页
主要内容 • 逻辑综合基本概念 • 逻辑综合工具--Design Compiler • 可测性设计基础 • 可测性设计工具 共84页
逻辑综合工具介绍 • Design Compiler, Synplify, ISE– XST, Precision. RTL • Design Compiler(DC)是业界流行的、功能强大的逻辑综合工具。用户只需输入满足要求的HDL描述和设计约束,就可能得到较为优化的门级综合网表。 • 初学者通过图形界面,然后熟悉DC的综合命令,采用批处理的方式提高综合的工作效率。 共84页
DC启动 工作站启动方法: 创建启动软件目录 mkdir syn 进入到启动软件目录 cd syn source /opt/demo/synopsys.env design_vision & 共84页
DC图形界面 命令窗口 共84页
逻辑综合流程 • 1.HDL准备 • 2.准备工艺库 • 3.读入HDL代码 • 4.添加约束 • 5.编译 • 6.查看报告 • 7.文件导出 共84页
1.HDL准备 • 设计文件 • 带IO的顶层文件。 共84页
module top_pad (clk_pad, en_pad, data_in_pad, fsk_out_pad ); • input clk_pad,en_pad,data_in_pad; • output fsk_out_pad; • fsk_modulator fsk_modulator(clk_wire,en_wire,data_in_wire,fsk_out_wire); • PULLHS1 pull_high (.Z(high_wire)); • PULLHS0 pull_low (.Z(low_wire)); • //input • PBCD2RN data_in_block (.PAD(data_in_pad),.IE(high_wire), .OEN(high_wire), .REN(high_wire), .C(data_in_wire)); • PBCD2RN clk_block (.PAD(clk_pad),.IE(high_wire), .OEN(high_wire), .REN(high_wire), .C(clk_wire)); • PBCD2RN en_block (.PAD(en_pad),.IE(high_wire), .OEN(high_wire), .REN(high_wire), .C(en_wire)); • //output • PBCD2RN fsk_out_block (.PAD(fsk_out_pad),.IE(low_wire), .OEN(low_wire), .REN(high_wire), .I(fsk_out_wire)); • endmodule 查看库的handbook 共84页
2.准备工艺库1/4 • 工艺库要到相关Foundry代工厂网站下载,上传至服务器。 • 准备软件启动文件.synopsys_dc.setup .synopsys_dc.setup 定义工艺库的路径和其他用于逻辑综合的参数。 在启动软件的时候,DC按下列顺序读入启动文件的。 • 1) Synopsys安装目录下的启动文件: $synopsys/admin/setup • 2) 用户根目录下的启动文件; • 3) 软件 启动的目录下的启动文件; 共84页
2.准备工艺库2/4--启动文件.synopsys_dc.setup • set lib_path /home/smic/smic_40/SCC40NLL_HS_RVT_V0p1a • set smic_stdlib_path ${lib_path}/synopsys/1.1v/ • set smic_iolib_path /home/smic/smic_40/SP40NLLD2RN_3P3V_V0p2/syn/3p3v/ • set smic_stdsymlib_path ${lib_path}/symbol/ • set search_path "$search_path $smic_stdlib_path $smic_iolib_path \ $smic_stdsymlib_path " • set target_library [list scc40nll_hs_rvt_ff_v1p21_-40c_basic.db\ scc40nll_hs_rvt_ss_v0p99_125c_basic.db\ scc40nll_hs_rvt_tt_v1p1_25c_basic.db] • set link_library [list "*" SP40NLLD2RN_3P3V_V0p1_ff_V1p21_125C.db\ SP40NLLD2RN_3P3V_V0p1_ss_V0p99_-40C.db\ SP40NLLD2RN_3P3V_V0p1_tt_V1p10_25C.db\ scc40nll_hs_rvt_ff_v1p21_-40c_basic.db\ scc40nll_hs_rvt_ss_v0p99_125c_basic.db\ scc40nll_hs_rvt_tt_v1p1_25c_basic.db] set symbol_library [list SCC40NLL_HS_RVT_V0p1.sdb] 注意:\后面不要跟空格 共84页
2.准备工艺库3/4 • search_path定义库文件所在的搜索路径 • 目标库(targe_library):是DC在mapping时将设计映射到特定工艺所使用的库,就是使用目标库中的元件综合成设计的门级网表 • 连接库(link_library):是提供门级网表实例化的基本单元,也就是门级网表实例化的元件或单元都来自该库。连接库定义为标准单元的db格式的库文件加上IO pad db格式的库文件,加上ROM,RAM等宏单元库文件 • 符号库(symbol_library):是工艺库元件的图形符号表示,用来图形化显示生成的门级网表。 共84页
2.准备工艺库4/4 • 软件启动后 要先查看库添加成功与否 共84页
3.读入设计文件1/3 • DC提供了下面两种方式读入设计: 1.read命令 2.analyze&elaborate命令(先分析语法等,再构成具体逻辑) 共84页
3.读入设计文件2/3 read 方式下一次只能读入一个文件,要采取自下而上的方式。 共84页
3.读入设计文件3/3 • read -format verilog [list \ /home/liuxp/sim/rtl/fsk_modulator.v] • read -format verilog [list \ /home/liuxp/sim/rtl/fsk_modulator_pad.v] 共84页
4.添加约束 工作温度条件 共84页
4.添加约束 • set_operating_conditions -min_library scc40nll_hs_rvt_ff_v1p21_-40c_basic -min ff_v1p21_-40c -max_library scc40nll_hs_rvt_ss_v0p99_125c_basic -max ss_v0p99_125c -analysis_type bc_wc 共84页
4.设置负载 • 打开电路图,选中要设置负载的输出管脚。 • set_load 5 [all_outputs] 共84页
4.创建时钟 共84页
4.创建时钟 • create_clock -name clk -period 15 -waveform [list 0 7.5] clk_pad • set_clock_latency 1.0 [all_clocks] • set_clock_uncertainty -setup 1.0 clk • set_clock_uncertainty -hold 0.5 clk • set_clock_transition 1 [get_clocks clk] • set_dont_touch_network [list clk_pad] 共84页
5.编译 • compile 共84页
编译前后电路结构比较 编译前 编译后 共84页
6.Timing 报告 • report_timing -delay max • report_timing -delay min 共84页
7.文件导出 • top_pad.sv和top_pad.sdc提供给布局布线工具去做后端。 • 在启动软件的目录里面创建netlist目录 • mkdir netlist(在term里面输入) • write -format verilog -hierarchy -output ./netlist/top_pad.sv(在软件的命令栏输入) • 在启动软件的目录里面创建sdc目录 • mkdir sdc • write_sdc ./sdc/top_pad.sdc 共84页
需要导出的网表文件--.sv • module fsk_modulator ( clk, en, data_in, fsk_out ); • input clk, en, data_in; • output fsk_out; • wire N17, N18, N19, n1, n2, n3, n4, n5, n6, n7; • wire [1:0] count; • DQHSV1 \count_reg[0] ( .D(N17), .CK(clk), .Q(count[0]) ); • DQHSV1 \count_reg[1] ( .D(N18), .CK(clk), .Q(count[1]) ); • DQHSV1 \count_reg[2] ( .D(N19), .CK(clk), .Q(fsk_out) ); • XOR2HSV2 U4 ( .A1(n5), .A2(fsk_out), .Z(n4) ); • CLKNAND2HSV2 U5 ( .A1(count[0]), .A2(count[1]), .ZN(n5) ); • XNOR2HSV2 U7 ( .A1(count[0]), .A2(count[1]), .ZN(n6) ); • AOI211HSV2 U8 ( .A1(n7), .A2(fsk_out), .B(n2), .C(count[0]), .ZN(N17) ); • NOR2HSV3 U9 ( .A1(data_in), .A2(n1), .ZN(n7) ); • CLKNHSV4 U11 ( .I(en), .ZN(n2) ); • INOR3HSV1 U12 ( .A1(fsk_out), .B1(n1), .B2(data_in), .ZN(n3) ); • NOR3HSV2 U3 ( .A1(n2), .A2(n3), .A3(n4), .ZN(N19) ); • NOR3HSV2 U6 ( .A1(n2), .A2(n3), .A3(n6), .ZN(N18) ); • INHSV2 U10 ( .I(count[1]), .ZN(n1) ); • endmodule 共84页
需要导出的约束文件--.sdc • set_operating_conditions -analysis_type bc_wc -max ss_v0p99_125c -max_library \ • scc40nll_hs_rvt_ss_v0p99_125c_basic\ • -min ff_v1p21_-40c -min_library \ • scc40nll_hs_rvt_ff_v1p21_-40c_basic • create_clock [get_ports clk_pad] -name clk -period 15 -waveform {0 7.5} • set_clock_latency 1 [get_clocks clk] • set_clock_uncertainty -setup 1 [get_clocks clk] • set_clock_uncertainty -hold 0.5 [get_clocks clk] • set_clock_transition -rise 1 [get_clocks clk] • set_clock_transition -fall 1 [get_clocks clk] 共84页
主要内容 • 逻辑综合基本概念 • 逻辑综合工具--Design Compiler • 可测性设计基础 • 可测性设计工具 共84页
可测性基础 • 什么是可测性设计? • 物理瑕疵及故障模型 • 单一故障模型:SAF Model • 检测SAF的算法:D算法 • 可测性设计常用方法 • 测试矢量集 • 故障覆盖率 共84页
什么是可测性设计? • 可测性设计, Design For Test,即DFT 。 为了测试所设计IC有没有被正确的制造出来(测试半导体生产处理过程中的瑕疵,不是测试芯片设计的对错)。 DFT=增加芯片逻辑+生成测试矢量集(供测试设备用) 共84页
物理瑕疵和故障模型 1.开路和短路 2.金属线之间的电桥 3.漏源穿通 CMOS 反相器 中的物 理缺陷 共84页
物理故障 逻辑故障 封装引脚间的漏电或短路 单一固定故障 芯片焊接点到管脚连线断裂 延时故障 表面玷污、含湿气 短路或者开路故障 金属层迁移、应力、脱皮 … 金属层开路、短路 … … … 共84页
单一固定故障:stuck-at fault 固定1故障: U0的输入端A固定接在高 电平上,其值一直为“1” 固定0故障: U1的输出端Y固定接在 低电平上,其值一直为“0” 共84页
D算法 D算法是20世纪60年代IBM提出测试SAF(stuck-at fault model,简称SAF模型)的,D算法在没有故障和 有故障的电路之间产生了逻辑的差异(Discrepan cy),D为Discrepancy缩写,D算法即为差异算法。 • 经典的D算法如下: 1、瞄准特定的SAF。 2、驱动故障节点为反向值。 3、把错误传送到输出端口。 4、记录测试向量,减掉已测试过的故障。 共84页
D算法 • 第一步:是把某个节点作为测试目标,我们把U1的输出 端作为测试的目标,探测它有无SA0的故障。 共84页
D算法 • 第二步:是通过驱动该节点为相反的值以激活 (activate)目标的故障。我们可以通过ATE在 输入端口输入逻辑“0”,如U1输出没有SA0的故 障,其逻辑“1”;如U1输出有SA0的故障,其逻 辑为“0”。我们可以通过测试其逻辑值来判断值 该节点是否有SA0的故障。 共84页
D算法 • 第三步:是把故障效应传送到输出端口,ATE可以在输出端口观测到其逻辑值,有故障节点的逻辑值通过组合电路后可能会反向,但是差异还保留着。 共84页
D算法 • 第四步:记录向量。成功的测试向量被记录在内存里,已测试的故障从目标故障的清单里减掉。 • 这个算法要重复多次,以测试设计中所有的故障。测试程序包含一系列的测试向量,这些测试向量用来测出芯片中所有可能的故障。测试程序可以用STIL格式来描述。 共84页
DFT常用方法 • 功能点测试 需在每个测试点增加可控的输入和输出,I/O增加 • 扫描测试 结构化的DFT技术,全扫描和部分扫描 • 内建自测试 消除了对ATE的存储能力和频率的限制,更具发展潜力 共84页