EPUSP – PTC Guido Stolfi

Slides:



Advertisements
Apresentações semelhantes
Capítulo 2 - Introdução aos Circuitos Lógicos
Advertisements

Projecto de Hardware com FPGAs
VHDL VHSIC Hardware Description Language Very High Speed Integrated Circuits VHDL-87 VHDL-93.
VHDL VHSIC Hardware Description Language Very High Speed Integrated Circuits VHDL-87 VHDL-93.
The new way! The old way... TC – DEI, 2005/2006.
VHDL - VHSIC Hardware Description Language
VHDL - VHSIC Hardware Description Language
Fernando Gehm Moraes Ney Laert Vilar Calazans
Fernando Moraes e Ney Laert Vilar Calazans
César Augusto Missio Marcon Ney Laert Vilar Calazans
GAPH - PPGCC - FACIN - PUCRS
Ney Laert Vilar Calazans
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais.
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais.
Sistemas Digitais Projeto RTL – Unidade de Execução
VHDL AULA - 2.
Lógica reconfigurável por hardware
VHDL Very High Speed Integrated Circuit Hardware Description Language Prof. Eduardo Todt 2008.
MC542 Organização de Computadores Teoria e Prática
VHDL Introdução Paulo C. Centoducatte fevereiro de 2005
Introdução a circuitos lógicos
Verificação MO801/MC912.
Dicas de Circuitos MO801/MC912.
VHDL (outros tópicos) MO801/MC912.
MO Prof. Paulo Cesar Centoducatte MC542 Organização de Computadores Teoria e Prática.
Semana de Engenharia Introdução a Linguagem de Descrição de HW VHDL a ao Projeto Baseado em Lógica de Programação ALTERA Prof. Daniel Barros Júnior
FLI – ModelSim Pedro Velho.
Library IEEE; use ieee.std_logic_1164.all; use IEEE.std_logic_arith.all;
Tipos de dados Existentes BIT - {0, 1} BIT_VECTOR - {vetor de BIT}
VERILOG HDL (HARDWARE DESCRIPTION LANGUAGE)
Máquina de Estados Uma máquina de estados finitos ou autômato finito é uma modelagem de um comportamento composto por estados, transições e ações Um estado.
Construção sequencial CASE WHEN
Hardware Description Language (HDL)
O latch RS QN (QN)inv 1 S R QN+1 (QN+1)inv
Modelagem de Sistemas com VHDL
Projeto de ASIC Digital Apresentação e Introdução
Eletrônica Digital II ELT013
Máquina de Estados Finito
Circuitos Seqüenciais Descrição VHDL
Instanciação em VHDL.
Engenharia de Software para Computação Embarcada
Antonyus Pyetro Infra-estrutura de Hardware – IF674
FPGA e CPLD.
Lógica reconfigurável por hardware
Dispositivos Lógicos Programáveis (DLP) Ideia e Arquiteturas
Validação de VHDL: técnicas e ferramentas
Circuitos Seqüenciais Contadores
Test-bench para Somador
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Projeto de Somador com e sem Sinal Descrição.
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Exercícios Circuitos Descritos em VHDL.
Diagramas de Blocos e Descrição VHDL
Projeto de Circuito Combinacional Unidade Lógica e Aritmética (ULA)
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Memórias.
Ney Laert Vilar Calazans
BRAZIL IP The BrazilIP Network Verilog Curso do Brazil-IP Elmar Melcher UFCG
Hardware Description Language Aula 6 -VHDL Prof. Afonso Ferreira Miguel, MSc.
Descrição de Circuitos Combinacionais em VHDL
Introdução a Organização e Arquitetura de Computadores
BRAZIL IP The BrazilIP Network SystemVerilog para Verificação funcional com OVM Curso do Brazil-IP Elmar Melcher UFCG
Hardware Description Language Aula 4 –VHDL (introdução)
Hardware Description Language Aula 5 -VHDL Prof. Afonso Ferreira Miguel, MSc.
Introdução à Linguagem VHDL
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Exercícios Circuitos Descritos em VHDL.
Introdução a VHDL Monitoria de Digitais.
Introdução ao VHDL João M. P. Cardoso.
Verilog HDL. Introduzida em 1985 pela Gateway Design System Corporation Após 1990, passou a ser de domínio público, e em 1995 passou a ser padrão IEEE.
VHDL (Very High Speed Integrated Circuit HDL (VHSIC HDL)) GRECO CIn-UFPE.
Projeto de Circuitos Integrados Semidedicados Prof. Marcio Cunha Aula 04 – Linguagem de Descrição de Hardware: VHDL.
Máquina de Estados Uma máquina de estados finitos ou autômato finito é uma modelagem de um comportamento composto por estados, transições e ações Um estado.
Transcrição da apresentação:

