VHDL4
VHDL4
Março/2010 1
entity SharedULA is
port (
A, B, C, D, E : in std_logic_vector(7 downto 0);
Operation : in std_logic_vector(1 downto 0);
ULAOp1 : in std_logic;
ULAOp2 : in std_logic_vector(1 downto 0);
Result : out std_logic_vector(7 downto 0);
n, z, v, c : out std_logic;
Op1_maior, Op2_maior, iguais : out std_logic Desenhar o esquemático RTL
);
end SharedULA ;
Março/2010 2
VHDL
□ Comparilhamento de recursos
■ Na síntese da descrição VHDL comportamental,
tipicamente todos operadores relacionais e aritméticos
que aparecem no código são mapeados para o
hardware correspondente
Março/2010 3
VHDL
□ Comparilhamento de recursos
■ Na síntese da descrição VHDL comportamental,
tipicamente todos operadores relacionais e aritméticos
que aparecem no código são mapeados para o
hardware correspondente
■ Exemplo
a
8 ctrl r
8
b 8 00 a+b
c
8 Circuito 1 r
8 01 a+c
d
10
d+1
2 11
ctrl
Março/2010 4
VHDL
□ Comparilhamento de recursos
■ Na síntese da descrição VHDL comportamental,
tipicamente todos operadores relacionais e aritméticos
que aparecem no código são mapeados para o
hardware correspondente
■ Exemplo
Março/2010 5
VHDL
□ Comparilhamento de recursos
■ Na síntese da descrição VHDL comportamental,
tipicamente todos operadores relacionais e aritméticos
que aparecem no código são mapeados para o
hardware correspondente
■ Exemplo
end waste;
Março/2010 6
VHDL
□ Comparilhamento de recursos
■ Na síntese da descrição VHDL comportamental,
tipicamente todos operadores relacionais e aritméticos
que aparecem no código são mapeados para o
hardware correspondente architecture waste of Circuto1 is
■ Exemplo begin
end waste2;
Março/2010 8
VHDL
□ Comparilhamento de recursos
■ Pode-se reduzir a área do circuito gerado, identificando
recursos que podem ser compartilhados
■ Ao compartilhar recursos, é comum aumentar o atraso visto
que multiplexadores são inseridos nas entradas dos recursos
a serem compartilhados
■ Exemplo
a ctrl r
b 00 a+b
c Circuito 1 r
01 a+c
d
10
d+1
2 11
ctrl
Saída r só pode apresentar um resultado de soma por
vez (operações mutuamente exclusivas), portanto um
único somador pode ser compartilhado
Março/2010 9
VHDL
□ Comparilhamento de recursos
■ Pode-se reduzir a área do circuito gerado, identificando
recursos que podem ser compartilhados
■ Ao compartilhar recursos, é comum aumentar o atraso visto
que multiplexadores são inseridos nas entradas dos recursos
a serem compartilhados
■ Exemplo
ctrl r
00 a+b
01 a+c
10
d+1
11
Março/2010 10
VHDL
□ Comparilhamento de recursos
■ Pode-se reduzir a área do circuito gerado, identificando
recursos que podem ser compartilhados
■ Ao compartilhar recursos, é comum aumentar o atraso visto
que multiplexadores são inseridos nas entradas dos recursos
a serem compartilhados
■ Exemplo
end one_adder;
Março/2010 11
VHDL
□ Comparilhamento de recursos
■ Pode-se reduzir a área do circuito gerado, identificando
recursos que podem ser compartilhados
■ Ao compartilhar recursos, é comum aumentar o atraso visto
que multiplexadores são inseridos nas entradas dos recursos
a serem compartilhados
■ Exemplo
Março/2010 12
VHDL
□ Comparilhamento de recursos
■ RTL Hardware Design Using VHDL – Pong Chu
□ Capítulo 7 - COMBINATIONAL CIRCUIT DESIGN: PRACTICE
■ Ferramentas de síntese típicamente tem a opção
resource sharing
Março/2010 13
VHDL
□ Comparilhamento de recursos
■ Reescrever de maneira a utilizar
um único somador
Março/2010 14
VHDL
□ Comparilhamento de recursos
■ A <= B + C + D, supondo A, B e C com 8 bits, por
exemplo
□ Se D tiver mais de 1 bit de largura, resultará em dois somadores
□ Se D tiver largura de 1 bit, resultará em um único somador
D
B
C B
A
A C
D
Março/2010 15
VHDL
□ Process
■ Construção da linguagem que torna a descrição
comportamental ainda mais parecia com um
algoritmo
■ Permite a utilização de comandos condicionais como
if/else e case além de laços de repetição como for e
while
□ Comandos permitidos apenas dentro de process
□ Atribuição condicional utilizando when é permitida apenas
fora de process (região de código concorrente)
■ Utilizada principalmente para descrever circuitos
sequenciais
■ Pode ser usada também para descrever circuitos
combinacionais
Março/2010 16
VHDL
□ Process
■ Trecho de código ativado pela mudança de valor em
algum sinal/entrada do circuito
■ Sinais/entradas que ativam o process são especificados
em uma lista de sensitividade
■ Sintaxe
Label é opcional
Lista de sensitividade
Março/2010 17
VHDL
□ Process (fundamental)
■ A lista de sensitividade deve conter todos os
sinais/entradas utilizados pelo process para gerar um
resultado (sinais/entradas à direitas das atribuições)
■ Exemplo Process gera as saídas S e Co, as quais
dependem das entradas A, B e Ci. Portanto, estas
architecture arch3 of FullAdder is entradas devem estar na lista de sensitividade
begin
end process;
end arch3;
O que está
errado ?
Março/2010 19
VHDL
□ Process
■ Atribuições dentro de um process não são contínuas,
como no caso das atribuições fora de um process
(região de código concorrente)
■ Ocorrem apenas uma vez, sempre que o process for
ativado (comportamento na simulação)
architecture arch3 of FullAdder is
begin
end process;
end arch3;
Março/2010 20
VHDL
□ Process
■ Uma architecture pode conter vários process, os
quais podem ser ativados simultaneamente
end process;
end arch4;
Março/2010 21
VHDL
□ Process (fundamental)
■ Sinais/saídas podem ser atribuídos várias vezes
dentro do mesmo process
■ Sinais/saídas não mudam de valor até o final do
process (atualizados somente ao final do process)
■ Somente a última atribuição será considerada
architecture teste of teste is
signal temp: std_logic : = ‘0’;
begin
Março/2010 22
VHDL
Alerta na simulção
□ Process (fundamental)
■ Um valor indefinido (‘X’) pode ser gerado em
decorrência de múltiplas atribuições para um mesmo
sinal/saída: (i) fora de process; (ii) dentro e fora de
process; (iii) em process diferentes
Curto
■ Exemplo: (i) fora de process circuito
architecture teste of FullAdder is
0
begin
Março/2010 23
VHDL
Alerta na simulção
□ Process (fundamental)
■ Um valor indefinido (‘X’) pode ser gerado em
decorrência de múltiplas atribuições para um mesmo
sinal/saída: (i) fora de process; (ii) dentro e fora de
process; (iii) em process diferentes
Curto
■ Exemplo: (ii) dentro e fora de process circuito
architecture teste of FullAdder is
0
begin
S <= A and B;
1
process(B, Ci)
begin
S <= B or Ci;
end process;
end teste;
Março/2010 24
VHDL
Alerta na simulção
□ Process (fundamental)
■ Um valor indefinido (‘X’) pode ser gerado em
decorrência de múltiplas atribuições para um mesmo
sinal/saída: (i) fora de process; (ii) dentro e fora de
process; (iii) em process diferentes
Curto
■ Exemplo: (iii) process diferentes circuito
architecture teste of FullAdder is
0
begin
process(A, B)
1
begin
S <= A and B;
end process;
process(B, Ci)
begin
S <= B or Ci;
end process;
end teste;
Março/2010 25
VHDL
□ Process (fundamental)
■ Sinais/saídas podem ser atribuidos várias vezes
dentro do mesmo process
□ A última atribuição será considerada
■ Sinal/saída não muda de valor até o final do process
process(A, B, Ci)
begin
end process;
end teste;
Março/2010 26
VHDL
□ Process
■ Condição: if, elsif e else
<expressão> é tipicamente uma
if <expressão> then comparação. Pode envolver operadores
<código> lógicos como and, or, e not.
...
else
<código>
Março/2010 27
VHDL
□ Process
■ Condição: if, elsif e else
Março/2010 28
VHDL
□ Process
■ Seleção: case
end case;
Março/2010 29
VHDL
□ Seleção: case
architecture arch2 of Mux8x8 is
begin
Todas entradas presentes na
process (i0,i1,i2,i3,i4,i5,i6,i7,sel)
begin lista de sensitividade
case sel is
when "000" =>
s <= i0; 0
1
when "001" => 2 8 s
s <= i1; 3
when "010" => 4
s <= i2; 5
when "011" => 6
7
s <= i3; 3
when "100" =>
s <= i4; sel
when "101" =>
s <= i5;
when "110" =>
s <= i6;
Modelsim error: Case statement covers only
when “111” =>
s <= i7; 8 out of 729 cases
end case; sel tem 729 (93) possíveis combinações de
end process; valores devido aos 9 diferentes valores do
end arch2;
tipo std_logic (0, 1, Z, U, X , L, H, W, -)
Março/2010 30
VHDL
□ Seleção: case
architecture arch2 of Mux8x8 is
begin
Todas entradas presentes na
process (i0,i1,i2,i3,i4,i5,i6,i7,sel)
begin lista de sensitividade
case sel is
when "000" =>
s <= i0; 0
1
when "001" => 2 8 s
s <= i1; 3
when "010" => 4
s <= i2; 5
when "011" => 6
7
s <= i3; 3
when "100" =>
s <= i4; sel
when "101" =>
s <= i5;
when "110" =>
s <= i6; Todos os valores não listados “caem” em
when others =>
s <= i7;
others
end case;
end process;
end arch2;
Março/2010 31
VHDL
□ Criar duas novas architectures para a ULA de
16 bits, Circuito 1, Circuito 2 e diferença entre
dois números unsigned utilizando a estrutura
process
■ Uma utilizando if/else
■ Outra utilizando case Testar as descrições
no simulador
Março/2010 32