Subprograms and Overloading - Northern India … Notes4X.… · Subprograms and Overloading By Mr....
Transcript of Subprograms and Overloading - Northern India … Notes4X.… · Subprograms and Overloading By Mr....
Subprograms• Similar to subprograms found in other languages
• Allow repeatedly used code to be referenced multiple times without rewriting
• Break down large blocks of code into small, more manageable partsparts
• VHDL provides functions and procedures
3ETEC-301- DCS-II BY: GAURAV
VERMA
Subprograms (cont’d)• Contain sequential statements similar to processes
• May declare local variables, constants
• Executed when called from a sequential statement.
• Local Variables are re-initialized every time a subprogram is called.• Local Variables are re-initialized every time a subprogram is called.
• Parameters of calling routine are known as actuals, while the parameters of the declared subprogram are known as formals.
• Up level referencing to higher level variables and signals is allowed.
• Recursive calls by functions and procedures are allowed
• Attributes of signals cannot be accessed within subprograms
4ETEC-301- DCS-II BY: GAURAV
VERMA
• Produce a single return value• Called by expressions• Cannot modify the parameters passed to them• Require a RETURN statement
FUNCTION add_bits (a, b : IN BIT) RETURN BIT IS
FUNCTION add_bits2 (a, b : IN BIT) RETURN BIT ISVARIABLE result : BIT; -- variable is local to function
BEGINresult := (a XOR b);RETURN result; -- the two functions are equivalent
END add_bits2;
FUNCTION add_bits (a, b : IN BIT) RETURN BIT ISBEGIN -- functions cannot return multiple values
RETURN (a XOR b);END add_bits;
5ETEC-301- DCS-II BY: GAURAV
VERMA
ARCHITECTURE behavior OF adder ISBEGIN
PROCESS (enable, x, y)BEGINIF (enable = '1') THENresult <= add_bits(x, y);
FUNCTION add_bits
(a, b : IN BIT)
• Functions must be called by other statements• Parameters use positional association
result <= add_bits(x, y);carry <= x AND y;
ELSEcarry, result <= '0';
END PROCESS;END behavior;
(a, b : IN BIT)
13ETEC-301- DCS-II BY: GAURAV
VERMA
• May produce multiple output values• Are invoked by statements• May modify the parameters
PROCEDURE add_bits3 (SIGNAL a, b, en : IN BIT;PROCEDURE add_bits3 (SIGNAL a, b, en : IN BIT;SIGNAL temp_result, temp_carry : OUT BIT) IS
BEGIN -- procedures can return multiple valuestemp_result <= (a XOR b) AND en;temp_carry <= a AND b AND en;
END add_bits3;
Do not require a RETURN statement
20ETEC-301- DCS-II BY: GAURAV
VERMA
• With parameter passing, it is possible to further simplify the architecture
ARCHITECTURE behavior OF adder ISBEGIN
PROCESS (enable, x, y)BEGINadd_bits3(x, y, enable,
result, carry);result, carry);END PROCESS;
END behavior;
PROCEDURE add_bits3
(SIGNAL a, b, en : IN BIT;SIGNAL temp_result,
temp_carry : OUT BIT)
The parameters must be compatible in terms of data flow and data type
21ETEC-301- DCS-II BY: GAURAV
VERMA
Signal Resolution and Buses
OR
Execution phase Signal update phase
Transaction queue
Bus Resolution Function
AND
Resolvedsignal
22ETEC-301- DCS-II BY: GAURAV
VERMA
Bus ResolutionSmoke Generator
• VHDL does not allow multiple concurrent signal assignments to the same signal– Multiple sequential signal assignments are allowedLIBRARY attlib; USE attlib.att_mvl.ALL;-- this code will generate an errorENTITY bus ISENTITY bus IS
PORT (a, b, c : IN MVL; z : OUT MVL);END bus;
ARCHITECTURE smoke_generator OF bus ISSIGNAL circuit_node : MVL;
BEGINcircuit_node <= a;circuit_node <= b;circuit_node <= c;z <= circuit_node;
END smoke_generator;23
ETEC-301- DCS-II BY: GAURAV VERMA
Bus Resolution Functions• Are used to determine the assigned value when
there are multiple signal drivers to the same signal
FUNCTION wired_and (drivers : MVL_VECTOR) RETURN MVL ISVARIABLE accumulate : MVL := '1';
BEGINFOR i IN drivers'RANGE LOOPFOR i IN drivers'RANGE LOOPaccumulate := accumulate AND drivers(i);
END LOOP;RETURN accumulate;
END wired_and;
Bus resolution functions may be user defined or called from a package
24ETEC-301- DCS-II BY: GAURAV
VERMA
Bus ResolutionSmoke Generator Fixed
• A signal which has a bus resolution function associated with it may have multiple drivers
LIBRARY attlib; USE attlib.att_mvl.ALL;USE WORK.bus_resolution.ALL;
ENTITY bus ISPORT (a, b, c : IN MVL; z : OUT MVL);PORT (a, b, c : IN MVL; z : OUT MVL);
END bus;
ARCHITECTURE fixed OF bus ISSIGNAL circuit_node : wired_and MVL;
BEGINcircuit_node <= a;circuit_node <= b;circuit_node <= c;z <= circuit_node;
END fixed;
25ETEC-301- DCS-II BY: GAURAV
VERMA
Null Transactions• How can a driver be disconnected (i.e. not influence the output at
all)?– Use the null waveform element
• Examplebus_out <= NULL AFTER 17 ns;
• What happens if all drivers of a resolved signal are disconnected?– Use register kind in signal declaration to keep most recently determined value– Use bus kind in signal declaration if resolution function will determine the value
• Examplesignal t : wired_bus BUS;
signal u : BIT REGISTER;
26ETEC-301- DCS-II BY: GAURAV
VERMA
• Exists outside of a process but in an architecture
• The process is itself a concurrent statement all processes • The process is itself a concurrent statement all processes scheduled to run concurrently
• Concurrent signal assignment is a short hand form for a single statement process -- equivalent to process containing one statement, sensitive to changes on the right hand side.
• Used frequently in DATAFLOW style descriptions27
ETEC-301- DCS-II BY: GAURAV VERMA
Overloading• Overloading refers to using the same procedure(or function) name to define two or more proceduresthat operate on different “types” or numberof parameters.
procedure incr (a :in integer; n :in integer);procedure incr (a :in integer; n :in integer);procedure incr (a :in bit_vector; n :in integer);procedure incr (a :in integer);
• VHDL also permits overloading of operator symbolslike “+”, “-”, “*” and so on.
29ETEC-301- DCS-II BY: GAURAV
VERMA
Overloading: examplefunction “+” (left,right : bit_vector)
return bit_vector isbegin……
end function;
variable a, b, c: bit_vector(7 downto 0);…
c = a + b;
30ETEC-301- DCS-II BY: GAURAV
VERMA
Concurrent AssignmentConcurrent AssignmentStatementsStatements
Concurrent AssignmentConcurrent AssignmentStatementsStatements
32ETEC-301- DCS-II BY: GAURAV
VERMA
Concurrent Signal Sensitivity• Concurrent Statements are sensitive to all signals on
the input side
• If a signal appears on both sides, the statement is sensitive to changes in its own output. sensitive to changes in its own output.
• A <= A+B; will be evaluated when B changes. This will change A and the statement will be evaluated again.
• Time will not be able to advance because the statement keeps executing.
33ETEC-301- DCS-II BY: GAURAV
VERMA
Concurrent Procedure Call• IN, OUT and INOUT parameter modes
• Allows return of more than 1 value (unlike function call)
• Considered a statement
• Equivalent to a process containing the single procedure call followed by a wait on parameters of mode in or inout
38ETEC-301- DCS-II BY: GAURAV
VERMA
Sequential vs. ConcurrentStatement in Simulation Cycle
• VHDL is inherently a concurrent language• All VHDL processes execute concurrently• Concurrent signal assignment statements are actually
oneline processesoneline processes• VHDL statements execute sequentially within a process• Concurrent processes with sequential execution within
a process offers maximum flexibility• Supports various levels of abstraction• Supports modeling of concurrent and sequential events
as observed in real systems40
ETEC-301- DCS-II BY: GAURAV VERMA
Blocks• Blocks are concurrent statements and provide a
mechanism to partition an architecture description
• Items declared in declarative region of block are visible only inside the block, e.g. :visible only inside the block, e.g. :– signals, subprograms
• Blocks may be nested to define a hierarchical partitioning of the architectural description
• Blocks may contain Guards for disabling drives.
42ETEC-301- DCS-II BY: GAURAV
VERMA