02.12.2012 Views

Mentor Graphics ASIC Design Flow

Mentor Graphics ASIC Design Flow

Mentor Graphics ASIC Design Flow

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

VLSI/FPGA<br />

<strong>Design</strong> and Test <strong>Flow</strong> with<br />

<strong>Mentor</strong> <strong>Graphics</strong> CAD Tools<br />

Victor P. Nelson


<strong>Mentor</strong> <strong>Graphics</strong> CAD Tool Suites<br />

�� IC/SoC IC/ SoC design flow 1<br />

�� DFT/BIST/ATPG design flow 1<br />

�� FPGA design flow 2,3<br />

�� PCB design flow 2<br />

�� Digital/analog/mixed-signal Digital/analog/mixed signal modeling & simulation 1,2<br />

�� <strong>ASIC</strong>/FPGA synthesis 1,2<br />

�� Vendor-provided Vendor provided (Xilinx,Altera,etc<br />

( Xilinx,Altera,etc.) .) back end tools 2<br />

1. User-setup User setup selection: eda/mentor/IC<strong>Flow</strong>2006.1<br />

2. User-setup User setup selection: eda/mentor/EN2002.3<br />

3. User-setup User setup selection: eda/mentor/FPGA<br />

eda/mentor/FPGA


<strong>Mentor</strong> <strong>Graphics</strong> CAD Tools<br />

(select “eda eda/mentor /mentor” in user-setup user setup on the Sun network*)<br />

IC<strong>Flow</strong>2006.1–– For For custom custom & & standard standard cell cell IC IC designs designs<br />

– IC flow tools (<strong>Design</strong> (<strong>Design</strong> Architect--IC, Architect IC, IC IC Station, Station, Calibre)) Calibre<br />

– Digital/analog/mixed simulation ((Modelsim,ADVance<br />

– HDL Synthesis (Leonardo) (Leonardo)<br />

– ATPG/DFT/BIST tools (DFT (DFT Advisor, Advisor, Flextest, Flextest,<br />

Fastscan)) Fastscan<br />

– Limited access to Quicksim II (some (some technologies)<br />

technologies)<br />

EN2002u3 –– For For FPGA FPGA ““front front end”” end design design & & printed printed circuit circuit boards boards<br />

– <strong>Design</strong> Architect, Quicksim II, Quicksim Pro (Schematic/Simulation)<br />

– ModelSim & Leonardo (HDL (HDL Simulation/Synthesis)<br />

– Xilinx ISE & Altera “Quartus Quartus” tools (Back (Back end end design) design)<br />

�� IC<strong>Flow</strong>2006.1<br />

�� EN2002u3<br />

FPGA (FPGA (FPGA Advantage, Advantage, Modelsim, Modelsim,<br />

Leonardo) Leonardo)<br />

�� FPGA<br />

Modelsim,ADVance MS,Eldo,MachTA))<br />

MS,Eldo,MachTA<br />

*Only *Only one one of of the the above above three three groups groups may may be be selected selected at at a a time<br />

time


<strong>Mentor</strong> <strong>Graphics</strong> <strong>ASIC</strong> <strong>Design</strong> Kit (ADK)<br />

�� Technology files & standard cell libraries<br />

– AMI: ami12, ami05 (1.2, 0.5 μm) m)<br />

– TSMC: tsmc035, tsmc025, tsmc018 (0.35, 0.25, 0.18 μm) m)<br />

�� IC flow & DFT tool support files:<br />

– Simulation<br />

�� VHDL/Verilog<br />

VHDL/ Verilog/Mixed /Mixed-Signal Signal models ((Modelsim/ADVance<br />

Modelsim/ADVance MS) MS)<br />

�� Analog (SPICE) models ((Eldo/Accusim<br />

Eldo/Accusim))<br />

�� Post-layout Post layout timing (Mach (Mach TA) TA)<br />

�� Digital schematic (Quicksim Quicksim II, II, Quicksim Quicksim Pro) Pro) (exc. tsmc025,tsmc018)<br />

– Synthesis to std. cells ((LeonardoSpectrum<br />

LeonardoSpectrum))<br />

– <strong>Design</strong> for test & ATPG (DFT (DFT Advisor, Advisor, Flextest/Fastscan))<br />

Flextest/Fastscan<br />

– Schematic capture (<strong>Design</strong> (<strong>Design</strong> Architect--IC)<br />

Architect IC)<br />

– IC physical design (standard cell & custom)<br />

�� Floorplan, Floorplan,<br />

place & route (IC (IC Station) Station)<br />

�� <strong>Design</strong> rule check, layout vs schematic, parameter extraction ((Calibre Calibre))


Xilinx/Altera<br />

Xilinx/ Altera FPGA/CPLD <strong>Design</strong><br />

�� Technology files & libraries for front-end front end design with<br />

<strong>Mentor</strong> <strong>Graphics</strong> tools<br />

– Schematic symbols for <strong>Design</strong> <strong>Design</strong> Architect Architect<br />

– Simulation models for Quicksim Quicksim II, II, Quicksim Quicksim Pro Pro<br />

– Synthesis library for Leonardo Leonardo<br />

�� Vendor tools for back-end back end design<br />

(map, place, route, configure, timing)<br />

– Xilinx Integrated Integrated Software Software Environment Environment (ISE)<br />

