packagedeclaration package identifier is packagedeclarativeitem end package identifier

  • Slides: 17
Download presentation

Пакети package_declaration ⇐ package identifier is � package_declarative_item � end � package � �

Пакети package_declaration ⇐ package identifier is � package_declarative_item � end � package � � identifier �; package_body ⇐ package body identifier is � package_body_declarative_item � end � package body � � identifier �; • Обједињују заједничке: – – типове, константе, сигнале, потпрограме. 8

Пример декларације пакета package cpu_types is constant word_size : positive : = 16; constant

Пример декларације пакета package cpu_types is constant word_size : positive : = 16; constant addr_size : positive : = 24; subtype word_t is bit_vector(word_size-1 downto 0); subtype addr_t is bit_vector(addr_size-1 downto 0); type status_value_t is (halted, idle, fetch, mem_read, mem_write, io_read, io_write, int_ack); end package cpu_types; 9

use use_clause ⇐ use selected_name �, . . . �; selected_name ⇐ library_identifier. package_identifier.

use use_clause ⇐ use selected_name �, . . . �; selected_name ⇐ library_identifier. package_identifier. ⦅ identifier | character_literal | operator_symbol | all ⦆ • Пример (појединачна имена из пакета постају видљива): use work. cpu_types. word_t, work. cpu_types. addr_t; variable data_word : word_t; variable next_addr : addr_t; • Пример (сва имена из пакета постају видљива): use work. cpu_types. all; 11

alias_declaration ⇐ alias identifier � : subtype_indication � is name � signature �; signature

alias_declaration ⇐ alias identifier � : subtype_indication � is name � signature �; signature ⇐ [� type_mark �, . . . � � � return type_mark �] • Пример: alias alu_data_width is work. alu_types. data_width; • Могуће је дефинисати алијасе и за типове: alias binary_string is bit_vector; • Могуће је дефинисати алијасе и за потпрограме: procedure increment(bv : inout bit_vector, by : in integer : = 1) alias bv_increment is work. ops. increment[bit_vector, integer] 13

Пример type register_array is array (0 to 15) of bit_vector(31 downto 0); type register_set

Пример 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; alias PSW is CPU_registers. program_status; alias PC is CPU_registers. program_counter; alias GPR is CPU_registers. general_purpose_registers; 14

Инстанцирање ентитета entity_instantiation_statement ⇐ instantiation_label: entity_name � (architecture_identifier) � � generic map (generic_association_list) �

Инстанцирање ентитета entity_instantiation_statement ⇐ instantiation_label: entity_name � (architecture_identifier) � � generic map (generic_association_list) � � port map (port_association_list) �; port_association_list ⇐ ⦅ � port_name => � ⦅ signal_name | expression | open ⦆ ⦆ �, . . . � • open – означава да порту није придружен сигнал. • Уколико се наведу називи портова, редослед није битан. 15

Пример entity DRAM_controller is port( rd, wr, mem : in bit; ras, cas, we,

Пример entity DRAM_controller is port( rd, wr, mem : in bit; ras, cas, we, ready : out bit ); end entity DRAM_controller; mem_controller 1: entity work. DRAM_controler(fpld) port map( cpu_rd, cpu_wr, cpu_mem, mem_ras, mem_cas, mem_we, cpu_rdy ); mem_controller 2: entity work. DRAM_controler(fpld) port map( wr => cpu_wr, rd => cpu_rd, mem => cpu_mem, cas => mem_cas, ras => mem_ras, we => mem_we, ready => cpu_rdy ); 16