EPUSP – PTC2527 2010 Guido Stolfi .. . . . ... . .. . .. . .... . . . . . . . . . ... . . . .. . . . . . . . .... . .. . . . . .. . . . . .. .. .. . Introdução ao V H D L EPUSP – PTC2527 2010 Guido Stolfi

V H D L VHDL = VHSIC Hardware Description Language VHSIC = Very High Speed Integrated Circuits Departamento de Defesa –EUA – 1985 IEEE 1076-1987 IEEE 1076-1993 IEEE 1164

V H D L Objetivos: Simulação Descrição de Funcionamento Síntese Lógica FPGA’s , EPLD’s, ASIC’s Independente de Tecnologia Vários níveis de abstração Alternativa: Verilog

Descrição de um Circuito Estrutural Processadores Registradores Portas Transistores Comportamental Algoritmos RTL Funções Lógicas Func. Transferência Células Módulos Chips Subsistemas Física Abordagens e Níveis de Abstração

Descrição Estrutural por Esquema Qual a função deste circuito? Qual a resposta a um conjunto de estímulos? Como modificá-lo para alterar sua função? Tem algum erro?

Descrição Estrutural por V H D L -- declaração: ENTITY circuito_1 IS PORT( A, B, C : IN BIT; R : OUT BIT; Q : INOUT BIT ); END circuito_1; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q ; END arq_circ_1; -- fim da descrição

V H D L x Programa Programa V H D L Software, Firmware Algoritmos Passos Sequenciais Execução síncrona Código Operações Concorrentes Paralelismo Execução assíncrona ou síncrona

Simulação de um Circuito B C Q ? ? ? ? ? R ? ? ? ? ?

Simulação VHDL -- descrição das entradas: BEGIN A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 50 ns; A <= ‘1’; B <= ‘1’; C <= ‘0’; A <= ‘0’; B <= ‘0’; END; A B C Q ? ? ? ? ? R ? ? ? ? ?

Simulação VHDL T = 0 ns Sinais A e B mudaram e afetam uma atribuição A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 50 ns; A <= ‘1’; B <= ‘1’; C <= ‘0’; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q ; END arq_circ_1; Sinais A e B mudaram e afetam uma atribuição Atribuição gera novo evento para a variável Q num instante futuro: Q <= ‘1’;

Simulação VHDL T = 0 ns Implícito A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; WAIT 45 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ) AFTER 5ns; R <= C AND Q ; END arq_circ_1; Implícito Novo evento para a variável Q é inserido na lista de eventos

Simulação VHDL T = 0 ns Implícito A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 45 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q AFTER 5ns; END arq_circ_1; Implícito Novo evento para a variável R é inserido na lista de eventos

Simulação VHDL T = 5 ns Implícito -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q AFTER 5ns; END arq_circ_1; A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; A <= ‘0’; B <= ‘0’; Implícito Novo evento para a variável R é inserido na lista de eventos

Simulação VHDL T = 10 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q; END arq_circ_1; A variável de saída R não causa nenhum evento (não é entrada do circuito)

Simulação VHDL T = 50 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; Q <= ‘1’; WAIT 45 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q; END arq_circ_1; Novo evento para a variável Q poderia ser inserido na lista de eventos, mas é redundadnte (não há alteração no estado de Q)

