• Nenhum resultado encontrado

Simulando FPGA no ISE - Xilinx

N/A
N/A
Protected

Academic year: 2022

Share "Simulando FPGA no ISE - Xilinx"

Copied!
48
0
0

Texto

(1)
(2)

Simulando FPGA no ISE - Xilinx

José Rodrigo Furlanetto de Azambuja

(3)

Tópicos

• Histórico

• Fluxo de Projeto

• Linguagem VHDL

• Xilinx ISE - VHDL Prático

• Xilinx Spartan3

• Programação FPGA - Prático

(4)

Histórico

• Desenvolvido pelo Departamento de Defesa Americano (DoD)

• Padronizado pelo IEEE em 1993

– IEEE Std 1076-1987 – IEEE Std 1076-1993

• VHDL-AMS para circuitos analógicos

– IEEE Std 1076.1-1999

(5)

Linguagem de Descrição de Hardware

• Hardware Description Language (HDL)

• Very High Speed Integrated Circuit (VHSIC)

• VHSIC HDL (VHDL)

• Possível descrever HW em diferentes níveis

– Comportamental, equações lógicas, estrutural – Metodologia Top-Down

– Independente de tecnologia

(6)

Fluxo de Projeto

(7)

Sintaxe VHDL

• Não é case sensitive

• Caracteres especiais

– Comentários com dois traços (--)

– Fim de comando com ponto e vírgula (;) – Assinalamento de sinais com setas (<=)

– Assinalamento de variáveis com dois pontos e igual (:=)

• Nomes devem começar com letras

(8)

Elementos Estruturais

• Entity: define a interface

• Architecture: implementação da arquitetura

• Process: processos concorrentes controlados por eventos

• Library: bibliotecas de funções específicas

• Package: agrupa componentes, constantes e

tipos

(9)

Elementos Estruturais

library lib_name;

use lib_name.tipo library pack_name;

use pack_name.tipo entity e_name is

port (entrada1 : in tipo;

entrada2 : in tipo;

saida : out tipo);

end e_name

architecture ark_name of e_name is

<declaração de sinais>

<declaração de componentes>

begin

saida <= not signal_name;

<lógica combinacional>

process(entrada1)

<declaração de variáveis>

begin

if (entrada1 = ‘0’) then signal_name <= entrada2;

end if;

<lógica sequencial>

end process;

end ark_name;

(10)

Elementos Estruturais

library lib_name;

use lib_name.tipo library pack_name;

use pack_name.tipo entity e_name is

port (entrada1 : in tipo;

entrada2 : in tipo;

saida : out tipo);

end e_name

architecture ark_name of e_name is

<declaração de sinais>

<declaração de componentes>

begin

saida <= not signal_name;

<lógica combinacional>

process(entrada1)

<declaração de variáveis>

begin

if (entrada1 = ‘0’) then signal_name <= entrada2;

end if;

<lógica sequencial>

end process;

end ark_name;

library

(11)

Elementos Estruturais

library lib_name;

use lib_name.tipo library pack_name;

use pack_name.tipo entity e_name is

port (entrada1 : in tipo;

entrada2 : in tipo;

saida : out tipo);

end e_name

architecture ark_name of e_name is

<declaração de sinais>

<declaração de componentes>

begin

saida <= not signal_name;

<lógica combinacional>

process(entrada1)

<declaração de variáveis>

begin

if (entrada1 = ‘0’) then signal_name <= entrada2;

end if;

<lógica sequencial>

end process;

end ark_name;

package

(12)

Elementos Estruturais

library lib_name;

use lib_name.tipo library pack_name;

use pack_name.tipo entity e_name is

port (entrada1 : in tipo;

entrada2 : in tipo;

saida : out tipo);

end e_name;

architecture ark_name of e_name is

<declaração de sinais>

<declaração de componentes>

begin

saida <= not signal_name;

<lógica combinacional>

process(entrada1)

<declaração de variáveis>

begin

if (entrada1 = ‘0’) then signal_name <= entrada2;

end if;

<lógica sequencial>

end process;

end ark_name;

entity

(13)

Elementos Estruturais

library lib_name;

use lib_name.tipo library pack_name;

use pack_name.tipo entity e_name is

port (entrada1 : in tipo;

entrada2 : in tipo;

saida : out tipo);

end e_name

architecture ark_name of e_name is

<declaração de sinais>

<declaração de componentes>

begin

saida <= not signal_name;

<lógica combinacional>

process(entrada1)

<declaração de variáveis>

begin

