Sequential Design Sequential code Code written within the

  • Slides: 15
Download presentation
Sequential Design

Sequential Design

Sequential code • Code written within the following statements execute sequentially. • Process •

Sequential code • Code written within the following statements execute sequentially. • Process • Functions • Procedures

Process • A process is a sequential section of VHDL code. • It is

Process • A process is a sequential section of VHDL code. • It is characterized by the presence of following statements: – IF – Wait – Case – Loop

Process (cont. . ) • A Process must be installed in the main code,

Process (cont. . ) • A Process must be installed in the main code, and is executed every time a signal in the sensitivity list changes (or the condition related to WAIT is fulfilled). • Syntax: [label: ] Process (sensitivity list) [variable name type [range] [: =initial value; ]] Begin (sequential code) End Process [label];

If statement If condition then assignments; elsif condition then assignments; …………………. . ……… else

If statement If condition then assignments; elsif condition then assignments; …………………. . ……… else assignments; end if;

Case statements The format of a case statement is case expression is when choices

Case statements The format of a case statement is case expression is when choices => sequential-statements branch #1 when choices => sequential-statements branch #2 -- Can have any number of branches. [ when others => sequential-statements ] branch end case; ---- last

Case (cont. ) • The case statement is very similar to when statement. •

Case (cont. ) • The case statement is very similar to when statement. • All the permutation must be tested, so the keyword OTHERS may be used. • NULL may be used, when no action is required to take place. e. g. When OTHERS => NULL;

entity MUX is port (A, B, C, D: in BIT; CTRL: in BIT_VECTOR(0 to

entity MUX is port (A, B, C, D: in BIT; CTRL: in BIT_VECTOR(0 to 1); Z: out BIT); end MUX; architecture MUX_BEHAVIOR of MUX is constant MUX_DELAY: TIME : = 10 ns; begin PMUX: process (A, B, C, D, CTRL) variable TEMP: BIT; begin case CTRL is when "00" => TEMP : = A: when "01" => TEMP : = B; when "10" => TEMP : = C; when "11" => TEMP : = D; end case; Z <= TEMP after MUX_DELAY; end process PMUX; end MUX_BEHAVIOR;

Loop • Loop is useful when a piece of code must be instantiated several

Loop • Loop is useful when a piece of code must be instantiated several times. • Loop is intended exclusively for sequential code. • For/loop : The loop is repeated a fixed number of times. [label: ] FOR identifier IN range LOOP (sequential statements) END LOOP [label];

Example of For/loop FACTORIAL : = 1; for NUMBER in 2 to N loop

Example of For/loop FACTORIAL : = 1; for NUMBER in 2 to N loop FACTORIAL : = FACTORIAL * NUMBER; end loop; NOTE: Range must be static.

Loop (cont. ) • WHILE/LOOP : The loop is repeated until a condition no

Loop (cont. ) • WHILE/LOOP : The loop is repeated until a condition no longer holds. [label: ] WHILE condition LOOP (sequential statements); end LOOP [label];

 • Example WHILE/Loop While (I <10) Loop wait until clk’event and clk=‘ 1’;

• Example WHILE/Loop While (I <10) Loop wait until clk’event and clk=‘ 1’; (other statement) End loop;

Other statements • EXIT – Used for ending the loop [label: ] EXIT [label]

Other statements • EXIT – Used for ending the loop [label: ] EXIT [label] [WHEN condition] • NEXT – Used for skipping loop steps. [label: ] NEXT [loop_label] [WHEN condition]

Example (exit and Next) SUM : = 1; J : = 0; L 3:

Example (exit and Next) SUM : = 1; J : = 0; L 3: loop J: =J+21; SUM : = SUM* 10; if (SUM > 100) then exit L 3; -- "exit; " also would have been sufficient. end if; end loop L 3;

Example (next) For I in 0 to 15 loop next when I= skip; --

Example (next) For I in 0 to 15 loop next when I= skip; -- jump to next iteration