Escolar Documentos
Profissional Documentos
Cultura Documentos
Na aula de hoje
VHDL
Dicas de Modelagem
Conhecendo a linguagem Primeiros passos...
Introduo
A implementao manual de componentes complexos uma tarefa quase impossvel Uma alternativa utilizar uma linguagem de programao que descreve hardware (HDL Hardware Description Languages)
Verilog; VHDL
Introduo
VHDL: Uma linguagem para descrever sistemas digitais Outras linguagens de descrio de hardware
Introduo
Origem
Linguagem para descrever hardware, no contexto do programa americano Very High Speed Integrated Circuits (VHSIC), iniciado em 1980. VHDL VHSIC Hardware Description Language Padro IEEE em 1987 (Institute of Electrical and Electronics Engineers), revisado em 1993 Linguagem utilizada mundialmente por empresas de CAD (simulao, sntese, propriedade intelectual).
Especificao dos requisitos documentao Teste usando simulao Verificao formal Sntese Processo de projeto mais confivel, com custo e tempo mnimos Evitar erros de projeto
Arquitetura de Computadores I Leonel Tedesco Slide 6
Objetivo
Benefcios / Desvantagens
Projetos independentes da tecnologia (implementao fsica postergada) Ferramentas de CAD compatveis entre si Flexibilidade: reutilizao, escolha de ferramentas e fornecedores Facilidade de atualizao dos projetos Permite explorar, em um nvel mais alto de abstrao, diferentes alternativas de implementao Permite, atravs de simulao, verificar o comportamento do sistema digital
Benefcios / Desvantagens
Nvel fsico:
Reduz tempo de projeto (favorece nveis abstratos de projeto) Reduz custo do projeto Elimina erros de baixo nvel (se usado como base de ferramentas automatizadas) Conseqncia: reduz time-to-market (tempo de chegada de um produto ao mercado)
Nveis de abstrao
Modelo comportamental (funcionalidade)
Resposta curta: No, uma linguagem de descrio de hardware! Cdigo executado em um simulador
Projeto do usurio
VHDL Testbench
especificao comportamental do ambiente externo ao projeto interage com o projeto no precisa ser descrito em VHDL (o projeto VHDL pode ser validado em ambiente C/C++!!)
Testbench
Gerao de estmulos e Captura de sadas
Projeto RTL
Comparao
Resultados
Resultados esperados
Dicas de modelagem
Conveno de nomes
Processamento do projeto
Anlise
Elaborao
Simulao Sntese
Anlise
sintaxe: gramtica da linguagem semntica: significado do modelo Declarao de entidade Corpo da arquitetura Melhor se cada unidade de design um arquivo separado
Elaborao
Cria portas Cria sinais e processos dentro do corpo da arquitetura Para cada instncia de um componente, copia a entidade instanciada e seu corpo de arquitetura Repete recursivamente
Exemplo de Elaborao
reg4(struct) d0 bit0 d_latch d q clk bit1 d_latch d q clk bit2 d_latch d q clk bit3 d_latch d q gate and2 a y b clk int_clk
q0
d1
q1
d2
q2
d3
q3
en clk
Exemplo de Elaborao
reg4(struct) d0 bit0 d_latch(basic) d q clk bit1 d_latch(basic) d q clk bit2 d_latch(basic) d q clk bit3 d_latch(basic) d q gate and2(basic) a y b clk int_clk
q0
d1
q1
d2
q2
d3
q3
en clk
Simulao
Simulao de eventos
Tempo avana discretamente Quando os valores dos sinais mudam ocorrem eventos
Sntese
Traduz RTL para um netlist em nvel de portas lgicas Prepara para sntese em FPGA ou ASIC (fluxo de projetos diferenciados)
Modelo RTL
Simulao
Sntese
Simulao
Test Bench
Simulao
A linguagem NO case-sensitive
Comentrios
Definies
RTL: Register Transfer Level Nvel de transferncia de registradores VHDL RTL: VHDL sintetizvel
Behavioral VHDL: VHDL comportamental Sntese dependente da forma de escrita e da ferramenta utilizada
Definio comum: VHDL RTL tudo que pode ser sintetizvel (pode virar um hardware)
Arquitetura de Computadores I Leonel Tedesco Slide 22
Ferramentas
ghdl (Linux)
Modelsim (Windows/Linux)
Modelando interfaces
Nome da entidade
entity reg4 is port ( d0, d1, d2, d3, en, clk : in bit; q0, q1, q2, q3 : out bit ); end entity reg4;
pontuao
Palavras reservadas
Tipo da porta
Modelando comportamento
Architecture
Descreve a implementao de uma entidade Pode ter vrias arquiteturas para uma nica entidade
Exemplo comportamental
architecture behav of reg4 is begin storage : process is variable stored_d0, stored_d1, stored_d2, stored_d3 : bit; begin if en = '1' and clk = '1' then stored_d0 := d0; stored_d1 := d1; stored_d2 := d2; stored_d3 := d3; end if; q0 <= stored_d0 after 5 ns; q1 <= stored_d1 after 5 ns; q2 <= stored_d2 after 5 ns; q3 <= stored_d3 after 5 ns; wait on d0, d1, d2, d3, en, clk; end process storage; end architecture behav;
Arquitetura de Computadores I Leonel Tedesco Slide 26
Modelando estrutura
Declaraes wait
Exemplo estrutural
bit0 d_latch d q clk bit1 d_latch d q clk bit2 d_latch d q clk bit3 d_latch d q gate and2 a y b clk int_clk
d0
q0
d1
q1
d2
q2
d3
q3
en clk
Exemplo estrutural
entity d_latch is port ( d, clk : in bit; q : out bit ); end entity d_latch; architecture basic of d_latch is begin latch_behavior : process is begin if clk = 1 then q <= d after 2 ns; end if; wait on clk, d; end process latch_behavior; end architecture basic;
entity and2 is port ( a, b : in bit; y : out bit ); end entity and2; architecture basic of and2 is begin and2_behavior : process is begin y <= a and b after 2 ns; wait on a, b; end process and2_behavior; end architecture basic;
Exemplo estrutural
Exemplo misto
multiplier multiplicand
shift_reg
control_ section
shift_ adder
reg
product
Exemplo misto
entity multiplier is port ( clk, reset : in bit; multiplicand, multiplier : in integer; product : out integer ); end entity multiplier; architecture mixed of mulitplier is signal partial_product, full_product : integer; signal arith_control, result_en, mult_bit, mult_load : bit; begin arith_unit : entity work.shift_adder(behavior) port map ( addend => multiplicand, augend => full_product, sum => partial_product, add_control => arith_control ); result : entity work.reg(behavior) port map ( d => partial_product, q => full_product, en => result_en, reset => reset ); ...
Arquitetura de Computadores I Leonel Tedesco Slide 33
Exemplo misto
multiplier_sr : entity work.shift_reg(behavior) port map ( d => multiplier, q => mult_bit, load => mult_load, clk => clk ); product <= full_product; control_section : process is -- variable declarations for control_section -- begin -- sequential statements to assign values to control signals -- wait on clk, reset; end process control_section; end architecture mixed;
Test Benches
Testando um projeto por simulao Usar um modelo de test bench
Um corpo de arquitetura inclui uma unidade que ser testada (unit under test) Aplica srie de testes s entradas Monitora os valores da sada
Carry
entity halfadd is port (A, B: in std_logic; Sum, Carry: out std_logic); end halfadd; architecture comp of halfadd is begin Sum <= A xor B; Carry <= A and B; end comp;
Arquitetura de Computadores I Leonel Tedesco Slide 38
Exemplo do Somador
library IEEE; use IEEE.Std_Logic_1164.all;
A biblioteca define os tipos
entity halfadd is port (A, B: in std_logic; Sum, Carry: out std_logic); end halfadd;
architecture comp of halfadd is begin Sum <= A xor B; Carry <= A and B; end comp;
UUT : entity work.halfadd port map ( A => aa, B => bb, Sum => soma, Carry => vaium );
aa <= '0', '1' after 10 ns, '0' after 20 ns, '1' after 30 ns; bb <= '0', '1' after 20 ns; end TB_ARCHITECTURE;
Prtica
Usando o ISE
Criar um mdulo de half-adder Criar um testbench do half-adder, com estmulos de entrada Fazer a sntese e simular o circuito Essa prtica deve ser feita em sala de aula!
Full_Adder
A partir do exemplo ao lado (que une dois half_adder para fazer um somador completo de um bit) faa:
Simule o somador completo de 1 bit Estenda o somador completo para um de 4 bits. Faa o cdigo VHDL e a simulao do somador de 4 bits Dica (consulte slides finais com informaes sobre somadores)
Arquitetura de Computadores I Leonel Tedesco Slide 42
Prtica
Estruturas da linguagem
Consultar quando tiver dvidas na sintaxe.
Constantes
constant number_of_bytes : integer := 4; constant number_of_bits : integer := 8 * number_of_bytes; constant e : real := 2.718281828; constant prop_delay : time := 3 ns; constant size_limit, count_limit : integer := 255;
Variveis
variable index : integer := 0; variable sum, average, largest : real; variable start, finish : time := 0 ns;
Onde declarar?
architecture exemplo of entidade is constant pi : real := 3.14159; begin process is variable contador : integer; begin -- uso de pi e contador end process; end architecture exemplo;
Tipos
Declarao de tipos
type apples is range 0 to 100; type oranges is range 0 to 100; type grapes is range 100 downto 0;
Modos do Sinal
IN: dados fluem para dentro da Entidade, que no pode escrever estes sinais
OUT: dados fluem para fora da Entidade, que no pode ler estes sinais
Modos do Sinal
BUFFER: dados fluem para fora da Entidade, que pode ler estes sinais, permitindo realimentao interna
Tipos do Sinal
BIT, BIT_VECTOR
Valores: 0 ou 1 Atribuio de valor: bit_signal <= '0'; Nativos da linguagem VHDL, no precisam de declarao de biblioteca
STD_LOGIC, STD_LOGIC_VECTOR
Valores: 0, 1, - (dont care), Z (alta impedncia), X (indeterminado) Biblioteca ieee Declaraes necessrias
LIBRARY USE
Arquitetura de Computadores I Leonel Tedesco Slide 51
Operadores Aritmticos
+ soma ou identidade - subtrao ou negao * multiplicao / diviso mod mdulo rem resto da diviso abs valor absoluto ** exponenciao
Exemplos de Nmeros
23 23.1 46E5 1.234E09 2#11111101# 2#0.100# 2#1#E10 123_456 0 146 0.0 3.14159 1E+12 19e00 98.6E+21 34.0e-08 = 16#FD# = 16#0fd# = 8#0.4# = 12#0.6# = 16#4#E2 = 10#1024#E+00 3.131_592_6 2#1111_1100_0 000_0000#
Arquitetura de Computadores I Leonel Tedesco Slide 53
Ponto Flutuante
VHDL 2000 exige, no mnimo, 64 bits VHDL 87 e VHDL 93 exigem, no mnimo, 32 bits
Tipos Fsicos
Tipos Fsicos
S possvel somar e subtrair tipos da mesma unidade Multiplicao e diviso por inteiro ou real mantm a unidade
Uso
variable distance : length := 100 m;
Tipos Enumerados
Exemplo
type alu_funcion is (disable, pass, add, subtract, multiply, divide); type octal_digit is (0, 1, 2, 3, 4, 5, 6, 7); type control is (stop, pass);
Uso
variable command : alu_function := pass; variable status : control := pass;
Caracteres
Booleans
type boolean is (false, true); Operadores
and, or, nand e nor fazem lazy evaluation (ou short circuit)
Bits
type bit is (0, 1); Todos os operadores lgicos valem para bits Valores entre aspas simples
variable switch : bit := 0;
Standard Logic
Pacote std_logic_1164 type std_ulogic is ( U, -- no iniciado (unitialized) X, -- desconhecido (unknow) forte 0, -- zero forte 1, -- um forte Z, -- alta impedncia ou desconectado (tri-state) W, -- desconhecido fraco L, -- zero fraco H, -- um fraco -); -- indiferente (dont care)
Construtores seqenciais
Vlidos quando dentro de processos Nem todos so sintetizveis
if
[if_label:] if expresso_lgica then elsif expresso_lgica then else end if [if_label];
case
[case_label:] case expression is when opo1 => when opo2 => when others => end case [case_label];
case (Exemplo)
case opcode is when load | add | subtract => operand := memory_operand; when store | jump | jumpsub | branch => operand := address_operand; when others => operand := none; end case;
case
for
[for_label:] for identificador in intervalo loop end loop [for_label]; Para hardware, significa replicao identificador no precisa ser declarado
for (exemplo)
for count_value in 0 to 127 loop count_out <= count_value; wait for 5 ns; end loop;
for (exemplo)
type controller_state is (initial, idle, active, error); for state in controller_state loop end loop;
Vetores
type word is array (0 to 31) of bit; type word is array (31 downto 0) of bit; type controller_state is (initial, idle, active, error); type state_counts is array (idle to error) of natural; type matrix is array (1 to 3, 1 to 3) of real;
Vetores
type bit_vector is array (natural range <>) of bit; subtype byte is bit_vector(7 downto 0); type std_ulogic_vector is array (natural range <>) of std_ulogic; variable channel_busy_register : bit_vector(1 to 4); variable current_test : std_ulogic_vector(0 to 13) := ZZZZZZZZZZ----;
Flip-Flop D (entidade)
entity FlipFlopD is
port (d, clk : in bit; q, notq : out bit);
Flip-Flop D (arquitetura)
architecture behavior of FlipFlopD is signal state : bit; begin tem que incluir process (clk) is state tambm begin if (clkevent and clk = 1) then state <= d; end if; q <= state; notq <= not state; end process; end architecture behavior;
Comandos Paralelos
Executados fora dos processos Possuem equivalentes para serem executados dentro dos processos Cada um tem o seu lugar, no permitida a troca
when (if)
architecture bhv of M is begin process (sel, d0, d1) is if (sel = 0) then z <= d0; else z <= d1; end if; end process; end architecture bhv; architecture bhv of M is begin z <= d0 when sel = 0 else d1; end architecture bhv;
when
architecture bhv of M is begin z <= d0 when sel0 = 0 and sel1 = 0 else d1 when sel0 = 0 and sel1 = 1 else unaffected when sel0 = 1 and sel1 = 0 else d2; end architecture bhv;
select (case)
with alu_function select result <= a + b when alu_add | alu_add_u, a b when alu_sub | alu_sub_u, a and b when alu_and, a or b when alu_or a when alu_pass_a;
Atributos
Atributos
0) of boolean;
Aleft(1) = 1 Arirht(2) = 0 Alow(1) = 1 Ahigh(2) = 31 Arange(1) is 1 to 4 Areverse_range(2) is 0 to 31 Alength(2) = 32 Aascending(1) = true Aascending(2) = false
Atributos
type resistance is range 0 to 1E9 units ohm; kohm = 1000 ohm; Mohm = 1000 kohm; end units resistance; resistance'left = 0 ohm; resistance'right = 1E9 ohm; resistance'low = 0 ohm; resistance'high = 1E9 ohm; resistance'ascending = true; resistance'image(2 kohm) = "2000 ohm"; resistance'value("5 Mohm") = 5_000_000 ohm;
Atributos
type set_index_range is range 21 downto 11; type logic_level is (unknown, low, undriven, high);
set_index_range'left = 21; set_index_range'right = 11; set_index_range'low = 11; set_index_range'high = 21; set_index_range'ascending = false; set_index_range'image(14) = "14"; set_index_range'value("20") = 20;
logic_level'left = unknown; logic_level'right = high; logic_level'low = unknown; logic_level'high = high; logic_level'ascending = true; logic_level'image(undriven) = "undriven"; logic_level'value("Low") = low; logic_level'pos(unknown) = 0; logic_level'val(3) = high; logic_level'succ(unknown) = low; logic_level'pred(undriven) = low;
SOMADORES
Slides de apoio
Introduo
(a)
(c)
Introduo
Meio somador
possvel montar um circuito com portaslgicas que efetuar est adio. Para isto, montaremos inicialmente uma tabela-verdade, de 2 variveis, a partir das regras dadas acima, atentando que a sada ser a soma () e o vai 1 ser o carry-out (Co).
Meio somador
ENTRADA
A 0 0 1 1 A+B
XOR
SADA
SOMA 0 1 1 0 VAI 1 0 0 0 1 Co
AND
B 0 1 0 1
Meio somador
Esta tabela verdade de um Circuito Meio Somador (Half Adder - HA) Construindo o circuito, teremos:
A B HA
Co
Smbolo em Bloco
Somador total
Quando ocorrer situaes tais como as letras (a), (b) e (d) (lmina 85), o meio somador deixa de ser utilizado e passa-se a usar o Somador Total (Full Adder - FA). A nova tabela-verdade ter:
3 variveis de entrada: A, B e o Vem 1 (Carry in - Cin); 2 variveis de sada: soma () e o vai 1 (carry out - Co).
Somador total
Entradas
A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 Cin 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1
Sadas
Co 0 0 0 1 0 1 1 1
Somador Total
Smbolo em Bloco
Cin
A B
A B HA
Co
HA Co
Co
Somador total