02.12.2012 Views

Mentor Graphics ASIC Design Flow

Mentor Graphics ASIC Design Flow

Mentor Graphics ASIC Design Flow

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!