Simulação VHDL T = 100 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; Q <= ‘0’; WAIT 45 ns; C <= ‘0’; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q; END arq_circ_1; Novo evento para a variável Q é inserido na lista de eventos etc...

Simulação VHDL T = 300 ns A B C Q R BEGIN WAIT 5 ns; Q <= ‘1’; R <= ‘X’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; Q <= ‘0’; R <= ‘0’; C <= ‘0’; A <= ‘0’; B <= ‘0’; Q <= ‘1’; END; A B C Q R

Tipos de Dados em VHDL BOOLEAN : pode ser ‘False’ ou ‘True’ Funções pré-definidas: and, or, nand, nor, xor, xnor, not (retornam BOOLEAN) =, /=, <, >, <=, >= (retornam BOOLEAN) Ex.: Função AND False True

Tipos de Dados em VHDL BIT : pode ser ‘0’ ou ‘1’ Funções pré-definidas: and, or, nand, nor, xor, xnor, not (retornam BIT) =, /=, <, >, <=, >= (retornam BOOLEAN) Ex.: Função AND 1

Tipos de Dados em VHDL STD_LOGIC ( IEEE1164): ‘X’ = Desconhecido ‘0’ = Força Nível 0 ‘1’ = Força Nível 1 ‘Z’ = Alta Impedância ‘W’ = Desconhecido Fraco ‘L’ = Nível 0 Fraco ‘H’ = Nível 1 Fraco ‘-’ = Indiferente Ex.: Função AND X 1 Z W L H -

Tipos de Dados em VHDL INTEGER: Depende de implementação; p. ex. 32 bits Funções pré-definidas: +, -, abs, *, /, mod, rem, ** (retornam INTEGER) =, /=, <, >, <=, >= (retornam BOOLEAN)

Tipos de Dados em VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -- std_logic USE IEEE.STD_LOGIC_ARITH.ALL; -- numeros e funções ENTITY circuito_2 IS -- exemplos: PORT ( A, B : IN STD_LOGIC; -- entradas -- barramentos: Q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); P : BUFFER STD_LOGIC_VECTOR (1 TO 5)); END circuito2;

Tipos de Dados em VHDL -- outros tipos pré definidos: TYPE integer is range -2147483648 to +2147483647; type NAtural is range 0 to +2147483647; -- exemplos de tipos definidos pelo usuario: TYPE uint_6 IS RANGE 0 TO 63; TYPE estado_mp IS (play, pause, ff, ref, rec, stop); TYPE vetor8 IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; TYPE matriz8 IS ARRAY (7 DOWNTO 0) OF vetor8;

Processos Blocos de código contendo IF, WAIT, CASE, LOOP e lista de sensibilidade São executados quando um dos sinais da lista sofre alteração de estado. PROCESS (A, B) -- processo combinatório BEGIN IF A = ‘0’ THEN Q <= B; ELSE Q <= NOT B; -- implementa XOR END IF; END PROCESS;

Lógica Sequencial com Processos Lista de sensibilidade inclui um Clock PROCESS (CLK) -- processo sequencial (contador) BEGIN IF CLK’EVENT AND CLK = ‘1’ THEN -- borda de subida Q <= Q + 1; -- precisa de ieee.std_logic_arith.all END IF; END PROCESS; PROCESS (CLK) -- registrador de deslocamento IF CLK’EVENT AND CLK = ‘0’ THEN -- borda de descida Q (7 DOWNTO 1) <= Q (6 DOWNTO 0); Q (0) <= D;

Lógica Sequencial PROCESS (CLK, RST) -- contador c/ reset assíncrono BEGIN IF RST = ‘1’ THEN -- reset Q <= “00000000”; -- zera 8 bits ELSE IF CLK’EVENT AND CLK = ‘1’ THEN IF Q = 191 THEN Q <= (OTHERS => ‘0’); -- zera 8 bits Q <= Q + 1; -- conta de 0 a 191 END IF; END IF; -- fim evento CLK END IF; -- fim RST END PROCESS;

