Mudancas Recentes - Buscar:

Principal

 Objetivos  
 Ementa  
 Livros 

OAC

LOAC

Professores:

  JOSEANA
  ELMAR

CONTATO

CRÉDITOS

editar



Guia de Laboratório

Uma interface foi escolhida para facilitar aprendizagem e simplificar acompanhamento de seus projetos.
Considere um Circuito a Fazer (CAF) como sendo qualquer um (combinatório, sequencial, processador, etc) que você terá que implementar. [Ver observações] =]
De um lado, chaves escrevem 02 palavras = Entrada do CAF. [Ver figura abaixo]
Na saída, HEX7-0, LEDR, LEDG, e LCD = SAÍDA do CAF.
No meio, sua lógica irá operar entrada e produzir saída.

Ambiente de Verificação Obrigatória

Observações

Copie a pasta /labarc/DE2_TOP para seu home. O livro é essencial para conseguir fazer esses laboratórios. Priorizar compreensão e completude da interface. Assim que ela estiver verificada e validada por você, dedique sua atenção integral ao CAF.

Leite para o display de 7 segmentos: pasta /labarc/DE2/DE2_demonstrations/DE2_TV arquivos SEG7_LUT_8.v e SEG7_LUT.v

Leite para o LCD: /labarc/DE2_TOP/LCDhex_inst.sv

Layout da Interface da ULA

Simplificação: desconsidere o sinal C (carry out).

Entrada

Botões KEY: Chaves de Execução
KEY0 - (livre)
KEY1 - (livre)
KEY2 - (livre)
KEY3 - (livre)
Chave SW[17] : (livre)
Chave SW[16] : Modo=0 ou Modo=1 setado pelo usuário
Ou seja, alimenta 2 buffers na entrada do CAF
Chaves SW[15:0] : Dados de entrada setados pelo usuário
Modo 0: dados a serem aplicadas para entradas de controle
15:9 - (livre)
8:6 - S[2:0]
5 - Cin
2:0 - (livre)
Modo 1:
15:8 - dados a serem aplicadas para entrada A
7:0 - dados a serem aplicadas para entrada B

Saída

LCD - 2 linhas com 5 valores de 8 bits em cada linha
( livre )( livre )( livre )( livre )( livre )
Data input AData input Bsaida G da ULA( livre )( livre )
Displays de 7 segmentos: 2 valores de 8 bits e 1 valor de 16 bits
HEX7,HEX6HEX5,HEX4HEX3,HEX2,HEX1,HEX0
( livre )( livre )( livre )
LEDS
Verdes LEDG:
8 (no meio dos display de 7 segmentos) - (livre)
7:0 - (livre)
Vermelhos LEDR: Visualizam dados de entrada e sinais internos
17:9 - (livre)
8:6 - S[2:0]
5 - Cin
2:0 - (livre)

Layout da Interface do Datapath

Errata: no livro, na Table 9-4, no lugar de "Select[3:0]" deve-se ler "Select[1:0]".

Simplificação: desconsidere o sinal V (overflow) e C (carry out).

Entrada

Chaves KEY: Chaves de Execução
KEY0 = (livre)
KEY1 - (livre)
KEY2 - (livre)
KEY3 - reset
Chave SW[17] : pushando essa chave, o clk pára de oscilar
Chave SW[16] : Modo 0 e Modo 1 setado pelo usuário
Ou seja, alimenta 2 buffers na entrada do CAF
Chaves SW[15:0] : Dados de entrada setados pelo usuário
Modo 0: dados a serem aplicadas para entradas de controle
15:14 - Destination select
13:12 - A select
11:10 - B select
9 - MB select
8:5 - G select
4:3 - H select
2 - MF select
1 - MD select
0 - Load_enable
Modo 1:
15:8 - dados a serem aplicadas para entrada Constant in
7:0 - dados a serem aplicadas para entrada Data in

Saída

LCD - 2 linhas com 5 valores de 8 bits em cada linha
BusDR0R1R2R3
Address outData outG da ULAH do shifterData in
Displays de 7 segmentos:
HEX7,HEX6HEX5,HEX4HEX3,HEX2,HEX1,HEX0
Constant in( livre )( livre )
LEDS
Verdes LEDG:
8 (no meio dos display de 7 segmentos) - clk de 0,5 Hz (período de oscilação de 2 segundos)
7 - Z - Zero
6 - N - Negative
5:0 - (livre)
Vermelhos: LEDR:
17:16 - (livre)
15:14 - Destination select
13:12 - A select
11:10 - B select
9 - MB select
8:5 - G select
4:3 - H select
2 - MF select
1 - MD select
0 - Load enable

Para levar para fora do datapath valores que não sao verdadeiras saídas do datapath, deve-se usar a seguinte definição de tipo:

 typedef struct { logic [W-1:0] R [0:(1<<M)-1];
                  logic [W-1:0] BusD, G, H; } visual_dp_t; 

sendo que W é o tamanho das palavras - o livreo osa a letra N que pode ser confundido com o sinal N.

