Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time...

58
Sequential VHDL Sequential VHDL Katarzyna Radecka DSD COEN 313 [email protected] Katarzyna Radecka DSD COEN 313 [email protected]

Transcript of Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time...

Page 1: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Sequential VHDLSequential VHDL

Katarzyna Radecka

DSD COEN [email protected]

Katarzyna Radecka

DSD COEN [email protected]

Page 2: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

OverviewOverview

Process

Sensitivity List

Wait Statements

If Statements

Case Statements

Loop Statements

Process

Sensitivity List

Wait Statements

If Statements

Case Statements

Loop Statements

Page 3: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Three Styles of VHDLThree Styles of VHDL

Booleanc = a v b

c <= a OR b;VHDL

ab c

RTL level

VHDLCOMPONENT and_gate port( i1,i2: in std_logic; o: out std_logic);END COMPONENT;

. . . G0: and_gate port map( i1 => a, i2 => b, o1 => c);

c <= a OR b after 10 ns;

VHDL

Behavioral Structural Timing

a

b

c

Schematic

Page 4: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Modeling StylesModeling Styles

Possibly many different architecturebodies of one entity corresponding toalternative implementations performingthe same function (design functionality)

Styles of architecture body Behavioral Structural Mixed structural/behavioral

Possibly many different architecturebodies of one entity corresponding toalternative implementations performingthe same function (design functionality)

Styles of architecture body Behavioral Structural Mixed structural/behavioral

Page 5: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Behavioral Architecture BodyBehavioral Architecture Body

Describes function in abstract way Include process statements

Collections of actions executed in sequence Similar to standard programming languages like C VHDL in general concurrent language – all statements

outside processes executed in parallel (like in hardware)

Sequential statements include: evaluation ofexpressions, assignment of values to variablesand signals, conditional executions, repeatedexecutions and subprogram calls

Describes function in abstract way Include process statements

Collections of actions executed in sequence Similar to standard programming languages like C VHDL in general concurrent language – all statements

outside processes executed in parallel (like in hardware)

Sequential statements include: evaluation ofexpressions, assignment of values to variablesand signals, conditional executions, repeatedexecutions and subprogram calls

Page 6: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

ProcessProcess

Typical VHDL feature Useful for better visualizing changes happening

in designs Statements executed sequentially

Only for simulation purposes – not extended tosynthesis All sequentially executed combinational instructions

synthesized to parallel ones

Order of coding instructions matters Similarly to C/C++ sequential flow may be broken by

if/else, case, etc. instructions

Typical VHDL feature Useful for better visualizing changes happening

in designs Statements executed sequentially

Only for simulation purposes – not extended tosynthesis All sequentially executed combinational instructions

synthesized to parallel ones

Order of coding instructions matters Similarly to C/C++ sequential flow may be broken by

if/else, case, etc. instructions

dutt
Note
ignore (not corretct)
dutt
Note
not sure of this is correct (best to ignore also)
Page 7: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

or_gate: process(a, b)

Process – Syntax 1Process – Syntax 1

Starts with key word process Optionally label can be assigned to process

Sensitivity list Placed in ( ) right after key word process

List of all signals to which is sensitive Upon changing of values of at least one of signals process is

invoked

Relevant only at pre-synthesized level (pre-synthesizedsimulations)

Transparent for post-synthesis netlists Circuits produce output for any set of inputs regardless of

whether all inputs were declared on the sensitivity list

Starts with key word process Optionally label can be assigned to process

Sensitivity list Placed in ( ) right after key word process

List of all signals to which is sensitive Upon changing of values of at least one of signals process is

invoked

Relevant only at pre-synthesized level (pre-synthesizedsimulations)

Transparent for post-synthesis netlists Circuits produce output for any set of inputs regardless of

whether all inputs were declared on the sensitivity list

label

Sensitivitylist

Page 8: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Process – Syntax 2Process – Syntax 2

ma: process(a, b, d, c_in) variable m_tmp: bit_vector(7 downto 0) := “00000000”;

begin mult_tmp := a * b; sum <= mult_tmp + d + c_in;end process;

process_label key word

variable declaration

key word

process body

key word

sensitivity list

Page 9: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Sensitivity ListSensitivity List

List of signals to which process issensitive

Event on any signal from the list triggersactivation of process Sequential execution of instructions until last one