Exemplo Não Sintetizável PROCESS (CLK) -- contador nas duas bordas do clock ! BEGIN IF CLK’EVENT THEN -- a sintaxe do VHDL permite... Q <= Q + 1; -- pode ser simulado... END IF; -- mas não é implementável c/ flip-flops! END PROCESS; --- Problema: Implementar um contador que conta nas duas bordas do Clock. CLK Q 1 2 3 4 5 ...

Sinais e Variáveis SIGNAL: VARIABLE: Pode ser declarado em uma ENTITY ou ARCHITECTURE Representa um sinal elétrico (fio, barramento, registrador) Disponível após a conclusão de um PROCESS VARIABLE: Declarado apenas dentro de um PROCESS Representa um valor ou informação de uso local Valor disponível imediatamente Não é passado para fora do PROCESS

Sinais SIGNAL REG : STD_LOGIC_VECTOR (1999 DOWNTO 0); ENTITY delay_2000 IS PORT ( D, CLK : IN STD_LOGIC; Q : OUT STD_LOGIC); END delay_2000; -- atrasador de 2000 amostras ARCHITECTURE delay_2000 OF delay_2000 IS SIGNAL REG : STD_LOGIC_VECTOR (1999 DOWNTO 0); BEGIN PROCESS (CLK) -- registrador de deslocamento IF CLK’EVENT AND CLK = ‘0’ THEN -- shifta na descida REG (0) <= D; REG (1999 DOWNTO 1) <= REG (1998 DOWNTO 0); END IF; END PROCESS; Q <= REG(1999); -- atribuição fora do processo END delay_2000;

Variáveis ENTITY count_1080 IS PORT ( R, CLK : IN STD_LOGIC; LINHA : OUT STD_LOGIC_VECTOR(10 downto 0)); END count_1080; -- contador de linhas HDTV ARCHITECTURE arquit OF count_1080 IS BEGIN PROCESS (CLK) -- contador up 0 a 1079 VARIABLE reg : INTEGER RANGE 0 to 2047; IF R = ‘1’ THEN reg := 0; ELSIF CLK’EVENT AND CLK = ‘0’ THEN reg := reg + 1; IF reg = 1080 THEN reg := 0; END IF; END IF; LINHA <= reg; END PROCESS; END arquit ;

CASE ... WHEN -- multiplexador de barramentos usando CASE ENTITY mux2_12b IS PORT( SEL : IN STD_LOGIC_VECTOR(1 downto 0); A, B : IN STD_LOGIC_VECTOR(11 downto 0); X : OUT STD_LOGIC_VECTOR(11 downto 0)); END mux2_12b; -- seleciona 2 barramentos de 10 b ARCHITECTURE arquit OF mux2_12b IS BEGIN PROCESS (A, B, SEL) -- logica combinatoria CASE SEL IS WHEN “00” => X <= A; WHEN “01” => X <= B; WHEN OTHERS => X <= “000000000000”; END CASE; END PROCESS; END arquit;

Exemplo -- Laboratorio de TV Digital – Mackenzie -- Eng. Guido Stolfi - 25/05/2007 -- Projeto: ISDTV MOD -------------------------------------------------------------------------------- -- Modulo: fec_3.VHD -- Descricao: Generates FEC for ISDB-T -- Frame Sync resets puncturing pattern -- Rev. 2.0 14/11/07 - FS input on first bit -- Slices: 49 FF´s: 19 LUT´s: 72 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity fec_3 is Port ( CLK : in std_logic; -- bit clock (32 MHz) RST : in std_logic; -- Frame Sync (1 pulse) BITIN : in std_logic; -- serial bit input ENA : in std_logic; -- enables FEC RATE : in std_logic_vector(2 downto 0); -- 1/2, 2/3, 3/4, 5/6, 7/8 B0 : out std_logic; -- output bit b0, b1 B1 : out std_logic; ENAOUT : out std_logic; -- enables output (XY) symbol RSTOUT : out std_logic); -- delayed reset (1 pulse) end fec_3;

