📄 orca_cmb.vhd
字号:
ARCHITECTURE v OF fadsu2 IS ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE; SIGNAL a0_ipd : std_logic := 'X'; SIGNAL a1_ipd : std_logic := 'X'; SIGNAL b0_ipd : std_logic := 'X'; SIGNAL b1_ipd : std_logic := 'X'; SIGNAL bci_ipd : std_logic := 'X'; SIGNAL con_ipd : std_logic := 'X';BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN VitalWireDelay (a0_ipd, a0, tipd_a0); VitalWireDelay (a1_ipd, a1, tipd_a1); VitalWireDelay (b0_ipd, b0, tipd_b0); VitalWireDelay (b1_ipd, b1, tipd_b1); VitalWireDelay (bci_ipd, bci, tipd_bci); VitalWireDelay (con_ipd, con, tipd_con); END BLOCK; -------------------- -- behavior section -------------------- VitalBehavior : PROCESS (a0_ipd, a1_ipd, b0_ipd, b1_ipd, bci_ipd, con_ipd) -- functionality results VARIABLE results1 : std_logic_vector(1 to 2) := (others => 'X'); VARIABLE results2 : std_logic_vector(1 to 2) := (others => 'X'); VARIABLE results3 : std_logic_vector(1 to 2) := (others => 'X'); VARIABLE results4 : std_logic_vector(1 to 2) := (others => 'X'); ALIAS bc0_zd : std_ulogic IS results1(1); ALIAS s0_zd : std_ulogic IS results1(2); ALIAS bco_zd : std_ulogic IS results2(1); ALIAS s1_zd : std_ulogic IS results2(2); -- output glitch detection VARIABLEs VARIABLE bco_GlitchData : VitalGlitchDataType; VARIABLE s0_GlitchData : VitalGlitchDataType; VARIABLE s1_GlitchData : VitalGlitchDataType; constant adsu_table : vitaltruthtabletype := ( -------------------------------------------- -- a b bci con | bco s -------------------------------------------- ('0', '0', '0', '1', '0', '0'), ('1', '0', '0', '1', '0', '1'), ('0', '1', '0', '1', '0', '1'), ('1', '1', '0', '1', '1', '0'), ('0', '0', '1', '1', '0', '1'), ('1', '0', '1', '1', '1', '0'), ('0', '1', '1', '1', '1', '0'), ('1', '1', '1', '1', '1', '1'), ('0', '0', '0', '0', '0', '1'), ('1', '0', '0', '0', '1', '0'), ('0', '1', '0', '0', '0', '0'), ('1', '1', '0', '0', '0', '1'), ('0', '0', '1', '0', '1', '0'), ('1', '0', '1', '0', '1', '1'), ('0', '1', '1', '0', '0', '1'), ('1', '1', '1', '0', '1', '0')); BEGIN IF (TimingChecksOn) THEN ----------------------------------- -- no timing checks for a comb gate ----------------------------------- END IF; ------------------------- -- functionality section ------------------------- results1 := vitaltruthtable ( truthtable => adsu_table, datain => (a0_ipd, b0_ipd, bci_ipd, con_ipd) ); results2 := vitaltruthtable ( truthtable => adsu_table, datain => (a1_ipd, b1_ipd, bc0_zd, con_ipd) ); ---------------------- -- path delay section ---------------------- VitalPathDelay01 ( OutSignal => bco, OutSignalName => "bco", OutTemp => bco_zd, Paths => (0 => (a0_ipd'last_event, tpd_a0_bco, TRUE), 1 => (a1_ipd'last_event, tpd_a1_bco, TRUE), 2 => (b0_ipd'last_event, tpd_b0_bco, TRUE), 3 => (b1_ipd'last_event, tpd_b1_bco, TRUE), 4 => (bci_ipd'last_event, tpd_bci_bco, TRUE), 5 => (con_ipd'last_event, tpd_con_bco, TRUE)), GlitchData => bco_GlitchData, Mode => OnDetect, XOn => XOn, MsgOn => MsgOn); VitalPathDelay01 ( OutSignal => s0, OutSignalName => "s0", OutTemp => s0_zd, Paths => (0 => (a0_ipd'last_event, tpd_a0_s0, TRUE), 1 => (a1_ipd'last_event, tpd_a1_s0, TRUE), 2 => (b0_ipd'last_event, tpd_b0_s0, TRUE), 3 => (b1_ipd'last_event, tpd_b1_s0, TRUE), 4 => (bci_ipd'last_event, tpd_bci_s0, TRUE), 5 => (con_ipd'last_event, tpd_con_s0, TRUE)), GlitchData => s0_GlitchData, Mode => OnDetect, XOn => XOn, MsgOn => MsgOn); VitalPathDelay01 ( OutSignal => s1, OutSignalName => "s1", OutTemp => s1_zd, Paths => (0 => (a0_ipd'last_event, tpd_a0_s1, TRUE), 1 => (a1_ipd'last_event, tpd_a1_s1, TRUE), 2 => (b0_ipd'last_event, tpd_b0_s1, TRUE), 3 => (b1_ipd'last_event, tpd_b1_s1, TRUE), 4 => (bci_ipd'last_event, tpd_bci_s1, TRUE), 5 => (con_ipd'last_event, tpd_con_s1, TRUE)), GlitchData => s1_GlitchData, Mode => OnDetect, XOn => XOn, MsgOn => MsgOn); END PROCESS;END v;------- cell inv -----LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.vital_timing.all;-- entity declaration --ENTITY inv IS GENERIC( TimingChecksOn : boolean := TRUE; XOn : boolean := FALSE; MsgOn : boolean := TRUE; InstancePath : string := "inv"; tpd_a_z : VitalDelayType01 := (0.01 ns, 0.01 ns); tipd_a : VitalDelayType01 := (0.0 ns, 0.0 ns)); PORT( a : IN std_logic; z : OUT std_logic); ATTRIBUTE Vital_Level0 OF inv : ENTITY IS TRUE;END inv;-- architecture body --LIBRARY ieee;USE ieee.vital_primitives.all;ARCHITECTURE v OF inv IS ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE; SIGNAL a_ipd : std_logic := 'X';BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN VitalWireDelay (a_ipd, a, tipd_a); END BLOCK; -------------------- -- behavior section -------------------- VitalBehavior : PROCESS (a_ipd) -- functionality results VARIABLE results : std_logic_vector(1 to 1) := (others => 'X'); ALIAS z_zd : std_ulogic IS results(1); -- output glitch detection VARIABLEs VARIABLE z_GlitchData : VitalGlitchDataType; BEGIN ------------------------- -- functionality section ------------------------- z_zd := (NOT a_ipd); ---------------------- -- path delay section ---------------------- VitalPathDelay01 ( OutSignal => z, OutSignalName => "z", OutTemp => z_zd, Paths => (0 => (a_ipd'last_event, tpd_a_z, TRUE)), GlitchData => z_GlitchData, Mode => OnDetect, XOn => XOn, MsgOn => MsgOn);END PROCESS;END v;------- cell mux21 -----LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.vital_timing.all;-- entity declaration --ENTITY mux21 IS GENERIC( TimingChecksOn : boolean := TRUE; XOn : boolean := FALSE; MsgOn : boolean := TRUE; InstancePath : string := "mux21"; tpd_d0_z : VitalDelayType01 := (0.01 ns, 0.01 ns); tpd_d1_z : VitalDelayType01 := (0.01 ns, 0.01 ns); tpd_sd_z : VitalDelayType01 := (0.01 ns, 0.01 ns); tipd_d0 : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_d1 : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_sd : VitalDelayType01 := (0.0 ns, 0.0 ns)); PORT( d0 : IN std_logic; d1 : IN std_logic; sd : IN std_logic; z : OUT std_logic); ATTRIBUTE Vital_Level0 OF mux21 : ENTITY IS TRUE;END mux21;-- architecture body --LIBRARY ieee;USE ieee.vital_primitives.all;ARCHITECTURE v OF mux21 IS ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE; SIGNAL d0_ipd : std_logic := 'X'; SIGNAL d1_ipd : std_logic := 'X'; SIGNAL sd_ipd : std_logic := 'X';BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN VitalWireDelay (d0_ipd, d0, tipd_d0); VitalWireDelay (d1_ipd, d1, tipd_d1); VitalWireDelay (sd_ipd, sd, tipd_sd); END BLOCK; -------------------- -- behavior section -------------------- VitalBehavior : PROCESS (d0_ipd, d1_ipd, sd_ipd) -- functionality results VARIABLE results : std_logic_vector(1 to 1) := (others => 'X'); ALIAS z_zd : std_ulogic IS results(1); -- output glitch detection VARIABLEs VARIABLE z_GlitchData : VitalGlitchDataType; BEGIN ------------------------- -- functionality section ------------------------- z_zd := vitalmux (data => (d1_ipd, d0_ipd), dselect => (0 => sd_ipd)); ---------------------- -- path delay section ---------------------- VitalPathDelay01 ( OutSignal => z, OutSignalName => "z", OutTemp => z_zd, Paths => (0 => (d0_ipd'last_event, tpd_d0_z, TRUE), 1 => (d1_ipd'last_event, tpd_d1_z, TRUE), 2 => (sd_ipd'last_event, tpd_sd_z, TRUE)), GlitchData => z_GlitchData, Mode => OnDetect, XOn => XOn, MsgOn => MsgOn);END PROCESS;END v;------- cell l6mux21 -----LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.vital_timing.all;-- entity declaration --ENTITY l6mux21 IS GENERIC( TimingChecksOn : boolean := TRUE; XOn : boolean := FALSE; MsgOn : boolean := TRUE; InstancePath : string := "l6mux21"; tpd_d0_z : VitalDelayType01 := (0.01 ns, 0.01 ns); tpd_d1_z : VitalDelayType01 := (0.01 ns, 0.01 ns); tpd_sd_z : VitalDelayType01 := (0.01 ns, 0.01 ns); tipd_d0 : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_d1 : VitalDelayType01 := (0.0 ns, 0.0 ns); tipd_sd : VitalDelayType01 := (0.0 ns, 0.0 ns)); PORT( d0 : IN std_logic; d1 : IN std_logic; sd : IN std_logic; z : OUT std_logic); ATTRIBUTE Vital_Level0 OF l6mux21 : ENTITY IS TRUE;END l6mux21;-- architecture body --LIBRARY ieee;USE ieee.vital_primitives.all;ARCHITECTURE v OF l6mux21 IS ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE; SIGNAL d0_ipd : std_logic := 'X'; SIGNAL d1_ipd : std_logic := 'X'; SIGNAL sd_ipd : std_logic := 'X';BEGIN --------------------- -- input path delays --------------------- WireDelay : BLOCK BEGIN VitalWireDelay (d0_ipd, d0, tipd_d0); VitalWireDelay (d1_ipd, d1, tipd_d1); VitalWireDelay (sd_ipd, sd, tipd_sd); END BLOCK; -------------------- -- behavior section -------------------- VitalBehavior : PROCESS (d0_ipd, d1_ipd, sd_ipd) -- functionality results VARIABLE results : std_logic_vector(1 to 1) := (others => 'X'); ALIAS z_zd : std_ulogic IS results(1); -- output glitch detection VARIABLEs VARIABLE z_GlitchData : VitalGlitchDataType; BEGIN ------------------------- -- functionality section ------------------------- z_zd := vitalmux (data => (d1_ipd, d0_ipd), dselect => (0 => sd_ipd)); ---------------------- -- path delay section ---------------------- VitalPathDelay01 ( OutSignal => z, OutSignalName => "z", OutTemp => z_zd, Paths => (0 => (d0_ipd'last_event, tpd_d0_z, TRUE), 1 => (d1_ipd'last_event, tpd_d1_z, TRUE), 2 => (sd_ipd'last_event, tpd_sd_z, TRUE)), GlitchData => z_GlitchData, Mode => OnDetect, XOn => XOn, MsgOn => MsgOn);END PROCESS;END v;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -