Professional Documents
Culture Documents
Vlsi-Vhdl
Vlsi-Vhdl
• Један ресурс
• Два корисника
1
Арбитратор
2
DRAM контролер
• Генерисање синхронизационих сигнала
• Адреса се дели на два дела:
– прво се поставља адреса реда
– након тога адреса колоне
• Временски параметри:
– дужина трајања адресе реда Tras
– дужина трајања адресе колоне Tcas
– дужина трајања освежавања Tpr
3
DRAM контролер
4
DRAM контролер
• Пример:
Tras = 75 ns
Tcas = 15 ns
Tpr = 35 ns
• Минимална периода сигнала такта?
• Како реализовати коло ако је потребна периода сигнала
такта од 5 ns?
5
DRAM контролер
• Излаз може имати шум
• Асинхрони DRAM је осетљив на шум
• Направити синхрони излаз
– look-ahead output buffer
6
Видљивост
декларација
• Свака декларативна секција
има себи одговарајућу
секцију за исказе.
7
Пакети
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 addr_size : positive := 24;
type status_value_t is
(halted, idle, fetch, mem_read,
mem_write, io_read, io_write, int_ack);
end package cpu_types;
9
Пример коришћења пакета
• Пакет се одвојено анализира и након тога смешта у радну
библиотеку (work).
• Може се сместити и у неку другу библиотеку (зависи од
алата, а не од VHDL кода).
• Пример коришћења:
entity address_decoder is
port(
addr : in work.cpu_types.addr_t;
status : in work.cpu_types.status_value_t;
mem_sel, int_sel, io_sel : out bit
);
end entity address_decoder;
10
use
use_clause ⇐
use selected_name ⦃,...⦄;
selected_name ⇐
library_identifier.
package_identifier.
⦅ identifier | character_literal | operator_symbol | all ⦆
• Пример:
alias alu_data_width is work.alu_types.data_width;
13
Пример
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;
14
Инстанцирање ентитета
entity_instantiation_statement ⇐
instantiation_label:
entity entity_name ⟦ (architecture_identifier) ⟧
⟦ generic map (generic_association_list) ⟧
⟦ port map (port_association_list) ⟧;
port_association_list ⇐
⦅ ⟦ port_name => ⟧
⦅ signal_name | expression | open ⦆ ⦆ ⦃,...⦄
15
Пример
entity DRAM_controller is
port(
rd, wr, mem : in bit;
ras, cas, we, ready : out bit
);
end entity DRAM_controller;
mem_controller1: entity work.DRAM_controler(fpld)
port map(
cpu_rd, cpu_wr, cpu_mem,
mem_ras, mem_cas, mem_we, cpu_rdy
);
mem_controller2: 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
Потенцијални проблем
• У случају великог броја веза између ентитета:
– постоји велики број конектујућих сингнала,
– промена интерфејса ентитета захтева промене у повезивању
• Тип record представља решење за наведене проблеме
17