From 6c56d89c8db4830418bdd27d5c775a77d0ab462b Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 10 Feb 2013 16:26:03 +0100 Subject: wip --- vhdl/fmf/ff_package.vhd | 926 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 926 insertions(+) create mode 100644 vhdl/fmf/ff_package.vhd (limited to 'vhdl/fmf/ff_package.vhd') diff --git a/vhdl/fmf/ff_package.vhd b/vhdl/fmf/ff_package.vhd new file mode 100644 index 0000000..7a9e443 --- /dev/null +++ b/vhdl/fmf/ff_package.vhd @@ -0,0 +1,926 @@ +-------------------------------------------------------------------------------- +-- File name : ff_pacakge.vhd +-------------------------------------------------------------------------------- +-- Copyright (C) 1996-2007 Free Model Foundry http://www.FreeModelFoundry.com +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License version 2 as +-- published by the Free Software Foundation. +-- +-- MODIFICATION HISTORY : +-- +-- version | author | mod date | changes made +-- V2.0 rev3 23 MAR 96 Copyright added, general clean-up +-- V2.1 R. Steele 17 JUL 96 added LATN and LATNR tables +-- V2.2 rev3 23 JUL 96 per R.Steele and R. Munden, reversed +-- Latch enable definition +-- V2.3 R. Steele 97 MAY 16 Fixed JK FF tables for toggle mode +-- V2.4 R. Steele 97 JUN 02 Fixed JK FF tables for J K inputs +-- V2.5 R. Munden 97 NOV 09 Added LATNDFF and LATNDFFN tables +-- V2.6 R. Munden 98 APR 10 Added LATNDFFCEN and LATNDFFNCEN tables +-- made LATNDFF and LATNDFFN less pessimistic +-- for clk unknown cases +-- V2.7 R. Munden 99 JAN 30 Added DFFCEN table +-- V2.8 R. Munden 07 JUN 27 Fixed DREG and DREGQN tables +-------------------------------------------------------------------------------- +LIBRARY IEEE; +USE IEEE.Std_Logic_1164.ALL; +USE IEEE.VITAL_primitives.all; +USE IEEE.VITAL_timing.all; + +-------------------------------------------------------------------------------- +PACKAGE ff_package IS + + --************************************************************ + -- Key to table names: + -- FF[S or R] + -- [M]<# of mux inputs>_tab + --************************************************************ + + --------------------------------------------------------------- + -- STANDARD D_TYPE STATE TABLES + -- These tables have robust pessimism reduction that considers + -- the previous state of the D_f/f. + --------------------------------------------------------------- + + --------------------------------------------------------------- + -- D-flip/flop with Set and Reset both active high + --------------------------------------------------------------- + CONSTANT DFFSR_tab : VitalStateTableType := ( + + -- -------INPUTS-----------|PREV-|-OUTPUT-- + -- Viol CLK D S R | QI | Q' -- + ---------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '0', '1', '1'), -- set unknown + ( '-', '/', '1', 'X', '0', '1', '1'), -- set unknown + ( '-', '-', '-', 'X', '-', '-', 'X'), -- set unknown + ( '-', 'B', '-', '0', 'X', '0', '0'), -- reset unknown + ( '-', '/', '0', '0', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '1', '1', '-', 'X'), -- both asserted + ( '-', '-', '-', '1', '0', '-', '1'), -- set asserted + ( '-', '-', '-', '0', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '0', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '0', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '0', '-', 'X'), -- clk unknown + ( '-', '/', '0', '0', '0', '-', '0'), -- active clock edge + ( '-', '/', '1', '0', '0', '-', '1'), -- active clock edge + ( '-', '/', '-', '0', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Set and Reset both active high and active-low clk + --------------------------------------------------------------- + CONSTANT DFFNSR_tab : VitalStateTableType := ( + + -- -------INPUTS-----------|PREV-|-OUTPUT-- + -- Viol CLK D S R | QI | Q' -- + ---------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '0', '1', '1'), -- set unknown + ( '-', '\', '1', 'X', '0', '1', '1'), -- set unknown + ( '-', '-', '-', 'X', '-', '-', 'X'), -- set unknown + ( '-', 'B', '-', '0', 'X', '0', '0'), -- reset unknown + ( '-', '\', '0', '0', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '1', '1', '-', 'X'), -- both asserted + ( '-', '-', '-', '1', '0', '-', '1'), -- set asserted + ( '-', '-', '-', '0', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '0', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '0', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '0', '-', 'X'), -- clk unknown + ( '-', '\', '0', '0', '0', '-', '0'), -- active clock edge + ( '-', '\', '1', '0', '0', '-', '1'), -- active clock edge + ( '-', '\', '-', '0', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Reset active high + --------------------------------------------------------------- + CONSTANT DFFR_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '0', '0'), -- reset unknown + ( '-', '/', '0', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '-', 'X'), -- clk unknown + ( '-', '/', '0', '0', '-', '0'), -- active clock edge + ( '-', '/', '1', '0', '-', '1'), -- active clock edge + ( '-', '/', '-', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Reset active high and active-low clock + --------------------------------------------------------------- + CONSTANT DFFNR_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '0', '0'), -- reset unknown + ( '-', '\', '0', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '-', 'X'), -- clk unknown + ( '-', '\', '0', '0', '-', '0'), -- active clock edge + ( '-', '\', '1', '0', '-', '1'), -- active clock edge + ( '-', '\', '-', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Reset active high, active-low clock, and + -- inverting outputs + --------------------------------------------------------------- + CONSTANT DFFNRQN_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '1', '1'), -- reset unknown + ( '-', '\', '0', 'X', '1', '1'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '1', '-', '1'), -- reset asserted + ( '-', 'X', '0', '0', '1', '1'), -- clk unknown + ( '-', 'X', '1', '0', '0', '0'), -- clk unknown + ( '-', 'X', '-', '0', '-', 'X'), -- clk unknown + ( '-', '\', '0', '0', '-', '1'), -- active clock edge + ( '-', '\', '1', '0', '-', '0'), -- active clock edge + ( '-', '\', '-', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + --------------------------------------------------------------- + -- D-flip/flop with Reset active low + --------------------------------------------------------------- + CONSTANT DFFRN_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '0', '0'), -- reset unknown + ( '-', '/', '0', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '0', '-', '0'), -- reset asserted + ( '-', 'X', '0', '1', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '1', '-', 'X'), -- clk unknown + ( '-', '/', '0', '1', '-', '0'), -- active clock edge + ( '-', '/', '1', '1', '-', '1'), -- active clock edge + ( '-', '/', '-', '1', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Reset active low and active-low clock + --------------------------------------------------------------- + CONSTANT DFFNRN_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '0', '0'), -- reset unknown + ( '-', '\', '0', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '0', '-', '0'), -- reset asserted + ( '-', 'X', '0', '1', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '1', '-', 'X'), -- clk unknown + ( '-', '\', '0', '1', '-', '0'), -- active clock edge + ( '-', '\', '1', '1', '-', '1'), -- active clock edge + ( '-', '\', '-', '1', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Set active high + --------------------------------------------------------------- + CONSTANT DFFS_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D S | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '1', '1'), -- set unknown + ( '-', '/', '1', 'X', '1', '1'), -- set unknown + ( '-', '-', '-', 'X', '-', 'X'), -- set unknown + ( '-', '-', '-', '1', '-', '1'), -- set asserted + ( '-', 'X', '0', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '-', 'X'), -- clk unknown + ( '-', '/', '0', '0', '-', '0'), -- active clock edge + ( '-', '/', '1', '0', '-', '1'), -- active clock edge + ( '-', '/', '-', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Set active high and active-low clock + --------------------------------------------------------------- + CONSTANT DFFNS_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D S | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '1', '1'), -- set unknown + ( '-', '\', '1', 'X', '1', '1'), -- set unknown + ( '-', '-', '-', 'X', '-', 'X'), -- set unknown + ( '-', '-', '-', '1', '-', '1'), -- set asserted + ( '-', 'X', '0', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '-', 'X'), -- clk unknown + ( '-', '\', '0', '0', '-', '0'), -- active clock edge + ( '-', '\', '1', '0', '-', '1'), -- active clock edge + ( '-', '\', '-', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Set active low + --------------------------------------------------------------- + CONSTANT DFFSN_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D S | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '1', '1'), -- set unknown + ( '-', '/', '1', 'X', '1', '1'), -- set unknown + ( '-', '-', '-', 'X', '-', 'X'), -- set unknown + ( '-', '-', '-', '0', '-', '1'), -- set asserted + ( '-', 'X', '0', '1', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '1', '-', 'X'), -- clk unknown + ( '-', '/', '0', '1', '-', '0'), -- active clock edge + ( '-', '/', '1', '1', '-', '1'), -- active clock edge + ( '-', '/', '-', '1', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with Set active low and active-low clock + --------------------------------------------------------------- + CONSTANT DFFNSN_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol CLK D S | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', 'X', '1', '1'), -- set unknown + ( '-', '\', '1', 'X', '1', '1'), -- set unknown + ( '-', '-', '-', 'X', '-', 'X'), -- set unknown + ( '-', '-', '-', '0', '-', '1'), -- set asserted + ( '-', 'X', '0', '1', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '1', '-', 'X'), -- clk unknown + ( '-', '\', '0', '1', '-', '0'), -- active clock edge + ( '-', '\', '1', '1', '-', '1'), -- active clock edge + ( '-', '\', '-', '1', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with 2-input mux on D inputs with select + --------------------------------------------------------------- + CONSTANT DFFM2_tab : VitalStateTableType := ( + + ---------INPUTS-----------|PREV-|-OUTPUT-- + -- Viol CLK D0 D1 S | QI | Q' -- + --------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '-', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '-', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '1', '0', '0'), -- clk unknown + ( '-', 'X', '-', '1', '1', '1', '1'), -- clk unknown + ( '-', 'X', '0', '0', 'X', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', 'X', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', '-', '-', 'X'), -- clk unknown + ( '-', '/', '0', '-', '0', '-', '0'), -- active clock edge + ( '-', '/', '1', '-', '0', '-', '1'), -- active clock edge + ( '-', '/', '-', '-', '0', '-', 'X'), -- active clock edge + ( '-', '/', '-', '0', '1', '-', '0'), -- active clock edge + ( '-', '/', '-', '1', '1', '-', '1'), -- active clock edge + ( '-', '/', '-', '-', '1', '-', 'X'), -- active clock edge + ( '-', '/', '0', '0', 'X', '-', '0'), -- active clock edge + ( '-', '/', '1', '1', 'X', '-', '1'), -- active clock edge + ( '-', '/', '-', '-', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + -------------------------------------------------------------- + -- D-flip/flop with 2-input mux on D inputs with select, and + -- active-low clock + --------------------------------------------------------------- + CONSTANT DFFNM2_tab : VitalStateTableType := ( + + ---------INPUTS-----------|PREV-|-OUTPUT-- + -- Viol CLK D0 D1 S | QI | Q' -- + --------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '-', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '-', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '0', '1', '0', '0'), -- clk unknown + ( '-', 'X', '-', '1', '1', '1', '1'), -- clk unknown + ( '-', 'X', '0', '0', 'X', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', 'X', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', '-', '-', 'X'), -- clk unknown + ( '-', '\', '0', '-', '0', '-', '0'), -- active clock edge + ( '-', '\', '1', '-', '0', '-', '1'), -- active clock edge + ( '-', '\', '-', '-', '0', '-', 'X'), -- active clock edge + ( '-', '\', '-', '0', '1', '-', '0'), -- active clock edge + ( '-', '\', '-', '1', '1', '-', '1'), -- active clock edge + ( '-', '\', '-', '-', '1', '-', 'X'), -- active clock edge + ( '-', '\', '0', '0', 'X', '-', '0'), -- active clock edge + ( '-', '\', '1', '1', 'X', '-', '1'), -- active clock edge + ( '-', '\', '-', '-', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop + --------------------------------------------------------------- + CONSTANT DFF_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol CLK D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '/', '0', '-', '0'), -- active clock edge + ( '-', '/', '1', '-', '1'), -- active clock edge + ( '-', '/', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with active low clock enable + --------------------------------------------------------------- + CONSTANT DFFCEN_tab : VitalStateTableType := ( + + ----INPUTS------------|PREV-|-OUTPUT-- + -- Viol CEN CLK D | QI | Q' -- + ----------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', '-', 'X', '0', '0', '0'), -- clk unknown + ( '-', '-', 'X', '1', '1', '1'), -- clk unknown + ( '-', '-', 'X', '-', '-', 'X'), -- clk unknown + ( '-', 'X', '-', '0', '0', '0'), -- clken unknown + ( '-', 'X', '-', '1', '1', '1'), -- clken unknown + ( '-', 'X', '-', '-', '-', 'X'), -- clken unknown + ( '-', '0', '/', '0', '-', '0'), -- active clock edge + ( '-', '0', '/', '1', '-', '1'), -- active clock edge + ( '-', '0', '/', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with inverting outputs + --------------------------------------------------------------- + CONSTANT DFFQN_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol CLK D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '1', '1'), -- clk unknown + ( '-', 'X', '1', '0', '0'), -- clk unknown + ( '-', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '/', '0', '-', '1'), -- active clock edge + ( '-', '/', '1', '-', '0'), -- active clock edge + ( '-', '/', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with active-low clock + --------------------------------------------------------------- + CONSTANT DFFN_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol CLK D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '\', '0', '-', '0'), -- active clock edge + ( '-', '\', '1', '-', '1'), -- active clock edge + ( '-', '\', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- D-flip/flop with active-low clock and inverting outputs + --------------------------------------------------------------- + CONSTANT DFFNQN_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol CLK D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '1', '1'), -- clk unknown + ( '-', 'X', '1', '0', '0'), -- clk unknown + ( '-', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '\', '0', '-', '1'), -- active clock edge + ( '-', '\', '1', '-', '0'), -- active clock edge + ( '-', '\', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --************************************************************ + --------------------------------------------------------------- + -- J/K Flip/flop STATE TABLES + -- These tables have robust pessimism reduction that considers + -- the previous state of the J/K f/f. + --------------------------------------------------------------- + + --------------------------------------------------------------- + -- J/K flip/flop with Reset active high + --------------------------------------------------------------- + CONSTANT JKFFR_tab : VitalStateTableType := ( + + ----INPUTS-----------------|PREV-|-OUTPUT-- + -- Viol CLK J K R | QI | Q' -- + ---------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', '-', 'X', '0', '0'), -- reset unknown + ( '-', '/', '0', '-', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '-', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '-', '0', '0', '0'), -- clk unknown + ( '-', 'X', '-', '1', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', '0', '-', 'X'), -- clk unknown + ( '-', '/', '0', '0', '0', 'X', 'X'), -- active clock edge + ( '-', '/', '0', '0', '0', '0', '0'), -- active clock edge + ( '-', '/', '0', '0', '0', '1', '1'), -- active clock edge + ( '-', '/', '1', '1', '0', '0', '1'), -- active clock edge + ( '-', '/', '1', '1', '0', '1', '0'), -- active clock edge + ( '-', '/', '0', '1', '0', '-', '0'), -- active clock edge + ( '-', '/', '1', '0', '0', '-', '1'), -- active clock edge + ( '-', '/', '-', '-', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- J/K flip/flop with Reset active high and active-low clock + --------------------------------------------------------------- + CONSTANT JKFFNR_tab : VitalStateTableType := ( + + ----INPUTS-----------------|PREV-|-OUTPUT-- + -- Viol CLK J K R | QI | Q' -- + ---------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', '-', '-', 'X', '0', '0'), -- reset unknown + ( '-', '\', '0', '-', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '-', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '-', '0', '0', '0'), -- clk unknown + ( '-', 'X', '-', '1', '0', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', '0', '-', 'X'), -- clk unknown + ( '-', '\', '0', '0', '0', 'X', 'X'), -- active clock edge + ( '-', '\', '0', '0', '0', '0', '0'), -- active clock edge + ( '-', '\', '0', '0', '0', '1', '1'), -- active clock edge + ( '-', '\', '1', '1', '0', '0', '1'), -- active clock edge + ( '-', '\', '1', '1', '0', '1', '0'), -- active clock edge + ( '-', '\', '0', '1', '0', '-', '0'), -- active clock edge + ( '-', '\', '1', '0', '0', '-', '1'), -- active clock edge + ( '-', '\', '-', '-', '0', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- J/K flip/flop + --------------------------------------------------------------- + CONSTANT JKFF_tab : VitalStateTableType := ( + + ----INPUTS------------|PREV-|-OUTPUT-- + -- Viol CLK J K | QI | Q' -- + ----------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '-', '0', '0'), -- clk unknown + ( '-', 'X', '-', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', '-', 'X'), -- clk unknown + ( '-', '/', '0', '0', 'X', 'X'), -- active clock edge + ( '-', '/', '0', '0', '0', '0'), -- active clock edge + ( '-', '/', '0', '0', '1', '1'), -- active clock edge + ( '-', '/', '1', '1', '0', '1'), -- active clock edge + ( '-', '/', '1', '1', '1', '0'), -- active clock edge + ( '-', '/', '0', '1', '-', '0'), -- active clock edge + ( '-', '/', '1', '0', '-', '1'), -- active clock edge + ( '-', '/', '-', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- J/K flip/flop with active-low clock + --------------------------------------------------------------- + CONSTANT JKFFN_tab : VitalStateTableType := ( + + ----INPUTS------------|PREV-|-OUTPUT-- + -- Viol CLK J K | QI | Q' -- + ----------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '-', '0', '0'), -- clk unknown + ( '-', 'X', '-', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', '-', 'X'), -- clk unknown + ( '-', '\', '0', '0', 'X', 'X'), -- active clock edge + ( '-', '\', '0', '0', '0', '0'), -- active clock edge + ( '-', '\', '0', '0', '1', '1'), -- active clock edge + ( '-', '\', '1', '1', '0', '1'), -- active clock edge + ( '-', '\', '1', '1', '1', '0'), -- active clock edge + ( '-', '\', '0', '1', '-', '0'), -- active clock edge + ( '-', '\', '1', '0', '-', '1'), -- active clock edge + ( '-', '\', '-', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --************************************************************ + --------------------------------------------------------------- + -- Other flip/flop STATE TABLES + --------------------------------------------------------------- + --************************************************************ + + --------------------------------------------------------------- + -- Toggle flip/flop with no reset (unknown state -> 0 on clock) + -- Used where user doesn't care about phase of output, such as + -- for clock dividers + --------------------------------------------------------------- + CONSTANT TFF_tab : VitalStateTableType := ( + + ----INPUTS--|PREV-|-OUTPUT-- + -- Viol CLK | QI | Q' -- + ------------|-----|--------- + ( 'X', '-', '-', 'X'), -- timing violation + ( '-', 'X', '-', 'X'), -- clk unknown + ( '-', '/', 'X', '0'), -- active clock edge + ( '-', '/', '0', '1'), -- active clock edge + ( '-', '/', '1', '0'), -- active clock edge + ( '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Toggle flip/flop with Reset active high + --------------------------------------------------------------- + CONSTANT TFFR_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol CLK R | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', 'X', '0', '0'), -- reset unknown + ( '-', '/', 'X', '1', '0'), -- reset unknown + ( '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '1', '-', '0'), -- reset active + ( '-', 'X', '0', '-', 'X'), -- clk unknown + ( '-', '/', '0', 'X', 'X'), -- active clock edge + ( '-', '/', '0', '0', '1'), -- active clock edge + ( '-', '/', '0', '1', '0'), -- active clock edge + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Toggle flip/flop with Set and Reset both active high + --------------------------------------------------------------- + CONSTANT TFFSR_tab : VitalStateTableType := ( + + ----INPUTS-----------|PREV-|-OUTPUT-- + -- Viol CLK S R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'B', 'X', '0', '1', '1'), -- set unknown + ( '-', '/', 'X', '0', '0', '1'), -- set unknown + ( '-', '-', 'X', '-', '-', 'X'), -- set unknown + ( '-', 'B', '0', 'X', '0', '0'), -- reset unknown + ( '-', '/', '0', 'X', '1', '0'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '1', '1', '-', 'X'), -- both asserted + ( '-', '-', '1', '0', '-', '1'), -- set asserted + ( '-', '-', '0', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '0', '-', 'X'), -- clk unknown + ( '-', '/', '0', '0', 'X', 'X'), -- active clock edge + ( '-', '/', '0', '0', '0', '1'), -- active clock edge + ( '-', '/', '0', '0', '1', '0'), -- active clock edge + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Simple register without previous states + --------------------------------------------------------------- + CONSTANT DREG_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol CLK D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '0', '0'), -- clk unknown + ( '-', 'X', '1', '1', '1'), -- clk unknown + ( '-', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '/', '0', '-', '0'), -- active clock edge + ( '-', '/', '1', '-', '1'), -- active clock edge + ( '-', '/', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Simple register without previous states, inverting outputs + --------------------------------------------------------------- + CONSTANT DREGQN_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol CLK D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '1', '1'), -- clk unknown + ( '-', 'X', '1', '0', '0'), -- clk unknown + ( '-', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '/', '0', '-', '1'), -- active clock edge + ( '-', '/', '1', '-', '0'), -- active clock edge + ( '-', '/', '-', '-', 'X'), -- active clock edge + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch + --------------------------------------------------------------- + CONSTANT LAT_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol LEN D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '0', '0'), -- len unknown + ( '-', 'X', '1', '1', '1'), -- len unknown + ( '-', 'X', '-', '-', 'X'), -- len unknown + ( '-', '0', '0', '-', '0'), -- Latch transparent + ( '-', '0', '1', '-', '1'), -- Latch transparent + ( '-', '0', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch with LEN transparent high + --------------------------------------------------------------- + CONSTANT LATN_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol LEN D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '0', '0'), -- len unknown + ( '-', 'X', '1', '1', '1'), -- len unknown + ( '-', 'X', '-', '-', 'X'), -- len unknown + ( '-', '1', '0', '-', '0'), -- Latch transparent + ( '-', '1', '1', '-', '1'), -- Latch transparent + ( '-', '1', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch with inverting outputs + --------------------------------------------------------------- + CONSTANT LATQN_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol LEN D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '1', '1'), -- len unknown + ( '-', 'X', '1', '0', '0'), -- len unknown + ( '-', 'X', '-', '-', 'X'), -- len unknown + ( '-', '0', '0', '-', '1'), -- Latch transparent + ( '-', '0', '1', '-', '0'), -- Latch transparent + ( '-', '0', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch with LEN transparent high and inverting outputs + --------------------------------------------------------------- + CONSTANT LATNQN_tab : VitalStateTableType := ( + + ----INPUTS-------|PREV-|-OUTPUT-- + -- Viol LEN D | QI | Q' -- + -----------------|-----|--------- + ( 'X', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', '0', '1', '1'), -- len unknown + ( '-', 'X', '1', '0', '0'), -- len unknown + ( '-', 'X', '-', '-', 'X'), -- len unknown + ( '-', '1', '0', '-', '1'), -- Latch transparent + ( '-', '1', '1', '-', '0'), -- Latch transparent + ( '-', '1', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch with Reset active high + --------------------------------------------------------------- + CONSTANT LATR_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol LEN D R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', '0', '0', 'X', '0', '0'), -- reset unknown + ( '-', '1', '-', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '0', '0', '0'), -- len unknown + ( '-', 'X', '1', '0', '1', '1'), -- len unknown + ( '-', 'X', '-', '0', '-', 'X'), -- len unknown + ( '-', '0', '0', '0', '-', '0'), -- Latch transparent + ( '-', '0', '1', '0', '-', '1'), -- Latch transparent + ( '-', '0', '-', '0', '-', 'X'), -- Latch transparent, unknown D + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch with Reset active high; LEN transparent high + --------------------------------------------------------------- + CONSTANT LATNR_tab : VitalStateTableType := ( + + ---------INPUTS------|PREV-|-OUTPUT-- + -- Viol LEN D R | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', '1', '0', 'X', '0', '0'), -- reset unknown + ( '-', '0', '-', 'X', '0', '0'), -- reset unknown + ( '-', '-', '-', 'X', '-', 'X'), -- reset unknown + ( '-', '-', '-', '1', '-', '0'), -- reset asserted + ( '-', 'X', '0', '0', '0', '0'), -- len unknown + ( '-', 'X', '1', '0', '1', '1'), -- len unknown + ( '-', 'X', '-', '0', '-', 'X'), -- len unknown + ( '-', '1', '0', '0', '-', '0'), -- Latch transparent + ( '-', '1', '1', '0', '-', '1'), -- Latch transparent + ( '-', '1', '-', '0', '-', 'X'), -- Latch transparent, unknown D + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch/D-flip/flop with LEN transparent high and active high clock + --------------------------------------------------------------- + CONSTANT LATNDFF_tab : VitalStateTableType := ( + + ----INPUTS-----------|PREV-|-OUTPUT-- + -- Viol LEN CLK D | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', 'X', '0', '0', '0'), -- len and clk unknown + ( '-', 'X', 'X', '1', '1', '1'), -- len and clk unknown + ( '-', 'X', '-', '-', '-', 'X'), -- len unknown + ( '-', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '1', '-', '0', '-', '0'), -- Latch transparent + ( '-', '1', '-', '1', '-', '1'), -- Latch transparent + ( '-', '1', '-', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '0', 'X', '0', '0', '0'), -- clk unknown + ( '-', '0', 'X', '1', '1', '1'), -- clk unknown + ( '-', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '0', '/', '0', '-', '0'), -- ff active clock edge + ( '-', '0', '/', '1', '-', '1'), -- ff active clock edge + ( '-', '0', '/', '-', '-', 'X'), -- ff active clock edge unknown D + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch/D-flip/flop with LEN transparent high and active low clock + --------------------------------------------------------------- + CONSTANT LATNDFFN_tab : VitalStateTableType := ( + + ----INPUTS-----------|PREV-|-OUTPUT-- + -- Viol LEN CLK D | QI | Q' -- + ---------------------|-----|--------- + ( 'X', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', 'X', 'X', '0', '0', '0'), -- len and clk unknown + ( '-', 'X', 'X', '1', '1', '1'), -- len and clk unknown + ( '-', 'X', '-', '-', '-', 'X'), -- len unknown + ( '-', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '1', '-', '0', '-', '0'), -- Latch transparent + ( '-', '1', '-', '1', '-', '1'), -- Latch transparent + ( '-', '1', '-', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '0', 'X', '0', '0', '0'), -- clk unknown + ( '-', '0', 'X', '1', '1', '1'), -- clk unknown + ( '-', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '0', '\', '0', '-', '0'), -- ff active clock edge + ( '-', '0', '\', '1', '-', '1'), -- ff active clock edge + ( '-', '0', '\', '-', '-', 'X'), -- ff active clock edge unknown D + ( '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + + --------------------------------------------------------------- + -- Latch/D-flip/flop with LEN transparent high, active high clock + -- and active low clock enable + --------------------------------------------------------------- + CONSTANT LATNDFFCEN_tab : VitalStateTableType := ( + + ----INPUTS----------------|PREV-|-OUTPUT-- + -- Viol CEN LEN CLK D | QI | Q' -- + --------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', '-', 'X', 'X', '0', '0', '0'), -- len and clk unknown + ( '-', '-', 'X', 'X', '1', '1', '1'), -- len and clk unknown + ( '-', '-', 'X', '-', '-', '-', 'X'), -- len unknown + ( '-', '0', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', 'X', '0', '/', '0', '0', '0'), -- clken unknown + ( '-', 'X', '0', '/', '1', '1', '1'), -- clken unknown + ( '-', 'X', '0', '/', '-', '-', 'X'), -- clken unknown + ( '-', '-', '1', '-', '0', '-', '0'), -- Latch transparent + ( '-', '-', '1', '-', '1', '-', '1'), -- Latch transparent + ( '-', '-', '1', '-', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '0', '0', 'X', '0', '0', '0'), -- clk unknown + ( '-', '0', '0', 'X', '1', '1', '1'), -- clk unknown + ( '-', '0', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '0', '0', '/', '0', '-', '0'), -- ff active clock edge + ( '-', '0', '0', '/', '1', '-', '1'), -- ff active clock edge + ( '-', '0', '0', '/', '-', '-', 'X'), -- ff active clock edge unknown D + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + --------------------------------------------------------------- + -- Latch/D-flip/flop with LEN transparent high, active low clock + -- and active low clock enable + --------------------------------------------------------------- + CONSTANT LATNDFFNCEN_tab : VitalStateTableType := ( + + ----INPUTS----------------|PREV-|-OUTPUT-- + -- Viol CEN LEN CLK D | QI | Q' -- + --------------------------|-----|--------- + ( 'X', '-', '-', '-', '-', '-', 'X'), -- timing violation + ( '-', '-', 'X', 'X', '0', '0', '0'), -- len and clk unknown + ( '-', '-', 'X', 'X', '1', '1', '1'), -- len and clk unknown + ( '-', '-', 'X', '-', '-', '-', 'X'), -- len unknown + ( '-', '0', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', 'X', '0', '\', '0', '0', '0'), -- clken unknown + ( '-', 'X', '0', '\', '1', '1', '1'), -- clken unknown + ( '-', 'X', '0', '\', '-', '-', 'X'), -- clken unknown + ( '-', '-', '1', '-', '0', '-', '0'), -- Latch transparent + ( '-', '-', '1', '-', '1', '-', '1'), -- Latch transparent + ( '-', '-', '1', '-', '-', '-', 'X'), -- Latch transparent unknown D + ( '-', '0', '0', 'X', '0', '0', '0'), -- clk unknown + ( '-', '0', '0', 'X', '1', '1', '1'), -- clk unknown + ( '-', '0', '0', 'X', '-', '-', 'X'), -- clk unknown + ( '-', '0', '0', '\', '0', '-', '0'), -- ff active clock edge + ( '-', '0', '0', '\', '1', '-', '1'), -- ff active clock edge + ( '-', '0', '0', '\', '-', '-', 'X'), -- ff active clock edge unknown D + ( '-', '-', '-', '-', '-', '-', 'S') -- default + + ); -- end of VitalStateTableType definition + + + + --------------------------------------------------------------------------- + +END ff_package; -- cgit v1.2.3