Exemplo architecture Behavioral of fec_3 is signal DEL : std_logic_vector(5 downto 0); -- Shift Register signal B3 : std_logic; -- temporary bit signal BITCNT : std_logic_vector(2 downto 0); -- counts input bits begin ------------------------------------------------------------------------- process (CLK,BITIN,DEL) variable OX : std_logic; -- output bits variable OY : std_logic; OX := BITIN xor ((DEL(5) xor DEL(4)) xor (DEL(3) xor DEL(0))); -- FEC OY := BITIN xor ((DEL(4) xor DEL(3)) xor (DEL(1) xor DEL(0))); if CLK'event and CLK = '1' then RSTOUT <= RST; if ENA = '1' then -- register shifting DEL(4 downto 0) <= DEL(5 downto 1); DEL(5) <= BITIN; end if; -- --------------------------------------------------------------------

Exemplo if RATE = "000" and ENA = '1' then -- rate 1/2 ,no reset BITCNT <= "000"; B0 <= OX; B1 <= OY; ENAOUT <= ENA; -- -------------------------------------------------------------------- elsif RATE = "001" and ENA = '1' then -- 2/3 (4/6) if BITCNT = "011" or RST = '1' then -- pattern: 0-1-2-3- 0 else BITCNT <= BITCNT + 1; end if; if BITCNT = "011" then elsif BITCNT = "000" then B3 <= OY; -- stores bit ENAOUT <= '0'; elsif BITCNT = "001" then B0 <= B3; B1 <= OX;

Exemplo elsif RATE = "010" and ENA = '1' then -- 3/4 if BITCNT = "010" or RST = '1' then -- pattern: 0-1-2- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "010" then B0 <= OX; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "000" then B0 <= OY; ENAOUT <= '0'; B1 <= OX; -- --------------------------------------------------------------------

Exemplo elsif RATE = "011" and ENA = '1' then -- 5/6 if BITCNT = "100" or RST = '1' then -- patern: 0-1-2-3-4- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "100" then B0 <= OX; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "000" then B0 <= OY; ENAOUT <= '0'; elsif BITCNT = "001" then B1 <= OX; elsif BITCNT = "010" then -- --------------------------------------------------------------------

Exemplo elsif RATE = "100" and ENA = '1' then -- 7/8 if BITCNT = "110" or RST = '1' then -- pattern: 0-1-2-3-4-5-6- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "110" then B0 <= OX; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "000" then B3 <= OY; -- stores bit ENAOUT <= '0'; elsif BITCNT = "001" then B0 <= B3; elsif BITCNT = "010" then B0 <= OY; elsif BITCNT = "011" then B1 <= OX; elsif BITCNT = "100" then

Exemplo -- -------------------------------------------------------------------- elsif ENA = '1' then -- no FEC (1/1) Hypotetic if BITCNT = "001" or RST = '1' then -- pattern: 0-1- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "001" then B0 <= BITIN; ENAOUT <= '0'; B1 <= BITIN; ENAOUT <= ENA; else -- ENA = 0 end if; -- end rate end if; -- end clock event end process; -------------------------------------------------------------------------------- end Behavioral;

Uso de Componentes --- declaração de componentes (descritos em outro lugar): COMPONENT count_1080 IS PORT ( R, CLK : IN STD_LOGIC; LINHA : OUT STD_LOGIC_VECTOR(10 downto 0)); END COMPONENT; -- contador de linhas HDTV COMPONENT delay_2000 IS PORT ( D, CLK : IN STD_LOGIC; Q : OUT STD_LOGIC); END COMPONENT; -- atrasador de 2000 amostras --------- -- CLOCK, TRIG : IN STD_LOGIC; LINEOUT: OUT STD_LOGIC_VECTOR(10 downto 0); -- SIGNAL TRIGDEL : STD_LOGIC; --- uso dos componentes declarados: blk001: count_1080 PORT MAP ( TRIGDEL, CLOCK, LINEOUT); -- posicional blk002: delay_2000 PORT MAP ( TRIG => D, TRIGDEL => Q, CLOCK => CLK); -- nominal