if (entrada1 = ‘0’) then signal_name <= entrada2;

end if;

<lógica sequencial>

end process;

end ark_name;

architecture

(14)

Elementos Estruturais

library lib_name;

use lib_name.tipo library pack_name;

use pack_name.tipo entity e_name is

port (entrada1 : in tipo;

entrada2 : in tipo;

saida : out tipo);

end e_name

architecture ark_name of e_name is

<declaração de sinais>

<declaração de componentes>

begin

saida <= not signal_name;

<lógica combinacional>

process(entrada1)

<declaração de variáveis>

begin

if (entrada1 = ‘0’) then signal_name <= entrada2;

end if;

<lógica sequencial>

end process;

end ark_name;

process

(15)

Library IEEE

• IEEE.std_logic_1164

• IEEE.std_logic_textio

• IEEE.std_logic_arith

• IEEE.std_logic_signed

• IEEE.std_logic_unsigned

(16)

Entity

entityHALF_ADDER is port(A, B : instd_logic;

S, Carry : out std_logic);

end HALF_ADDER;

entityFULL_ADDER is

port(A, B : in std_logic_vector(7 downto 0);

S : outstd_logic_vector(7 downto 0);

Carry : outstd_logic);

end FULL_ADDER;

(17)

Tipos de Dados

• BOOLEAN is (FALSE, TRUE)

• BIT is (‘1’, ‘0’)

• CHARACTER is (--ascii set)

• INTEGER is (--definido pela implementação)

• REAL is (--definido pela implementação)

• BIT_VECTOR, STRING, TIME

(18)

std_logic

• IEEE.std_logic_1164

• Valores padronizados

• std_logic

• std_logic_vector

(19)

Declaração de Sinais

signal nome_signal : tipo := inicialização;

(20)

Assinalamento de Dados

(21)

Assinalamento de Dados

signal BYTE : std_logic_vector (7 downto 0);

signal A, B : std_logic_vector (3 downto 0);

• Concatenação

BYTE <= A & B;

BYTE <= A & ‘1’ & “000”;

• Agregação

(A, B) <= BYTE;

• Porções de array

BYTE(6 downto 3) <= A;

(22)

Tipos enumerados

type nome is tipo;

• Máquinas de Estado

– type estado is (idle, execute, finish);

• Matrizes

– type coluna is array(1 to 8) of integer;

– type matriz is array(1 to 8) of coluna;

– type matriz2 is array(1 to 8, 1 to 8) of std_logic;

(23)

Conversão de Tipos

(24)

Operadores

• Lógicos

– not, and, or, nand, nor, xor, xnor

• Relacional

– =, /=, <, <=, >=, >

• Shifts

– sll, srl, sla, sra, rol, ror

• Operadores aritméticos

– +, -, *, **, /, mod, rem, abs

(25)

Comandos Concorrentes

• Ordem não é importante

C <= A and B;

E <= C or D;

• Condicional

SAIDA <= VALOR1 when EXPRESSAO else VALOR2;

• Seletivo

whit EXPRESSAO select

SAIDA <= VALOR1 when ‘1’,

VALOR2 when others;

(26)

Processos

• Apenas comandos sequenciais

• Todos os processos rodam ao mesmo tempo de forma concorrente entre si

• Controlados por sinais de trigger

• Aceitam comandos de wait

(27)

Comando IF-THEN-ELSE

if CONDICAO1 then -- implementacao end if;

if CONDICAO1 then -- implementacao else

-- implementacao end if;

if CONDICAO1 then -- implementacao

elsif CONDICAO2 then -- implementacao

else

-- implementacao

end if;

(28)

Comando CASE

• Todas opções devem ser cobertas

• Valores simples

• Seleção de valores

• Intervalo de valores

• when others

(29)

Comandos de Loop

• FOR-LOOP

• WHILE-LOOP

FOR identificador IN range LOOP -- implementação

END LOOP;

WHILE identificador LOOP -- implementação

END LOOP;

(30)

Comando FOR-LOOP

process(A) begin

for i in (0 to 3) loop S(i) <= A(i);

end loop;

end process;

S(0) <= A(0);

S(1) <= A(1);

S(2) <= A(2);

S(3) <= A(3);

• O comando FOR- LOOP é sintetizável somente quando o range é fixo, ou seja, nao depende de

variáveis

• Repetição de um

trecho de código

(31)

Comando WAIT

• Evento de sinal

• Condição de sinal

• Tempo específico

• Indefinido

process(CLK) begin

wait on CLK if (CLK = ‘1’)…