in process– Process is then suspended waiting for the next event on

sensitivity list

List of signals to which process issensitive

Event on any signal from the list triggersactivation of process Sequential execution of instructions until last one

in process– Process is then suspended waiting for the next event on

sensitivity list

Page 10: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Sensitivity List – What to PutThere?

Sensitivity List – What to PutThere?

Sensitivity list of processes describingcombinational designs include all signalsinputted to process

If some process input signals omitted fromsensitivity list, then events on these signalsnot triggering process execution If process activated by changes of other signals

from sensitivity list, then calculations insideprocess not reflecting changes of values of signalsnot on the sensitivity list

Sensitivity list of processes describingcombinational designs include all signalsinputted to process

If some process input signals omitted fromsensitivity list, then events on these signalsnot triggering process execution If process activated by changes of other signals

from sensitivity list, then calculations insideprocess not reflecting changes of values of signalsnot on the sensitivity list

Page 11: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Sensitivity ListExample: Sensitivity List

abc

abc

Pre-synthesissimulations

Synthesizednetlist

Post-synthesiswaveform

or_gate: process (a) begin c <= a or b;end process;

b not in Sensitivity list

ab c

Sensitivity list

Page 12: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Sensitivity List, cont.Example: Sensitivity List, cont.

entity mux is port(data_0, data_1, sel: in std_logic; output: out std_logic);end mux;

architecture incom of mux isbegin process(data_1, sel) begin if (sel = ‘0’) then output <= data_0; else output <= data_1; end process;end incom;

Changes on data_0 not reflected at output

Page 13: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Sensitivity List and SynthesisSensitivity List and Synthesis

Processes and sensitivity list only on simulationlevel

Incorrect simulations due to incompletesensitivity list transparent to synthesized circuit

Circuits simulating with errors due to incompletesensitivity list synthesized into correct netlist Potential problems in verification, when post synthesis

netlist checked vs. pre-synthesis RTL

Processes and sensitivity list only on simulationlevel

Incorrect simulations due to incompletesensitivity list transparent to synthesized circuit

Circuits simulating with errors due to incompletesensitivity list synthesized into correct netlist Potential problems in verification, when post synthesis

netlist checked vs. pre-synthesis RTL

Page 14: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Sensitivity List and WaitSensitivity List and Wait

Process can be suspended by means ofsensitivity list

Wait statement – alternative way of suspendingprocesses

Wait statements and sensitivity lists are mutuallyexclusive

Process sensitivity list signals are implicitly wait on

Process suspended upon encountering waitstatement

Reactivated when wait period ends

Process can be suspended by means ofsensitivity list

Wait statement – alternative way of suspendingprocesses

Wait statements and sensitivity lists are mutuallyexclusive

Process sensitivity list signals are implicitly wait on

Process suspended upon encountering waitstatement

Reactivated when wait period ends

Page 15: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Process ExecutionProcess Execution

Page 16: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

• Advance of simulation time: When does simulation time advance during the execution of a process?

