Title: Sequential Statements
1Sequential Statements
2Sequential Statements
- Il VHDL simula lo svolgersi in parallelo di varie
operazioni - Loggetto fondamentale e il PROCESS
- Un PROCESS contiene una serie di operazioni
sequenziali - Al suo interno la metodologia di programmazione
e di tipo sequenziale e pertanto familiare ai
programmatori - Tutte le operazioni racchiuse in un PROCESS
avvengono in un tempo (tempo di simulazione)
NULLO - I PROCESS sono tra loro concorrenti (operano in
parallelo) - Un PROCESS e un loop infinito e non esce mai
- Un PROCESS deve contenere unistruzione WAIT o
una SENSITIVITY LIST (per la sincronizzazione)
3Sequential Statements (es.)
Entity LOW_HIGH is port (a,b,c in
integer) end architecture BEHAV of LOW_HIGH
is begin L Process variable low integer
0 begin wait on a,b,c if a lt b then
lowa else lowb end if if c lt low then
low c end if end process H
Process variable high integer 0 begin wait
on a,b,c if a gt b then higha else highb
end if if c gt high then high c end if end
process end BEHAV
4Sequential Statements
- Le espressioni tipiche di operazioni sequenziali
sono - PROCESS Statement
- Variable Assignement
- IF Statement
- CASE Statement
- LOOP Statement
- WAIT Statement
- NEXT Statement
- EXIT Statement
- Subprograms
- ASSERT
5PROCESS Statements
label process (sensitivity list) subprogra
ms type constant variable other
declaration begin sequential statements end
process label
6VARIABLE Assignment
- Sintassi
- La variabile deve essere dichiarata a priori
- Deve essere dello stesso tipo dellassegnamento
- Le variabili sono LOCALI allinterno del PROCESS
target expression
a a b 123.0 c 010010 z x y
7SIGNAL Assignment
- Sintassi
- Lassegnazione di un segnale deve essere
sincronizzata o tramite un WAIT o con la
sensitivity list
target lt expression after delay
c lt 1 after 1ns b lt a z lt x y
8IF Assignment
if condition then seq_statement1 elsif
condition then seq_statement2 else
seq_statement3 end if
if (Z) then TD elsif (Y) then TC elsif (X)
then TB else TA end if
9CASE Assignment
case expression is when choise_1 gt
seq_of_assign_1 . . . when choise_n gt
seq_of_assign_n end case
case BCD is when 0000 gt LED
1111110 when 0001 gt LED 1100000 . .
. when others gt LED ------- end case
10CASE Assignment
- Casi particolari
- Certi sistemi richiedono esplicito il when
others! Anche se fisicamente la condizione non
sara mai raggiunta.
case expression is when c1 gt assign_1 when c2
c3 gt assign_2 when c4 to c9 gt
assign_3 when others gt assign_4 end case
11LOOP Statement
- E il modo classico per descrivere cicli
- Si possono usare sia FOR, WHILE o cicli infiniti
- I LOOPs possono essere nidificati uno
nellaltro
Label1 FOR i in 1 to 10 LOOP s1 s2 ...
sn END LOOP i1 Label2 WHILE (i lt 11)
LOOP s1 s2 ... sn i i1 END LOOP
12LOOP Statement
- Sebbene il PROCESS sia un LOOP infinito si puo
evidenziare il loop (per motivi di stile)
process begin initial_statements loop sequenti
al_statement end loop end process
13NEXT Statement
- Serve per bypassare una parte di un LOOP
- Le LABEL servono per identificare univocamente
il loop in caso di loop annidati
L2 WHILE j lt 20 LOOP L1 FOR i in 1 to 10
LOOP IF (a(i) 0) THEN NEXT L1 END IF q(i)
a(i) END LOOP L1 END LOOP L2
14EXIT Statement
- Serve per uscire da un LOOP prima che questo
abbia raggiunto la sua logica fine
L1 FOR i in 1 to 10 LOOP IF (a(i) 0) THEN
EXIT END IF q(i) a(i) END LOOP L1
15WAIT Statement
- Serve per sincronizzare un processo su opportuni
eventi - Ve ne sono 4 tipi
- WAIT FOR, WAIT UNTIL, WAIT ON e WAIT
- Sintassi
- Esempi
wait on signal until condition for time
wait on a,b wait until x gt 10 wait for 10
ns wait
16ASSERT/REPORT Statement
- Da usarsi SOLO IN SIMULAZIONE
- Serve al debugging di un sistema
- 4 gradi di severity FAILURE, ERROR, WARNING,
NOTE - Sintassi
- Esempio
assert condition report string severity
expression
assert (x gt 3) report troppo basso severity
WARNING assert (false) report starting sim.
17PROCEDURE e FUNCTIONS
- Vengono impiegate per documentare operazioni
usate frequentemente - Si rimanda il lettore a testi specifici