23
VHDL (outros tópicos) MO801/MC912

VHDL (outros tópicos)

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: VHDL (outros tópicos)

VHDL (outros tópicos)

MO801/MC912

Page 2: VHDL (outros tópicos)

Outros tipos de portas

• Tipos já vistos– in– out

• Novos tipos– inout– buffer

Page 3: VHDL (outros tópicos)

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?

Page 4: VHDL (outros tópicos)

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

Page 5: VHDL (outros tópicos)

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

Page 6: VHDL (outros tópicos)

Exemplo

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

type register_set is record

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);

Page 7: VHDL (outros tópicos)

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)

Page 8: VHDL (outros tópicos)

Tipos

• Representação de inteiros sobre bits– unsigned, signed– Complemento de 2 (bit de sinal à esquerda)

• Package numeric_bittype unsigned is array (natural range <>) of bit;

type signed is array (natural range <>) of bit;

• Package numeric_stdtype unsigned is array (natural range <>) of std_logic;

type signed is array (natural range <>) of std_logic;

Page 9: VHDL (outros tópicos)

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

Page 10: VHDL (outros tópicos)

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_encodingattribute enum_encoding : string;

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

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

• A ordem crescente deve ser mantida

Page 11: VHDL (outros tópicos)

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

Page 12: VHDL (outros tópicos)

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

Page 13: VHDL (outros tópicos)

Opções do GHDL

• Analisar o códigoghdl –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)

Page 14: VHDL (outros tópicos)

Múltiplos domínios de freqüência

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

A17 MHz

B22 MHz

Page 15: VHDL (outros tópicos)

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!

Page 16: VHDL (outros tópicos)

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

Page 17: VHDL (outros tópicos)

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?

Page 18: 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

Page 19: VHDL (outros tópicos)

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

Page 20: VHDL (outros tópicos)

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 is array(0 to 255) of std_logic_vector(31 downto 0) := (others => (others => ‘0’));

Page 21: VHDL (outros tópicos)

Use alias para quebrar sinais

• Exemplostype 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) !

Page 22: VHDL (outros tópicos)

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);

end case;

Page 23: VHDL (outros tópicos)

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!