270 likes | 422 Views
Engenharia de Software para Computação Embarcada. Prof. Frederico Ferlini Aula 4. CONTEÚDO. VHDL Introdução Estrutura Operadores Sintaxe Exemplos Simulação Testbench Formas de onda. VHDL. VHDL “ Very High Speed Integrated Circuits ” (VHSIC), início 1980
E N D
Engenharia de Software para Computação Embarcada Prof. Frederico Ferlini Aula 4
CONTEÚDO • VHDL • Introdução • Estrutura • Operadores • Sintaxe • Exemplos • Simulação • Testbench • Formas de onda
VHDL • VHDL • “VeryHighSpeedIntegratedCircuits” (VHSIC), início 1980 • Originou como linguagem para descrever o comportamento de ASICs, definido pelo U.S DepartmentofDefense • VHDL VHSIC Hardware DescriptionLanguage • Padrão IEEE em 1987 (InstituteofElectricalandElectronicsEngineers), revisado em 1993 • Linguagem utilizada mundialmente por empresas de CAD para especificação, simulação, síntese, propriedade intelectual • Outras linguagens de descrição de hardware • SystemC, VERILOG, Handel-C, SDL, ISP, Esterel, … Por que VHDL? VHDL é utilizado em mais de 50% do mercado!
VHDL • Vantagens • Descrição independente de tecnologia • Compatibilidade entre diferentes CAD tools • Flexibilidade: re-utilização, escolha de ferramentas e fornecedores • Facilidade de atualização dos projetos • Exploração em alto nível de abstração permite analisar diferentes alternativas de implementação • Verificação do comportamento do sistema digital através de simulação • Redução do tempo de projeto , reduz “time-to-market”, redução de custo • Linguagem fortemente tipada, elimina erros de baixo nível • Desvantagens • HW gerado é menos otimizado • Controlabilidade/Observabilidade de projeto reduzidas • Falta de pessoal treinado para lidar com a linguagem
VHDL – Níveis de Abstração • Permite que a descrição do HW seja: • Estrutural; ou, • Comportamental; ou, • RTL (RegisterTransferLevel); ou, • Nível Lógico com atraso* • Metodologia “top-down” • Projeto é inicialmente especificado de forma abstrata, com detalhamento posterior dos módulos • – Exemplo : A <= B + C after 5.0 ns; • A forma de realizar a soma pode ser decidida no momento da implementação (e.g. propagação rápida de vai-um, ou qualquer outro tipo de implementação, paralelo ou série, etc.)
VHDL – Níveis de Abstração Comportamental RTL
VHDL – Estrutura da Linguagem (Sintaxe) • Básica • Biblioteca (library) • Entidade (entity) • Arquitetura (architecture) • Complementar • Configuração (configuration) • Pacote (package) • Corpo do Pacote (package body)
VHDL – Estrutura da Linguagem (Sintaxe) • Biblioteca (library) • Diversas funções e tipos básicos • Biblioteca da IEEE é sempre incluída • Quase todo arquivo VHDL começa: - libraryIEEE; - useIEEE.STD_LOGIC_1164.ALL; • STD_LOGIC_1164 • bit {0, 1} • std_logic / std_logic_vector {0, 1, X, U, Z, W, L, H, -} • std_ulogic / std_ulogic_vector {0, 1, X, U, Z, W, L, H, -}* • and, nand, or, nor, not, xor, xnor • Outros tipos: boolean{true, false}, time{ps, ns, ms...}, integer, real... • Biblioteca do usuário(default) = work • Arquivos VHDL na mesma pasta do projeto
VHDL – Tipos • Resumo
VHDL – Estrutura da Linguagem (Sintaxe) • Entidade (entity) • Definição da interface do módulo (portas) • Sintaxe | entity<nome_modulo> is | port( | <nome_porta> : <sentido_porta><tipo_porta>; | p_entrada_ex : instd_logic; | p_saida_ex : outstd_logic | ); | end; • Sentidos: in, out, inout • Generic (Reusabilidade!) • Boa prática! • nome do módulo igual ao do arquivo • Identificação do sentido no nome da porta: ex.:<nome_porta>_i
VHDL – Estrutura da Linguagem (Sintaxe) • Arquitetura (architecture) • Contém a descrição da funcionalidade do módulo • Sintaxe | architecture<tipo>of<entidade> is |-- declaração de componentes e sinais | signal<nome> : <tipo>; |signalsinal_ex: std_logic_vector(7 downto 0); | ... | begin | -- lógica combinacional (equções booleanas) | -- instanciação de componentes | -- atribuições (<=) | -- processos (process) | ... | end; • Boa prática! • <tipo> coerente com a descrição do módulo • Identificação de sinal no nome do sinal: ex.:<nome_sinal>_s
VHDL – Características • Pode haver mais de uma entidade (módulo) em um mesmo arquivo VHDL • Todos os módulos de um projeto em um mesmo arquivo • Uma entidade pode ter mais de uma arquitetura • A escolha é feita com o uso de configuration • Boa prática! • Uma entidade (módulo) por arquivo VHDL • Uma arquitetura por entidade • Essas regras devem ser seguidas!!
VHDL – Sinais e Variáveis • Sinais • Quase tudo em VHDL se resume a sinais • Comportamento equivalente ao hardware • Temporizado | signalsa, sb : std_logic; ... | sa <= sb; --atribuição • Variáveis • Só podem ser utilizadas dentro de processos • Comportamento semelhante ao software • Sem temporização, atribuição imediata | variableva, vb : std_logic; ... | va := vb; --atribuição • Evita-se utilizar! (Não será utilizado na disciplina!) • Constantes | constant c : std_logic:= ‘1’ ... | sa <= c; --atribuição • | c <= sa; --errado
VHDL – Declarações e Atribuições • Declaração de array de bits • Definição da posição do MSB (MostSignificant Bit) • Declaração | signalbus_msb, : std_logic_vector(3 downto0); | signalbus_lsb, : std_logic_vector(0 to 3); ... • Atribuição | bus_msb <= bus_lsb; --atribuição direta ... equivale ... | bus_msb(3) <= bus_lsb(0); --atribuição índice por índice | bus_msb(2) <= bus_lsb(1); | bus_msb(1) <= bus_lsb(2); | bus_msb(0) <= bus_lsb(3); • Observação • Atribuição direta somente entre arrays de mesmo tamanho • Elementos são atribuídos de acordo o seu índice no array
VHDL – Operadores • Tabela: • Observações • <=(menor_igual, mesma sintaxe que atribuição) • &(concatenação) • Ex.: “0010” & “1100” “00101100” • /=(diferente)
VHDL – Ex.: • Ex.: buzzer • Estrutural • Componentes • Declaração • Instanciação • Interconexões
VHDL – Exemplo (Comportamental) • Comportamental • Operações Lógicas • Pode ser escrita de diversas formas
VHDL – (Cont.) • Comportamental • Condicionais • when • select • if/else ?
VHDL – (Cont.) • Comportamental • Process • IF/ELSE • “switch_case” • “for” • Etc...
VHDL – Process • Sintaxe | process<(lista de sensibilidade)> |-- parte de declaração (variáveis...) [opcional] | begin | -- corpo do process | -- interpretação sequencial | -- testes condicionais com if...then...elsif...then...else...endif | endprocess; • Muito utilizado para circuito sequênciais • Registradores, Latches, memórias • Lista de sensibilidade • Deve conter todas as entradas do circuito • Utilizado em testbench
VHDL – Process • Sintaxe | process<(lista de sensitividade)> |-- parte de declaração (variáveis...) [opcional] | begin | -- corpo do process | -- interpretação sequencial | -- testes condicionais com if...then...elsif...then...else...endif | endprocess; • Muito utilizado para circuito sequenciais • Registradores, Latches, memórias • Lista de sensibilidade • Deve conter todas as entradas do circuito • Utilizado em testbench
VHDL – Projeto • Equipe de desenvolvimento • <circuito1.vhd> ... <circuito2.vhd> ... <circuitoN.vhd> • Equipe de testes • <circuito_tb.vhd> • estímulos entradas.txt • resultados saidas.txt • verificação se os resultados são os esperados.
VHDL – Equipe de Desenvolvimento • Diversos módulos VHDL • Integração • (“TOP”) - TOPO DO PROJETO • 4x Projeto RTL
VHDL – Equipe de Desenvolvimento • Diversos módulos VHDL • Integração • (“TOP”) - TOPO DO PROJETO • 4x Projeto RTL
VHDL – Testbench • Equipe de teste (top_tb) • Sem portas • Process • sem lista de sensibilidade
VHDL – Simulação • Geração dos estímulos utilizando o top_tb.vhd • Simulação • Ferramenta ISIM • Análise dos resultados através da forma de onda • “escovação de bit”
VHDL – Estrutura padrão de um projeto • Hierarquia de arquivos • top_tb.vhd(testbench do top do projeto – não sintetizável) • top.vhd(integração dos circuitos desenvolvidos - sintetizável) • top.ucf • Circuito1.vhd • Circuito2.vhd • .... • Os arquivos VHDL do exemplo “buzzer” estão disponibilizado na página da disciplina • O arquivo top.vhd e top.ucf com as portas dos componentes básicos da XC3S400 também estão disponibilizados na página