packages and use clauses instructors: fu-chiung cheng ( 鄭福炯 ) associate professor computer...

30
Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭鄭鄭 ) Associate Professor Computer Science & Engineering Tatung University

Upload: steven-emory-hall

Post on 04-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Packages and Use Clauses

Instructors: Fu-Chiung Cheng

(鄭福炯 )Associate Professor

Computer Science & EngineeringTatung University

Page 2: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Outline

• Package Declarations• Package bodies • Use Clauses• Standard Packages

Page 3: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Declarations

Packages in VHDL provide an important way of organizing the data and subprograms declared in a model, for example a package may be– A set of subprograms that provide operations on a

particular type of data– Set of declarations needed to model a particular

design

Related info. can be collected into a design unit (i.e. package)

Page 4: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Declarations

Packages separate the external view of the items they declare from the implementation of those items (information hiding).– External view: package declaration– Implementation: package body

Page 5: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Declarations

EBNF: see page 232 Example (Figure 8.1):

package cpu_types is constant word_size : positive := 16; constant address_size : positive := 24;

subtype word is bit_vector(word_size - 1 downto 0); subtype address is bit_vector(address_size - 1 downto 0); type status_value is ( halted, idle, fetch, mem_read, mem_write, io_read, io_write, int_ack );end package cpu_types;

Page 6: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Declarations

Package declarative item– Type– Subtype– Constant– Signal– Subprograms – Alias– …

Page 7: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Declarations

A package is another form of design unit A package is analyzed and placed into the wor

king directory as a library unit Selected name of an item in a package

– Library_Name.Package_Name.item– Ex. Work.cpu_type.status_value– Ex. Fig 8.2

Packages can be shared among models– Ex. Fig 8.3, 8.4 and 8.5

Page 8: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

