Aliases
Download
1 / 14

Aliases - PowerPoint PPT Presentation


  • 113 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Aliases' - bobby


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Aliases
Aliases

Instructors:

Fu-Chiung Cheng

(鄭福炯)

Associate Professor

Computer Science & Engineering

Tatung University


Aliases1
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


Aliases for data objects
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


Fig 9 1
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;


Aliases for data objects1
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;


Aliases for data objects2
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


Fig 9 2
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 "+";


Aliases for non data items
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:


Aliases for non data items1
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;


Aliases for non data items2
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 ];


Aliases for non data items3
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


Fig 9 21
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”;


Alias declaration
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)


Alias declaration1
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