end if;

wait until CLK = ‘1’

wait for 10 ns;

wait

end process;

(32)

Processos sensíveis ao Clock

if/wait until (clock’EVENT and clock = ‘1’)

if/wait until (not clock’STABLE and clock = ‘1’)

if/wait until (RISING_EDGE(clock))

wait until (clock = ‘1’)

process(clock) begin

if (clock’event and clock = ‘1’) then S <= D;

end if;

end process;

(33)

Variáveis

• Somente em processos

• Declaradas antes do begin

• Apenas localmente

• Variáveis globais não são sintetizáveis

architecture ark of XYZ is

signal A, B, C : integer range 0 to 7;

signal Y, Z : integer range 0 to 15;

begin

process (A, B, C)

variable M, N : integer range 0 to 7;

begin M := A;

N := B;

Z <= M+ N;

M := C;

Y <= M + N;

end process;

end ark;

(34)

Components

• Hierarquia de projeto

• Modularidade

(35)

Components

architecture ark of FULL_ADDER is component HALF_ADDER

port(A,B : in std_logic;

S, Carry : out std_logic);

end component;

signal sum_t, carry_t0, carry_t1;

begin

MODULE0 : HALF_ADDER

port map (A, B, sum_t, carry_t0);

MODULE1 : HALF ADDER

port map ( A => Cin, B => sum_t, S => S, Carry => carry_t1);

cout <= carry_t0 or carry_t1;

end ark;

(36)

Parte Prática 1

http://www.inf.ufrgs.br/~jrfazambuja/IEEE_CAS/

(37)

Parte Prática 1

• Identificar:

– Bibliotecas

– Interface do sistema – Arquitetura do módulo

• Quantos pinos de entrada existem?

• Quantos pinos de saída existem?

• Quantos sinais são utilizados?

• Quantos processos concorrentes existem?

• Onde são utilizadas as entradas do sistema?

• Onde são atribuídas as saídas do sistema?

(38)

Spartan3 XC3S200-FT256

(39)

Spartan3 XC3S200-FT256

(40)

Seven-Segment LED Display

(41)

Seven-Segment LED Display

(42)

Botões

• Ao apertar um botão é gerado um sinal HIGH

• Cada botão é

endereçado através de

um sinal na placa

(43)

Chaves

• Quando levantado, gera um sinal HIGH

• Quando embaixo, gera um sinal LOW

• Cada botão é

endereçado através de

um sinal na placa

(44)

Programação com JTAG

(45)

Parte Prática 2

http://www.inf.ufrgs.br/~jrfazambuja/IEEE_CAS/

(46)

Parte Prática 2

(47)

Parte Prática 2

• Aumentar as chances do jogador 3 vencer

• Diminuir os valores sorteados para 0-9

• Remover um jogador

(48)

In December 12 of 2008 in Porto Alegre, RS, Brazil.

General Chair

Thiago Rocha de Assis

Program Chair

Jefferson Luiz Bosa

Publicity Chair

Ricardo Augusto da Luz Reis

www.inf.ufrgs.br/ieeestudent

Referências

Documentos relacionados

Caso não esteja bem documentado o componente, por vezes pode ocorrer de o desenvolvedor reescrever rotinas ou utilizar de forma errônea o componente, tudo ocasionado

Para os micro e pequenos empresários esse comércio desponta então como oportunidade, devido principalmente aos investimentos iniciais mais baixos, a não necessidade de

O registrador de dados para até 10.000 entradas grava o ponto de medição, anota- ções, a ID do sensor, o nº de serie do sensor (Memosens), o valor primário, a tempe- ratura, a

IMPORTANTE ESCLARECER, que mesmo com a aludida cláusula convencional constante nas convenções coletivas, por sua vez, não foi excluído o direito da empresa, se

Com a conclusão da locação do imóvel Dutra/RJ e finalização das obras do imóvel Parque Novo Mundo/SP (para o início do prazo locatício da Femsa Coca-Cola), o fundo passará a

De fato, uma onda revolucionária sacudia o planeta inteiro, mas desenvolvia- se segundo onda revolucionária sacudia o planeta inteiro, mas desenvolvia- se

O objetivo desta pesquisa foi conhecer o processo de construção do conceito árvores do cerrado por alunos do sexto ano de uma escola rural de Planaltina-DF, antes e

As Pró-Reitorias de Ensino e Extensão e o Programa de Educação Tutorial (PET) Conexões de Saberes: Pesquisa e Extensão em Espaços Sóciopedagógicos tornam público Edital com as