entity address_decoder is port ( addr : in work.cpu_types.address; status : in work.cpu_types.status_value; mem_sel, int_sel, io_sel : out bit );end entity address_decoder;--------------------------------------------------architecture functional of address_decoder is constant mem_low : work.cpu_types.address := X"000000"; constant mem_high : work.cpu_types.address := X"EFFFFF"; constant io_low : work.cpu_types.address := X"F00000"; constant io_high : work.cpu_types.address := X"FFFFFF";begin mem_decoder : mem_sel <= '1' when ( work.cpu_types."="(status,

….end architecture functional;

Fig 8.2

Page 9: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

library ieee; use ieee.std_logic_1164.all;package clock_pkg is constant Tpw : delay_length := 4 ns; signal clock_phase1, clock_phase2 : std_ulogic;end package clock_pkg;

Fig 8.3

library ieee; use ieee.std_logic_1164.all;entity io_controller is port ( ref_clock : in std_ulogic; -- . . . );end entity io_controller;--------------------------------------------------architecture top_level of io_controller isbegin internal_clock_gen : entity work.phase_locked_clock_gen(std_cell) port map ( reference => ref_clock, phi1 => work.clock_pkg.clock_phase1, phi2 => work.clock_pkg.clock_phase2 );end architecture top_level;

Fig 8.4

Page 10: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

architecture fsm of bus_sequencer is -- NOTE: it uses the clock signals from clock_pkg to synchronize the fsm.

signal next_state_vector : -- . . .;begin

bus_sequencer_state_register : entity work.state_register(std_cell) port map ( phi1 => work.clock_pkg.clock_phase1, phi2 => work.clock_pkg.clock_phase2, next_state => next_state_vector, -- . . . );

end architecture fsm;

Fig 8.5

Page 11: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Declarations

Note different VHDL suites provide different ways of specifying the library into which a library unit is placed.

Global signals can be declared in packages.– A global signal can affect overall behavior of a

system (not by port but by global signal)– Global signals should be used sparingly.– Ex Fig 8.3

Page 12: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Subprograms, constants in Package Declaration

Constants, Procedures and functions can be declared in a package

Example:subtype word32 is bit_vector(31 downto 0);procedure add ( a, b : in word32;

result : out word32; overflow : out boolean );function "<" ( a, b : in word32 ) return boolean;constant max_buffer_size : positive;

Page 13: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

package cpu_types is -- a revised version of Fig 8.1 constant word_size : positive := 16; constant address_size : positive := 24; subtype word is bit_vector(word_size - 1 downto 0); subtype address is bit_vector(address_size - 1 downto 0); type status_value is ( halted, idle, fetch, mem_read, mem

_write, io_read, io_write, int_ack ); subtype opcode is bit_vector(5 downto 0); function extract_opcode ( instr_word : word ) return opc

ode; constant op_nop : opcode := "000000"; constant op_breq : opcode := "000001"; constant op_brne : opcode := "000010"; constant op_add : opcode := "000011"; -- . . .end package cpu_types;

Fig 8.6

Page 14: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

architecture behavioral of cpu isbegin interpreter : process is variable instr_reg : work.cpu_types.word; variable instr_opcode : work.cpu_types.opcode; begin -- . . . -- initialize loop -- . . . -- fetch instruction instr_opcode := work.cpu_types.extract_opcode( instr_reg ); case instr_opcode is when work.cpu_types.op_nop => null; when work.cpu_types.op_breq => . . .

… end case; end loop; end process interpreter;end architecture behavioral;

Fig 8.7

Page 15: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Body

Package declarations provide external views (interfaces) and package bodies provide the implementation (information hiding)

If a package declaration only includes types, signals, constants, then there is no need to have package body

EBNF: see page 239 The package_body_declarative_item must include the

full declarations (implementation) of all subprograms defined in the corresponding package declaration.

Page 16: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

package bit_vector_signed_arithmetic is

function "+" ( bv1, bv2 : bit_vector ) return bit_vector;

function "-" ( bv : bit_vector ) return bit_vector;

function "*" ( bv1, bv2 : bit_vector ) return bit_vector;

-- . . .

end package bit_vector_signed_arithmetic;

Fig 8.8

Page 17: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

package body bit_vector_signed_arithmetic is function "+" ( bv1, bv2 : bit_vector ) return bit_vector is -- . . . function "-" ( bv : bit_vector ) return bit_vector is -- . . . function mult_unsigned ( bv1, bv2 : bit_vector ) return bit_vector is

return bit_vector( "*"(unsigned(bv1), unsigned(bv2)) ); end function mult_unsigned; function "*" ( bv1, bv2 : bit_vector ) return bit_vector is begin if bv1(bv1'left) = '0' and bv2(bv2'left) = '0' then return mult_unsigned(bv1, bv2); elsif bv1(bv1'left) = '0' and bv2(bv2'left) = '1' then return -mult_unsigned(bv1, -bv2); elsif bv1(bv1'left) = '1' and bv2(bv2'left) = '0' then return -mult_unsigned(-bv1, bv2); else return mult_unsigned(-bv1, -bv2); end if; end function "*";end package body bit_vector_signed_arithmetic;

Fig 8.8

Page 18: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Package Body

A package declaration is a primary design unit A package body is a secondary design unit Package declarations and package bodies are

analyzed separately– Package declarations must be analyzed before the

declaration bodies– Package declarations must be analyzed before any

other design units refer to them.

Page 19: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Use Clauses

Use clause can make a library unit directly visible in a model, allowing us to omit the library name when referring to the library unit.

Library clause makes the contents of the library accessible to the model and the use clause import the type names.

EBNF: see page 241 Example:

use work.cpu_types; variable data_word : cpu_types.word; variable next_address : cpu_types.address;

Page 20: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Use Clauses

Another Example:use work.cpu_types.word, work.cpu_types.address;

variable data_word : word;

variable next_address : address;

Importing all of the names defined in a package: library.package.ALL– Example:

use ieee.std_logic_1164.all;

Page 21: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

architecture behavioral of cpu isbegin interpreter : process is use work.cpu_types.all; variable instr_reg : word; variable instr_opcode : opcode; begin -- . . . -- initialize loop -- . . . -- fetch instruction instr_opcode := extract_opcode ( instr_reg ); case instr_opcode is when op_nop => null; when op_breq => -- . . . -- . . . end case; end loop; end process interpreter;end architecture behavioral;

Fig 8.9

Page 22: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Predefined Package Standard

Standard package defines some contents that will be used for all designs (Appendix B)– TYPE: boolean, bit, character, sensitive_level, integ

er, time, bit_vector– SUBTYPE: natural, positive, delay_length– Function: now, (>,<,… for integer, bit_vector, ..)

VHDL includes an implicit context clause library std, work, use std.standard.all

at the beginning of each design unit.

Page 23: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

function "<" ( a, b : bit_vector ) return boolean is

variable tmp1 : bit_vector(a'range) := a;

variable tmp2 : bit_vector(b'range) := b;

begin

tmp1(tmp1'left) := not tmp1(tmp1'left); -- negate signed bit

tmp2(tmp2'left) := not tmp2(tmp2'left);

return std.standard."<" ( tmp1, tmp2 );

end function "<";

Fig 8.10

Page 24: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

IEEE Standard Packages

IEEE has published standards for packages that define commonly used data types and operations.– Using these standards can save us development

time– Many tool vendors provide optimized

implementations of these IEEE standard packages– Packages: std_logic_1164, numeric_bit and

numeric_std, math_real, math_complex,

Page 25: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

IEEE std_logic_1164

IEEE standard package std_logic_1164 defines types and operations for models that need to deal with strong, weak and high-impedance strength and with unknown values– Multi-value logic systems

Check types and functions in your CAD tools

Page 26: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Standard VHDL Synthesis Package

IEEE standard packages numeric_bit and numeric_std define arithmetic operations on integers represented using vectors of bit and std_logic element respectively

Most synthesis tools accept models using these types and operations for numeric computations

IEEE standard for synthesizable models specifies that these are the only types that can be used

Page 27: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Standard VHDL Synthesis Package

Appendix A describes the topics of synthesis of VHDL model in more detail.

Appendix C lists numeric_bit and numeric_std packages

See Fig 8.11 on page 247

Page 28: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Standard VHDL Math Packages

IEEE standard packages math_real and math_complex define constants and mathematical functions on real and complex numbers, respectively

See appendix C.

Page 29: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Multi-value Logic (std_logic)

Value Representing===== ==============='U' Uninitialized'X' Forcing Unknown'0' Forcing 0'1' Forcing 1'Z' High Impedance'W' Weak Unknown'L' Weak 0'H' Weak 1'-' Don't care

std_logic satisfies most hardware design needs

Page 30: Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

AND table for std_logic type