Processador nanopcs-1 E.T.M./2002 (adaptação) E.T.M./2003 (revisão) E.T.M./200 (revisão) E.T.M./2006 (revisão) E.T.M./2010 (revisão) E.T.M./2011 (revisão) RESUMO Esta experiência tem por objetivo o projeto do núcleo de um pequeno processador responsável pela execução de operações aritméticas e lógicas e de transferência de dados entre registradores. A parte experimental inclui o projeto, montagem, teste, depuração e documentação de um circuito baseado em componentes diversos, como ULA, RAM e registradores tri-state, onde a sequencia de operações é armazenada na memória de programa e depois executada pela ULA e os dados são deslocados através dos registradores. 1. PARTE TEÓRICA 1.1. Estrutura Básica de um Processador A organização interna de um processador é composta basicamente como um conjunto de registradores, vias de dados e unidades funcionais. A figura 1.1 abaixo ilustra um diagrama da estrutura interna do processador 8080 da Intel. O núcleo básico do 8080 foi usado como base de microcontroladores como o 808 e o 8051. O microcontrolador 8051 sobrevive até os dias de hoje, sendo agora comercializado por diversos fornecedores como a Phillips, Atmel, Siemens, entre outros. Via de Dados Externa D7- D0 Registrador de Dados de Saída Via de Dados Interna (8) Acumulador (8) Reg. Temp. (8) Reg. Instruções Mux Reg. Acum. (8) Flags Flip-Flops (5) Unidade Lógica...Aritmética ULA (8) Decodificador de Instrução Seletor de Regs Reg Temp Reg Temp W (8) Z (8) Reg B (8) Reg C (8) Reg D (8) Reg H (8) Reg E (8) Reg L (8) Ponteiro de Pilha (16) Contador Instruções (16) Increm/Decrem Endereços Ajuste Decimal Memória Local Alimentação +12 V +15 V -5 V GND Unidade de Controle Controle Controle Controle Controle Write Sync via de dados interrupção hold wait Clock WR DBIN INTE INT HOLD HOLD WAIT READY SYNC Φ 1 Φ 2 RESET ACK Figura 1.1 Diagrama de Blocos do microprocessador Intel 8080. (fonte: apostila Microprocessadores I do Laboratório Digital) Registrador de Endereços (16) Via de Endereços A15-A0 Processador nanopcs-1 (2011) 1
A memória local do microprocessador 8080 é constituída de um conjunto de registradores temporários, de uso geral, ponteiro de pilha (SP) e contador de instrução (PC). Os registradores de uso geral (B, C, D, E, H e L) são endereçáveis diretamente por instruções de programa e podem ser utilizados aos pares (registradores de 16 bits) ou isoladamente (registradores de 8 bits). Os registradores temporários são utilizados pela unidade de controle e não são acessíveis pelo programador. O ponteiro de pilha define, no começo do programa, o início da pilha. O contador de instrução é automaticamente incrementado, através do acionamento do circuito de incremento/decremento, durante cada fase de busca de instrução, e indica o endereço da próxima instrução a ser executada. A comunicação entre a memória local e a via interna de dados é feita através do multiplexador, em blocos de 8 bits. A via externa de dados é acessada através do registrador de dados de saída. O registrador possui excitadores que operam em três modos: desligado (a via externa fica isolada da interna); saída (os dados existentes na via interna são colocados na externa); e entrada (os dados da via externa são colocados na via interna, de acordo com a operação que está sendo executada). As operações lógicas e aritméticas são realizadas pela ULA, que tem como entradas os registradores Reg. Temp., Reg. Acum. e o Flag (vai-um). As instruções aritméticas são realizadas com o Acumulador. O registrador Flags, constituído dos bits zero, vai-um, sinal, paridade e vai-um auxiliar, é atualizado por instruções aritméticas e lógicas, conforme o resultado da operação. A Unidade de Controle, em função do código da operação e tendo como referência sinais de relógio, fornece os sinais de controle do fluxo de dados (interno), além de gerar os sinais para controle externo. Desde a década de 70, quando os microprocessadores foram introduzidos ao mercado pela Intel com o lançamento do 00, os microprocessadores tem evoluído muito. Processadores mais modernos apresentam uma organização interna mais sofisticada, porém a estrutura básica é praticamente a mesma. A figura 1.2 mostra o diagrama de blocos do processador Athlon da AMD. Novos elementos estão presentes, que foram sendo embutidos, como por exemplo, memórias cache, unidades de ponto flutuante, pipeline para execução de instruções, TLB, entre outros. Figura 1.2 Diagrama de blocos do microprocessador AMD Athlon. fonte: (AMD, 2000) Novos processadores são introduzidos regularmente no mercado e incluem novas características visando aumentar o desempenho de processamento e reduzir o consumo de energia. Por exemplo, o processador Core i7 990x da Intel disponibiliza 6 núcleos no mesmo encapsulamento, permitindo a execução paralela de vários programas ou tarefas. Outras inovações na microarquitetura destes novos processadores incluem, entre outros aspectos, a execução de várias linhas de processamento por núcleo (multithreading) e a possibilidade de gerenciar o consumo de energia de partes dos núcleos de execução do processador e desligar a alimentação das partes ociosas (Intel, 2006). Processador nanopcs-1 (2011) 2
REG.VAI EPUSP PCS 2021/2308 Laboratório Digital 2. PARTE EXPERIMENTAL O projeto desta experiência será o desenvolvimento do núcleo de um processador, chamado nanopcs-1, que permite a execução de pequenos programas, e é composto por uma ULA, alguns registradores, uma via de dados interna e uma memória de programa. A escolha do método de projeto fica a cargo do grupo. Contudo a documentação deve incluir uma descrição completa do funcionamento do fluxo de dados e da unidade de controle, simulações das várias partes do circuito e do circuito completo. 2.1. Especificação do Núcleo do Processador O núcleo do processador nanopcs-1 é apresentado na figura 2.1 abaixo. Ele é composto por uma ULA de bits, uma memória de programa de 16 palavras de 8 bits, cinco registradores (REM, REG.ULA, REG.VAI, REG.R0 e REG.R1) e uma via de dados interna. INCR DADO EXTERNO (CHAVES) LIMPA REM DISPLAY D0 DADO (CHAVES) 7 MEMÓRIA LEDs L8-L1 6 OPER_ULA B ULA A VAI-UM DISPLAY D1 LED L0 GRAVA COLOCA.ULA REG.ULA COPIA.R0 DISPLAY D3 REG.R0 VIA TRI-STATE COPIA.R1 COLOCA.R1 REG.R1 DISPLAY D2 Figura 2.1. Fluxo de Dados do processador nanopcs-1. A memória de programa armazena um conjunto de bytes de dados contendo códigos de instruções para serem executados pelo processador. O formato das instruções será detalhado mais a seguir. A memória é endereçada pelo registrador REM (registrador de endereço de memória), que indica qual instrução está sendo executado em um dado momento. A primeira instrução de um programa deve estar no endereço 0 (ZERO) da memória de programa. A instrução é enviada para a unidade de controle, que gera sinais de controle para a ULA e para os registradores. A ULA executa a operação codificada pelo sinal de controle OPER_ULA de 6 bits e tem como entradas o dado externo proveniente das chaves e o registrador REG.R0. O resultado deve ser armazenado pelo registrador REG.ULA e pelo flip-flop REG.VAI (registrador de vai-um). O conteúdo dos registradores REG.ULA e REG.R1 podem ser movimentados através da via de dados interna do processador. Quando um dado for selecionado para processamento, este deve ser copiado para o registrador REG.R0 antes da execução da operação pela ULA. Processador nanopcs-1 (2011) 3
2.1.1. Detalhamento dos Sinais de Controle A figura 2.1 mostra, além dos principais componentes do fluxo de dados, alguns sinais de controle. Estes sinais devem ser gerados pela unidade de controle. A tabela 2.1 abaixo apresenta uma breve descrição destes sinais. Tabela 2.1 Principais sinais de controle do processador nanopcs-1. componente sinal de controle descrição REM INCR LIMPA Incrementa valor do registrador. Zera valor do registrador. MEMORIA GRAVA Seleciona operação de gravação dos dados de entrada. REG.VAI Aciona armazenamento do bit de vai-um. REG.ULA COLOCA.ULA Aciona armazenamento da saída da ULA. REG.R0 COPIA.R0 Copia dado da via tri-state. REG.R1 COPIA.R1 COLOCA.R1 Habilita saída do registrador para colocar dado na via tri-state. Copia dado da via tri-state. ULA OPER_ULA Código de operação da ULA. Habilita saída do registrador para colocar dado na via tri-state. 2.1.2. Modos de Operação do Processador O núcleo do processador tem dois modos de operação, descritos a seguir: i) Modo Programação : este modo de operação permite a carga de um "programa" na memória de programa, que comandará a seqüência de operações que se quer executar. Deve-se utilizar: 7 chaves (CH0 a CH6) para a entrada do conteúdo da memória (observar que o bit 6 da palavra de memória não é usada na codificação das instruções); 1 botão (B1) para gerar o sinal INCR, que tem como função incrementar o Registrador de Endereços da Memória (REM); 1 botão (B2) para gerar o sinal GRAVA, que força o armazenamento do conteúdo das chaves na memória. ii) Modo "Execução": neste modo de operação, o processador deve executar a seqüência de operações dada pelo conteúdo da memória de programas. Deve-se utilizar: chaves (CH0 a CH3) para a entrada de dados externa; 1 botão (B1) para comandar a execução de uma "instrução", gerando os sinais adequados ao FD do processador e também o sinal INCR (para incrementar o registrador REM); 1 botão (B2) para gerar o sinal LIMPA, que tem como função zerar o REM. Este botão só deverá ser utilizado em caso de erro ou reinício de execução de programa. O Modo de Operação deve ser determinado por meio da chave CH7 (0=Programação e 1=Execução). Assim, para se executar um "programa", deve-se seguir o seguinte procedimento: a) Colocar o circuito em modo "Programação" e armazenar o "programa" na memória de programa; b) Acertar a chave CH7 para colocar o circuito em modo "Execução" e limpar o REM, acionando o botão B2; c) Executar, passo a passo, as "instruções", colocando nas chaves o dado de entrada a ser manipulado e apertando o botão de execução (B1). Os resultados intermediários deverão ser acompanhados através dos leds e displays (conforme especificado na figura 2.1). Processador nanopcs-1 (2011)
2.1.2. Formato das Instruções Cada instrução do processador nanopcs-1 tem 8 bits de largura e estão contidas na memória de programa do circuito. O conjunto de instruções pode ser dividido em dois grupos: i) Instruções aritméticas e lógicas: cada instrução deste grupo tem o bit 6 igual a 0 e os 6 bits menos significativos determinam a operação a ser executada pela ULA (através dos pinos S0, S1, S2, S3, M e Cn). O formato destas instruções é o seguinte: 7 6 5 3 2 1 0 0 M C n S 3 S 2 S 1 S 0 Os bits 0 a 5 são usados conforme o funcionamento da ULA selecionada para o projeto. O sinal significa que o bit 7 não é usado e não deve ser considerado (em inglês, don t care ). A tabela 2.2 abaixo especifica algumas instruções a serem projetadas. Tabela 2.2. Instruções aritméticas e lógicas do processador nanopcs-1. Instrução SOMA SUBTRAI Descrição resultado = A + B resultado = A - B ZERA resultado = 0 ENTRA_DADO E_LOG OU_LOG NAO_LOG OU_EXCL resultado = B resultado = A AND B resultado = A OR B resultado = resultado = A XOR B ii) Instruções de transferência de dados entre registradores: cada instrução deste grupo tem o bit 6 igual a 1. Os registradores de origem e de destino para a transferência dos dados são especificados pelos quatro bits menos significativos, seguindo o formato abaixo. 7 6 5 3 2 1 0 1 Reg. origem Reg. destino Os bits 2 e 3 identificam o registrador origem da transferência, ou seja, aquele que colocará os dados na via tri-state para ser copiado pelo destino. Os bits 0 e 1 identificam o registrador que receberá os dados. Os registradores são identificados pela seguinte codificação (tabela 2.3). Tabela 2.3 Codificação dos registradores. Identificação Reg. origem Reg. destino 00 Reg. ULA -- 01 -- Reg. R0 10 Reg. R1 Reg. R1 11 -- -- A instrução de transferência de dados entre registradores tem a sintaxe MOVE origem,destino em um programa em linguagem de montagem. A lógica de controle do circuito deverá receber a palavra de memória de forma a decodificar a instrução a ser executada e gerar os sinais de controle adequados para a ULA, os registradores, e demais componentes do fluxo de dados. Para implementar a via de dados tri-state deverão ser utilizados componentes com saída tri-state. Para tal, pode-se fazer uso do registrador 7173 (já estudado na experiência Via de Dados ). Processador nanopcs-1 (2011) 5
Convém mencionar que para a correta transferência dos dados entre os registradores, o registrador de origem deve colocar seu dado na via de dados antes do registrador de destino ser ativado e deve também manter este dado ativo durante toda a transferência. 1 2.2. Dicas para a Simulação do Projeto no Quartus II Para a simulação do componente 7189, use o arquivo memoria.gdf disponível na página web do curso, que contém um circuito equivalente. Para a simulação do projeto completo usando este arquivo, deve-se usar no Quartus II um dispositivo de uma das famílias Cyclone ao invés da família MAX7000S (porque um componente da família MAX7000S não tem capacidade de comportar o circuito completo). 2.3. Montagem Experimental e Depuração do Projeto A montagem do circuito do núcleo do processador será dividida em duas etapas principais: PARTE I: sistema de memória de programa, composto pelos componentes REM e MEMÓRIA e circuitos relacionados; PARTE II: sistema de execução das instruções, composto pelos componentes ULA, RV, REG. ULA, REG. R0 e REG. R1, e outros circuitos (lógica de controle, etc.). A figura 2.3 apresenta um detalhamento do circuito da parte I. A unidade de controle que gera os sinais para os elementos do sistema de memória de programa deve ser projetada em conjunto com os componentes principais deste módulo. INCR LIMPA REM DISPLAY LEDs DADO (CHAVES) 7 MEMÓRIA 7 nanopcs-1 (Parte II). GRAVA Unidade de Controle da Parte I B1 B2 CH7 Figura 2.3 Detalhamento do circuito da parte I. 1 Para mais informações consulte a apostila da experiência Via de Dados da disciplina Laboratório Digital I (PCS 2011/2305). Processador nanopcs-1 (2011) 6
REG.VAI EPUSP PCS 2021/2308 Laboratório Digital A figura 2. a seguir apresenta a parte II, incluindo também a respectiva unidade de controle. INCR DADO EXTERNO (CHAVES) LIMPA REM DISPLAY D0 DADO (CHAVES) 7 MEMÓRIA LEDs L8-L1 6 OPER_ULA B ULA A VAI-UM DISPLAY D1 LED L0 GRAVA COLOCA.ULA REG.ULA COPIA.R0 DISPLAY D3 REG.R0 VIA TRI-STATE COPIA.R1 COLOCA.R1 REG.R1 DISPLAY D2 Figura 2. Detalhamento do circuito da parte II. A montagem, teste de depuração do projeto será executada em três etapas: 1. montagem da parte I; 2. montagem e integração da parte II; 3. avaliação do funcionamento do circuito completo. DICA: Para os testes, sugere-se que sinais extras de teste e depuração sejam monitorados em leds no painel de montagens experimentais. Estes sinais devem monitorar partes do fluxo de dados e também o estado da máquina de estados da unidade de controle. PERGUNTAS: 1. Elabore uma tabela contendo o código binário a ser programado na memória de programa para cada uma das instruções do processador nanopcs-1. 2. Como a característica da memória 7189 de inverter o dado na saída é aproveitada no projeto do grupo? 3. Quais testes estão programados para avaliar o correto funcionamento de cada PARTE do circuito do processador nanopcs-1? Explique o objetivo de cada um destes.. Como a montagem da parte I será efetuada? Descreva os passos planejados. 5. Como o grupo planejou a montagem da parte II? Descreva os passos. 6. Como o estado atual da unidade de controle pode ser monitorado durante a montagem do circuito? Especifique sinais adicionais a serem acrescentados no projeto para facilitar a depuração. 7. Que cuidados serão necessários para a integração das partes I e II? 8. Como o grupo gerenciou a complexidade do circuito projetado com relação à montagem? Processador nanopcs-1 (2011) 7
2.. Teste do Funcionamento do Circuito a) Verifique o funcionamento do circuito para várias sequencias de operações simples, variando também os dados de entrada. Explique os testes programados. b) Execute o seguinte programa, acionando adequadamente os botões B1 e B2, a chave CH7 e a entrada de dados externa (CH0-CH3). ENTRA_DADO 5 MOVE ; 5 na entrada de dados ; (reg.ula contém 5) reg.ula,reg.r0 ; coloca 5 em R0 SOMA 1 ; 5+1=6 MOVE reg.ula,reg.r1 ; guarda 6 em R1 MOVE reg.r1,reg.r0 ; copia 6 em R0 E_LOG 3 ; 6and3=2 MOVE reg.ula,reg.r0 ; display de R0 deve mostrar 2 MOVE reg.r1,reg.r0 ; display de R0 deve mostrar 6 c) Escreva programas para a avaliação das seguintes expressões: i. Y = A B + C ii. Y = ((A AND B) OR NOT(C)) XOR D Verifique os resultados obtidos executando os "programas", para diferentes valores de A, B, C e D. ATENÇÃO: Poderá ser solicitada uma modificação no circuito implementado por parte do professor, ao final da apresentação do funcionamento do circuito do processador nanopcs-1. d) OPCIONAL. Implemente uma modificação especificado pelo professor no circuito implementado do processador nanopcs-1. 2.5. Sobre o Planejamento e o Relatório O planejamento deve conter OBRIGATORIAMENTE os seguintes itens: Diagrama de blocos do circuito; Descrição detalhada do funcionamento de cada um dos módulos; Relação de sinais extras de teste e depuração a serem monitorados em leds; Diagrama lógico completo do circuito projetado; Simulações com o Quartus II para cada uma dos modos de operação do circuito (apresentar as diversas cartas de tempo resultantes); Tabela de códigos binários das instruções do nanopcs-1 descritas na tabela 2.2. Programação dos testes solicitados no item 2., com a explicação de cada instrução. O relatório deverá conter: Os principais eventos (fatos, erros, imprevistos) acontecidos na montagem e depuração de cada parte do circuito e na sua integração; Apresentação dos resultados obtidos na parte experimental; Discussão da realização da experiência; Conclusões. Processador nanopcs-1 (2011) 8
3. BIBLIOGRAFIA AMD. AMD Athlon Processor x86 Code Optimization Guide. 2000. Fairchild Semiconductor. TTL Data Book. Mountain View, California, 1978. FREGNI, Edson e SARAIVA, Antonio M. Engenharia do Projeto Lógico Digital: Conceitos e Prática. Editora Edgard Blücher Ltda, 1995. INTEL. Inside Intel Core Microarchitecture: setting new standards for energy-efficient performance. White Paper. 2006. PCS/EPUSP. Unidade Lógica e Aritmética. Apostila de Laboratório Digital. Departamento de Engenharia de Computação e Sistemas Digitais, Escola Politécnica da USP. 200. PCS/EPUSP. Via de Dados. Apostila de Laboratório Digital. Departamento de Engenharia de Computação e Sistemas Digitais, Escola Politécnica da USP. 200. PCS/EPUSP. Microprocessadores I. Apostila de Laboratório Digital. Departamento de Engenharia de Computação e Sistemas Digitais, Escola Politécnica da USP. 2002. WAKERLY, John F. Digital Design Principles & Practices. 3 rd edition, Prentice Hall, 2000.. MATERIAL DISPONÍVEL Circuito Integrado TTL: Portas lógicas (700, 70, 708, 710, 732, 786) 77, 7139, 7161, 7163, 7173, 7175, 7181, 7189. Se precisar usar outro componente, verifique previamente sua disponibilidade no Laboratório Digital. 5. EQUIPAMENTOS NECESSÁRIOS 1 painel de montagens experimentais. 1 fonte de alimentação fixa, 5V 5%, A. 1 osciloscópio digital. 1 multímetro digital. 1 gerador de pulsos. 1 computador compatível com IBM-PC. Programa Quartus II da Altera. Processador nanopcs-1 (2011) 9