Presentation is loading. Please wait.

Presentation is loading. Please wait.

Aliases Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.

Similar presentations


Presentation on theme: "Aliases Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University."— Presentation transcript:

1 Aliases Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

2 Aliases Since the main purpose of a VHDL model is to describe a hardware design, it should be made as easy as possible to read and understand Aliases in VHDL provide a means of making model clearer Aliases  alternate names

3 Aliases for Data Objects Data object such as constants, variables, signals can declare an alias for the object with an alias declaration EBNF: see page 258 Example: Figure 9.1

4 Fig 9.1 library ieee; use ieee.std_logic_1164.all; use work.alu_types.all, work.io_types.all; architecture structural of controller_system is alias alu_data_width is work.alu_types.data_width; alias io_data_width is work.io_types.data_width; signal alu_in1, alu_in2, alu_result : std_logic_vector(0 to alu_data_width - 1); signal io_data : std_logic_vector(0 to io_data_width - 1); --... begin --... end architecture structural;

5 Aliases for Data Objects Example type register_array is array (0 to 15) of bit_vector(31 downto 0); type register_set is record general_purpose_registers : register_array; program_counter : bit_vector(31 downto 0); program_status : bit_vector(31 downto 0); end record; variable CPU_registers : register_set;

6 Aliases for Data Objects Example (cont) alias PSW is CPU_registers.program_status; alias PC is CPU_registers.program_counter; alias GPR is CPU_registers.general_purpose_registers; alias SP is CPU_registers.general_purpose_registers(15); alias interrupt_level is PSW(30 downto 26); alias SP is GPR(15); alias interrupt_level : bit_vector(4 downto 0) is PSW(30 downto 26); -- EBNF in page 259

7 Fig 9.2 function "+" ( bv1, bv2 : bit_vector ) return bit_vector is alias norm1 : bit_vector(1 to bv1'length) is bv1; alias norm2 : bit_vector(1 to bv2'length) is bv2; variable result : bit_vector(1 to bv1'length); variable carry : bit := '0';-- Note that input begin-- may be any slices if bv1'length /= bv2'length then report "arguments of different length" severity failure; else for index in norm1'reverse_range loop result(index) := norm1(index) xor norm2(index) xor carry; carry := ( norm1(index) and norm2(index) ) or ( carry and ( norm1(index) or norm2(index) ) ); end loop; end if; return result; end function "+";

8 Aliases for Non-Data Items Aliases can also be applied to types, subprograms, packages, entities, Label is the only kinds of items that can not be “ aliased ” EBNF for non data item: see page 261 Examples:

9 Aliases for Non-Data Items Type alias alias binary_string is bit_vector; variable s1, s2 : binary_string(0 to 7); Literal alias type system_status is (idle, active, overloaded); alias status_type is work.system_types.system_status;

10 Aliases for Non-Data Items Procedure alias -- the following two procs is defined in arithmetic_ops procedure increment ( bv : inout bit_vector; by : in integer := 1 ); procedure increment ( int : inout integer; by : in integer := 1 ); -- some vhdl program can alias them alias bv_increment is work.arithmetic_ops.increment [ bit_vector, integer ]; alias int_increment is work.arithmetic_ops.increment [ integer, integer ];

11 Aliases for Non-Data Items Function alias alias "*" is "and" [ bit, bit return bit ]; alias "+" is "or" [ bit, bit return bit ]; alias "-" is "not" [ bit return bit ]; -- then we use the following syntax s <= a * b + (-a) * c; -- operator overloading Note that binary operators must aliased to a function with two parameter

12 Fig 9.2 -- package define alias package DMA_controller_types_and_utilities is alias word is work.cpu_types.word; alias status_value is work.cpu_types.status_value; alias "+" is work.bit_vector_unsigned_arithmetic."+" [ bit_vector, bit_vector return bit_vector ]; --... end package DMA_controller_types_and_utilities; -- use the above package then we can write Address_reg0:= address_reg0+X ” 0000_0004 ” ;

13 Alias Declaration An indexed part of a object or a slice of the object can be given alternative names by using an alias declaration. The declaration can be used for signals, variables, or constants. Example: – alias c_flag : BIT is flag_register(3) – alias v_flag : BIT is flag_register(2) – alias n_flag : BIT is flag_register(1) – alias z_flag : BIT is flag_register(0)

14 Alias Declaration address (11 bits) = page (3 bits) + offset (8 bits) Example: – ALIAS page :BIT_VECTOR (2 DOWNTO 0) IS instr.adr (10 DOWNTO 8); – ALIAS offset : BIT_VECTOR (7 DOWNTO 0) IS instr.adr (7 DOWNTO 0); Assignment: – page <= "001"; – offset <= X"F1"; opcodemodeoffset 3 bits 2 bits 8 bits page 3 bits


Download ppt "Aliases Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University."

Similar presentations


Ads by Google