�� Xilinx XST can synthesize the design from VHDL or Verilog (instead<br />

of Leonardo)<br />

– Altera Quartus Quartus II II & & Max+Plus2<br />

Max+Plus2


DFT/BIST<br />

& ATPG<br />

Test vectors<br />

Standard Cell IC<br />

& FPGA/CPLD<br />

DRC & LVS<br />

Verification<br />

<strong>ASIC</strong> <strong>Design</strong> <strong>Flow</strong><br />

Synthesis<br />

Behavioral<br />

Model<br />

VHDL/Verilog<br />

Gate-Level<br />

Netlist<br />

Transistor-Level<br />

Netlist<br />

Physical<br />

Layout<br />

Map/Place/Route<br />

Full-custom IC<br />

IC Mask Data/FPGA Configuration File<br />

Verify<br />

Function<br />

Verify<br />

Function<br />

Verify Function<br />

& Timing<br />

Verify<br />

Timing


Behavioral <strong>Design</strong> & Verification<br />

VHDL<br />

Verilog<br />

SystemC<br />

(mostly technology-independent)<br />

technology independent)<br />

ModelSim<br />

(digital)<br />

Leonardo<br />

Spectrum<br />

(digital)<br />

Create Behavioral/RTL<br />

HDL Model(s)<br />

Simulate to Verify<br />

Functionality<br />

Synthesize Gate-Level<br />

Circuit<br />

Post-Layout Simulation,<br />

Technology-Specific Netlist<br />

to Back-End Tools<br />

VHDL-AMS<br />

Verilog-A<br />

ADVance MS<br />

(analog/mixed signal)<br />

Technology Libraries


ADVance MS Simulation System<br />

�� ADVance MS “kernel kernel” supports:<br />

– VHDL & Verilog: Verilog:<br />

digital (via ModelSim) ModelSim<br />

– VHDL-AMS VHDL AMS & Verilog-A: Verilog A: analog/mixed signal<br />

– Eldo/SPICE: Eldo/SPICE:<br />

analog (via Eldo) Eldo<br />

– Eldo RF/SPICE: analog RF (via Eldo RF)<br />

– Mach TA/SPICE: high-speed high speed analog/timing<br />

�� Invoke stand-alone stand alone or from <strong>Design</strong> Architect-IC<br />

Architect IC<br />

�� <strong>Mentor</strong> <strong>Graphics</strong> “Legacy Legacy” Simulators<br />

Simulators (PCB design)<br />

– Quicksim II, Quicksim Pro (digital)<br />

– <strong>ASIC</strong>: adk_quicksim<br />

adk_quicksim<br />

– FPGA/PLD: Xilinx: pld_quicksim,<br />

pld_quicksim,<br />

Altera: Altera:<br />

max2_quicksim<br />

– Accusim (analog): adk_accusim<br />

adk_accusim


ADVance MS<br />

Digital, Analog, Mixed-Signal Mixed Signal Simulation<br />

Working<br />

Library<br />

Simulation<br />

Setup<br />

VHDL,Verilog,<br />

VHDL-AMS, Verilog-A,<br />

SPICE Netlists<br />

<strong>Design</strong>_1<br />

<strong>Design</strong>_2<br />

VITAL<br />

ADVance MS<br />

SPICE<br />

models<br />

IEEE 1164 Resource<br />

Libraries<br />

Input<br />

Stimuli<br />

Eldo,<br />

EZwave<br />

Eldo RF or Xelga ModelSim<br />

Analog<br />

(SPICE)<br />

Mach TA<br />

Mach PA<br />

View Results<br />

Digital<br />

(VHDL,Verilog)<br />

Mixed Signal<br />

(VHDL-AMS,<br />

Verilog-A)


Example: 4-bit 4 bit binary counter<br />

�� VHDL model (count4.vhd)<br />

(count4.vhd)<br />

– Create working library: vlib vlib work work<br />

vmap vmap work work work work<br />

– Compile: vcom vcom count4.vhd count4.vhd<br />

– Simulate: vsim vsim count4(rtl) count4(rtl)<br />

�� ModelSim simulation-control simulation control inputs<br />

– ModelSim “Macro<br />

– OR, VHDL testbench<br />

�� ModelSim results<br />

– listing listing or or waveform<br />

waveform<br />

Macro” (count4_rtl.do)


-- count4.vhd 4-bit 4 bit parallel-load parallel load synchronous counter<br />

LIBRARY ieee; ieee<br />

USE ieee.std_logic_1164.all; USE ieee.numeric_std.all;<br />

ieee.numeric_std.all<br />

ENTITY count4 IS<br />

