Vhdl outros t picos
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

VHDL (outros tópicos) PowerPoint PPT Presentation


  • 48 Views
  • Uploaded on
  • Presentation posted in: General

VHDL (outros tópicos). MO801/MC912. Outros tipos de portas. Tipos já vistos in out Novos tipos inout buffer. inout. Porta de entrada e saída Considerado um fio com possibilidade de escrita e leitura Quando é feita uma leitura, funciona como uma porta in

Download Presentation

VHDL (outros tópicos)

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Vhdl outros t picos

VHDL (outros tópicos)

MO801/MC912


Outros tipos de portas

Outros tipos de portas

  • Tipos já vistos

    • in

    • out

  • Novos tipos

    • inout

    • buffer


Inout

inout

  • Porta de entrada e saída

  • Considerado um fio com possibilidade de escrita e leitura

  • Quando é feita uma leitura, funciona como uma porta in

  • Quando é feita uma escrita, funciona como uma porta out

  • Como saber quando é in e quando é out?


Buffer

buffer

  • É uma porta de saída com um buffer que faz realimentação

  • Considerado um fio com possibilidade de escrita e leitura

  • Quando é feita uma leitura, o valor presente na porta é lido

  • Quando é feita uma escrita, funciona como uma porta out


Aliases

Aliases

  • Permite que seja dado outro nome para um dado elemento

    • Um campo dentro de um registro

    • Um subconjunto de bits de um vetor de bits

    • Tipo de dados

    • Funções

  • Podem ser definidos alias de alias

  • Todas as operações aplicadas a um alias é aplicada ao elemento original


Exemplo

Exemplo

type register_array is array(0 to 15) of bit_vector(31 downto 0);

type register_set isrecord

general_purpose_registers : register_array;

program_counter : bit_vector(31 downto 0);

program_status : bit_vector(31 downto 0);

end record;

variable CPU_registers : register_set;

alias GPR is CPU_registers.general_purpose_registers;

alias SP is GPR(15);

alias PSW is CPU_registers.program_status;

alias interrupt_level : bit_vector(4 downto 0) is PSW(30 downto 26);


Arquivos

Arquivos

  • Existem dois arquivos do tipo text já abertos por padrão

    • input

      • Mapeado no dispositivo de entrada padrão (geralmente é o teclado)

    • output

      • Mapeado no dispositivo de saída padrão (geralmente é a tela)


Tipos

Tipos

  • Representação de inteiros sobre bits

    • unsigned, signed

    • Complemento de 2 (bit de sinal à esquerda)

  • Package numeric_bit

    type unsigned is array (naturalrange <>) of bit;

    type signed is array (naturalrange <>) of bit;

  • Package numeric_std

    type unsigned is array (naturalrange <>) of std_logic;

    type signed is array (naturalrange <>) of std_logic;


Convers es

Conversões

  • to_integer

    • Converte signed para integer e unsigned para natural

  • to_unsigned

    • Converte natural para unsigned

  • to_signed

    • Converte integer para signed

  • Mais detalhes no capítulo 8 do livro


Codifica o de tipos enumerados

Codificação de tipos enumerados

  • Por padrão, é responsabilidade das ferramentas de síntese definir como serão codificados os tipos enumerados

  • O projetista pode sobrepor esse padrão definindo o atributo enum_encoding

    attribute enum_encoding : string;

    type state is (idle, preamble, data, crc, ok, error);

    attribute enum_encoding of state : typeis “000 001 010 011 100 111”;

  • A ordem crescente deve ser mantida


Desligando a ferramenta de s ntese

Desligando a ferramenta de síntese

  • A ferramenta de síntese pode ser desligada para alguns trechos de código

    • Útil para incluir testes internamente nos modelos

  • Dois comentários especiais controlam a ferramenta

    -- rtl_synthesis off

    -- rtl_synthesis on

  • Algumas ferramentas também aceitam a versão

    -- pragma translate off

    -- pragma translate on


