1 / 14

Aliases

Aliases. Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University. 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

bobby
Télécharger la présentation

Aliases

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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"; opcode mode page offset 2 bits 3 bits 8 bits 3 bits

More Related