PORT (clock,clear,enable,load_count<br />

( clock,clear,enable,load_count : IN STD_LOGIC;<br />

D: IN unsigned(3 downto 0);<br />

Q: OUT unsigned(3 downto 0));<br />

END count4;<br />

ARCHITECTURE rtl OF count4 IS<br />

SIGNAL int : unsigned(3 downto 0);<br />

BEGIN<br />

PROCESS(clear, PROCESS(clear,<br />

clock, enable)<br />

BEGIN<br />

IF (clear = '1') THEN<br />

int


Test stimulus:<br />

Modelsim “do do” file: count4_rtl.do<br />

add wave /clock /clear /enable /load_count<br />

/ load_count /D /Q<br />

add list /clock /clear /enable /load_count<br />

/ load_count /D /Q<br />

force /clock 0 0, 1 10 -repeat repeat 20<br />

force /clear 0 0, 1 5, 0 10<br />

force /enable 0 0, 1 25<br />

force /load_count<br />

/ load_count 0 0, 1 20, 0 35, 1 330, 0 350<br />

force /D 10#5 0, 10#9 300<br />

run 400


Testbench: Testbench:<br />

count4_bench.vhd<br />

LIBRARY ieee; ieee;<br />

USE ieee.std_logic_1164.all; USE ieee.numeric_std.all;<br />

ieee.numeric_std.all<br />

ENTITY count4_bench is end count4_bench;<br />

ARCHITECTURE test of count4_bench is<br />

component count4<br />

PORT (clock,clear,enable,load_count<br />

( clock,clear,enable,load_count : IN STD_LOGIC;<br />

D: IN unsigned(3 downto 0);<br />

Q: OUT unsigned(3 downto 0));<br />

end component;<br />

for all: count4 use entity work.count4(behavior);<br />

signal clk : STD_LOGIC := '0';<br />

signal clr, clr,<br />

en, ld: STD_LOGIC;<br />

signal din, qout: qout:<br />

unsigned(3 downto 0);<br />

begin<br />

UUT: count4 port map(clk,clr,en,ld,din,qout);<br />

map(clk,clr,en,ld,din,qout);<br />

clk


Count4 – Simulation waveform<br />

Clear<br />

Parallel<br />

Load<br />

Counting


ADVance MS : mixed-signal mixed signal simulation<br />

A/D converter<br />

digital<br />

analog<br />

VHDL-AMS


ADVance MS: mixed Verilog-SPICE<br />

Verilog SPICE<br />

Verilog top<br />

(test bench)<br />

SPICE<br />

subcircuit


Technology<br />

Synthesis<br />

Libraries<br />

FPGA<br />

<strong>ASIC</strong><br />

ADK<br />

AMI 0.5, 1.2<br />

TSMC 0.35, 0.25<br />

Automated Synthesis with<br />

Leonardo Spectrum<br />

Leonardo Spectrum<br />

(Level 3)<br />

Technology-<br />

Specific<br />

Netlist<br />

VHDL, Verilog, SDF,<br />

EDIF, XNF<br />

VHDL/Verilog<br />

Behavioral/RTL Models<br />

<strong>Design</strong><br />

Constraints<br />

Level 1 – FPGA<br />

Level 2 – FPGA + Timing


Leonardo – <strong>ASIC</strong> Synthesis <strong>Flow</strong>


Leonardo synthesis procedure<br />

1. Invoke leonardo leonardo<br />

2. Select & load a technology library (<strong>ASIC</strong> or FPGA)<br />

– <strong>ASIC</strong> <strong>ASIC</strong> > > ADK ADK > > TSMC TSMC 0.35 0.35 micron micron<br />

): count4.vhd count4.vhd<br />

3. Read input VHDL/Verilog<br />

VHDL/ Verilog file(s): file(s<br />

4. Enter any constraints (clock freq, delays, etc.)<br />

5. Optimize for area/delay/effort level<br />

6. Write output file(s) file(s<br />

– count4_0.vhd count4_0.vhd -- VHDL VHDL netlist netlist<br />

– count4.v count4.v -- Verilog Verilog netlist netlist (for (for IC IC layout) layout)<br />

– count4.sdf count4.sdf -- Standard Standard delay delay format format file file (for (for timing) timing)<br />

– count4.edf count4.edf -- EDIF EDIF netlist netlist (for (for Xilinx/Altera<br />

Xilinx/ Altera FPGA)<br />

FPGA)


Leonardo-synthesized<br />

Leonardo synthesized netlist count4_0.vhd<br />

library IEEE; use IEEE.STD_LOGIC_1164.all;<br />

library adk; adk;<br />

use adk.adk_components.all;<br />

adk.adk_components.all;<br />

-- ADDED BY VPN<br />

entity count4 is<br />

port (<br />

clock : IN std_logic ; clear : IN std_logic ; enable : IN std_logic ; load_count : IN std_logic ;<br />

D : IN std_logic_vector (3 DOWNTO 0) ; Q : OUT std_logic_vector (3 DOWNTO 0)) ;<br />

end count4 ;<br />

architecture netlist of count4 is -- rtl changed to netlist by VPN<br />

signal Q_3_EXMPLR, Q_2_EXMPLR, Q_1_EXMPLR, Q_0_EXMPLR, nx8, nx14, nx14,<br />

nx22,<br />

nx28, nx48, nx54, nx62, nx126, nx136, nx146, nx156, nx169, nx181,<br />

nx183, nx185, nx187, nx189: std_logic ;<br />

begin<br />

Q(3) clock, R=>clear); R=>clear);<br />

ix127 : mux21_ni port map ( Y=>nx126, A0=>Q_0_EXMPLR, A1=>nx8, A1=>nx8,<br />

S0=>enable );<br />

ix9 : oai21 port map ( Y=>nx8, A0=>load_count<br />

A0=> load_count, , A1=>Q_0_EXMPLR, B0=>nx169 );<br />

ix170 : nand02 port map ( Y=>nx169, A0=>D(0), A1=>load_count<br />

A1=> load_count); );<br />

Q_1_EXMPLR_EXMPLR : dffr port map ( Q=>Q_1_EXMPLR, QB=>OPEN, D=>nx136, CLK=>clock, R=>clear);<br />

ix137 : mux21_ni port map ( Y=>nx136, A0=>Q_1_EXMPLR, A1=>nx28, A1=>nx28,<br />

S0=> enable);<br />

ix29 : ao22 port map ( Y=>nx28, A0=>D(1), A1=>load_count<br />

A1=> load_count, , B0=>nx14, B1=> nx22);<br />

ix15 : or02 port map ( Y=>nx14, A0=>Q_0_EXMPLR, A1=>Q_1_EXMPLR);<br />

A1=>Q_1_EXMPLR);<br />