Exemplos extras

Exemplos extras

  • Opções para o GHDL

  • Comunicação com múltiplos domínios de freqüência

  • Carga de memória para simulação

  • Use alias para quebrar sinais

  • Portas para banco de registradores


Op es do ghdl

Opções do GHDL

  • Analisar o código

    ghdl –a –ieee=synopsys arquivo.vhd

  • Elaborar a entidade (gerar um executável)

    ghdl –e –ieee=synopsys arquivo

  • Outras opções úteis

    • i: Importa um arquivo para a biblioteca

    • gen_makefile: cria um Makefile

      --vcd=arq.vcd: gera um arquivo no formato VCD com as formas de ondas (só é válido no executável)


M ltiplos dom nios de freq ncia

Múltiplos domínios de freqüência

  • Como fazer a comunicação de dois módulos que trabalham em freqüências diferentes?

A

17 MHz

B

22 MHz


Definir um protocolo

Definir um protocolo

  • O Clock não pode ser considerado

  • Definir sinais de handshake para cada lado

  • Usar registradores nos dois lados do canal de comunicação

  • Cuidado com latches

    • Funciona em situações simples

    • Transporta o problema de temporização para dentro do circuito!


Situa es espec ficas

Situações específicas

  • Sabe-se, antecipadamente, qual dos dois módulos é o mais rápido

  • Se as freqüências são muito distintas, o problema fica mais simples

    • Ex.: A trabalha com mais do que o dobro da freqüência de B


Carga de mem ria em simula o

Carga de Memória em Simulação

  • Como modelar uma ROM/RAM?

  • Como simulá-la?

  • Como carregar um valor inicial?

  • Como fazer um mesmo módulo que seja útil na simulação e na síntese?


Vhdl outros t picos

ROM

  • Versão mais simples:

    • Vetor de constantes

  • Alternativa

    • case sobre o endereço

    • Fará com que a ferramenta de síntese tente otimizar a memória com lógica

    • A temporização será modificada


Dicas

Dicas

  • Utilize os flags para desabilitar a ferramenta de síntese

    --rtl_synthesis off

    --rtl_synthesis on

  • Inclua um generic no componente passando o nome do arquivo

    • Permite que o mesmo componente seja usado mais de uma vez no projeto

    • Não se esqueça de parametrizar o intervalo dos endereços e a largura dos dados também


Como zerar uma mem ria

Como zerar uma memória?

  • Síntese

    • Gastar ao menos N ciclos de clock para escrever N zeros na memória de N posições

  • Simulação

    • Declarar a memória com valor inicial zerado

      signal Memoria isarray(0 to 255) of std_logic_vector(31 downto 0) := (others => (others => ‘0’));


Use alias para quebrar sinais

Use alias para quebrar sinais

  • Exemplos

    type TInstrucao is unsigned(15 downto 0);

    signal instrucao : TInstrucao;

    alias opcode : unsigned(3 downto 0) is instrucao(15 downto 12);

    alias rd : unsigned(3 downto 0) is instrucao(11 downto 8);

    alias imm12 : unsigned(11 downto 0) is instrucao(11 downto 0);

  • Todos os acessos feitos serão considerados em relação ao sinal instrucao

  • rd = imm12(11 downto 8) !


Portas para banco de registradores

Portas para banco de registradores

  • Quantas portas o banco de registradores acessado pela máquina de estados abaixo precisa?

    case estado is

    when A => val1 <= RB(end1);

    when B => val2 <= RB(end2);

    when C => val3 <= RB(end3);

    endcase;


Sugest o de escrita

Sugestão de escrita

signal endereco, valor : …

valor <= RB(endereco);

process …

case estado is

when A => endereco <= end1; val1 <= valor;

when B => endereco <= end2; val2 <= valor;

when C => endereco <= end3; val3 <= valor;

end case;

  • Cuidado com a temporização!


  • Login