Data Types Composite Date Types n Arrays Single

  • Slides: 46
Download presentation
Data Types

Data Types

Composite Date Types n Arrays – Single and multi-dimensional – Arrays are single Type

Composite Date Types n Arrays – Single and multi-dimensional – Arrays are single Type n Records – Records are mixed types

Array n Array is an Indexed Collection of Elements All of the Same Type

Array n Array is an Indexed Collection of Elements All of the Same Type – One-dimensional with one index – Multi-dimensional with several indices

Constrained versus unconstrained Arrays – Constrained » the bounds for an index are established

Constrained versus unconstrained Arrays – Constrained » the bounds for an index are established when the type is defined – Unconstrained » the bounds are established after the type is defined q Each position in the array has a scalar index value associated with it

Array Definition Syntax and Example array of ( discrete_range { , . . .

Array Definition Syntax and Example array of ( discrete_range { , . . . } element_subtype_indication ; ) discrete_range is an index n name of previously declared type with optional range constraint Example 1 type Large_Word is array ( 63 downto 0 ) of bit ; Example 2 type Address_List is array ( 0 to 7 ) of Large_Word ;

More examples of Array Declaration array of ( discrete_range { , . . .

More examples of Array Declaration array of ( discrete_range { , . . . } element_subtype_indication ; ) type 2 D_FFT is array ( 1 to 128, 1 to 128 ) of real ; type Scanner is array ( byte range 0 to 63 ) of integer ; type Sensor_Status is array ( Stdby, On, Off ) of time ;

Unconstrained Declaration of array type Detector_Array is array ( natural range <> ) of

Unconstrained Declaration of array type Detector_Array is array ( natural range <> ) of natural ; n The symbol ‘<>’ is called a box and can be thought of as a place-holder for the index range. n Box is filled in later when the type is used. variable X_Ray_Detector : Detector_Array ( 1 to 64 ) ;

Two Examples of Predefined Unconstrained Types type string is array ( positive range <>

Two Examples of Predefined Unconstrained Types type string is array ( positive range <> ) of character ; type bit_vector is array ( natural range <> ) of bit ;

Two more Examples of Predefined Unconstrained Types type std_ulogic_vector is array ( natural range

Two more Examples of Predefined Unconstrained Types type std_ulogic_vector is array ( natural range <> ) of std_ulogic ; type bit_vector is array ( natural range <> ) of bit ;

Unconstrained Array Ports You do the following: n 1. Specify Port as unconstrained n

Unconstrained Array Ports You do the following: n 1. Specify Port as unconstrained n 2. Determine size of port by Index Bounds of Signal – e. g. , AND Gates With Different Number of Inputs

1. Example of entity of Unconstrained Array Port You specify vector of bits with

1. Example of entity of Unconstrained Array Port You specify vector of bits with no number here entity And_Multiple is port ( i y : : in out bit_vector ; bit ) ; end entity And_Multiple ; i And_Multiple y

2. AND, example continued i y architecture And_Multiple_B of You use And_Multiple is Range

2. AND, example continued i y architecture And_Multiple_B of You use And_Multiple is Range so you begin still do not And_Reducer : process ( i ) is tell how many variable Result : bit ; bits begin Result : = ‘ 1’ ; for Index in i’Range loop Result : = Result and i ( Index ) ; end loop ; variable Signal created outside the loop

AND, example continued y <= Result ; end process And_Reducer ; end architecture And_Multiple_B

AND, example continued y <= Result ; end process And_Reducer ; end architecture And_Multiple_B ; signal Here we finished architecture And_Multiple_B without specifying number of bits In the next slide we will call this architecture structurally and at this time the number of bits will be decided

AND, e. g. , count_value 8 bits i terminal_count y And_Multiple architecture And_Multiple_B signal

AND, e. g. , count_value 8 bits i terminal_count y And_Multiple architecture And_Multiple_B signal count_value : bit_vector ( 7 downto 0 ) ; signal terminal_count : bit ; tc_gate : entity work. And_Multiple ( And_Multiple_B ) port map ( i => count_value , y => terminal_count ) ; n The Input Port Is Constrained by the Index Range of the Input Signal, i. e. , An 8 -Input AND Gate.

Array References n Arrays Can Be Equated, Rather Than Having to Transfer Element by

Array References n Arrays Can Be Equated, Rather Than Having to Transfer Element by Element n Refer to Individual Elements By: – 1. Single Index Value, e. g. , A ( 5 ) – 2. Range: a contiguous sequence of a one-dimensional array can be referred to by using it as an index. e. g. , A( 5 to 15 ) – 3. Previously defined subtype – 4. Index types do not have to be the same

Examples of Array Aggregate Sensor_Status Stdby type Sensor_Status is array ( Stdby , On

Examples of Array Aggregate Sensor_Status Stdby type Sensor_Status is array ( Stdby , On , Off ) On Off of time ; variable FLIR_Status : Sensor_Status : = ( 0 sec , 0 sec ); variable FLIR_Status : Sensor_Status : = ( On => 5 sec ) ; Changes only one field

Array Aggregate Syntax n A List of Element Values Enclosed in Parentheses type Sensor_Status

Array Aggregate Syntax n A List of Element Values Enclosed in Parentheses type Sensor_Status is array ( Stdby , On , Off ) n of time ; This list is used to initialize Elements of an Array to Literal Values aggregate <= ( [ choices => ] expression {. . . } ) syntax

There are two ways to refer to elements in Array Aggregate n Two Ways

There are two ways to refer to elements in Array Aggregate n Two Ways of Referring to Elements – Positional: explicitly list values in order – Named Association: Explicitly list values by their index using “choices” » Order NOT important n Positional and Named Association Cannot Be Mixed Within an Aggregate.

Example of Named Association in Array Aggregate n others Can Be Used in Place

Example of Named Association in Array Aggregate n others Can Be Used in Place of an Index in a Named Association, – Indicating a Value to Be Used for All Elements Not Explicitly Mentioned variable FLIR_Status : Sensor_Status : = ( Off => 10 min, others => 0 sec ) ; Named Association: Explicitly list values by their index using “choices” Order NOT important

Example of setting many elements to one value in Array Aggregate n A Set

Example of setting many elements to one value in Array Aggregate n A Set of Values Can Be Set to a Single Value by Forming a List of Elements Separated by Vertical Bars, |. Here I set 4 elements of array to 1 all other to 0 type 2 D_FFT is array ( 1 to 128, 1 to 128 ) of real ; variable X_Ray_FFT : 2 D_FFT : = ( ( 60, 68 ) | ( 62, 67 ) | ( 67, 73 ) | ( 60, 60 ) => 1. 0 , others 0. 0 ) ;

Array Operations: element by element logic operations n One-Dimensional Arrays of Bit or Boolean

Array Operations: element by element logic operations n One-Dimensional Arrays of Bit or Boolean – Element by element AND, OR, NAND, NOR, XNOR can be done on array type Large_Word is array ( 63 downto 0 ) of bit ; variable Samp_1 , Samp_2 : Large_Word ( 0 to 63 => ‘ 0’ ) ; 0 Large_Word 0 0 63 Here we declare variables Samp_1 and Samp_2 that we will use next

Array Operations: element by element logic operations constant Bit_Mask : Large_Word ( 8 to

Array Operations: element by element logic operations constant Bit_Mask : Large_Word ( 8 to 15 => ‘ 1’ ) ; Samp_2 : = Samp_1 and Bit_Mask ; Bits from 8 to 15 are AND -ed with Bit_Mask

Array Operations: element by element logic operations NOT Operations – Complement of elements of

Array Operations: element by element logic operations NOT Operations – Complement of elements of a single array, NOT Samp_2 : = not Samp_1 ;

1 D Shift and Rotate Array Operations n One-Dimensional Arrays Can Be Shifted and

1 D Shift and Rotate Array Operations n One-Dimensional Arrays Can Be Shifted and Rotated – Shift » Logical: Shifts and fills with zeros » Arithmetic: Shifts and fills with copies from the end being vacated – Rotate » Shifts bits out and back in at other end

Shift and rotate operations Shift left logic B” 1010_1100 ” sll 4 == B”

Shift and rotate operations Shift left logic B” 1010_1100 ” sll 4 == B” 1100_0000 ” B” 1010_1100 ” sla 4 == B” 1100_0000 ” B” 1010_1100 ” sra 4 == B” 1111_1010 ” B” 1010_1100 ” rol 4 == B” 1100_1010 ” Shift right arithmetic Rotate left

Relational Array Operations n One-Dimensional Arrays Can Be Operated on by Relational Operators, =

Relational Array Operations n One-Dimensional Arrays Can Be Operated on by Relational Operators, = , /= , <= , >= – Arrays need not be of the same length – Arrays must be of same type

Array Operations: Concatenation n Concatenation Operator, & – Can combine array and scalar B”

Array Operations: Concatenation n Concatenation Operator, & – Can combine array and scalar B” 1010_1100 ” & B” 1100_0000 ” == B” 1010_1100_0000 ” B” 1010_1100 ” & ‘ 1’ == B” 1010_1100_1 ”

Conversion from one Array Type to another n One Array Type Can Be Converted

Conversion from one Array Type to another n One Array Type Can Be Converted to Another If: – Same element type – Same number of dimensions – Same index types

Example of Array Type Conversions Example subtype name is string ( 1 to 20

Example of Array Type Conversions Example subtype name is string ( 1 to 20 ) ; type display_string is array ( integer range 0 to 19 ) of character ; variable item_name : name ; variable display : display_string ; display : = display_string ( item_name ) ; 0 to 19 1 to 20

Example of Array Aggregate n Assignments Can Be Made From a Vector to an

Example of Array Aggregate n Assignments Can Be Made From a Vector to an Aggregate of Scalars or Vice-Versa. type Sensor_Status is array ( Stdby, On, Off ) of time ; variable Stdby_Time, On_Time, Off_Time : time ; Variable FLIR_Status : Sensor_Status : = ( 0 sec , 0 sec ) ; Aggregate of scalars ( Stdby_Time, On_Time, Off_Time ) : = Flir_Status ;

Predefined Attributes n Predefined Attributes deal with data obtained from Blocks, Signals, Types and

Predefined Attributes n Predefined Attributes deal with data obtained from Blocks, Signals, Types and Subtypes n Return values such as: – length of an array type – time since last signal change – range of values in a type n We showed earlier attributes for signals. Now we show for types Predefined attributes are useful for performing certain type of functions such as: – – timing checks bounds clock edge detection type conversion

Array Type Bound Example: use of predefined attributes attribute

Array Type Bound Example: use of predefined attributes attribute

Another Example of array bound

Another Example of array bound

Multi-range array attributes

Multi-range array attributes

Array length attributes

Array length attributes

Range attributes

Range attributes

Type attributes position function

Type attributes position function

Homework: Attributes Exercise

Homework: Attributes Exercise

Example of using Attributes We calculate resistance dividing voltage by current

Example of using Attributes We calculate resistance dividing voltage by current

User Defined Attributes n These attributes attach data to objects n They are defined

User Defined Attributes n These attributes attach data to objects n They are defined by the user of Data types n Data is constant n They are accessed with the same syntax as predefined attributes

User Defined Attributes

User Defined Attributes

Records n Records in VHDL are collections of Named Elements of Possibly Different Types.

Records n Records in VHDL are collections of Named Elements of Possibly Different Types. n To refer to a Field of a Record Object, you should use a Selected Name.

Example of a Record * type instruction is record op_code : processor_op ; address_mode

Example of a Record * type instruction is record op_code : processor_op ; address_mode : mode ; operand 1, operand 2 : integer range 0 to 15 ; end record ; *Ashenden, VHDL cookbook

Records n Aggregates Can Be Used to Write Literal Values for Records. n Positional

Records n Aggregates Can Be Used to Write Literal Values for Records. n Positional and Named Association Can Be Used – Record field names being used in place of array index names.

End of Lecture

End of Lecture

Sources Prof. K. J. Hintz Department of Electrical and Computer Engineering George Mason University

Sources Prof. K. J. Hintz Department of Electrical and Computer Engineering George Mason University