ix23 : aoi21 port map ( Y=>nx22, A0=>Q_1_EXMPLR, A1=>Q_0_EXMPLR, A1=>Q_0_EXMPLR,<br />

B0=> load_count);<br />

load_count);<br />

Q_2_EXMPLR_EXMPLR : dffr port map ( Q=>Q_2_EXMPLR, QB=>OPEN, D=>nx146, CLK=>clock, R=>clear); R=> clear);<br />

ix147 : mux21_ni port map ( Y=>nx146, A0=>Q_2_EXMPLR, A1=>nx48, A1=>nx48,<br />

S0=> enable);<br />

ix49 : oai21 port map ( Y=>nx48, A0=>nx181, A1=>nx183, B0=>nx189);<br />

B0=> nx189);<br />

ix182 : aoi21 port map ( Y=>nx181, A0=>Q_1_EXMPLR, A1=>Q_0_EXMPLR, A1=>Q_0_EXMPLR,<br />

B0=> Q_2_EXMPLR);<br />

ix184 : nand02 port map ( Y=>nx183, A0=>nx185, A1=>nx187);<br />

ix186 : inv01 port map ( Y=>nx185, A=>load_count<br />

A=> load_count); );<br />

ix188 : nand03 port map ( Y=>nx187, A0=>Q_2_EXMPLR, A1=>Q_1_EXMPLR, A1=>Q_1_EXMPLR,<br />

A2=> Q_0_EXMPLR);<br />

ix190 : nand02 port map ( Y=>nx189, A0=>D(2), A1=>load_count<br />

A1=> load_count); );<br />

Q_3_EXMPLR_EXMPLR : dffr port map ( Q=>Q_3_EXMPLR, QB=>OPEN, D=>nx156, CLK=>clock, R=>clear); R=>clear);<br />

ix157 : mux21_ni port map ( Y=>nx156, A0=>Q_3_EXMPLR, A1=>nx62, A1=>nx62,<br />

S0=> enable);<br />

ix63 : mux21_ni port map ( Y=>nx62, A0=>nx54, A1=>D(3), S0=>load_count<br />

S0= load_count); );<br />

ix55 : xnor2 port map ( Y=>nx54, A0=>Q_3_EXMPLR, A1=>nx187);<br />

A1=>nx187)<br />

end netlist ;


Verilog description for cell count4, LeonardoSpectrum Level 3, 2005a.82<br />

module count4 ( clock, clear, enable, load_count, load_count,<br />

D, Q ) ;<br />

input clock ;<br />

input clear ;<br />

input enable ;<br />

input load_count ;<br />

input [3:0]D ;<br />

output [3:0]Q ;<br />

wire nx8, nx14, nx22, nx28, nx48, nx54, nx62, nx126, nx136, nx146, nx156, nx169, nx181, nx183, nx185, nx187,<br />

nx189;<br />

wire [3:0] \$dummy $dummy ;<br />

dffr Q_0__rename_rename (.Q (Q[0]), .QB (\$dummy ( $dummy [0]), .D (nx126), .CLK (clock), .R (clear)) ;<br />

mux21_ni ix127 (.Y (nx126), .A0 (Q[0]), .A1 (nx8), .S0 (enable)) (enable))<br />

;<br />

oai21 ix9 (.Y (nx8), .A0 (load_count<br />

( load_count), ), .A1 (Q[0]), .B0 (nx169)) ;<br />

nand02 ix170 (.Y (nx169), .A0 (D[0]), .A1 (load_count<br />

( load_count)) )) ;<br />

dffr Q_1__rename_rename (.Q (Q[1]), .QB (\$dummy ( $dummy [1]), .D (nx136), .CLK (clock), .R (clear)) ;<br />

mux21_ni ix137 (.Y (nx136), .A0 (Q[1]), .A1 (nx28), .S0 (enable)) (enable))<br />

;<br />

ao22 ix29 (.Y (nx28), .A0 (D[1]), .A1 (load_count<br />

( load_count), ), .B0 (nx14), .B1 (nx22) ) ;<br />

or02 ix15 (.Y (nx14), .A0 (Q[0]), .A1 (Q[1])) ;<br />

aoi21 ix23 (.Y (nx22), .A0 (Q[1]), .A1 (Q[0]), .B0 (load_count<br />

( load_count)) )) ;<br />

dffr Q_2__rename_rename (.Q (Q[2]), .QB (\$dummy ( $dummy [2]), .D (nx146), .CLK (clock), .R (clear)) ;<br />

mux21_ni ix147 (.Y (nx146), .A0 (Q[2]), .A1 (nx48), .S0 (enable)) (enable))<br />