• On the expiring of a wait:• @ t: wait for 10 ns; wait expires @ t+10 ns• @ t: wait on a, b; if a’event is true @ t+5 ns, & b’event is true @ t+3 ns wait expires @ t+3 ns;• @ t: wait until (a = ‘0’ and b=`1’); @ t: a=‘1’ and b=‘0’; @ t+2 ns, b=‘1’; @ t+7 ns, a=`0’ wait expires @ t+7 ns• If a wait expires @ t+x ns the statement after the wait is executed @ t+x ns (new simulation time is t+x ns)

• When the process reaches the end @ t, and has:• a sensitivity list which is triggered at t+y ns (the earliest one of the signals on the list changes is at t+y ns) the process restarts @ t+y ns which is also the new simulation time • no sensitivity list the process restarts @ t + ∆ ns, which is also the new simulation time

• Does the above discussion square w/ our earlier discussion of advance of sim. time for simple signal assignment statements in a dataflow description?

Advance of Simulation Time During Process Execution (ShantanuDutt, UIC)

Page 17: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Boolean condition;

time-period;

time-period;

Page 18: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Wait OnWait On

Process suspends and wait for event tooccur on signals A, B, or C

Upon event on A, B, or C process resumesexecution from next statement onwards

When wait is the last instruction, processresumes from first statement

Process suspends and wait for event tooccur on signals A, B, or C

Upon event on A, B, or C process resumesexecution from next statement onwards

When wait is the last instruction, processresumes from first statement

wait on A, B, C;

Page 19: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Wait UntilWait Until

Process suspends until cpecified conditionbecomes true

Upon encountering even on signals A or B“=“ condition evaluated If fulfilled process resumes operation from next

statement onwards, otherwise it remainssuspended

Process suspends until cpecified conditionbecomes true

Upon encountering even on signals A or B“=“ condition evaluated If fulfilled process resumes operation from next

statement onwards, otherwise it remainssuspended

wait until A=B;

Page 20: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Wait ForWait For

Execution of wait statement at time Tcauses suspense of process for 10 ns

Next process statement executed at timeT+10ns

Execution of wait statement at time Tcauses suspense of process for 10 ns

Next process statement executed at timeT+10ns

wait for 10 ns;

Page 21: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Wait On Sensitivity-List ForTime-Expression

Wait On Sensitivity-List ForTime-Expression

Process suspended until event on CLOCKfor a timeout of 20 ns

If no event on CLOCK within 20 ns processresumes operation from execution of nextstatement

Process suspended until event on CLOCKfor a timeout of 20 ns

If no event on CLOCK within 20 ns processresumes operation from execution of nextstatement

wait on CLOCK for 20 ns;

Page 22: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Wait Until Boolean-StatementFor Time-Expression

Wait Until Boolean-StatementFor Time-Expression

Process suspends for max 50 ms untilvalue of SUM is greater than 100

Boolean condition evaluated every time eventon SUM happens

If Boolean condition not satisfied for 50ms, process resumes execution from nextstatement following wait

Process suspends for max 50 ms untilvalue of SUM is greater than 100

Boolean condition evaluated every time eventon SUM happens

If Boolean condition not satisfied for 50ms, process resumes execution from nextstatement following wait

wait until SUM > 100 for 50 ms;

Page 23: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Wait/Sensitivity ListWait/Sensitivity List

If no explicit sensitivity list in process,then at least one wait statement should bein process

Otherwise process never get suspended andremains in infinite loop during initializationphase of simulation Error reported if both sensitivity list and wait

statements present in single process

If no explicit sensitivity list in process,then at least one wait statement should bein process

Otherwise process never get suspended andremains in infinite loop during initializationphase of simulation Error reported if both sensitivity list and wait

statements present in single process

Page 24: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Wait StatementsExample: Wait Statements

half_add: process isbegin sum <= a XOR b after T_pd; carry <= a AND b after T_pd; wait on a, b;end process;

half_add: process(a,b) isbegin sum <= a XOR b after T_pd; carry <= a AND b after T_pd; -- not wait on a,b; neededend process;

Page 25: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Clock GenerationClock Generation

One of ways ofclock generation forSIMULATIONpurposes only(testbenches) usingwait for statement

One of ways ofclock generation forSIMULATIONpurposes only(testbenches) usingwait for statement

entity clk is port(clk: out std_logic);end clk;

architecture cyk of clk isbegin process begin clk <= ‘0’; wait for 10 ns; clk <= ‘1’; wait for 10 ns; end process;end cyk;

No inputs to process -> no sensitivity list needed

Page 26: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Process: Allowed StatementsProcess: Allowed Statements

Only following sequential statements allowedinside process:

if statement case statement wait statement loop statement (for, while)

Additionally allowed signal and variableassignments

Concurrent statements such as when and withnot allowed inside processes

Only following sequential statements allowedinside process:

if statement case statement wait statement loop statement (for, while)

Additionally allowed signal and variableassignments

Concurrent statements such as when and withnot allowed inside processes

Page 27: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

If StatementIf Statement

Used to select sequence of statements forexecution based on fulfilling somecondition

Condition – any expression evaluating toBoolean value

Used to select sequence of statements forexecution based on fulfilling somecondition

Condition – any expression evaluating toBoolean value

if boolean-expression then sequential-statements{elsif boolean-expression then -- elsif clause; if can have 0 or sequential-statements} -- more elsif clauses [else sequential-statements]end if;

Page 28: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using
Page 29: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

If/else - SyntaxIf/else - Syntax

if ((clk’event) and (clk = ‘1’)) then q1 <= d1; q2 <= d2;end if;

Modeling of rising clock edge

if k = 0 then var1 := a+1;elsif k = 1 then var2 := b+a;else var1 := ‘0’; var2 := ‘0’;end if;

key word

sequentialstatements

key word

Boolean expression

Page 30: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Evaluation of If StatementEvaluation of If Statement

Executed by checking each conditionsequentially until the true condition foundor all cases exhausted

Else and elsif statements optional

Possibility of nesting if statements

Executed by checking each conditionsequentially until the true condition foundor all cases exhausted

Else and elsif statements optional

Possibility of nesting if statements

Page 31: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: If StatementExample: If Statement

if grade_per < 40 then grade_letter <= ‘R’;elsif ((grade_per > 41) and (grade_per < 50)) then grade_lett <= ‘D’;elsif ((grade_per > 51) and (grade_per < 60)) then grade_lett <= ‘C’;elsif ((grade_per > 61) and (grade_per < 70)) then grade_lett <= ‘B’;elsif (grade_per > 71) then grade_lett <= ‘A’;else grade_lett <= ‘F’;end if;

if cntrl1 = ‘0’ then if cntrl2 = ‘0’ then out_a <= “00”; else out_a <= “01”; end if;else if cntrl2 = ‘0’ then out_a <= “10”; else out_a <= “11”; end if;end if;

Page 32: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Case StatementCase Statement

Sequential counterpart of with-selectconcurrent statement

Only one branch with matching conditionselected for execution

Sequential counterpart of with-selectconcurrent statement

Only one branch with matching conditionselected for execution

Case expression is when choices => sequential-statements -- branch 1 when choices => sequential-statements -- branch 2 -- any number of branches can be specified [when others => sequential-statements] -- last branchend case;

Page 33: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Case Statement: ExpressionCase Statement: Expression

Selection choices represented as single value orrange of values joined by or operand representedas |, or by others clause

All possible values must be covered in case exactlyonce

Others clause optionally used to implicitly representall missing explicit values of expression If present, located as last branch in case statement

Selection choices represented as single value orrange of values joined by or operand representedas |, or by others clause

All possible values must be covered in case exactlyonce

Others clause optionally used to implicitly representall missing explicit values of expression If present, located as last branch in case statement

Page 34: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

All possible choices must be included, unless the others clause is used as the last choice: case SEL is when "01" => Z <= A; when "10" => Z <= B; when others => Z <= 'X'; end case;

A range or a selection may be specified as a choice: case INT_A is when 0 => Z <= A; when 1 to 3 => Z <= B; when 4|6|8 => Z <= C; when others => Z <= 'X'; end case;

Choices may not overlap: case INT_A is when 0 => Z <= A; when 1 to 3 => Z <= B; when 2|6|8 => Z <= C; -- illegal when others => Z <= 'X'; end case;

A range may not be used with a vector type: case VEC is when "000" to "010" => Z <= A; -- illegal when "111" => Z <= B; when others => Z <= 'X'; end case;

Case Statement

Acknowledgement: http://www.ics.uci.edu/~jmoorkan/vhdlref/cases.html

Page 35: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Case SyntaxCase Syntax

Note: All values of expression must be covered by case statement. If somevalues are excluded, then “when others” expression is added to theend of all listed case conditions.

Note: All values of expression must be covered by case statement. If somevalues are excluded, then “when others” expression is added to theend of all listed case conditions.

type alu is (comp, add, sub);

variable alu_sel: alu;

case alu_sel is when comp => data_out <= inp1; when add => data_out <= inp1+inp2; when others => data_out <= inp2;end case;

key word

sequentialstatements

key word

expression

dutt
Note
- inp1
Page 36: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Case StatementExample: Case Statement

Page 37: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

If vs. CaseIf vs. Case

If/else – used when behavior of design may depend onvalue of more than one signal expression

Case - used when behavior of design may depend onvalue of one signal expression

If/else’s are synthesized as cascaded MUXes; a casestatement is a single MUX (only 2 levels of logic!)

If area is critical for design use if/else structure Result – small but slow design

If time is critical for design use case statements Result – fast but bigger designs

If/else – used when behavior of design may depend onvalue of more than one signal expression

Case - used when behavior of design may depend onvalue of one signal expression

If/else’s are synthesized as cascaded MUXes; a casestatement is a single MUX (only 2 levels of logic!)

If area is critical for design use if/else structure Result – small but slow design

If time is critical for design use case statements Result – fast but bigger designs

Page 38: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Loop StatementsLoop Statements

Used to iterate through a set of sequentialstatements

Syntax

Used to iterate through a set of sequentialstatements

Syntax[loop label: ] iteration-scheme loop sequential-statementsend loop [loop label];

Page 39: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Loop - Three FormsLoop - Three Forms

sum := 0;

L1: for i in 1 to N loop sum := sum + 1;end loop;

j := 0;sum := 10;

while j < 20 loopsum := sum*2;j := j+1;end loop;

j := 0;sum := 1;

L2: loop sum := sum*10; j := j+1; exit L2 when sum > 100;end loop;

key word

label

label

key wordsequentialstatements

Page 40: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Loop ForLoop For

Syntax

Example: calculation of yN, N > 2

Body of loop executed N-1 times

Syntax

Example: calculation of yN, N > 2

Body of loop executed N-1 times

for identifier in range

power_N := y;for iter in 2 to N loop power_N := power_N * y;end loop;

Page 41: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Loop For, cont.Loop For, cont. Body of loop executed N-1 times

Loop identifier i incremented by 1 at the end of each iteration

i implicitly declared within for loop to belong to integer type ofthe range 2 to N

No explicit declaration of loop identifier needed When other variable of name i exists outside for loop then these

two variables treated separately, with i from the for loopassigned only to the loop

Body of loop executed N-1 times Loop identifier i incremented by 1 at the end of each iteration

i implicitly declared within for loop to belong to integer type ofthe range 2 to N

No explicit declaration of loop identifier needed When other variable of name i exists outside for loop then these

two variables treated separately, with i from the for loopassigned only to the loop

Page 42: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Range of For LoopRange of For Loop

Range can be integer, but alsoenumeration type

To denote hexadecimal numbers

Example: type ht is (‘0’,’1’, …,’A’,…,’F’)

Range can be integer, but alsoenumeration type

To denote hexadecimal numbers

Example: type ht is (‘0’,’1’, …,’A’,…,’F’)

for i in ht’(‘A’) to (‘F”) loop

Page 43: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Loop WhileLoop While

Syntax

Example:

Syntax

Example:

while boolean-expression

power_N := y;while i < N loop power_N := power_N * y;end loop;

Page 44: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Loop While, cont.Loop While, cont.

Statements inside loop executedsequentially and repeated until loopcondition is true

Execution of loop terminated when loopcondition becomes false

Statements inside loop executedsequentially and repeated until loopcondition is true

Execution of loop terminated when loopcondition becomes false

Page 45: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Loop StatementLoop Statement

No iteration scheme specified

Statements inside loop repeatedly executeduntil some action causes loop termination

exit, next, return statements used to terminateloop If no exit statements, then loop executed indefiantely

No iteration scheme specified

Statements inside loop repeatedly executeduntil some action causes loop termination

exit, next, return statements used to terminateloop If no exit statements, then loop executed indefiantely

power_N := y;L: loop power_N := power_N * y; exit when power_N > 250;end loop L;

Page 46: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Processes CommunicationProcesses Communication

More than one process possible in a singlearchitecture body

Each process in architecture bodyexecuted concurrently with otherprocesses and other concurrent VHDLstatements

Remember, that all statements insideprocesses executed sequentially

More than one process possible in a singlearchitecture body

Each process in architecture bodyexecuted concurrently with otherprocesses and other concurrent VHDLstatements

Remember, that all statements insideprocesses executed sequentially

Page 47: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Process Communication, cont.Process Communication, cont.

Communication among processes viainternal signals

Values of internal signals generated inprocess A may be used as input signals inprocess B Placed on process B sensitivity list

Communication among processes viainternal signals

Values of internal signals generated inprocess A may be used as input signals inprocess B Placed on process B sensitivity list

Page 48: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: MicroprocessorExample: Microprocessor

Simple CPU used to control read and writeoperations to memory

CPU imposes memory read and write operationsthrough signals data_read and data_write

Memory manifests readiness of accepting new databy setting signal mem_ready

Memory location of instruction to be executedstored in PC register

Length of each instruction 2 bytes (16 bites) Memory address space 8 bits

Simple CPU used to control read and writeoperations to memory

CPU imposes memory read and write operationsthrough signals data_read and data_write

Memory manifests readiness of accepting new databy setting signal mem_ready

Memory location of instruction to be executedstored in PC register

Length of each instruction 2 bytes (16 bites) Memory address space 8 bits

Page 49: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Inter-Process Communication in VHDL

signal x, z: std_logic;

x <= (a xor b) nand z after 4ns;

wait on z;

wait until x = ‘1 y := (a1 xnor b1) xnor (c1 xnor d1); f <= y nand u after 2 ns;

port (start: in std_logic; f: out std_logic); entity xyz is

end entity xyz;

if (n <= m) then

z <= ‘0’ after 6 ns;

else z <= ‘1’ after 6 ns;

end if;

wait until start = `1’ and

last_value’start=‘0’; start (control)

z

(control +

data)

x (control only)

f

Processes

Architecture

Note: wait statements are event driven, i.e., are evaluated only when at least 1 event occurs on one of the signals in the wait statement (for “wait on” and “wait until” statements) OR when a time expiry event happens for the “wait for” statement.

Page 50: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Microprocessor-Memory Communication

First-cut behavioral description: entity cpu-mem is port(read, write: in std_logic; DR: in word; ARin: in integer; IR: out word); -- DR: data to write, ARin: its address, IR: instruction read end entity cpu-mem; architecture behav_high of cpu-mem is begin all_in_one: process (read, write) is type data_type is array (0 to 63) of word; variable store: data_type; variable addr, AR, PC: integer; variable data_reg, instr_reg, data_in, data_out : word; begin if read = ‘1’ then AR := PC; addr := AR; data_out := store(addr/2); instr_reg := data_out; IR <= instr_reg after 1 ns; PC := PC + 2; elsif write = ‘1’ then AR := ARin; addr := AR; data_reg := DR; data_in := data_reg; store(addr/2) := data_in; end if; end process cpu-mem; end architecture behav_high;

• Very high-level description • No description of module communication • Data/address/control-signal propagation delays are thus not obviously visible • Though some of these delays (not all) could be modeled by “wait for ..” statements • E.g., if 1-way commun. time w/ memory is 2 ns, and it takes 1 ns for the mem. controller to access the data store, as well as for the CPU-mem interface to write to a reg. then the delay of 2+1+2 = 5 ns to read an instruction from memory and store in the IR can be modeled as:

• data_out := store(addr/2); (the 0 delay model) (a non-zero delay model)

wait for 5 ns; data_out := store(addr/2); • A better behavioral description modeling various timing & comm. issues given next

Shantanu Dutt, UIC

Memory

data_in

data_out

data_read

data_write

mem_ready

address AR

ir

CPU

rea

d

write

CPU-Mem

dr

CPU-Mem

Interface

IR DR

PC

ARin Legend: dr: data_reg

ir: instr_reg

The red arrows w/ #s show the

seq. of operations (or of

signals that need to be

generated to cause the

operations). Relate this seq.

to the seq. of opers described

in the VHDL code on the left.

1

2 3

4 5

6

1

2 3

4

5 6

6

+2

6

Page 51: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Microprocessor-Memory Communication (contd): A more detailed behavioral description

architecture behav_detailed of cpu-mem is signal address: integer; signal data_in, data_out : word; signal data_read, data_write, mem_ready: std_logic := `0’; begin CMI: process is -- CPU-Memory Interface module variable AR, PC : integer; variable data_reg, instr_reg: word; begin wait until read = ‘1’ or write = ‘1’; if read = ‘1’ then AR := PC; wait for 1 ns; -- 1 ns reg. acc. time address <= AR after 2 ns; -- 2 ns prop. delay data_read <= `1’ after 2 ns; -- 2ns prop. delay; note simult. w/ addr wait until mem_ready = ‘1’; instr_reg := data_out; wait for 1 ns; IR <= instr_reg after 1 ns; data_read <= `0’ after 2 ns; wait until mem_ready = `0’; PC := PC+2; wait for 1 ns; elsif write = ‘1’ then data_reg := DR; AR := ARin; wait for 1 ns; -- 1 ns reg acc (both happening in parallel) address <= AR after 2 ns; data_in <= data_reg after 2 ns; data_write <= ‘1’ after 2 ns; …………………… end if; end process CMI; Memory: process is type data_type is array (0 to 63) of word; variable store: data_type; variable temp_reg: word; variable addr: integer; begin wait until data_read = `1’ or data_write = `1’; if data_read = ‘1’ then – next:1ns reg. & ram access addr :=address; temp_reg := store(addr/2); wait for 2 ns; data_out <= temp_reg after 2 ns; -- RAM r/w time is 1ns; prop. time = 2ns mem_ready <= ‘1’ after 2 ns; wait until data_read = ‘0’; mem_ready <= ‘0’ after 2 ns; elsif data_write = ‘1’ then addr := address; store(addr/2) := data_in; wait for 2 ns; ……………… end if; end process Memory; end architecture behav_detailed;

• Multi-process description describing fully responsive handshaking between the CPU-Mem interface (CMI) and Memory modules • Most Data/address/control-signal propagation delays and storage access times are accounted for: delay parameters used: 1-way commun. time w/ memory = 2 ns, RAM/register r/w time = 1 ns. • Note: A safer form of wait until X = ‘1’ is if X /= ‘1’ then wait until X = ‘1’ when it is not known for sure that X will not be ‘1’ at the point we want to wait for X being ‘1’. Similarly for waiting for X to be ‘0’.

2ns prop.

delay

2ns reg +

RAM access

delay 2ns prop.

delay

2ns prop.

delay

1ns reg (PC)

access delay

2ns prop.

delay for

read sig.

data_read

mem_ready

1 2 3 3 4’

4

4

3’

5 6

6

6’ 7

7’

8

Shantanu Dutt, UIC

Memory

data_in

data_out

data_read

data_write

mem_ready

address AR

ir

CPU

rea

d

write

CPU-Mem

dr

CPU-Mem

Interface

IR DR

PC

ARin Legend: dr: data_reg ir: instr_reg The red arrows w/ #s show the seq. of operations (or of corresp. signals). For a # j, j’ denotes the delayed version of the corresp. signal Relate this seq. to the seq. of opers described in the VHDL code on the left.

1

2 3

4 5

6

+2

8 4 4’

6 6’

3 3’

7 7’

3’

4’

Page 52: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

data_out <= store(address/2);

store(address/2) <= data_in; mem_ready <= ‘1’;

data_outdata_in

data_read <= ‘0’;

, data_read : std_logic;

data_out;

Original Code in the Notes for CPU-MemCommunication (w/ typos corrected)

Page 53: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Multiple Signal AssignmentsMultiple Signal Assignments

Signals can be assigned values several timeswithin process

All of intermediate assignments invalid Value assigned as last in single process execution

cycle counts Signal assignment does not take place until process

execution finishes

If value of data must be changed several timesin one process use variable instead of signal torepresent it

Signals can be assigned values several timeswithin process

All of intermediate assignments invalid Value assigned as last in single process execution

cycle counts Signal assignment does not take place until process

execution finishes

If value of data must be changed several timesin one process use variable instead of signal torepresent it

Shantanu
Note
Outside a process, a signal assignment can be done only once, as in hardware, except for signals/wires driven by tristate buffers, a signal/wire can be driven by only one module/date output.
dutt
Note
or suspends at a wait, and then restarts (e.g., after expiration of a wait or triggering of sensitivity list), if the process restart time is >= signal assignment time.
Page 54: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Multiple SignalAssignments - ConcurrentExample: Multiple SignalAssignments - Concurrent

Compilation failed

Page 55: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Multiple SignalAssignments - Process

Example: Multiple SignalAssignments - Process

Compilation passed

Page 56: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Multiple SignalAssignments – Process (Sims)

Example: Multiple SignalAssignments – Process (Sims)

Wrong simulation results

Page 57: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Multiple VariableAssignments

Example: Multiple VariableAssignments

Compilation passeddata1 ignored as not visible at outputs

Page 58: Sequential VHDL - UIC Engineering · PDF fileSequential VHDL Katarzyna Radecka DSD ... time for simple signal assignment statements in a dataflow description? ... (testbenches) using

Example: Multiple VariableAssignments, cont.

Example: Multiple VariableAssignments, cont.

Compilation and simulations passed