Sie sind auf Seite 1von 4

Material de Apoio Lab 4

EA773 Turma C
Lucas Nogueira Morais RA 202045
Registradores

Realizamos, no quartus, a construção de um registrador de 4 bits, com entrada e saída paralela,


por meio de flip-flops do tipo D, e o encapsulamos como um componente.

Buffer Tri-State

Utilizando buffers tri-state, criamos um componente buffer tri-state de 4 bits, ligando os enables
de todos buffers em um único enable, e o encapsulamos.

Realizamos uma simulação temporal, onde observamos que a saída possui um pouco de atraso
e há uma pequena indeterminação da saída antes da transição para o estado de alta impedância.

É possível utilizar mais de um buffer tri-state em um mesmo barramento devido a saída deste
poder ser “anulada”, tomando um estado de alta impedância, e assim não interferir com outras
saídas inseridas no barramento. Utilizando-se uma codificação nos enables dos buffers tri-state
de modo a um único estar inserindo valores no barramento, não haverá conflito de informações.
Barramento

Utilizando os módulos de decodificador hexadecimal, registrador, buffer tri-state e ULA,


montamos um circuito para realizarmos operações com a ULA e visualizarmos as saídas em
displays e leds.

Utilizamos:

• SW3 a SW0 para inserirmos valores no barramento (entrada C);


• SW4 como entrada R/W;
• KEY0 a KEY2 para os clocks GA, GB e GAc, respectivamente;
• Displays HEX3 a Hex0 para visualizarmos A, B, Ac e barramento, respectivamente;
• LEDG3 a 0 para visualizar a saída do registrador A;
• LEDG7 a 4 para visualizar a saída do registrador B;
• LEDR3 a 0 para visualizar a saída da ULA;
• LEDR7 a 4 para visualizar a saída das flags N, Z, V e C, respectivamente.

Codificação das operações: ADD (0), SUB (3), CMX (2) e CSX (1).

Para inserir um valor no barramento deve-se mantar a chave R/W em 1 e inserir o valor em C.
Para inserir esse valor no registrador A, deve-se apertar GA. Para inserir outro valor no
registrador B, deve-se inserir o valor em C e apertar GB. Para realizar uma operação, deve-se
inserir seu código em C e apertar GAc para visualizar a saída no display. Para utilizar a saída em
outra operação, deve-se alterar R/W para 0 e apertar GA ou GB, dependendo de em qual
registrador quiser inserir o valor da saída.

A entrada R/W serve para determinar se será inserido um valor de entrada no barramento ou
se será inserido o valor da saída no barramento para ser lido como entrada.

Quando R/W está em 1 e GAc muda de 0 para 1, o valor de S e das flags são atualizados,
enquanto D permanece com o valor de C anterior. Quando R/W muda para 0, os valores de S e
das flags permanecem, mas o valor de S é inserido em D.

Sequência de operações para teste:

CMX (2): 0001 (1) -> 1110 (-2/E)

CSX (1): 1110 (-2/E) -> 0010 (2)

SUB (3): 0010 (2) – 0001 (1) -> 0001 (1)

ADD (0): 0001 (1) + 0101 (5) -> 0110 (6)

Realizamos este teste tanto na simulação temporal do Quartus, quanto na FPGA.


Circuitos com clock

Alteramos o componente registrador de 4 bits para que possuísse um sinal de clock e enable e
clear síncronos com esse clock. Para isto utilizamos multiplexadores na entrada de cada um
dos flip-flops para selecionar entre o clear, o enable e a saída anterior do flip-flop.

Inserimos GA, GB e GAc nas entradas de enable dos devidos registradores.

• Clear: SW5
• Clock: KEY3
Projetamos uma simulação temporal para testar as alterações do circuito.