Casos de Teste

MUX B: Constant_in=0x5A MBselect=1; 0x5A em Data_out
MUX D: Data_in=0x32 MDselect=1; 0x32 em BusD
R2: BusD=0x32 Load_enable=1 Destination_select=2; 0x32 em R2
ALU: R2=0x32 BusB=0x5A Aselect=2 Gselect=2; 0x8C em G e Z=0 N=1; MFselect=0 MDselect=0; 0x8C em BusD
Shifter: BusB=0x5A Hselect=1; 0x2D em H; MFselect=1 MDselect=0; 0x2D em BusD
Z: reset; Z=1

CPU - Processador com Memória e IO

Legenda

Processador

DataOut
Dado a ser enviado para fora do processador.
DataIn
Dado a ser enviado para dentro do processador.
MW - Memory Write
Saída do processador sinalizando que tem dados a serem recebidos em DataOut.
Address
Endereço para o qual o valor do DataOut está sendo enviado ou de onde o valor para DataIn deve ser buscado.
Address == 'hFF seleciona o dispositivo de entrada/saída.
Address entre 'h00 e 'h7F seleciona a memória.

RAM

D entrada de dados
Q saída de dados
A entrada de endereço
WE - Write Enable
Sinaliza à RAM para receber o dado em D e armazenar no endereço A.

Entrada \ Saida (Input \ Output)

WE - Write Enable
Sinaliza que o dado é válido para Saída.
CE - Chip Enable
Se o valor de Address for 'hFF o DataIn receberá o valor da entrada (input).
Se não, o DataIn receberá o valor da saída Q da RAM.

Layout da Interface da CPU

Entradas

Chaves KEY: Chaves de Execução
KEY0 - (livre)
KEY1 - (livre)
KEY2 - (livre)
KEY3 - reset
Chave SW[17] : pushando essa chave, o clk pára de oscilar
Chave SW[16] : Modo 0 e Modo 1 setado pelo usuário
Chaves SW[15:0] : Entrada de interrupção do processador e Entradas da CPU
15 - INT
14:3 - (livre)
2:0 - En[2:0] - Entradas da CPU

Saídas

LCD - 2 linhas com 5 valores de 8 bits em cada linha
Modo 0:
BusDR0R1R2R3
Address outData outG da ULAH do shifterData in
Modo 1:
virtual AddressR4R5R6R7
Address outData outG da ULAH do shifterData in
Displays de 7 segmentos:
HEX7,HEX6HEX5,HEX4HEX3,HEX2,HEX1,HEX0
Constant inPCinstrução
LEDS
Verdes LEDG:
8 (no meio dos display de 7 segmentos) - clk de 0,5 Hz (período de oscilação de 2 segundos)
7 - Z - Zero
6 - N - Negative
bits 2:0 do control word conforme Figura 9-16 do livro:
5 - PL
4 - JB
3 - BC
2:0 - Sa[2:0] - Saídas da CPU
Vermelhos LEDR: Control word
17 - busy - da cache
16 - MW - bit 3 do control word conforme Figura 9-16 do livro
control word conforme Figura 9-11 do livro (bits 19:4 do da Figura 9-16):
15:13 - DA
12:10 - AA
9:7 - BA
6 - MB
5:2 - FS
1 - MD
0 - RW

Para levar para fora do processador valores que não sao verdadeiras saídas do processador, deve-se usar a seguinte definição de tipo:

 typedef struct { logic [W-1:0] pc, constant_in;
                  logic [15:0] instruction;
                  logic [19:0] control_word;
                  logic z, n;
                  visual_dp_t dp; } visual_pr_t; 

Casos de Teste

Supersimples
 INC R1,R1
 INC R1,R1
 DEC R1,R1
 DEC R1,R1 
Carregamento_imediato
 LDI R1,5
 LDI R2,1Ah  ; usando bits 5:0 da instrucao
 LDI R2,9Ah  ; usando bits 10:9 e 5:0 da instrucao
 ADI R3,R1,4 
Pulando
 LDI R1,5
 BRZ R1,30
 LDI R2,0
 BRZ R2,2
 LDI R1,0
 INC R1,R1
 LDI R3,1
 JMP R3 
Escrita_leitura
 LDI R2,2
 LDI R3,7 
 ST  R2,R3   ; store value 7 at memory address 2
 ST  R3,R2   ; store value 2 at memory address 7
 LD  R0,R3   ; read value from memory address 7, which is 2, into R0
 LD  R1,R2   ; read value from memory address 2, which is 7, into R1 
Saida
 LDI R3,0
 DEC R3,R3
 LDI R2,2
 ST  R3,R2   ; send value 2 to output Sa 
Entrada
 LDI R3,0
 DEC R3,R3
 LD  R0,R3   ; get input value from En into register R0 

Veja também Dicas Quartus

© 2008 Profs. Elmar Melcher e Joseana Fechine. Monitores: Sergio Espinola e Fabricio Lelis - DSC/UFCG
Modificada em March 29, 2012, at 09:49 AM