====== Disconnection specification ======
===== disconnection_specification =====
disconnect guarded_signal_specification after time _expression ;
===== Parents =====
* entity_declarative_part
* architecture_declarative_part
* package
* block_declarative_part
===== Further definitions =====
==== guarded_signal_specification ====
''guarded _[[.:bnf#signal_list]] : [[.:bnf#type_mark]]''
==== expression ====
* [[.:bnf#relation]] { and relation }
* relation { or relation }
* relation { xor relation }
* relation [ nand relation ]
* relation [ nor relation ]
* relation { xnor relation }
===== Examples =====
//a// is declared as a guarded signal of the type **[[.:Signal declarations|REGISTER]]** . If during simulation a driver for the signal //a// is deactivated this happens with a delay of 1ns.
SIGNAL a : resolved_type REGISTER ;
DISCONNECT a : resolved_type AFTER 1 ns;
----
//sig1// , //sig2// and //sig3// are declared as guarded signals of the type **[[.:Signal declarations|REGISTER]]** . During simulation the drivers for //sig1// are switched off with a delay of 5 ns and those of the other signals with a delay of 8 ns.
SIGNAL sig1, sig2, sig3 :
resolved_bit REGISTER ;
DISCONNECT sig1 : resolved_bit
AFTER 5 ns ;
DISCONNECT OTHERS :
resolved_bit AFTER 8 ns ;
----
//bus_a// and //bus_b// are declared as guarded signals of the type **[[.:Signal declarations|bus]]** . During simulation the drivers for both signals are switched off with a delay of 6ns ( //delay// + 1 ns).
CONSTANT delay : time := 5 ns ;
SIGNAL bus_a, bus_b :
resolved_zbit_vector32 BUS ;
DISCONNECT ALL : resolved_zbit_vector32
AFTER delay + 1 ns ;
----
In the **PACKAGE** //fourval// a four-valued logic //mvl4// and a corresponding vector are defined.
The function //resolved// is declared. Consequently a 'resolved signal' can be derived as a **SUBTYPE** .
In the **PACKAGE BODY** the function //resolved// is described.
* If the input signal //choice// changes to //1// the signal driver of the first block is activated and passes the first input signal on to the output after 20 ns.
* If //choice// changes to //2// the second block passes the second input signal on the output after 18ns.
* As the first signal driver switches off only after 25 ns both drivers are active simultaneously for 7ns. The resulting signal is determined by the 'resolution function' of the output signal.
* If //choice// changes to a value other than //1// or //2// the last active driver switches off after 25 ns and the output signal changes to its default value (in this case 'Z') as it is declared as a **[[.:Signal declarations|bus]]** .
* If it were declared as a **[[.:Signal declarations|REGISTER]]** the last signal value would be kept.
PACKAGE fourval IS
TYPE mvl4 IS ('X','0','1','Z') ;
TYPE mvl4_vector IS ARRAY
(natural RANGE <>) OF mvl4 ;
FUNCTION resolved (a: mvl4_vector)
RETURN mvl4 ;
SUBTYPE mvl4_r IS resolved mvl4 ;
END fourval ;
PACKAGE BODY fourval IS
FUNCTION resolved (a: mvl4_vector)
RETURN mvl4 IS
VARIABLE result : mvl4 := 'Z' ;
-- Defaultwert: 'Z'
BEGIN
...
RETURN result ;
END resolved ;
END fourval ;
USE work.fourval.ALL ;
ENTITY mux_2_1 IS
PORT (in_signals : IN
mvl4_vector (1 TO 2) ;
choice : IN integer ;
out_signal : OUT mvl4_r BUS ) ;
END mux_2_1 ;
ARCHITECTURE with_guards OF mux_2_1 IS
DISCONNECT out_signal : mvl4_r
AFTER 25 ns ;
BEGIN
choice_1 : BLOCK (choice = 1)
BEGIN
out_signal <= GUARDED
in_signals(1) AFTER 20 ns ;
END BLOCK ;
choice_2 : BLOCK (choice = 2)
BEGIN
out_signal <= GUARDED in_signals(2)
AFTER 18 ns ;
END BLOCK ;
END with_guards ;