ea773 laboratório de circuitos lógicos · simplificações por meio de mapas de karnaugh ou...
TRANSCRIPT
1
EA773Laboratório de Circuitos Lógicos
Experiência 3Problemas Típicos e VHDL
Don’t forget to write!
“In order to create great products, logic designers must develop their language and writing skills, especially in the area of logical outlining and organization. The most successful designers (and later, project
leaders, system architects, and entrepreneurs) are the ones who communicate their ideas, proposals, and decisions effectively to
others. Even though it’s a lot of fun to tinker in the digital design lab, don’t use that as an excuse to shortchange your writing and
communications courses and projects!”
Fonte: Digital Design: Principles and Practices, John F. Wakerly
2
Observações x Projetos
Reproduzir procedimentospara observar ocorrência de
um ou mais fenômenosrelacionados a um problema
específico
Adotar um procedimento parabuscar a solução de um
problema específico
Projeto Digital: Combinacional + Sequencial
1−iSiS
Memória
Operações Lógico-Aritméticos
Sincronismo
3
Fluxo de Projeto
http://pt.wikipedia.org/wiki/VHDL
(Especificação Estrutural)
(Especificação Física)
(Especificação Funcional/Comportamental)
Níveis de Especificação de um Semi-Somador
• Funcional/Comportamental
• Estrutural1011
0101
0110
0000
ipix iy ig
011
101
=+=+
110
000
=+=+
(vai-um)
iii
iiiii
yxg
yxyxp
=+=
Tabela-verdadeOperações aritméticas
Métodos de simplificação : Mapa de Karnaugh, minimização de Quine-McCluskey etc
4
Tecnologia
1962
primeiroCI
produzidoem escalacomercial(da famíliada lógica
ECL) Motorola
1964
CI dafamília da
lógicaTTL
Sylvania
1969
CI dafamília
dalógicaCMOS RCA
Fonte: http://en.wikipedia.org/wiki/Logic_family
Dispositivos de função fixa
1968
Matriz de portas
programável (12
portas e 30 pinos) Motorola
PLA (minterm
os, maxterm
os, 17 entradas, 8 saídas,
8 JK) Texas
Fonte: http://en.wikipedia.org/wiki/Programmable_logic_device
Dispositivos de função configurável
1970
PAL (mintermos) Monolithic
Memories Inc
(MMI)
1978
GAL (centenasde portaslógicas)Lattice
Semiconductor
1983
1985
FPGA Xilink
1985
EPLD Altera
CPLD (> milhares
de portaslógi
cas)
1975
FPLA Signetics
CPLD x FPGA
Fonte: http://www2.eletronica.org/artigos/eletronica-digital/dispositivos-programaveis-como-funcionam
• PLDs : dispositivos lógicos programáveis constituídos de macro-células. Estas contém uma certa quantidade de portas lógicas e flip-flops configuráveis para realizar um certo número de operações Booleanasespecíficas.
CPLDIntegração densa de PLDs
Aplicações usuais : grandescircuitos combinacionais
FPGAGrande matriz de macro-células
Aplicações usuais : grandesmáquinas de estados
5
Problemas Típicos
• Pulsos Espúrios• Sincronismo• Derivação de Pulsos
Pulsos Espúrios
pulsos espúrios
6
Sincronismo
Sincronismo
CLK1: T = 40ns; offset = 27nsCLK2: T = 160ns;offset = 0ns
Largura dos pulsos em relação a dos outros.
7
Uma solução
Derivação de Pulsos
~111ns
8
VHDL• VHDL = VHSIC (Very High Speed Integrated
Circuits) Hardware Description Language -1980– Motivação: concisão na documentação em
Departamento de Defesa dos Estados Unidos
• Outras linguagens de descrição: Verilog (1983-1984), AHDL (Altera Hardware Description Language)
• NÃO É UMA LINGUAGEM DE PROGRAMAÇÃO DE PROCESSADOR!!!
Componentes Lógicos
Interface de
entrada
Interface de saída
Interface de
entrada
Interface de saída
Comportamento Comportamento
9
Fluxo de Projeto
http://pt.wikipedia.org/wiki/VHDL
(Especificação Estrutural)
(Especificação Funcional/Comportamental)
(PLDs)
Comportamento: Níveis de Abstração
(Exp. 1)
(Exps. 2 e 3)
Linguagem de descrição orientadaà funcionalidade do circuito �
portabilidade, documentação, manutenção
10
Estrutura Básica de VHDL
COMPONENTE
INTERFACE(ENTITY)
Declaração de portas e objetos locais
PROCEDIMENTO(ARCHITECTURE)
Funcional (Concorrente/Sequencial)Estrutural
http://www.seas.upenn.edu/~ese201/vhdl/vhdl_primer.html
Sintaxe de Especificação
• Interface com mundo externo (pinos de entradae de saída)– Tipos de pinos: entrada, saída, ou entrada/saída?– Correspondência entre pinos e entidades lógicas?
• Definição do seu comportamento lógico (a nívelfuncional ou a nível estrutural)– Tipos de “dados intermediários”?– Tipos de operações lógico-aritméticas?– Como descrever “comportamentos condicionais”?– Como utilizar componentes, procedimentos ou
funções pré-definidos?
11
Descrição da Interfaceentity NAME_OF_ENTITY is
[ generic generic_declarations);]port (signal_names: mode type;
signal_names: mode type;:
signal_names: mode type);
end [NAME_OF_ENTITY] ;
NAME_OF_ENTITY: identificador do componentesignal_names: identificadores dos sinais da interfacemode: uma das palavras reservadas de VHDL para indicar a direção dos sinais
(in , out , buffer , inout )type: tipo de sinal (bit, bit_vector, std_logic, std_ulogic, std_logic_v ector,
std_ulogic_vector, boolean, integer, real, characte r, time )generic : definição de constantes locais
generic (constant_name: type [:=value] ;constant_name: type [:=value] ;:constant_name: type [:=value] );
architecture architecture_name of NAME_OF_ENTITY is[component component_name [ ( formal parameter list ) ] ;][signal signal_names: type [ := initial value] ;][constant constant_names: type [ := initial value] ;][procedure procedure_name [ ( formal parameter list ) ] ;][function function_name [ ( formal parameter list ) ] return type ; ][type type_name is type_definition;]
beginsinal_saida <= função (sinais_entrada):[process begin:end process;]
end architecture_name;
http://www.cs.umbc.edu/portal/help/VHDL/declare.html
Descrição do ComportamentoD
ecla
raçã
ode
dad
os e
pro
cedi
men
tos
a se
rem
utili
zado
s
Des
criç
cão
das
funç
cões
12
component component_nameport ( signal_names: mode type;
signal_names: mode type);end component;
procedure procedure_name ( data_type data_name mode type ) is [declaração de objetos utilizados neste procedimento]begin
linhas de comando;:
end procedure [ procedure_name];
function function_name ( data_type data_name mode type ) return type is[declaração de objetos utilizados neste procedimento] begin
linhas de comando;:
end procedure [ function_name];Exemplos de declaração de type :
type small_int is range 0 to 1024;type reg is array (255 downto 0) of std_logic ;
Declaração de Objetos
data_type: constant ouvariable ou signal
VHDL: Operações Lógico-Aritm éticas
andornandnorxorxnor** exponenciação;abs valor absoluto;not complemento;* multiplicação;/ divisão;mod módulo;rem resto da divisão;+ soma ou identidade;- subtração ou negação;& concatenação de bits
library ieee;useieee.std_logic_1164.all;use ieee.numeric_std.all;
Conversão entre os tipos de dados :1. Unsigned, signed ����std_logic_vector
std_logic_vector(v)2. Std_logic_vector ����unsigned, signed
unsigned(v)signed(v)
3. Unsigned, signed ���� integerto_integer(v)
4. Integer ����unsigned, signedto_unsigned(v,v’length)to_signed(v,v’length)
Alguns exemplos de type:bit � ‘0’, ‘1’binary � ‘ON’, ‘OFF’std_logic � ‘0’, ‘1’, ‘X’, ‘Z’, ‘U’, ‘W’, ‘L’,’H’,’-’unsigned �inteiro sem sinalsigned � complemento 2integer � signed em, no mínimo, 32 bits
13
Observações Gerais sobre Sintaxe
• Não distingue maiúscula e minúscula• Linhas de comando terminadas com “;”• Linha de comentários iniciadas com “--”• Delimitador de elementos de uma lista: “,”• Símbolo de atribuição: “<=”, “:=”• Nomes: letra seguida de sequência de letras,
dígitos e/ou “_”, exceto palavras reservadas de VHDL– Palavras reservadas podem ser utilizadas como nomes
de objetos quando “delimitadas por \ \. Exemplo: \rem\
Modelos
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all; entity and2_behavioral is
port (in1, in2: in std_logic;out1: out std_logic);
end entity;
architecture behavioral_2 of AND2 isbegin
out1 <= in1 and in2;end behavioral_2;
entity and2_structural_vhdl isport (in1, in2: in std_logic;
out1: out std_logic);end and2_structural_vhdl;
architecture structural of and2_structural_vhdl iscomponent AND2 -- Altera primitive
port (in1, in2: in std_logic;\out\: out std_logic);
end component;begin
U0: AND2 port map (in1, in2, out1);end architecture;
Funcional Estrutural
14
VHDL: Semi-somador
architecture behavior of semi_somador_vhdl isbegin
pi <= xi xor yi;gi <= xi and yi;
end behavior;
-- Semi-Somadorlibrary ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity semi_somador_vhdl isport (
xi,yi : in std_logic;pi,gi : out std_logic);
end semi_somador_vhdl;
VHDL: Tarefa 1• Editar e salvar a especificação dada no roteiro (extensão .vhd)
– File > New > VHDL File• Compilar o arquivo
– Setar como “top-level” (Project > Set as Top-level Entity)– MAX+PLUSII > Compiler
• Visualizar o esquemático do circuito sintetizado– Tools > Netlist Viewers > RTL Viewer
• Simular o circuito– Editar formas de onda (MAX+PLUSII > Waveform Editor)– Simular (MAX+PLUSII > Simulator)
• Testar o componente– Criar um símbolo (File > Create/Update > Create Symbol Files for Current File)– Editar o circuito de teste (File > New > Block Diagram/Schematic File)
• Inserir o componente (Insert )• Adicionar os pinos (Clicar o botão esquerdo do mouse em cima do símbolo >
Generate Pins for Symbol Ports)• Adaptar os nomes dos símbolos para as convenções adotadas pelo kit
Altera• Importar o arquivo de correspondência (Assignments > Import Assignments)• Compilar• Programar FPGA
15
-- Registrador de deslocamentolibrary ieee;use ieee.std_logic_1164.all;entity registrador_deslocamento_vhdl is
generic ( NUM_STAGES : natural := 4 );port (
clk, enable : in std_logic;sr_in: in std_logic;sr_out : out std_logic);
end entity;
architectur e behavior of registrador_deslocamento_vhdl istype registrador is array ((NUM_STAGES-1) downto 0)
of std_logic;signal sr: registrador;begin
sr_out <= sr(NUM_STAGES-1);process (clk)begin
if (rising_edge(clk)) thenif (enable = '1') thensr((NUM_STAGES-1) downto 1) <=
sr((NUM_STAGES-2) downto 0);sr(0) <= sr_in;end if;
end if;end process;
end architecture;
VHDL: Registrador Serial-
serial
VHDL: Registrador Serial - Paralelo
• Diferença em relação ao registrador de deslocamentoSerial-serial– Sinal de controle reset .– sr_out (1 bit) � sr_out (16 bits)
• Na forma vetorial: sr_out: out std_logic_vector(15 downto 0);
• Na forma binária: sr_out0, sr_out1, ..., sr_out15: out std_logic;– Atribuição de um sinal de saída (sr_out(0) <= sr_in) �
atribuição de 16 sinais de saída• Na forma vetorial: (sr_out(15 downto 0) <= sr(15 downto 0))• Na forma binária: (sr_out0 <= sr(0) … sr_out15 <= sr(15))
Observações:É possível compactar atribuições:
Ao invés, sr_out(15) <= sr(15); … ; sr_out(0) <= sr(0);pode-se escrever sr_out(15 downto 0) <= sr(15 downto 0);Ao invés, d(3) <= ‘1’; d(2)<=‘1’; d(1)<=‘1’; d(0)<=’0’;pode-se escrever d <= “1110”;
16
VHDL: Tarefa 2• Editar e salvar a especificação do registrador serial-paralelo
– File > New > VHDL File• Compilar o arquivo
– Setar como “top-level” (Project > Set as Top-level Entity)– MAX+PLUSII > Compiler
• Visualizar o esquemático do circuito sintetizado– Tools > Netlist Viewers > RTL Viewer
• Simular o circuito– Editar formas de onda (MAX+PLUSII > Waveform Editor)– Simular (MAX+PLUSII > Simulator)
• Testar o componente
– Criar um símbolo (File > Create/Update > Create Symbol Files for Current File)– Editar o circuito de teste (File > New > Block Diagram/Schematic File)
• Inserir o componente (Insert )• Adicionar os pinos (Clicar o botão esquerdo do mouse em cima do símbolo >
Generate Pins for Symbol Ports)• Adaptar os nomes dos símbolos para as convenções adotadas pelo kit
Altera• Importar o arquivo de correspondência (Assignments > Import Assignments)• Compilar• Programar FPGA
VHDL: Decodificador 7447
17
VHDL: Decodificador• Especificar os sinais de entrada e de saída no escopo de
entity .
• Sintetizar para cada sinal de saída uma função lógica emtermos dos sinais de entrada.Utilizando o procedimento que se aprendeu até agora:
1. Tabela-verdade das variáveis booleanas2. Função binária de cada variável de saída (são 7!) em termos das
quatro variáveis de entrada. Simplificações por meio de mapas de Karnaugh ou técnica de minimização de Quine-McCluskey
• Especificar estas funções no escopo de architecture utilizando as palavras reservadas da linguagem VHDL.
[process_label:] process [ (sensitivity_list) ] [is ][ process_declarations]
beginlist of sequential statements such as:
signal assignments (<=)variable assignments (:=)case statement (is, when, when others, end case )if statement (then, elsif, else, end if )loop statement
next statementexit statement
null statementprocedure call wait statement (wait until, wait for, wait on, wait )
end process [process_label];loop
wait until CLK=’1’;intern_value:=(intern_value + 1) mod 32;COUNT <= intern_value;
end loop;
Descrição de ComportamentosCondicionais
18
library ieee; use ieee.std_logic_1164.all;entity dechexto7seg_if is
port(D, C, B, A : in std_logic; -- entradas BCsa, sb, sc, sd, se, sf, sg : out std_logic); -- Saidas para os 7 segmentos anodo comum
end dechexto7seg_if;architecture comportamento of dechexto7seg_if is
beginprocess (D, C, B, A)
beginif (D = '0' and C = '0' and B = '0' and A = '0') then
sa<=‘0'; sb<=‘0'; sc <=‘0'; sd <= ‘0'; se<=‘0'; sf<=‘0'; sg<=‘1';elsif (D = '0' and C = '0' and B = '0' and A = '1') then
sa<=‘1'; sb<=‘0'; sc <=‘0'; sd <= ‘1'; se<=‘1'; sf<=‘1'; sg<=‘1';elsif (D = '0' and C = '0' and B = '1' and A = '0') then
sa<=‘0'; sb<=‘0'; sc <=‘1'; sd <= ‘0'; se<=‘0'; sf<=‘1'; sg<=‘0';elsif (D = '0' and C = '0' and B = '1' and A = '1') then
sa<=‘0'; sb<=‘0'; sc <=‘0'; sd <= ‘0'; se<=‘1'; sf<=‘1'; sg<=‘0';elsif (D = '0' and C = '1' and B = '0' and A = '0') then
sa<=‘1'; sb<=‘0'; sc <=‘0'; sd <= ‘1'; se<=‘1'; sf<=‘0'; sg<=‘0';elsif (D = '0' and C = '1' and B = '0' and A = '1') then
sa<=‘0'; sb<=‘1'; sc <=‘0'; sd <= ‘0'; se<=‘1'; sf<=‘0'; sg<=‘0';::end if;
end process;end comportamento;
Primeira Alternativa com sequenciascondicionais (sem BI,RBI,LT,RBO)
library ieee;use ieee.std_logic_1164.all;entity dechexto7seg_if_vec is
port(D, C, B, A : in std_logic; -- entradas BCDsa, sb, sc, sd, se, sf, sg : out std_logic); -- Saidas para os 7 segmentos anodo comum
end dechexto7seg_if_vec;
architecture comportamento of dechexto7seg_if_vec issignal segs_out : std_logic_vector (6 downto 0);begin
process (D, C, B, A)variable bcd_in :std_logic_vector (3 downto 0);begin
bcd_in := D & C & B & A;if (bcd_in = "0000") then
segs_out <= “0000001";elsif (bcd_in = "0001") then
segs_out <= “1001111";:
end process;sa<=segs_out(6);sb<=segs_out(5);sc<=segs_out(4);
:sg<=segs_out(0);
end comportamento;
Segunda Alternativa com sequenciascondicionais (sem BI,RBI,LT,RBO)
19
VHDL: Tarefa 3• Editar e salvar a especificação do decidificador 7447 completo com uso de “case ” e
“when ” para descrever o seu comportamento– File > New > VHDL File
• Compilar o arquivo– Setar como “top-level” (Project > Set as Top-level Entity)– MAX+PLUSII > Compiler
• Visualizar o esquemático do circuito sintetizado– Tools > Netlist Viewers > RTL Viewer
• Simular o circuito– Editar formas de onda (MAX+PLUSII > Waveform Editor)– Simular (MAX+PLUSII > Simulator)
• Testar o componente– Criar um símbolo (File > Create/Update > Create Symbol Files for Current File)– Editar o circuito de teste (File > New > Block Diagram/Schematic File)
• Inserir o componente (Insert )• Adicionar os pinos (Clicar o botão esquerdo do mouse em cima do símbolo >
Generate Pins for Symbol Ports)• Adaptar os nomes dos símbolos para as convenções adotadas pelo kit
Altera• Importar o arquivo de correspondência (Assignments > Import Assignments)• Compilar• Programar FPGA