Presentation is loading. Please wait.

Presentation is loading. Please wait.

Topics AliasesSubprograms Generics & Configurations.

Similar presentations


Presentation on theme: "Topics AliasesSubprograms Generics & Configurations."— Presentation transcript:

1 Topics AliasesSubprograms Generics & Configurations

2 Guangfa Lu March 2003Advanced Topics on VHDL Aliases An alternate name for name items Can significantly improve the readability of VHDL codes by using a shorthand notation for long names. Provides a mechanism to refer to the same named item in different ways.

3 Guangfa Lu March 2003Advanced Topics on VHDL Aliases signal S: BIT_VECTOR (31 downto 0); 31 30 23 0 31 26 23 18 0 Sign Exponent Mantissa OP Reg Base Offset Can represent: Or: An example:

4 Guangfa Lu March 2003Advanced Topics on VHDL Aliases Syntax: alias identifier [ : identifier-type] is item-name; alias identifier [ : identifier-type] is item-name [signature]; Optional “signature” portion

5 Guangfa Lu March 2003Advanced Topics on VHDL Aliases Object aliases   Constant   Signal   Variable   File Non-Object aliases   Function names   Literals   Type names   Attribute names Except: labels, loop parameters, and generate parameters

6 Guangfa Lu March 2003Advanced Topics on VHDL Aliases Examples : constant number_of_bytes : integer :=4; alias N : integer is number_of_byptes; Object aliases:

7 Guangfa Lu March 2003Advanced Topics on VHDL Aliases Example: Suppose we need to use objects from two different packages, work.alu_types.all and work.io_types.all, and each declare a constant named data_width with different values. Then we have to refer to them as: work.alu_tpes.data_width work.io_types.all.data_width It’s not convenient ! If we include packages as follows: Object aliases:

8 Guangfa Lu March 2003Advanced Topics on VHDL Aliases We can avoid this by: Introducing two alias declarations into our model! Object aliases:

9 Guangfa Lu March 2003Advanced Topics on VHDL Aliases None-object aliases: Example: function names literal type name

10 Guangfa Lu March 2003Advanced Topics on VHDL Aliases With aliases, it is possible to declare something like ‘subtypes’, if the what we required is just a somewhat restricted version of the original type. With aliases, it is possible to declare something like ‘subtypes’, if the what we required is just a somewhat restricted version of the original type. In this way, we break down complex data structures into simpler parts that can be accessed directly. In this way, we break down complex data structures into simpler parts that can be accessed directly.

11 Guangfa Lu March 2003Advanced Topics on VHDL Aliases An example: function names

12 Guangfa Lu March 2003Advanced Topics on VHDL Aliases With aliases, it is possible to declare something like ‘subtypes’, if the what we required is just a somewhat restricted version of the original type. With aliases, it is possible to declare something like ‘subtypes’, if the what we required is just a somewhat restricted version of the original type. In this way, we break down complex data structures into simpler parts that can be accessed directly. In this way, we break down complex data structures into simpler parts that can be accessed directly. Notice: we are NOT defining a new data type. However, there are real subtypes.

13 Guangfa Lu March 2003Advanced Topics on VHDL Aliases Language Features: SUBTYPES SUBTYPE = TYPE + constraints on values   TYPE is the base-type of SUBTYPE   SUBTYPE inherits all the operators of TYPE   SUBTYPE can be more or less used interchangeably with TYPE examples: subtype small_float is real range 0.0 to 1.0;

14 Guangfa Lu March 2003Advanced Topics on VHDL Aliases Signature alias identifier [ : identifier-type] is item-name [signature]; The “signature” portion is optional. Used for Subprograms Enumeration literals

15 Guangfa Lu March 2003Advanced Topics on VHDL Aliases Syntax: alias identifier [ : identifier-type] is item-name [signature]; The “signature” portion is optional. [ type_mark,… return type_mark ] Signature’s syntax rule:

16 Guangfa Lu March 2003Advanced Topics on VHDL Aliases None-object aliases: Example: function names literal type name

17 Topics AliasesSubprograms Generics & Configurations

18 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms   Like other programming languages, VHDL provides subprogram facilities in the form of functions and procedures.   VHDL also provided a package facility for collecting declarations and objects into modular units.   Packages also provide a measure of data abstraction and information hiding.

19 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms Two steps: ① First they must be declared; ② Then they can be called elsewhere.

20 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms Modes : FunctionsinputProcedures input output Mode:in in out / inout

21 Guangfa Lu March 2003Advanced Topics on VHDL Functions:  Can be used within an expression;  Can be used to describe frequently used sequential algorithms;  Return a single value;  Execute in zero simulation time (no WAIT allowed). Subprograms : functions

