150 likes | 265 Vues
This guide provides an in-depth overview of sequential processes in VHDL design. It covers the essential statements used in VHDL code execution: IF, CASE, and LOOP. Learn how a process functions within the main code, executes based on sensitivity lists, and how branching works with case statements. The guide includes practical examples, such as using FOR and WHILE loops, and demonstrates proper syntax and structure for writing efficient VHDL code. Enhance your understanding of these critical programming concepts for FPGA and digital design applications.
E N D
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 characterized by the presence of following statements: • IF • Wait • Case • Loop
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 assignments; end if;
Case statements The format of a case statement is caseexpressionis whenchoices => sequential-statements -- branch #1 whenchoices => sequential-statements -- branch #2 -- Can have any number of branches. [ when others =>sequential-statements] -- last branch end case;
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 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 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 in2 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 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’; (other statement) End loop;
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; L3: loop J:=J+21; SUM := SUM* 10; if (SUM > 100) then exit L3; -- "exit;" also would have been sufficient. end if; end loop L3;
Example (next) For I in 0 to 15 loop next when I= skip; -- jump to next iteration