ПТСиПЦУвСБ/Лекция 4
Материал из Wiki
- Заголовок
- Типы данных языка VHDL
- Автор
- Авдеев Н.А.
- Нижний колонтитул
- ПТСиПЦУвСБ/Лекция 4
- Дополнительный нижний колонтитул
- Авдеев Н.А., 18:45, 25 марта 2014
Содержание |
Слайд: Содержание
- Тип [un]signed пакета numeric_std
- Описание комбинационных схем на языке VHDL
- оператор generic и generate
- Цифровые автоматы
Слайд: Формальный синтаксис декларации generic
entity_declaration ⇐ entity identifier is [ generic ( generic_interface_list ) ; ] [ port ( port_interface_list ) ; ] { entity_declarative_item } [ begin { concurrent_assertion_statement | passive_concurrent_procedure_call_statement | passive_process_statement } ] end [ entity ] [ identifier ] ; interface_list ⇐ interface_declaration { ; ... } interface_declaration ⇐ identifier { , ... } : subtype_indication [ := expression ]
Слайд: Пример 1 (generic)
entity and2 is generic ( Tpd : time ); port ( a, b : in std_logic; y : out std_logic ); end entity and2; architecture simple of and2 is begin and2_function : y <= a and b after Tpd; end architecture simple;
Оператор port map
instantiation_label : component_name port map (port list);
instantiation_label : [ component ] component_name | entity entity_name [ ( architecture_identifier ) ] | configuration configuration_name [ generic map ( generic_association_list ) ] [ port map ( [ port_name => ] signal_name [, [ port_name => ] signal_name]... ) ] ;
Пример:
gate1 : and2 -- [ component ] component_name
generic map ( Tpd => 2 ns )
port map ( a => sig1,
b => sig2,
y => sig_out );
gate2 : entity work.and2(simple) -- entity entity_name [ ( architecture_identifier ) ]
generic map ( Tpd => 3 ns )
port map ( a => a1, b => b1, y => sig1 );
Слайд: Пример 2 (generic)
entity control_unit is generic ( Tpd_clk_out, Tpw_clk : delay_length; debug : boolean := false ); port ( clk : in std_logic; ready : in std_logic; control1, control2 : out std_logic ); end entity control_unit; . . . generic map ( 200 ps, 1500 ps, false ) generic map ( Tpd_clk_out => 200 ps, Tpw_clk => 1500 ps ) generic map ( 200 ps, 1500 ps, debug => open )
Слайд: Пример 3 (generic)
entity reg is generic ( width : positive ); port ( d : in std_logic_vector(width - 1 downto 0); q : out std_logic_vector(width - 1 downto 0); clk, reset : in std_logic ); end entity reg; architecture behavioral of reg is begin behavior : process (clk, reset) is constant zero : std_logic_vector(width - 1 downto 0) := (others => '0'); begin if reset = '1' then q <= zero; elsif rising_edge(clk) then q <= d; end if; end process behavior; end architecture behavioral;
Слайд: Расширение VHDL-2008 Generic Types
entity generic_mux2 is generic ( type data_type ); port ( sel : in bit; a, b : in data_type; z : out data_type ); end entity generic_mux2; architecture rtl of mux2 is begin z <= a when not sel else b; end architecture rtl; . . . signal sel_bit, a_bit, b_bit, z_bit : std_logic; . . . bit_mux : entity work.generic_mux2(rtl) generic map ( data_type => std_logic ) port map ( sel => sel_bit, a => a_bit, b => b_bit, z => z_bit );
Слайд: Конструкция generate
for_generate_statement ⇐ Метка_generate : for идентификатор in описание_диапазона generate [ { Декларативная_часть } begin ] { параллельные_операторы } [ end ; ] end generate [ Метка_generate ] ;
описание_диапазона ⇐ discrete_subtype_indication | range_attribute_name | simple_expression ( to | downto ) simple_expression
Слайд: Пример (generate)
library ieee; use ieee.std_logic_1164.all; entity register_tristate is generic ( width : positive ); port ( clock : in std_logic; out_enable : in std_logic; data_in : in std_logic_vector(width - 1 downto 0); data_out : out std_logic_vector(width - 1 downto 0) ); end entity register_tristate;
architecture cell_level of register_tristate is component D_flipflop is port ( clk : in std_logic; d : in std_logic; q : out std_logic ); end component D_flipflop; component tristate_buffer is port ( a : in std_logic; en : in std_logic; y : out std_logic ); end component tristate_buffer; begin cell_array : for bit_index in width - 1 downto 0 generate signal data_unbuffered : std_logic; begin cell_storage : component D_flipflop port map ( clk => clock, d => data_in(bit_index), q => data_unbuffered ); cell_buffer : component tristate_buffer port map ( a => data_unbuffered, en => out_enable, y => data_out(bit_index) ); end generate cell_array; end architecture cell_level;
Слайд: Пример - схема (generate)
|
---|
Слайд: Условный generate
if_generate_statement ⇐ Метка_generate : if Условие generate generate_statement_body { elsif condition generate generate_statement_body } [ else generate generate_statement_body ] end generate [ Метка_generate ] ;
Слайд: Условный generate (Пример)
library ieee; use ieee.std_logic_1164.all; entity shift_reg is port ( phi1, phi2 : in std_ulogic; serial_data_in : in std_ulogic; parallel_data : out std_ulogic_vector ); end entity shift_reg; -------------------------------------------------- architecture cell_level of shift_reg is alias normalized_parallel_data : std_ulogic_vector(0 to parallel_data'length - 1) is parallel_data; component master_slave_flipflop is port ( phi1, phi2 : in std_ulogic; d : in std_ulogic; q : out std_ulogic ); end component master_slave_flipflop; begin reg_array : for index in normalized_parallel_data'range generate begin reg : if index = 0 generate cell : component master_slave_flipflop port map ( phi1, phi2, d => serial_data_in, q => normalized_parallel_data(index) ); else generate cell : component master_slave_flipflop port map ( phi1, phi2, d => normalized_parallel_data(index - 1), q => normalized_parallel_data(index) ); end generate other_cell; end generate reg_array; end architecture cell_level;