22 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions Declaration: [pure | impure] function identifier [( parameter_interface_list )] return type_mark is { subprogram_declarative_item } begin { sequential_statements } end [ function ] [ identifier ]; Where parameter_interface_list is: ([ constant | variable | signal ] identifier {, …} : in type_indication [ := static_expression ] ) {,…} mode

23 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions Example:

24 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions Declaration: [pure | impure] function identifier [( parameter_interface_list )] return type_mark is { subprogram_declarative_item } begin { sequential_statements } end [ function ] [ identifier ]; Call: identifier [(parameter_association_list )]

25 Guangfa Lu March 2003Advanced Topics on VHDL Example: Subprograms : functions

26 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions Declaration: [pure | impure] function identifier [( parameter_interface_list )] return type_mark is { subprogram_declarative_item } begin { sequential_statements } end [ function ] [ identifier ];  By default, functions are declared as pure;  In pure functions, the only accessible data are the input arguments; and the only returned information from this function is the returned value. Pure functions do not have access to objects outside the function.  VHDL’93 introduces impure declaration;  Impure functions must be explicitly declared;  Impure functions can modify data outside their own scope.

27 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions Example: The file bit_file is an outside object. Since the function is impure, accessing to the file bit_file is possible.

28 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions Usages of functions:  Returning a value in an expression.  Conversion functions. ------ to convert an object of one type to another ------ to convert an object of one type to another  Resolution functions. ------ to resolve bus contention on a multiply-driven signal ------ to resolve bus contention on a multiply-driven signal

29 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions  Conversion functions. are used to convert an object of one type to another to allow mapping of signals and ports of different types. This type of situation usually arises when a designer wants to make use of an entity from anther design that uses a different data type. are used to convert an object of one type to another to allow mapping of signals and ports of different types. This type of situation usually arises when a designer wants to make use of an entity from anther design that uses a different data type.

30 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : functions  Resolution functions are used to return the value of a signal when the signal is driven by multiple drivers. It is illegal in VHDL to have a signal with multiple drivers without a resolution function attached to it. are used to return the value of a signal when the signal is driven by multiple drivers. It is illegal in VHDL to have a signal with multiple drivers without a resolution function attached to it. A resolution function has a signal-argument input (consists of an unconstrained array of driver values for the signal) and returns a single signal value.

31 Guangfa Lu March 2003Advanced Topics on VHDL Procedures :  Can be used to partition large behavioral descriptions into modular sections;  A procedure call may be a sequential or concurrent statement;  Arbitrary number of parameters of any possible direction ( in / out / inout );  May or may not execute in zero simulation time. Subprograms : procedures

32 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures Declaration: procedure identifier [( parameter_interface_list )] is { subprogram_declarative_item } begin { sequential_statements } end [ procedure ] [ identifier ]; Where parameter_interface_list is: ([ constant | variable | signal ] identifier {, …} : mode type_indication [ := static_expression ] ) {,…}

33 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures Declaration: procedure identifier [( parameter_interface_list )] is { subprogram_declarative_item } begin { sequential_statements } end [ procedure ] [ identifier ]; Call statement: [ label : ] procedure_name [ (parameter_association_list)];

34 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures Example:

35 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures Default Values in the parameters: When the procedure is called, we can use either leave it out in the caller’s parameter list, or use keyword ‘open’.

36 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures Example: or

37 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures Declaration: procedure identifier [( parameter_interface_list )] is { subprogram_declarative_item } begin { sequential_statements } end [ procedure ] [ identifier ]; Call statement: [ label : ] procedure_name [ (parameter_association_list)]; ;

38 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures call_proc: p ( s1, s2, val ); call_proc: process is begin p ( s1, s2, val ); wait on s1, s2; end process call_proc; Concurrent Procedure Call Statements: are equivalent to the same procedures with a wait statement, whose sensitivity clause includes the signals mentioned in the parameter list. The equivalent procedure: A concurrent procedure call:

39 Guangfa Lu March 2003Advanced Topics on VHDL Subprograms : procedures Function: encapsulates a collection of statements that compute a result  generate an expression Procedure: encapsulates a collection of sequential statements to execute  generate a statement

40 Generics & Configurations

41 Guangfa Lu March 2003Advanced Topics on VHDL Generics Can we write general models instead of making specific models with VHDL ?

42 Guangfa Lu March 2003Advanced Topics on VHDL Generics Motivation :  Oftentimes we want to be able to specify a property separately for each instance of a component.  VHDL allows models to be parameterized with generics.  Allows one to make general models instead of making specific models for many different configurations of inputs, outputs, and timing information.  Information passed into a design description from its environment.

