A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

VHDL (outros tópicos) MO801/MC912.

Apresentações semelhantes


Apresentação em tema: "VHDL (outros tópicos) MO801/MC912."— Transcrição da apresentação:

1 VHDL (outros tópicos) MO801/MC912

2 Outros tipos de portas Tipos já vistos in out Novos tipos inout buffer

3 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?

4 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

5 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

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

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

8 Tipos Representação de inteiros sobre bits Package numeric_bit
unsigned, signed Complemento de 2 (bit de sinal à esquerda) Package numeric_bit type unsigned is array (natural range <>) of bit; type signed is array (natural range <>) of bit; Package numeric_std type unsigned is array (natural range <>) of std_logic; type signed is array (natural range <>) of std_logic;

9 Conversões to_integer to_unsigned to_signed
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

10 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 : type is “ ”; A ordem crescente deve ser mantida

11 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

12 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

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

14 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

15 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!

16 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

17 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?

18 ROM Versão mais simples: Alternativa Vetor de constantes
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

19 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

20 Como zerar uma memória? Síntese Simulação
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’));

21 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) !

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

23 Sugestão de escrita Cuidado com a temporização!
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!


Carregar ppt "VHDL (outros tópicos) MO801/MC912."

Apresentações semelhantes


Anúncios Google