====== Signal assignment ... <= ..." ====== ===== signal_assignment_statement ===== [ label : ] target <= [ delay_mechanism ] waveform ; ===== Parents ===== * function_statement_part * procedure_statement_part * process_statement_part ===== Further definitions ===== ==== delay_mechanism ==== transport ''[ **reject** //time// _[[.:bnf#expression]] ] **inertial**'' ==== target ==== * [[.:bnf#name]] * [[.:bnf#aggregate]] ==== waveform ==== ''[[.:bnf#waveform_element]] { , waveform_element }'' unaffected ===== Comments ===== The keyword **unaffected** is allowed only in concurrent signal assignments. The default delay mechanism is **inertial** . With **transport** all pulses are transmitted. With **inertial** only those pulses are transmitted, with width is greater than the a given limit. This limit is given by the value after **reject** or the first time value in the waveform. The value after **reject** must not be greater than the first time value of the waveform. ===== Examples ===== The value of //B// is assigned to signal //A// after 5 ns. In the first example the inertial delay model is used, in the second example the transport delay model is used. A <= B AFTER 5 ns; A <= TRANSPORT B AFTER 5 ns; ---- A waveform is assigned to signal //data// , according to which //data// receives the value //2// after 1 ns, the value //4// after 3ns and the value //10// after 8ns. data <= 2 AFTER 1 ns, 4 AFTER 3 ns, 10 AFTER 8 ns; ---- Signal A is assigned the result of the function //my_function// by the inertial delay model In the first example this happens after 5ns; in the second and third example this happens after a time which is determined by the constant delay. In the third example the value //0// is transferred to A 2ns after the preceding assignment. A <= my_function(data, 4) AFTER 5 ns; A <= my_function(data, 4) AFTER delay; A <= my_function(data, 4) AFTER delay, 0 AFTER delay + 2 ns; ---- These assignments are equivalent. The value of //input// is driven to //output// with a delay of 6 ns. Pulses smaller 6 ns are suppressed. ouptut <= input AFTER 6 ns; output <= INERTIAL input AFTER 6 ns; output <= REJECT 6 ns INERTIAL input AFTER 6 ns; ---- Here the pulse rejection limit is smaller than the first time expression in the waveform. All pulses smaller 3 ns are suppressed. output1 <= REJECT 3 ns INERTIAL input1 AFTER 6 ns; output2 <= REJECT 3 ns INERTIAL input2 AFTER 6 ns, NOT input2 AFTER 12 ns; ---- The signal assignments to //output1// and //ouput2// are equivalent to those of //ouput3// and //output4// . No pulses are suppressed. output1 <= TRANSPORT input1 AFTER 6 ns; output2 <= TRANSPORT input2 AFTER 6 ns, NOT input2 AFTER 12 ns; output3 <= REJECT 0 ns INERTIAL input1 AFTER 6 ns; output4 <= REJECT 0 ns INERTIAL input2 AFTER 6 ns NOT input2 AFTER 12 ns; ---- In VHDL'87 one had to choose the above assignments. Both variants are equivalent. -- VHDL'87 sig2 <= input AFTER 3 ns; output <= TRANSPORT sig2 AFTER 9 ns; -- VHDL'93 output <= REJECT 3 ns INERTIAL input AFTER 12 ns;