ESPECIFICAÇÃO DO PROJETO (Segunda Unidade) Projeto da CPU com Teclado O projeto da CPU precisa ser acoplado a um teclado com comunicação PS2 bem como a um decodificador para display de sete segmentos que também será desenvolvido. Neste projeto da segunda unidade, a ULA e os registradores da CPU devem ser desenvolvidos usando Portas Lógicas, já a Unidade de Controle da CPU e o Decodificador do Teclado em Verilog. O projeto deve estar pronto para baixar na placa de prototipação DE2-70, inclusive com as pinagens configuradas. As respectivas pinagens (associação de um sinal entrada/saída com um pino do FPGA) estão especificadas em anexo. Deverá ser entregue um relatório impresso ao professor juntamente com o código fonte (pasta completa do projeto compactada), detalhando cada fase desenvolvida, que deve conter: a) Capa com identificação dos alunos b) Visão Geral do Projeto (figura ilustrando o sistema completo em blocos). Explicar sucintamente nesta etapa cada módulo desenvolvido. c) Circuito ou Verilog projetado de cada módulo e simulação (waveform) d) Circuito / Verilog com todo sistema conectado e simulação (waveform) e) Conclusão Módulo Driver PS2 O módulo do driver PS2 tem como entrada quatro sinais (Clk_board, Data, Ready, Clk), cada um com 1 bit de informação e dois sinais de saída (new_instruction, instruction). O dado oriundo do teclado indica uma instrução a ser executada pela CPU. Entradas: 1. Dois sinais Clk_board e Data de 1 bit (1 para o clock do teclado e 1 para os dados do teclado). Os dados são enviado de forma serial segundo o protocolo PS2. 2. Um sinal ready de 1 bit que indica que a CPU executou uma instução e está pronta para receber uma nova instrução. Se ready = 1 então um novo dado pode ser enviado. Neste caso, a CPU deve ficar "congelada". Este sinal vai para zero quando uma nova instrução estiver sendo processada na CPU. 3. O sinal Clk, de 1 bit, que representa o clock do sistema. É utilizado para sincronizar o envio dos dados para a unidade de controle.
Tecla 0 1 Instrução CLRLD(000) ADD(001) Ao teclar '0', o módulo do driver PS2 enviará para a CPU um comando '000' indicando que uma instrução de CLRLD será executada. 2 SUB(010) 3 AND(011) 4 OR(100) 5 6 7 XOR(101) NOP(110) DISP(111) Saídas: 1. Uma saída new_instruction de 1 bit, indicando que uma nova instrução chegou pelo teclado. 2. Um sinal instruction de 3 bits que contém um vetor de bits indicando o opcode de uma instrução. Este opcode deve ser decodificado pela unidade de controle da CPU. CPU A CPU é composta da Unidade de Controle, Unidade Lógica e Aritmética e Registradores. Registradores Os registradores armazenam temporariamente um dado, que nunca estará no formato de complemento a dois (ou seja, um bit de sinal e quatro de módulo), que está sendo
processado. O registrador pode receber 3 comandos: (00, 01, 10), oriundos de Tx, Ty e Tz. Os registradores X, Y e Z possuem 5 bits cada um. Unidade de Controle A unidade de controle é responsável pela sequência de execução das instruções na CPU. Caso o "new_instruction = 1", então indica que chegou uma nova instrução. A unidade de controle coloca "ready = 0" indicando que irá executar uma nova instrução. Em seguida, o comando contido em "instruction" é decodificado seguindo a Tabela abaixo. Exemplo: Caso "instruction=000", então foi o comando de CLRLD, com isso, deve-se colocar nos sinais Tx, Ty, Tz e Tula os valores indicados na tabela.
ULA A unidade lógica e aritmética é responsável pelas operações lógicas de and, or e xor, além das aritméticas de adição e subtração. As operações lógicas devem ser feitas bit a bit entre dois operandos. Entradas: Saídas: 1. Dois vetores de 5 bits (1 para o sinal e 4 para o módulo) oriundos dos registradores X e Y, representando os operandos. Esses números são binários positivos ou negativos (não estarão complementados a 2). 2. O sinal Tula de 3 bits que representa o tipo de operação. 1. Um vetor F de 5 bits, que não deve estar complementado a dois, representando o resultado da operação (para os casos em que a operação retorna um vetor). 2. Um sinal (LED) representando overflow (para as operações que podem gerar overflow). 3. Um sinal (LED) para indicar que o resultado é negativo (aceso quando negativo e apagado quando positivo). Decodificador BCD para display de 7 segmentos Para que seja possível exibir os números no display da placa DE2-70, o projeto da ULA deve estar acoplado a um decodificador. Os leds de cada display acendem quando colocado nível lógico 0. Entradas: Saídas: 1. Para uma ULA de 5 bits representando um número binário positivo ou negativo (sem estar no complemento a 2). 1. Dois vetores de 7 bits representando os 2 displays, segundo a tabela abaixo.
Sistema Completo Observação: Além de ser conectado a dois displays de 7 segmentos, cada registrador também deve estar conectado a 5 LEDS (cada bit ligado a um LED) vermelhos, para a visualização das operações lógicas. Observação: Os valores a serem processados virão de 5 switches, com 1 bit sendo de sinal e 4 para o módulo (ou seja, não virão complementados a dois). Observação: Quando acontecer um overflow deverá ser mostrado no display de Z Observação: Na instrução DISP caso as operações feitas anteriormente sejam aritméticas os leds conectados a Z devem ser apagados e caso as operações sejam lógicas os displays devem ser apagados.
Exemplos: 5 + 3 = 8 Essa expressão deverá executada da seguinte forma: Switches: 00101 CLRLD (Zera Y e Z e carrega X com o valor 5) Switches: 00011 ADD (Adiciona Y = 0 com X = 5 e coloca o resultado em Y, além de carregar X com o valor 3) ADD (Adiciona Y = 5 com X = 3 e coloca o resultado em Y, além de carregar X com o valor 3) DISP (Carrega Z com o valor 8 e zera X e Y) 4 + 3 1 1 2 = 3 Essa expressão deverá ser executada da seguinte forma: Switches: 00100 CLRLD (Zera Y e Z e carrega X com o valor 4) Switches: 00011 ADD (Adiciona Y = 0 com X = 4 e coloca o resultado em Y, além de carregar X com o valor 3) Switches: 10001 ADD (Adiciona Y = 4 com X = 3 e coloca o resultado em Y, além de carregar X com o valor -1) ADD (Adiciona Y = 7 com X = -1 e coloca o resultado em Y, além de carregar X com o valor -1) Switches: 00010 ADD (Adiciona Y = 6 com X = -1 e coloca o resultado em Y, além de carregar X com o valor 2)
SUB (Subtrai Y = 5 com X = 2 e coloca o resultado em Y, além de carregar X com o valor 2) DISP (Carrega Z com o valor 3 e zera X e Y)
Informações sobre clock
Pinagem: O FPGA Cyclone II para o qual o projeto será baixado é o EP2C70F896C6.