aliases
Download
Skip this Video
Download Presentation
Aliases

Loading in 2 Seconds...

play fullscreen
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