Simulation Seminar
Simulation Seminar
Simulation Seminar
Victor P. Nelson
Verify Behavior
Synthesis DFT/BIST & ATPG Test vectors Standard Cell IC & FPGA/CPLD DRC & LVS Verification Gate-Level Netlist Verify Function
Full-custom IC
Transistor-Level Netlist Verify Function & Timing
Physical Layout
Map/Place/Route
IC Mask Data
ADVance MS
Simulation Setup
ADVance MS
-Generic, -Technologyspecific
Component models
Simulator
Logic verification
Timing analysis
Results listings, graphical waveforms, Reports of measurements, result checks, constraint violations, etc.
Synthesis library of std. cells (LeonardoSpectrum) Design for test & ATPG (DFT Advisor, Flextest/Fastscan) Schematic capture (Design Architect-IC) IC physical design (standard cell & custom)
Floorplan, place & route (IC Station) Design rule check, layout vs schematic, parameter extraction (Calibre)
-- count4.vhd
ENTITY count4 IS PORT (clock,clear,enable,load_count : IN STD_LOGIC; D: IN unsigned(3 downto 0); Q: OUT unsigned(3 downto 0)); END count4; ARCHITECTURE rtl OF count4 IS SIGNAL int : unsigned(3 downto 0); BEGIN PROCESS(clear, clock, enable) BEGIN IF (clear = '1') THEN int <= "0000"; ELSIF (clock'EVENT AND clock='1') THEN IF (enable = '1') THEN IF (load_count = '1') THEN int <= D; ELSE int <= int + "01"; END IF; END IF; END IF; END PROCESS; Q <= int; END rtl;
Test stimulus:
Testbench: count4_bench.vhd
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; ENTITY count4_bench is end count4_bench; ARCHITECTURE test of count4_bench is component count4 PORT (clock,clear,enable,load_count : IN STD_LOGIC; D: IN unsigned(3 downto 0); Q: OUT unsigned(3 downto 0)); end component; for all: count4 use entity work.count4(behavior); signal clk : STD_LOGIC := '0'; signal clr, en, ld: STD_LOGIC; signal din, qout: unsigned(3 downto 0); begin C4: count4 port map(clk,clr,en,ld,din,qout); clk <= not clk after 10 ns; P1: process begin din <= "0101"; clr <= '1'; en <= '1'; ld <= '1'; wait for 10 ns; clr <= '0'; wait for 20 ns; ld <= '0'; wait for 200 ns; end process; end;
Alternative to do file
VHDL-AMS models
D/A converter Comparator
SPICE subcircuit
2.
3.
4.
5. 6.
Read input VHDL/Verilog file(s): count4.vhd Enter any constraints (clock freq, delays, etc.) Optimize for area/delay/effort level Write output file(s)
count4_0.vhd - VHDL netlist (for simulation) count4.v - Verilog netlist (for IC layout) count4.sdf - Standard delay format file (for timing) count4.edf - EDIF netlist (for Xilinx/Altera FPGA)
library IEEE; use IEEE.STD_LOGIC_1164.all; library adk; use adk.adk_components.all; -- ADDED BY VPN entity count4 is port ( clock : IN std_logic ; clear : IN std_logic ; enable : IN std_logic ; load_count : IN std_logic ; D : IN std_logic_vector (3 DOWNTO 0) ; Q : OUT std_logic_vector (3 DOWNTO 0)) ; end count4 ; architecture netlist of count4 is signal Q_3_EXMPLR, Q_2_EXMPLR, Q_1_EXMPLR, Q_0_EXMPLR, nx8, nx14, nx22, nx28, nx48, nx54, nx62, nx126, nx136, nx146, nx156, nx169, nx181, nx183, nx185, nx187, nx189: std_logic ; begin Q(3) <= Q_3_EXMPLR ; Q(2) <= Q_2_EXMPLR ; Q(1) <= Q_1_EXMPLR ; Q(0) <= Q_0_EXMPLR ; Q_0_EXMPLR_EXMPLR : dffr port map ( Q=>Q_0_EXMPLR, QB=>OPEN, D=>nx126, CLK=>clock, R=>clear); ix127 : mux21_ni port map ( Y=>nx126, A0=>Q_0_EXMPLR, A1=>nx8, S0=>enable ); ix9 : oai21 port map ( Y=>nx8, A0=>load_count, A1=>Q_0_EXMPLR, B0=>nx169 ); ix170 : nand02 port map ( Y=>nx169, A0=>D(0), A1=>load_count); Q_1_EXMPLR_EXMPLR : dffr port map ( Q=>Q_1_EXMPLR, QB=>OPEN, D=>nx136, CLK=>clock, R=>clear); ix137 : mux21_ni port map ( Y=>nx136, A0=>Q_1_EXMPLR, A1=>nx28, S0=> enable); ix29 : ao22 port map ( Y=>nx28, A0=>D(1), A1=>load_count, B0=>nx14, B1=> nx22); ix15 : or02 port map ( Y=>nx14, A0=>Q_0_EXMPLR, A1=>Q_1_EXMPLR); ix23 : aoi21 port map ( Y=>nx22, A0=>Q_1_EXMPLR, A1=>Q_0_EXMPLR, B0=> load_count); Q_2_EXMPLR_EXMPLR : dffr port map ( Q=>Q_2_EXMPLR, QB=>OPEN, D=>nx146, CLK=>clock, R=>clear); ix147 : mux21_ni port map ( Y=>nx146, A0=>Q_2_EXMPLR, A1=>nx48, S0=> enable); ix49 : oai21 port map ( Y=>nx48, A0=>nx181, A1=>nx183, B0=>nx189); ix182 : aoi21 port map ( Y=>nx181, A0=>Q_1_EXMPLR, A1=>Q_0_EXMPLR, B0=> Q_2_EXMPLR); ix184 : nand02 port map ( Y=>nx183, A0=>nx185, A1=>nx187); ix186 : inv01 port map ( Y=>nx185, A=>load_count); ix188 : nand03 port map ( Y=>nx187, A0=>Q_2_EXMPLR, A1=>Q_1_EXMPLR, A2=> Q_0_EXMPLR); ix190 : nand02 port map ( Y=>nx189, A0=>D(2), A1=>load_count); Q_3_EXMPLR_EXMPLR : dffr port map ( Q=>Q_3_EXMPLR, QB=>OPEN, D=>nx156, CLK=>clock, R=>clear); ix157 : mux21_ni port map ( Y=>nx156, A0=>Q_3_EXMPLR, A1=>nx62, S0=> enable); ix63 : mux21_ni port map ( Y=>nx62, A0=>nx54, A1=>D(3), S0=>load_count); ix55 : xnor2 port map ( Y=>nx54, A0=>Q_3_EXMPLR, A1=>nx187); end netlist ;
Post-synthesis simulation
(Leonardo-generated netlist)
Verify synthesized netlist matches behavioral model Create simulation primitives library for std cells:
>vlib adk >vcom $ADK/technology/adk.vhd >vcom $ADK/technology/adk_comp.vhd library adk; use adk.adk_components.all;
Simulate in Modelsim, using do file or test bench from original behavioral simulation results should match
2.
3.
Click Schematic in DA-IC palette Select schematic in directory named above (see next slide) Click Update LVS in the schematic palette to create a netlist to be used later by Calibre (V.Ps: layout, lvs, sdl, tsmc035)
Can also draw gate/transistor schematics directly in DAIC using components from the ADK library
count4 schematic
Accusim viewpoint
Schematic
Schematic-driven layout viewpoint (ICgraph) Transistor-level
Quicksim II viewpoint
Quicksim II operation
Constraint: same as Delay, but with detection of glitches, contraint violations, etc.
Value 0 1 X
Value State
Clock definition
Eldo analyses, forces, probes, etc. same as SPICE View results in EZwave or Xelga
$ADK/technology/mta/tsmc035
vpulse vclk clk 0 pulse(0 3.3 10n .5n .5n 10n 20n)
Summary