;<br />

oai21 ix49 (.Y (nx48), .A0 (nx181), .A1 (nx183), .B0 (nx189)) (nx189) ) ;<br />

aoi21 ix182 (.Y (nx181), .A0 (Q[1]), .A1 (Q[0]), .B0 (Q[2])) ;<br />

nand02 ix184 (.Y (nx183), .A0 (nx185), .A1 (nx187)) ;<br />

inv01 ix186 (.Y (nx185), .A (load_count<br />

( load_count)) )) ;<br />

nand03 ix188 (.Y (nx187), .A0 (Q[2]), .A1 (Q[1]), .A2 (Q[0])) (Q[0]) ) ;<br />

nand02 ix190 (.Y (nx189), .A0 (D[2]), .A1 (load_count<br />

( load_count)) )) ;<br />

dffr Q_3__rename_rename (.Q (Q[3]), .QB (\$dummy ( $dummy [3]), .D (nx156), .CLK (clock), .R (clear)) ;<br />

mux21_ni ix157 (.Y (nx156), .A0 (Q[3]), .A1 (nx62), .S0 (enable)) (enable))<br />

;<br />

mux21_ni ix63 (.Y (nx62), .A0 (nx54), .A1 (D[3]), .S0 (load_count<br />

( load_count)) )) ;<br />

xnor2 ix55 (.Y (nx54), .A0 (Q[3]), .A1 (nx187)) ;<br />

endmodule


Post-synthesis Post synthesis simulation<br />

(Leonardo Leonardo-generated generated netlist) netlist<br />

�� Verify synthesized netlist matches behavioral<br />

model<br />

�� Create simulation primitives library for std cells:<br />

>>vlib vlib adk adk<br />

>>vcom vcom $ADK/technology/adk.vhd<br />

$ADK/technology/ adk.vhd<br />

>>vcom vcom $ADK/technology/adk_comp.vhd<br />

$ADK/technology/ adk_comp.vhd<br />

�� Insert library/package declaration into netlist<br />

library library adk;; adk<br />

use use adk.adk_components.all;;<br />

adk.adk_components.all<br />

VITAL<br />

models of all<br />

ADK std cells<br />

�� Simulate in Modelsim, Modelsim,<br />

using “do do file” file or test bench from<br />

original behavioral simulation<br />

– results results should should match match


Post-synthesis Post synthesis timing analysis<br />

�� Leonardo can generate SDF (std. delay format) file with<br />

technology-specific, technology specific, VITAL-compliant VITAL compliant timing parameters.<br />

(CELLTYPE "dffr " dffr") ")<br />

(INSTANCE Q_0_EXMPLR_EXMPLR)<br />

(DELAY<br />

(ABSOLUTE<br />

(PORT D (::0.00) (::0.00))<br />

(PORT CLK (::0.00) (::0.00))<br />

(PORT R (::0.00) (::0.00))<br />

(IOPATH CLK Q (::0.40) (::0.47))<br />

(IOPATH R Q (::0.00) (::0.55))<br />

(IOPATH CLK QB (::0.45) (::0.36))<br />

(IOPATH R QB (::0.53) (::0.00))))<br />

(TIMINGCHECK<br />

(SETUP D (posedge ( posedge CLK) (0.47))<br />

(HOLD D (posedge ( posedge CLK) (-0.06)))) ( 0.06))))


<strong>Design</strong> for test & test generation<br />

�� Consider test during the design phase<br />

– Test design more difficult after design frozen<br />

�� Basic steps:<br />

– <strong>Design</strong> for test (DFT) – insert test points, scan<br />

chains, etc. to improve testability<br />

– Insert built-in built in self-test self test (BIST) circuits<br />

– Generate test patterns (ATPG)<br />

– Determine fault coverage (Fault Simulation)


DFT & test design flow<br />

Memory<br />

& Logic<br />

BIST Boundary<br />

Scan<br />

Internal<br />

Scan <strong>Design</strong><br />

ATPG


DFTadvisor/FastScan <strong>Design</strong> <strong>Flow</strong><br />

DFT/ATPG<br />

Library:<br />

adk.atpg<br />

count4.vhd<br />

count4_0.vhd<br />

count4.v<br />

count4_scan.v<br />

Source: FlexTest Manual


VHDL/Verilog<br />

Netlist With<br />

Scan Elements<br />

<strong>ASIC</strong> DFT <strong>Flow</strong><br />

DFT Advisor<br />

Synthesized VHDL/Verilog Netlist<br />

Fastscan/<br />

Flextest<br />

Insert Internal<br />

Scan Circuitry<br />

Generate/Verify<br />

Test Vectors<br />

Test Pattern File<br />

ATPG Library<br />

adk.atpg


Example DFTadvisor session<br />

�� Invoke:<br />

– dftadvisor –verilog verilog count4.v –lib lib $ADK/technology/adk.atpg<br />

$ADK/technology/ adk.atpg<br />

�� Implement scan with defaults:<br />

(full scan, mux-DFF mux DFF scan elements)<br />

– set system mode setup<br />

– analyze control signals –auto auto<br />

– set system mode dft<br />

– run<br />

– insert test logic<br />

– write netlist count4_scan.v –verilog verilog<br />

