Timing Model VHDL uses the following simulation cycle

  • Slides: 19
Download presentation
Timing Model VHDL uses the following simulation cycle to model the stimulus and response

Timing Model VHDL uses the following simulation cycle to model the stimulus and response nature of digital hardware Start Simulation Update Signals Delay Execute Processes End Simulation

Delay Types All VHDL signal assignment statements prescribe an amount of time that must

Delay Types All VHDL signal assignment statements prescribe an amount of time that must transpire before the signal assumes its new value This prescribed delay can be in one of three forms: Transport -- prescribes propagation delay only Inertial -- prescribes propagation delay and minimum input pulse width Delta -- the default if no delay time is explicitly specified Input delay Output

Delta Delay A delta delay is a very small delay (infinitesimally). It does not

Delta Delay A delta delay is a very small delay (infinitesimally). It does not correspond to any real delay, and actual simulation time does not advance. Delta delay allows for ordering of events that occur at the same simulation time during a simulation. Each unit of simulation time can be considered to be composed of an infinite number of simulation time plus an integral multiple of delta delays.

Delta Delay Default signal assignment propagation delay if no delay is explicitly prescribed VHDL

Delta Delay Default signal assignment propagation delay if no delay is explicitly prescribed VHDL signal assignments do not take place immediately Delta is an infinitesimal VHDL time unit so that all signal assignments can result in signals assuming their values at a future time E. g. Output <= NOT Input; -- Output assumes new value in one delta cycle Supports a model of concurrent VHDL process execution Order in which processes are executed by simulator does not affect simulation output

Delta Delay An Example without Delta Delay What is the behavior of C? NAND

Delta Delay An Example without Delta Delay What is the behavior of C? NAND gate evaluated first: IN: 1 ->0 A: 0 ->1 B: 1 ->0 C: 0 ->0 AND gate evaluated first: IN: 1 ->0 A: 0 ->1 C: 0 ->1 B: 1 ->0 C: 1 ->0

Delta Delay An Example with Delta Delay What is the behavior of C? A

Delta Delay An Example with Delta Delay What is the behavior of C? A IN: 1>0 C B 1 Using delta delay scheduling Time 0 ns Delta 1 2 3 1 ns 4 Event IN: 1 ->0 eval INVERTER A: 0 ->1 eval NAND, AND B: 1 ->0 C: 0 ->1 eval AND C: 1 ->0

Transport Delay Transport delay must be explicitly specified I. e. keyword “TRANSPORT” must be

Transport Delay Transport delay must be explicitly specified I. e. keyword “TRANSPORT” must be used Signal will assume its new value after specified delay -- TRANSPORT delay example Output <= TRANSPORT NOT Input AFTER 10 ns; 0 5 10 15 20 25 30 35

Inertial delay model An input value must be stable for a specified pulse rejection

Inertial delay model An input value must be stable for a specified pulse rejection limit duration before the value is allowed to propagate to the output. Example: Z <= reject 4 ns inertial A after 10 ns; Default delay model.

Inertial Delay Provides for specification propagation delay and input pulse width, i. e. ‘inertia’

Inertial Delay Provides for specification propagation delay and input pulse width, i. e. ‘inertia’ of output: target <= [REJECT time_expression] INERTIAL waveform; Inertial delay is default and REJECT is optional : Output <= NOT Input AFTER 10 ns; -- Propagation delay and minimum pulse width are 10 ns 0 5 10 15 20 25 30 35

Inertial Delay (cont. ) Example of gate with ‘inertia’ smaller than propagation delay e.

Inertial Delay (cont. ) Example of gate with ‘inertia’ smaller than propagation delay e. g. Inverter with propagation delay of 10 ns which suppresses pulses shorter than 5 ns Output <= REJECT 5 ns INERTIAL NOT Input AFTER 10 ns; Input Output 0 5 10 15 20 25 30 35 Note: the REJECT feature is new to VHDL 1076 -1993

Signal Waveforms It is possible to assign multiple values to a signal, each with

Signal Waveforms It is possible to assign multiple values to a signal, each with a different delay value. For example: Phase 1 <= ‘ 0’, ‘ 1’ after 8 ns, ‘ 0’ after 13 ns, ‘ 1’ after 50 ns; A more general syntax: Signal object <= [transport | [ reject pulse_rejection_limit] inertial ] waveform-element, waveform-element;

Wait Statement: provides a way to suspend the execution of a process –process always

Wait Statement: provides a way to suspend the execution of a process –process always suspends after execution the last statement. –There are three basic forms of the wait statement. –wait on sensitivity list; –wait until boolean-expression; –wait for time-expression; –they may also combined in a single wait statement: on sensitivity-list until boolean-expression for time-expression; –wait

Wait Statement (cont. ) Examples: 1. wait on A, B, C; 2. wait until

Wait Statement (cont. ) Examples: 1. wait on A, B, C; 2. wait until A= B; 3. wait for 10 ns; 4. wait on clock for 20 ns; 5. wait until SUM >100 for 50 ms; – the process suspends for a maximum of 50 ms until the value of signal SUM is greater than 100. – If the Boolean condition is not satisfied for 50 ms, the process resumes from the statement following the wait statement

6. wait on clock until SUM> 100; –continue to wait if SUM <= 100

6. wait on clock until SUM> 100; –continue to wait if SUM <= 100 the process suspends for a maximum of 50 ms until the value of signal SUM is greater than 100. –If the Boolean condition is not satisfied for 50 ms, the process resumes from the statement following the wait statement

Wait Statement (cont. ) – It is possible for a process not to have

Wait Statement (cont. ) – It is possible for a process not to have an explicit sensitivity list – The process may have one or more wait statements - the process must have at least one wait statement; - otherwise, it will never get suspended (infinite loop)

Wait Statement (Example) process --no sensitivity list variable temp 1, temp 2: BIT; begin

Wait Statement (Example) process --no sensitivity list variable temp 1, temp 2: BIT; begin temp 1 : = A and B; temp 2 : = C and D; temp 1 : = temp 1 or temp 2; Z <= not temp 1 wait on A, B, C, D; --replaces the sensitivity list end process;

Wait example WAIT 0 : process begin wait on DATA; sig_A <= DATA; wait

Wait example WAIT 0 : process begin wait on DATA; sig_A <= DATA; wait for 0 ns; sig_B <= Sig_A; end process;

Null Statement Null Statement: is a sequential statement that does not cause any action

Null Statement Null Statement: is a sequential statement that does not cause any action to take place. - Execution will continues with the next statement – can be used in an if or in case statement The format: null;