43 Guangfa Lu March 2003Advanced Topics on VHDL Generics A generic entity AND_GATE is generic ( N: natural := 2 ); port ( A: in bit_vector (1 to N ); Z: out bit); end AND_GATE; architecture generic_ex of AND_GATE is begin process (A) variable AND_OUT:bit; begin AND_OUT := ‘1’; for k in 1 to N loop AND_OUT := AND_OUT and A(k); exit when AND_OUT = ‘0’; end loop; Z<=AND_OUT; end process; end GENERIC_EX; AND gate

44 Guangfa Lu March 2003Advanced Topics on VHDL Generics  A generic declares a constant object of mode in (read only); The value of this constant can be specified as a static expression globally:  Then it can be used in the entity declaration and its corresponding architecture bodies.  The value of a generic must be determined at elaboration time (explicitly specified at least once).

45 Guangfa Lu March 2003Advanced Topics on VHDL Generics The value for a generic may be specified  in an entity declaration;  in a component declaration;  in a component instantiation.

46 Guangfa Lu March 2003Advanced Topics on VHDL Generics entity ANOTHER_GEN_EX is end; archiecture GEN_IN_COMP of ANOTHER_GEN_EX is component NAND_GATE generic (M: INTEGER); port (A: in bit_vector(M downto 1); z: out bit); end component; component AND_GATE generic (N: natuaral := 5); port (A: in bit_vector(1 to N); Z: out bit); end component; signal S1, S2, S3, S4: bit; signal SA: bit_vector( 1to 5); signal SB: bit_vector( 2 downto 1); signal SC: bit_vector(1 to 10); signal SD: bit_vector(5 downto 0); begin N1: NAND_GATE generic map (6) port map (SD, S1); --N2: NAND_GATE port map (SB, S2); A1: AND_GATE generic map (N => 10) port map (SC, S3); A2: AND_GATE port map (SA, S4); end GEN_IN_COMP; component declarations component instantiations

47 Guangfa Lu March 2003Advanced Topics on VHDL Generics Notes:  Generic information is static ------it can not be changed during the simulation.  Generic value is instance-specific ------different instances of the same component can have different values.

48 Guangfa Lu March 2003Advanced Topics on VHDL Configurations  Why we need configurations ? It may be convenient to specify multiple views for a single entity and use any one of them for simulation. For example, there are three architecture bodies, called FA_BEH, FA_STR, and FA_MIXED, corresponding to an entity FULL_ADDER. We can select any of them for simulation by specifying an appropriate configuration.

49 Guangfa Lu March 2003Advanced Topics on VHDL Configurations  Configurations A VHDL description may consist of many design entities, each with several architectures, and organized into a design hierarchy. The configuration does the job of specifying the exact set of entities and architectures to use, in other words, binding component instances to entities.

50 Guangfa Lu March 2003Advanced Topics on VHDL Configurations  Configurations Specify which architectures to use for a particular component Specify which architectures to use for a particular component Specify which parameter values to use for a particular component Specify which parameter values to use for a particular component

51 Guangfa Lu March 2003Advanced Topics on VHDL Configurations  A configuration is therefore used to bind the following pairs: An architecture body to its entity declaration An architecture body to its entity declaration A component with an entity A component with an entity  Definition: Associating an architectural description with a component in a structural model. Associating an architectural description with a component in a structural model.

52 Guangfa Lu March 2003Advanced Topics on VHDL Configurations  Choose component

53 Guangfa Lu March 2003Advanced Topics on VHDL Configurations VHDL provides two ways of binding:  By using a configuration specifications Is used to bind component instantiations to specific entities stored in design libraries. Is used to bind component instantiations to specific entities stored in design libraries.  By using a configuration declarations The binding can be performed after the architecture body has been written. The binding can be performed after the architecture body has been written. More than one configuration declaration for an entity is possible. More than one configuration declaration for an entity is possible. The power lies in that the sub-components in an entire hierarchy of a design can be bound using a single configuration declaration. The power lies in that the sub-components in an entire hierarchy of a design can be bound using a single configuration declaration.

54 Guangfa Lu March 2003Advanced Topics on VHDL Configurations Configuration specifications ------A VHDL construct which helps associate a particular architecture with an instantiated component … component MYCOMP port ( ….) ; end component ; for U1 : MYCOMP use entity work.MYCOMP(BEHAV); libraryentityarchitecture

55 Guangfa Lu March 2003Advanced Topics on VHDL Configurations

56 Guangfa Lu March 2003Advanced Topics on VHDL Configurations

57 Topics AliasesSubprograms Generics & Configurations


Download ppt "Topics AliasesSubprograms Generics & Configurations."

Similar presentations


Ads by Google