– write atpg setup count4_scan<br />

(creates (creates count4_scan.dofile for for ATPG ATPG in in Fastscan))<br />

Fastscan


count4 – without scan design


count4 – scan inserted by DFTadvisor


�� Invoke:<br />

ATPG with FastScan<br />

(full-scan (full scan circuit)<br />

– fastscan –verilog verilog count4.v –lib lib $ADK/technology/adk.atpg<br />

$ADK/technology/ adk.atpg<br />

�� Generate test pattern file:<br />

– dofile count4_scan.dofile (defines scan path & procedure)<br />

– set system mode atpg<br />

– create patterns –auto auto (generate test patterns)<br />

– save patterns<br />

Note: “count4_scan.dofile” created by DFTadvisor


Test file: scan chain definition and<br />

load/unload procedures<br />

scan_group "grp1" =<br />

scan_chain "chain1" =<br />

scan_in = "/scan_in1";<br />

scan_out = "/output[3]";<br />

length = 4;<br />

end;<br />

procedure shift "grp1_load_shift" =<br />

force_sci "chain1" 0;<br />

force "/clock" 1 20;<br />

force "/clock" 0 30;<br />

period 40;<br />

end;<br />

procedure shift "grp1_unload_shift" =<br />

measure_sco "chain1" 10;<br />

force "/clock" 1 20;<br />

force "/clock" 0 30;<br />

period 40;<br />

end;<br />

procedure load "grp1_load" =<br />

force "/clear" 0 0;<br />

force "/clock" 0 0;<br />

force "/scan_en "/ scan_en" " 1 0;<br />

apply "grp1_load_shift" 4 40;<br />

end;<br />

procedure unload "grp1_unload" =<br />

force "/clear" 0 0;<br />

force "/clock" 0 0;<br />

force "/scan_en "/ scan_en" " 1 0;<br />

apply "grp1_unload_shift" 4 40;<br />

end;<br />

end;


Generated scan-based scan based test<br />

// send a pattern through the scan chain<br />

CHAIN_TEST =<br />

pattern = 0;<br />

apply "grp1_load" 0 = (use grp1_load procedure)<br />

chain "chain1" = "0011"; (pattern to scan in)<br />

end;<br />

apply "grp1_unload" 1 = (use grp1_unload procedure)<br />

chain "chain1" = "1100"; (pattern scanned out)<br />

end;<br />

end;<br />

// one of 14 patterns for the counter circuit<br />

pattern = 0; (pattern #)<br />

apply "grp1_load" 0 = (load scan chain)<br />

chain "chain1" = "1000"; (scan-in (scan in pattern)<br />

end;<br />

force "PI" "00110" 1; (PI pattern)<br />

measure "PO" "0010" 2; (expected POs)<br />

pulse "/clock" 3; (normal op. cycle)<br />

apply "grp1_unload" 4 = (read scan chain)<br />

chain "chain1" = "0110"; (expected pattern)<br />

end;


<strong>ASIC</strong> Physical <strong>Design</strong> (Standard Cell)<br />

Generate<br />

Mask Data<br />

Std. Cell<br />

Layouts<br />

Libraries<br />

Process Data<br />

<strong>Design</strong> Rules<br />

IC Mask Data<br />

(can also do full custom layout)<br />

Component-Level Netlist (EDDM format)<br />

<strong>Design</strong> Rule<br />

Check<br />

Floorplan<br />

Chip/Block<br />

Place & Route<br />

Std. Cells<br />

ICblocks<br />

Backannotate<br />

Schematic<br />

Mach TA/Eldo Simulation Model<br />

<strong>Mentor</strong> <strong>Graphics</strong><br />

“IC Station”<br />

(adk_ic)<br />

Layout vs.<br />

Schematic<br />

Check<br />

Calibre Calibre Calibre


Cell-Based Cell Based IC


Cell-Based Cell Based Block


Basic standard<br />

Cell layout<br />

Source: Weste “CMOS VLSI <strong>Design</strong>”


Preparation for Layout<br />

1. Use <strong>Design</strong> Architect-IC Architect IC to convert Verilog netlist to<br />

<strong>Mentor</strong> <strong>Graphics</strong> EDDM netlist format<br />

– Invoke <strong>Design</strong> Architect-IC<br />

Architect IC ((adk_daic adk_daic))<br />

– On menu bar, select File File > > Import Import Verilog Verilog<br />

�� Netlist file: count4.v count4.v (the (the Verilog Verilog netlist)) netlist<br />

�� Output directory: count4 count4 (for the EDDM netlist) netlist<br />

�� Mapping file $ADK/technology/adk_map.vmp<br />

$ADK/technology/ adk_map.vmp<br />

2. Open the generated schematic for viewing<br />

– Click Schematic Schematic in DA-IC DA IC palette<br />

– Select schematic in directory named above (see next slide)<br />

– Click Update Update LVS LVS in the schematic palette to create a netlist to<br />

be used later by “Calibre Calibre”<br />

3. Create design viewpoints for ICstation tools<br />

– adk_dve adk_dve count4 count4 ––t t tsmc035 tsmc035 (V.P V.P’s: : layout, lvs, lvs,<br />

sdl, sdl,<br />

tsmc035)<br />

�� Can also create gate/transistor schematics directly in<br />

DA-IC DA IC using components from the ADK library


DA-IC DA IC generated schematic


Eldo simulation from DA-IC DA IC<br />

�� Run simulations from within DA-IC DA IC<br />

– Eldo, Eldo,<br />

ADVance ADVance MS, MS,<br />

Mach Mach TA TA<br />

�� DA-IC DA IC invokes a “netlister netlister” to create a<br />

circuit model from the schematic<br />

– SPICE model for Eldo Eldo & Mach Mach TA TA<br />

�� Eldo analyses, forces, probes, etc. same<br />

as SPICE<br />

�� View results in EZwave EZwave or Xelga<br />

Xelga


Eldo input and output files<br />

-Netlist<br />

-Simulation cmds<br />

-Stimulus


SPICE “circuit” file generated by DA-IC<br />

Force values (created interactively)<br />

From ADK<br />

library<br />

SPICE netlist for modulo7 counter


Eldo simulation of modulo7 counter<br />

(transient analysis)


Create a std-cell std cell based logic block<br />

in IC Station<br />

�� Invoke: adk_ic adk_ic<br />

�� In IC Station palette, select: Create Create Cell Cell<br />

– Cell name: count4 count4<br />

– Attach library: $ADK/technology/ic/process/tsmc035<br />

– Process: $ADK/technology/ic/process/tsmc035<br />

– Rules file: $ADK/technology/ic/process/tsmc035.rules<br />

– Angle mode: 45 45<br />

– Cell type: block block<br />

– Select With With connectivity<br />

connectivity<br />

– EDDM schematic viewpoint: count4/layout<br />

count4/layout<br />

– Logic loading options: flat<br />

flat


Create Cell dialog box


Auto-”floorplan<br />

Auto floorplan” the block<br />

place place & & route route > > autofp<br />

autofp


Auto-place Auto place the std cells<br />

Autoplc Autoplc > > StdCel<br />

StdCel


Auto-place Auto place “ports<br />

ports” ((Autoplc Autoplc > > Ports) Ports)<br />

Signal connections on cell boundaries


AutoRoute all nets<br />

(hand-route (hand route any unrouted “overflows overflows”)<br />

Then: Add > Port Text to copy port names from schematic – for Calibre


Layout design rule check (DRC)<br />

�� Technology-specific Technology specific design rules specify<br />

minimum sizes, spacing, etc. of features<br />

to ensure reliable fabrication<br />

– <strong>Design</strong> rules file specified at startup<br />

Ex. tsmc035.rules<br />

tsmc035.rules<br />

�� From main palette, select ICrules<br />

– Click Check Check and then OK OK in prompt box<br />

(can optionally select a specific area to check)<br />

– Rules checked in numeric order


Common errors detected by DRC<br />

�� To fix, click on First First in palette to highlight first<br />

error<br />

– Error is highlighted in the layout<br />

– Click View View to zoom in to the error (see next)<br />

– Example: DRC9_2: Metal2 spacing = 3L<br />

– Fix by drawing a rectangle of metal2 to fill in the gap<br />

between contacts that should be connected<br />

�� Click Next Next to go to next error, until all are fixed<br />

NOTE: There can be no DRC errors if MOSIS is to<br />

fabricate the chip – they will run their own DRC.


Error: DRC9_2 metal2 spacing = 3L<br />

Draw<br />

rectangle<br />

of metal2<br />

to fill gap


Layout vs schematic check<br />

Calibre Interactive LVS<br />

�� From ICstation menu: Calibre Calibre > > Run Run LVS LVS<br />

– In popup, Calibre location: $MGC_HOME/../Calibre<br />

$MGC_HOME/../ Calibre<br />

– Rules: $ADK/technology/ic/process/tsmc035.calibre.rules<br />

– Input: count4.src.net count4.src.net (previously created in DA-IC) DA IC)<br />

– H-cells: cells: $ADK/technology/adk.hcell<br />

$ADK/technology/ adk.hcell (hierarchical cells)<br />

– Extracted file: count4.lay.net<br />

count4.lay.net<br />

�� Compares extracted transistor-level<br />

transistor level netlist vs.<br />

netlist saved in DA-IC DA IC


Post-layout Post layout parameter extraction<br />

Calibre Interactive PEX<br />

�� Extract Spice netlist, netlist,<br />

including parasitic RC<br />

– Simulate in Eldo or MachTA<br />

�� ICstation menu: Calibre>Run Calibre>Run<br />

PEX PEX<br />

– Options Options similar similar to to Calibre Calibre LVS LVS<br />

– Extraction Extraction options: options:<br />

�� lumped lumped C C + + coupling coupling cap’’ss cap<br />

�� distributed distributed RC RC<br />

�� distributed distributed RC RC + + coupling coupling cap’’ss cap<br />

– Output file: count4.pex.netlist


Post-layout Post layout simulation with MachTA<br />

�� MachTA is an accelerated Spice simulator<br />

– Digital & mixed-signal mixed signal circuits<br />

– Analyze timing effects pre- pre and post-layout post layout<br />

�� SPICE netlists with parasitic R/C<br />

– Execute test vector file to verify functionality<br />

�� Algorithms support large designs<br />

– Partition design, simulate only partitions with changes<br />

– Combine time-driven time driven & event-driven event driven operation<br />

– Solves linearized models using a proprietary highperformance,<br />

graph-theory based, matrix solution<br />

algorithm


Mach TA flow diagram<br />

$ADK/technology/mta/tsmc035<br />

SPICE<br />

netlist


Post-layout Post layout simulation with Mach TA<br />

(netlist netlist extracted by Calibre PEX)<br />

�� Prepare netlist<br />

netlist (remove subcircuits for Mach TA)<br />

– Extracted netlist = count4.pex.netlist<br />

– Command: $ADK/bin/mta_prep<br />

$ADK/bin/ mta_prep count4 count4<br />

– Creates SPICE file: count4.sp count4.sp<br />

�� Invoke Mach TA:<br />

ana ana - command file to initialize Anacad SW<br />

mta mta ––ezw ezw ––t t $ADK/technology/mta/tsmc035 count4.sp count4.sp<br />

� Mach PA (mpa) does current & power analysis


Sample Mach TA “dofile dofile”<br />

(transient analysis)<br />

Signals to observe in EZwave<br />

plot v(clk) v(clk)<br />

v(q[2]) v(q[1]) v(q[0])<br />

measure rising TRIG v(clk) v(clk)<br />

VAL=2.5v RISE=1 TARG v(q[0]) VAL=2.5v<br />

l load<br />

l reset<br />

h count<br />

Measure time from rising edge of clk (TRIGger)<br />

l clk<br />

to 1st rising edge of q[0] (TARGet) - voltages<br />

run 5 ns<br />

h reset<br />

h clk<br />

Drive signals low/high (Lsim format)<br />

run 5 ns<br />

l clk<br />

run 5 ns<br />

Simulate for 5 ns<br />

h clk<br />

run 5 ns<br />

Command to execute: dofile file.do


Double-click<br />

signal name<br />

to display.<br />

EZwave waveform viewer<br />

(results for previous dofile) dofile


Alternative Mach TA “dofile dofile”<br />

(same result as previous example)<br />

plot v(clk) v(clk)<br />

v(q[2]) v(q[1]) v(q[0])<br />

measure rising TRIG v(clk) v(clk)<br />

VAL=2.5v RISE=1 TARG v(q[0])<br />

VAL=2.5v<br />

vpulse Vclk clk 0 pulse(0 3.3 10n .05n .05n 10n 20n)<br />

v-levels delay rise fall width period<br />

l load<br />

l reset<br />

Nodes to which<br />

h count<br />

run 5 ns<br />

source connected<br />

Periodic pulses<br />

h reset<br />

run 200 ns<br />

Voltage source name


Mach TA – test vector file<br />

�� Verify design functionality/behavior<br />

– apply test vectors<br />

– capture outputs<br />

– compare outputs to expected result<br />

– vectors/outputs from behavioral simulation<br />

�� Command to execute a test vector file:<br />

run run ––tvend tvend tvfile.tv tvfile.tv<br />

test vector file (next slide)


Test vector file format<br />

# Test vector file for modulo7 counter<br />

CODEFILE<br />

UNITS ps<br />

RISE_TIME 50<br />

FALL_TIME 50<br />

signal order within vectors<br />

Header<br />

INPUTS clk,reset,load,count,i[2],i[1],i[0];<br />

OUTPUTS q[2] (to=max),q[1] (to=max),q[0] (to=max);<br />

CODING(ROM)<br />

RADIX 3;<br />

Vector format<br />

@0 X;<br />

@2000 0;<br />

@7000 0;<br />

@10000 5;<br />

Sample 5 fs before next vector<br />

@20000 5;<br />

@30000 6;<br />

@40000 6;<br />

@50000 0;<br />

@60000 0;<br />

….. ..<br />

END<br />

Vectors: @time expected_output<br />

Test vectors derived from behavioral simulation results


Behavioral simulation listing Corresponding Mach TA test vector file


Alternate test vector file<br />

(clock generated separately by voltage source)<br />

vpulse vclk clk 0<br />

pulse(0 3.3 10n .5n .5n 10n 20n)<br />

Can mix other simulation<br />

commands with test vector<br />

application.


Xilinx “ISE”<br />

Altera “Max Plus 2”<br />

Physical <strong>Design</strong> - FPGA<br />

User-Specified<br />

Constraints<br />

Component-Level Netlist<br />

Generate<br />

Programming<br />

Data<br />

Configuration File<br />

Map to FPGA<br />

LUTs, FFs, IOBs<br />

Place & Route<br />

Generate<br />

Timing Model<br />

Simulation Model<br />

FPGA/PLD<br />

Technology<br />

Files


Xilinx/Altera<br />

Xilinx/ Altera FPGA/CPLD <strong>Design</strong><br />

�� Technology files & libraries for front-end front end design with<br />

<strong>Mentor</strong> <strong>Graphics</strong> tools<br />

– Schematic symbols for <strong>Design</strong> <strong>Design</strong> Architect Architect<br />

– Simulation models for Quicksim Quicksim II, II, Quicksim Quicksim Pro Pro<br />

– Synthesis library for Leonardo Leonardo<br />

�� Vendor tools for back-end back end design<br />

(map, place, route, configure, timing)<br />

– Xilinx Integrated Integrated Software Software Environment Environment (ISE)<br />

– Altera Quartus Quartus II II & & Max+Plus2<br />

Max+Plus2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!