Universidade de Aveiro 2009 João Filipe Fernandes Garcia Lima Departamento de Electrónica e Telecomunicações e Informática PROCESSADOR COM CONJUNTO DE INSTRUÇÕES VARIÁVEL REMOTAMENTE Universidade de Aveiro 2009 João Filipe Fernandes Garcia Lima Departamento de Electrónica e Telecomunicações e Informática PROCESSADOR COM CONJUNTO DE INSTRUÇÕES VARIÁVEL CONFIGURÁVEL REMOTAMENTE Conteúdo 1 2 Introdução 1 1.1 Enquadramento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Estrutura da Tese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Sistemas digitais reconguráveis 7 2.1 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 Tipos de dispositivos lógicos programáveis . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.1 Dispositivos SPLD 2.3.2 CPLD ( 2.3.3 2.4 3 Complex Programmable Logic Device ) FPGA (Field Programmable Gate Array ) . . . . . . . . . . . . . 11 . . . . . . . . . . 12 . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.3.1 Evolução 2.3.3.2 Estrutura interna de uma FPGA . . . . . . . . . . . . 14 2.3.3.3 Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.3.3.4 Principais fabricantes e Produtos . . . . . . . . . . . . 18 Linguagens de descrição de Hardware (HDL) . . . . . . . . . . . . . . . 21 Sistemas Computacionais e Ferramentas de Apoio 23 3.1 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3 Organização de um computador . . . . . . . . . . . . . . . . . . . . . . 26 Instruction Set Architecture (ISA) . 3.3.1.1 Instruction set . . . . . . . . . . . . . . . . . . . . . . 27 . . . . . . . . . . . . . . . . 28 3.3.1.2 . . . . . . . . . . . . . . . . 32 3.3.2 Processador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.3 Co-Processadores . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3.1 Modos de endereçamento i CONTEÚDO ii 3.4 Utilização de FPGAs para implementação de sistemas computacionais . 36 3.4.1 . . . . . . . . . . . 37 3.5 Trabalho Relacionado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.6 Ferramentas de apoio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6.1 Xilinx Integrated Synthesis Environment (ISE) . . . . . . . . . . 38 3.6.2 Xilinx Core Generator . . . . . . . . . . . . . . . . . . . . . . . 42 3.6.3 ModelSim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.6.4 Eagle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Placas de desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.7 4 Exemplos de microprocessadores em FPGA Processador com um variável 49 4.1 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.3 Máquina de estados nitos . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.3.1 Máquina de estados nitos simples . . . . . . . . . . . . . . . . 50 4.3.2 Máquina de estados nitos reprogramável . . . . . . . . . . . . . 51 4.4 Processador Combinatório com um instruction set variável . . . . . . . 54 . . . . . . . . . . . . 54 . . . . . . . . . . . . . . . . . 55 4.4.2.1 Unidades de Execução . . . . . . . . . . . . . . . . . . 57 4.4.2.2 Unidades de Controlo . . . . . . . . . . . . . . . . . . 59 . . . . . . . . . . . . . . . . . . . . . . . . 62 e portas lógicas . . . . . . . . . . . . . . . 63 4.4.1 Macro - Esquema do sistema desenvolvido 4.4.2 Variable Instruction Set Processor 4.4.2.3 4.4.2.4 5 instruction set Buer . . . Multiplexers 4.4.3 Carregamento de Instruções . . . . . . . . . . . . . . . . . . . . 63 4.4.4 Fluxograma reprogramável . . . . . . . . . . . . . . . . . . . . . 66 4.4.5 Data Control Unit 71 4.4.6 Instruction Set Desenvolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.5 Processador Desenvolvido para Co-processamento . . . . . . . . . . . . 73 4.6 Resultados e Discussão . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Interacção Remota 83 5.1 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.2 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.3 Ligação 87 5.4 Conceitos Fundamentais 5.5 Implementação da interface para o módulo CC1101 5.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 . . . . . . . . . . . 93 Gerador do SCLK . . . . . . . . . . . . . . . . . . . . . . . . . . 94 CONTEÚDO 6 iii byte 5.5.2 Controlador de transferência de um . . . . . . . . . . . . . 95 5.5.3 Controlador da transferência SPI . . . . . . . . . . . . . . . . . 97 5.5.4 Controlador da transferência de dados 5.5.5 Congurador do módulo CC1101 . . . . . . . . . . . . . . 99 . . . . . . . . . . . . . . . . . 100 5.5.6 Controlador do módulo CC1101 . . . . . . . . . . . . . . . . . . 102 5.5.7 Controlador de transmissão 105 5.5.8 Controlador do protocolo de comunicação . . . . . . . . . . . . 107 5.5.9 Módulo Transceiver . . . . . . . . . . . . . . . . . . . . . . . . . 110 5.5.10 Módulo CC1101 . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 5.6 Ligação do módulo CC1101 ao restante sistema . . . . . . . . . . . . . 113 5.7 Resultados e Discussão . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 . . . . . . . . . . . . . . . . . . . . Conclusão e Trabalho Futuro 123 6.1 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 6.3 Trabalho Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 A Instruções do Co-Processador e Processador de Uso geral A.1 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Instruções do Co-Processador A.3 Instruções do processador de uso geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B Módulo CC1101 123 129 129 129 142 145 B.1 Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Restrições temporais B.3 Mapeamento do módulo CC1101 B.4 Command Strobes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 145 . . . . . . . . . . . . . . . . . . . . . 146 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 B.5 Esquema do Kit CC1101EMK433 . . . . . . . . . . . . . . . . . . . . . 148 B.6 Placas de circuito impresso construídas . . . . . . . . . . . . . . . . . . 149 iv CONTEÚDO Lista de Figuras 2.2 Mask - Programmable [1] . FPGA do tipo Field Programmable [2] . . . . . . . . . 2.3 Tipos de dispositivos lógicos programáveis 2.4 Estrutura de uma PLA . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5 Estrutura de uma PAL . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.6 Lattice GAL [3] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.7 Estrutura do CPLD [4] . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.8 Evoluçao da arquitectura das FPGAs [5] . . . . . . . . . . . . . . . . . 13 2.9 Estrutura interna de uma FPGA[6] . . . . . . . . . . . . . . . . . . . . 14 2.1 EPROM Intel 1702 do tipo congurable logic blocks ) [6] 2.10 Bloco CLB ( . . . . . . . . . . 8 . . . . . . . . . . 8 . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . 14 2.11 IOB (Input/Output Block) [6] . . . . . . . . . . . . . . . . . . . . . . . 15 2.12 Ligaçoes programáveis em FPGA [7] 16 . . . . . . . . . . . . . . . . . . . 2.13 Controlador TTP implementado em FPGA [8] . . . . . . . . . . . . . 17 2.14 Controlador TTCAN implementado em FPGA [9] . . . . . . . . . . . . 17 2.15 Placa de Desenvolvimento Digilent NetFPGA optimizada para redes Ethernet [10] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16 Virtex 5 LX [11] 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.17 Spartan 3A [12] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1 Lei de Moore [13] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Tipicas camadas de um sistema computacional[14] . . . . . . . . . . . . 25 3.3 Organização de um computador [14] . . . . . . . . . . . . . . . . . . . . 26 3.4 Arquitectura de Von Neumann . . . . . . . . . . . . . . . . . . . . . . 27 3.5 Arquitectura de Harvard . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.6 Estrutura da instrução do tipo R [14] . . . . . . . . . . . . . . . . . . . 31 3.7 Estrutura da instrução do tipo I [14] . . . . . . . . . . . . . . . . . . . 31 3.8 Estrutura da instrução do tipo J [14] . . . . . . . . . . . . . . . . . . . 32 3.9 Immediate Adressing [14] . . . . . . . . . . . . . . . . . . . . . . . . . . 32 v LISTA DE FIGURAS vi 3.10 Register Adressing [14] . . . Base addressing [14] . . . . . Pc-relative addressing [14] . . Pseudodirect addressing [14] . . . . . . . . . . . . . . . . . . . . . . . . . 32 . . . . . . . . . . . . . . . . . . . . . . . . 33 . . . . . . . . . . . . . . . . . . . . . . . . 33 . . . . . . . . . . . . . . . . . . . . . . . . 33 3.14 Fases de execução de uma instrução . . . . . . . . . . . . . . . . . . . . 34 3.15 Exemplo de uma unidade de controlo e unidade de execução [14] . . . 35 . . . . . . . . . . . . . . . . . . . . . 38 3.11 3.12 3.13 3.16 Ambiente da ferramenta ISE[15] 3.17 Diagrama de Fluxo de um projecto na ferramenta ISE[16] 3.18 Entrada/Saída do processo de Síntese . . . . . . . 40 . . . . . . . . . . . . . . . . . . 40 Translate Entrada/Saída do processo de Map . . . 3.19 Entrada/Saída do processo de . . . . . . . . . . . . . . . . . 41 3.20 . . . . . . . . . . . . . . . . . 41 3.21 Ambiente de desenvolvimento da ferramenta ModelSim [17] . . . . . . . 44 3.22 Ferramenta 3.23 Overview Eagle [18] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.24 Celoxica RC 10 [20] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.25 Overview da placa de desenvolvimento Celoxica RC10 [19] 45 da placa de desenvolvimento Nexys 2 [21] . . . . . . . . . . . 3.26 Placa de desenvolvimento Nexys 2 [22] 47 . . . . . . . . . . . . . . . . . . 48 4.1 Máquina de Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2 Máquina de Mealy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.3 Máquina de estados Finitos reprogramável [23] . . . . . . . . . . . . . . 52 4.4 Multiplexer 52 4.5 a) Diagrama de estados b) Diagrama de estados equivalente na RFSM 4.6 Diagrama de estados com 4.7 RFSM em cascata [23] 4.8 4.9 4.10 4.11 Programável (PM) [23] . . . . . . . . . . . . . . . . . . . . Dummy States 53 . . . . . . . . . . . . . . . . . 53 . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Sistema desenvolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Variable Instruction Set Processor . . . . . . . Variable Instruction Set Processor . . . . . . Componente Control Unit / Parallel to Serial 4.12 Buer . . . . . . . . . . . . . . 55 . . . . . . . . . . . . . . 56 . . . . . . . . . . . . . . 60 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.13 Macro - Esquema da ligação do programador ao processador com um conjunto de instruções variável . . . . . . . . . . . . . . . . . . . . . . . 64 4.14 Estrutura do programador . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.15 Trama de reprogramação . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.16 Exemplo de uma trama de reprogramação . . . . . . . . . . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.17 Exemplo de Fluxograma 4.18 Cálculo da instrução a executar . . . . . . . . . . . . . . . . . . . . . . 67 LISTA DE FIGURAS vii 4.19 Macro - Esquema da reprogramação do uxograma . . . . . . . . . . . 69 4.20 Programador do Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . 70 4.21 Trama de reprogramação do uxograma . . . . . . . . . . . . . . . . . 70 4.22 Diagrama de Fluxo de Sinal da Unidade de Controlo Central . . . . . . 71 4.23 Estrutura do processador base de uso geral utilizado . . . . . . . . . . 74 4.24 Diagrama de execução do processador . . . . . . . . . . . . . . . . . . . 75 4.25 Ligação ao processador programável e novos componentes do processador de uso geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.1 Diagrama de blocos simplicado do circuito integrado CC1101 [24] . . 85 5.2 CC1101 . . . . . . . . . . . . . . . . . . . . . . 86 5.3 Hardware utilizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.4 Exemplo do protocolo SPI para múltiplos . . . . . . . . . . . 88 5.5 Conguração SPI a 4 os . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.6 Fase e polaridade do relógio para comunicação com o CC1101[27] . . . 89 5.7 Header Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.8 Exemplo de comunicação com o CC1101 [24] . . . . . . . . . . . . . . . 90 5.9 Status Byte 91 Evaluation Module [25] [27] Slaves [26] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10 Formato de pacote[24] . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.11 SCLK a 10MHz [27] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.12 SCLK a 6.5MHz [27] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 5.14 Diagrama deuxo de sinal do bloco Gerador do SCLK . . . . . . . . . . 95 5.15 Controlador de transferência de um byte 96 5.13 Gerador SCLK . . . . . . . . . . . . . . . . . 5.16 Diagrama de uxo de sinal do bloco Transfer1Byte 5.17 Bloco SPI . . . . . . . . . . . 96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 5.18 Diagrama de uxo de Sinal do bloco SPI . . . . . . . . . . . . . . . . . 98 5.19 Bloco Transfer Control . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.20 Diagrama de uxo de sinal do bloco TransferControl 5.21 Componente Congurador . . . . . . . . . . 100 . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.22 Diagrama de uxo de sinal do bloco congurador . . . . . . . . . . . . 101 5.23 Sub-trama criada pelo componente controlador . . . . . . . . . . . . . . 103 5.24 Componente Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5.25 Diagrama de uxo de sinal do bloco controlador . . . . . . . . . . . . . 104 5.26 Diagrama de blocos do sistema incorporando o controlo de tranmissão . 105 5.27 Diagrama de uxo de sinal do controlador da transmissão . . . . . . . . 106 5.28 Diagrama ilustrativo do protocolo desenvolvido 107 . . . . . . . . . . . . . LISTA DE FIGURAS viii 5.29 Componente Protocolo . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 5.30 Diagrama de uxo de sinal da parte da recepção . . . . . . . . . . . . . 108 5.31 Diagrama de uxo de sinal da parte da transmissão . . . . . . . . . . . 109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5.32 Módulo Transceiver 5.33 Diagrama de uxo de sinal do bloco Transceiver . . . . . . . . . . . . . 110 5.34 Módulo CC1101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 5.35 Programador da unidade de controlo . . . . . . . . . . . . . . . . . . . 113 . . . . . . . . . . . . . . . . . . . . . . . . 113 5.37 Diagrama de blocos do sistema completo construído . . . . . . . . . . . 114 5.38 Sinais utilizados para a reprogramação remota . . . . . . . . . . . . . . 114 5.39 Interacçao remota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 5.40 Interface do demonstrador 122 5.36 Programador do uxograma . . . . . . . . . . . . . . . . . . . . . . . . . instruction set A.1 Processador combinatório com um A.2 Diagrama de uxo de sinal para a instrução que permite contar o número de uns de vector binário A.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 . . . . . . . . . . 135 Diagrama de uxo de sinal para a instrução que permite vericar se um vector contém só uns (zeros) A.9 134 Diagrama de uxo de sinal para a instrução que permite contar o número máximo de zeros consecutivos de um vector ternário A.8 133 Diagrama de uxo de sinal para a instrução que permite contar o número máximo de uns consecutivos de um vector ternário A.7 132 Diagrama de uxo de sinal para encontrar o número máximo de uns consecutivos de um vector binário . . . . . . . . . . . . . . . . . . . . . A.6 131 Diagrama de uxo de sinal para a instrução que permite contar o número de zeros de vector ternário . . . . . . . . . . . . . . . . . . . . . . . . . A.5 130 Diagrama de uxo de sinal para a instrução que permite contar o número de uns de vector ternário A.4 variável . . . . . . . . . . . . . . . . . . . . . . . 136 Diagrama de uxo de sinal para a instrução que permite vericar se um vector não tem uns (zeros) . . . . . . . . . . . . . . . . . . . . . . . . A.10 Ortogonalidade entre vectores . . . . . . . . . . . . . . . . . . . . . . . 137 137 A.11 Diagrama de uxo de sinal para a instrução que permite vericar se dois vectores ternários são ortogonais . . . . . . . . . . . . . . . . . . . . . 138 A.12 Diagrama de uxo de sinal para a instrução que permite vericar se a expressão vectori and vectorj = vectorj está correcta . . . . . . . . . . 139 A.13 Diagrama de uxo de sinal para a instrução que permite executar a operação vectori or vectorj . . . . . . . . . . . . . . . . . . . . . . . . 140 LISTA DE FIGURAS ix A.14 Diagrama de uxo de sinal para a instrução que permite vericar se um vector apenas possui don't cares . . . . . . . . . . . . . . . . . . . . . A.15 Processador de uso geral e ligação ao co-processador . . . . . . . . . . 142 . . . . . . . . . . . . . . . 145 B.1 Diagrama temporal do módulo CC1101 [24] B.2 Esquema do Kit CC1101EMK433 adaptado para uma frequência de trabalho de 433MHZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.4 Debug - Top Layer . . Placa de Debug - Bottom Layer B.5 Placa de ligação do módulo wireless às placas de desenvolvimento - B.3 Placa de Layer B.6 148 . . . . . . . . . . . . . . . . . . . . . . 149 . . . . . . . . . . . . . . . . . . . . . . 149 Top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Placa de ligação do módulo wireless às placas de desenvolvimento - tom Layer 141 150 Bot- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 x LISTA DE FIGURAS Lista de Tabelas 2.1 Principais caracteristicas das FPGAs Spartan 6 e Virtex 6[28] 3.1 Instruction Set 3.2 Correspondência entre o nome da instrução e o seu tipo [14] 4.1 Correspondência Operação - Módulo reduzido da arquitectura MIPS [14] . . . . . 19 . . . . . . . . . . . 30 . . . . . . 30 . . . . . . . . . . . . . . . . . . . 66 4.2 Correspondência Operação - Módulo após reprogramação . . . . . . . . 67 4.3 Utilização de recursos da unidade de controlo reprogramável . . . . . . 78 4.4 Utilização de recursos do uxograma reprogramável . . . . . . . . . . . 79 4.5 Utilização de recursos do processador com instruction set variável 79 4.6 Utilização de recursos do sistema constítuido pelos dois processadores (combinatório e uso geral) bem como restantes componentes . . . . . . . . . 80 4.7 Utilização em percentagem dos recursos dos principais componentes . . 81 5.1 Correspondência entre o identicador e operação remota desencadeada 5.2 Utilização de recursos do componente CC1101 na placa de desenvolvimento Celoxica 5.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Resultados obtidos a uma distãncia de aproximadamente 1m, durante aproximadamente 1 hora . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 117 Utilização de recursos em relação à capacidade total de cada uma das placas de desenvolvimento 5.5 117 Utilização de recursos do componente CC1101 na placa de desenvolvimento Nexys2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 115 119 Resultados obtidos a uma distãncia de aproximadamente 240m, durante aproximadamente 15 min . . . . . . . . . . . . . . . . . . . . . . . . . . 120 A.1 Instruction Set 143 B.1 Restrições temporais do módulo CC1101 [24] . . . . . . . . . . . . . . 146 B.2 Tempos de atraso na comutação entre estados [24] . . . . . . . . . . . . 146 do processador de uso geral . . . . . . . . . . . . . . . . xi LISTA DE TABELAS xii B.3 Mapeamento dos diversos registos do módulo CC1101 . . . . . . . . . . B.4 Endereço dos command strobes e sua função [24] . . . . . . . . . . . . . 147 148 Capítulo 1 Introdução 1.1 Enquadramento As mais recentes evoluções tecnológicas na área de sistemas digitais, traduzidas por um aumento signicativo da velocidade e diminuição das dimensões e consumo dos System On circuitos integrados têm levado à emergência do conceito de sistemas SoC ( Chip ). Estes sistemas integram diversos componentes na mesma pastilha de silício, tais como microprocessadores, memórias, conversores analógico-digitais, controladores I/O etc., tornando a construção dos sistemas electrónicos mais baratos, mais ecientes e com menor consumo, o que leva, inevitavelmente, a uma grande utilização por parte dos projectistas. Os grandes avanços para este conceito têm sido obtidos graças à evolução signicativa dos dispositivos lógicos reprogramáveis, nomeadamente os dispositivos de grande capacidade lógica (VLSI), podendo estes alterar a sua função lógica sem a necessidade da troca de circuito integrado, mesmo após o processo de fabrico e, desta forma, serem costumizados para uma determinada aplicação. Destes dispositivos destaca-se a designada FPGA. Esta possibilita a construção de sistemas digitais complexos, o que devido às suas potentes ferramentas de desenvolvimento permite uma grande exibilidade, bem como um tempo de prototipagem muito reduzido. Este facto, tem levado à mudança do conceito application-domain general propose para o conceito ou seja, os sistemas digitais começam a ser construídos para uma aplicação muito especíca indo de encontro às necessidades do projectista e não para um conjunto de aplicações (Ex:Microcontrolador PIC), reduzindo desta forma alguma aplicabilidade dos componentes ASIC. Todas estas evoluções têm levado ao aparecimento, para além de sistemas SoC, sistemas NoC nos quais todos os elementos de um sistema SoC se comportam e comu- 1 CAPÍTULO 1. 2 INTRODUÇÃO nicam como se estes se encontrassem numa rede de telecomunicações. A evolução tecnológica tem-se estendido a outras áreas tais como sistemas de rádio. Estes são cada vez mais utilizados em sistemas que se encontram no quotidiano desempenhando funções de controlo remotamente, imagem e vídeo entre muito outros. Com os avanços das FPGAs, os sistemas rádio começam igualmente a utilizar estes dispositivos para conseguir pôr em prática alguns conceitos como o cognitive radio uma vez que, devido às suas características reconguráveis, é possível ajustar determinado sistema para a recepção de um determinado sinal sem a alteração do hardware. A proposta deste trabalho vem de encontro à utilização destas duas áreas propondo uma nova função para a utilização de FPGAs e rádio frequência. 1.2 Motivação Com o crescente aumento da capacidade das FPGAs, é possível hoje em dia incorporar nestes processadores com alguma complexidade. Estes podem ser incluídos directa- Hard-Core ) ou implementados através de um processo mente na pastilha de silício ( de síntese ( Soft-Core ). Devido à grande exibilidade destes dispositivos é possível acoplar a estes processadores periféricos estando estes no mesmo chip. Os periféricos ligados ao processador desenvolvido provêm de componentes existentes em livrarias IP ou são construídos pelo próprio projectista. Concluída a construção do microcontrolador, é possível programá-lo em linguagens comuns como é o caso da C e C++. No entanto, os processadores possuem, muitas vezes, um instruction set de instru- ções relativamente elevado, quer se trate de processadores embutidos em FPGA ou não. Este conjunto de instruções em grande parte dos programas não é utilizado por completo, o que leva, inevitavelmente, a um desperdício de recursos de uma FPGA, uma vez que, mesmo não sendo aquelas utilizadas, o hardware dedicado à sua execução encontra-se implementado. Neste contexto, esta tese tem como principal motivação a proposta de uma nova forma de estruturar a arquitectura de um processador na tentativa de reduzir o tamanho ocupado por um ele numa FPGA, baseando-se para isso na construção de um processador com um set de instruções variável, ou seja, apenas as instruções estritamente necessárias à execução de um determinado programa são carregadas para a FPGA. As instruções não utilizadas deverão, no entanto, estar ao dispor para o caso da sua utilização na execução de novo programa. Este facto, leva-nos à motivação de uma área em constante crescimento e de grande uso no quotidiano: Rádio Frequência. Apesar da grande importância desta nos tempos correntes, os componentes das livra- 1.3. OBJECTIVOS 3 rias IP disponibilizadas pelo fabricante Xilinx (FPGAs utilizadas nesta tese) apenas contemplam componentes para comunicações com os, motivando, desta maneira, a construção de um componente de fácil utilização que faça a interface com um módulo wireless especíco. Visto o consumo energético ser uma das características cada vez mais importantes nos dias de hoje é grande importância a escolha de um módulo de baixo consumo. Com uma interface wireless entre FPGAs existe uma grande quantidade de apli- cações que se podem desenvolver em torno deste assunto, motivando cada vez mais a interacção remota entre dispositivos. Esta tese propõe igualmente uma nova função para os sistemas rádio, consistindo esta no carregamento de um programa assembly, bem como instruções necessárias para a execução do mesmo. A conjugação destes factos leva a uma melhoria de aproveitamento dos recursos da FPGA, bem como a possibilidade de alteração de um programa sem a necessidade de ferramentas como um computador de uso pessoal e ferramentas de desenvolvimento, aumentando, ainda mais, a exibilidade já elevada por parte destes dispositivos reconguráveis. A aplicabilidade do tema proposto nesta dissertação pode ser encontrada em basicamente todos os sistemas baseados em FPGA que tenham necessidade do uso de microprocessadores. 1.3 Objectivos Este trabalho tem como principal objectivo a construção de um processador com um instruction set variável, sendo este actualizado via rádio frequência. As etapas da construção deste sistema podem ser decompostas nos seguintes objectivos: Compreensão do funcionamento de um processador, especialmente as etapas da execução de instruções; Proposta de uma nova abordagem na construção de um processador, nomeadamente da sua unidade de controlo para permitir um Desenvolvimento de um processador com set instruction set de instruções variável; variável, orientado para pesquisa combinatória. Interligação do processador desenvolvido com um processador de uso geral; Construção de uma interface que permita a comunicação entre FPGAs via rádio frequência; CAPÍTULO 1. 4 INTRODUÇÃO Ligação da interface RF ao sistema constituído pelo processador de uso geral e processador construído; Envio remoto da informação acerca das instruções para o processador com um instruction set variável, bem como alteração do programa em assembly do pro- cessador de uso geral via rádio frequência; Construção de um demonstrador para vericar a funcionalidade do sistema; 1.4 Estrutura da Tese Esta tese encontra-se dividida em 6 capítulos. Estes encontram-se ordenados de acordo com a ordem de trabalho seguida no desenvolvimento da dissertação. Para além do presente capítulo temos a seguinte sequência: Capítulo 2 - Sistemas digitais reconguráveis - Neste capítulo é apresen- tado um breve resumo dos sistemas digitais reconguráveis. Começa por uma introdução aos vários dispositivos lógicos existentes, na qual é apresentada de uma forma mais extensiva a FPGA, uma vez que esta constituiu o principal componente da realização deste trabalho. Após uma descrição dos componentes principais de uma FPGA são apresentados vários modelos do fabricante Xilinx, as suas principais características e aplicações. Para nalizar, são apresentadas as características únicas da programação HDL. Capítulo 3 - Sistemas Computacionais e Ferramentas de Apoio - Neste capítulo são apresentados os conceitos fundamentais a ter em conta na construção de um processador e ferramentas de apoio utilizadas. Este começa por uma introdução aos diversos sistemas computacionais. De seguida, é apresentada a organização básica de um computador, a qual incorpora o processador. De forma a compreender o funcionamento deste, é apresentado um exemplo concreto (MIPS), o que permitiu obter bases essenciais sobre o funcionamento de um processador. De seguida, são apresentados os motivos principais para a utilização de FPGAs para incorporação de microprocessadores, bem como exemplo de processadores já desenvolvidos para estas. Para nalizar, é apresentado algum trabalho relacionado bem como as ferramentas de apoio utilizadas. Capítulo 4 - Processador com um instruction set variável - Neste capí- tulo é apresentado o processador desenvolvido. Este, começa pela abordagem e raciocínio adoptado na construção deste processador. De forma a conseguir obter 1.4. ESTRUTURA DA TESE 5 uma unidade de controlo variável, é apresentada uma máquina de estados nitos reprogramável, a qual desempenha uma função decisiva na construção do componente proposto. De seguida, é apresentado o processador construído, bem como a explicação de todo o seu processo de actualização das instruções do mesmo. Finalmente, é descrito também o processador de uso geral ao qual foi ligado o processador combinatório desenvolvido e apresentam-se alguns resultados sobre o sistema. Capítulo 5 - Interacção remota - Neste capítulo é apresentada toda a in- terface desenvolvida para comunicação sem os. do módulo wireless Começa com a apresentação e das suas características mais relevantes. De seguida, são explicados todos os conceitos fundamentais para a construção de uma interface com o módulo, assim como todos os componentes desenvolvidos. Para nalizar, é apresentada a ligação da interface construída com o restante sistema computacional e ainda a explicação do procedimento para a envio de novas instruções e programa assembly Capítulo 6 - remotamente bem como resultados práticos obtidos. Conclusão e Trabalho Futuro - Este capítulo completa a dis- sertação. É apresentado um breve resumo do trabalho e principais conclusões. Para terminar são apresentadas algumas propostas para trabalho futuro. Anexo A - Instruções do Co-Processador e Processador de uso geral - Este apêndice descreve as diversas instruções do Co-Processador e Processador de uso geral. Inicia-se com uma explicação detalhada do uxo da unidade de controlo para a execução de cada uma das instruções desenvolvidas. Para nalizar, são apresentadas as instruções que compõem o processador de uso geral utilizado. Anexo B transceiver - CC1101 - Este apêndice descreve informação adicional sobre o utilizado para a realização deste trabalho. 6 CAPÍTULO 1. INTRODUÇÃO Capítulo 2 Sistemas digitais reconguráveis 2.1 Sumário Devido à grande evolução dos dispositivos lógicos programáveis, designados frequentemente por PLD ( Programable Logic Devices ), é possível, hoje em dia, projectar sistemas digitais de grande complexidade, recorrendo a ferramentas que se encontram ao alcance de um cidadão comum. Neste capítulo, serão abordados alguns dos principais dispositivos lógicos programáveis e a sua utilização nos dias de hoje. Uma vez que o principal componente lógico utilizado neste projecto foi uma FPGA, será feita neste capítulo uma maior incidência sobre este componente, sendo apresentados os variados tipos de FPGAs existentes, as suas aplicações e os principais fabricantes. 2.2 Introdução Um dispositivo lógico programável (PLD) é um dispositivo electrónico que é utilizado para a construção de sistemas digitais reconguráveis. Estes dispositivos permitem que uma determinada função lógica desejada, seja programada depois da sua saída de fábrica. Isto permite uma maior exibilidade no projecto de sistemas digitais. Estes dispositivos encontram-se divididos nas seguintes categorias: SSI (Small Scale Integration) Contêm até cerca de uma dezena de portas lógicas independentes em que as entradas e saídas se encontram disponibilizadas para o exterior.[29] MSI (Medium Scale Integration) Contêm entre 10 e 100 portas lógicas, execu- tando uma determinada função elementar.[29] 7 CAPÍTULO 2. 8 LSI (Large Scale Integration) SISTEMAS DIGITAIS RECONFIGURÁVEIS Possuem entre 100 e alguns milhares de portas lógicas. Estes componentes, já conseguem desempenhar uma função lógica com pouca complexidade.[29] VLSI (Very Large Scale Integration) lógicas é da ordem dos milhões. Dispositivos em que o número de portas As FPGAs constituem um exemplo de estes tipos de dispositivos.[29] A escolha da categoria para um determinado projecto depende directamente da aplicação a que se destina. Dentro dos dispositivos lógicos programáveis, são ainda possível diferencia-los segundo as seguintes categorias: Mask-Programmable e eld-programmable. Capacidade de o seu conteúdo ser apagado ou não ( erasable Dispositivos do tipo Mask-programmable ou non-erasable ). apenas podem ser programados pelo fabri- cante na sua construção. Este tipo de dispositivo possuem menos atraso que os dispositivos eld-programmable, uma vez que, as ligações não podem ser alteradas no nal da primeira programação. Estes dispositivos são caros. No entanto, quando em grande quantidade, possuem um custo muito baixo. Figura 2.1: EPROM Intel 1702 do tipo Já os dispositivos Estes chips Field-Programmable Mask - Programmable [1] podem ser programados pelo cliente nal. são mais baratos e podem ser programados em qualquer momento. No entanto, quando em grande quantidade, acabam por possuir um custo mais elevado que os dispositivos Mask-Programmable. Figura 2.2: FPGA do tipo Field Programmable [2] 2.3. TIPOS DE DISPOSITIVOS LÓGICOS PROGRAMÁVEIS 9 2.3 Tipos de dispositivos lógicos programáveis Os dispositivos lógicos programáveis podem ser divididos em três principais classes: SPLD (Simple Array ). PLD ), Dentro do tipo CPLD (Complex PLD ) e FPGA (Field Programmable Gate SPLD podemos ainda classicar os seguintes tipos de disposi- Logic Array ), PAL (Programmable Array Logic ), GAL (Generic Logic Array ) e PROM (Programmable ROM ). tivos lógicos: PLA (Programmable Figura 2.3: Tipos de dispositivos lógicos programáveis 2.3.1 Dispositivos SPLD Os dispositivos SPLD constituem os dispositivos lógicos programáveis mais simples e mais baratos. Estes componentes são usados em aplicações comerciais, industriais e de comunicações. Possuem, usualmente, cerca de 4 a 22 macro-células, sendo estas constituídas por portas lógicas AND e OR e um Flip-Flop, conseguindo-se, deste modo, criar uma função booleana pequena em cada macro-célula. Assim, torna-se possível através de uma dada entrada e de acordo com uma função lógica, formar uma determinada saída, podendo esta ser guardada no ip-op até à próxima transição do relógio. PROM - Programmable ROM As PROM constituem uma forma básica de guardar informação digital, podendo utilizar-se para desempenhar uma determinada função lógica, considerando-se, deste modo, como um SPLD. Cada bit neste componente encontra-se trancado por um fusível ou anti-fusível. Este dispositivo apenas pode ser programado uma vez, sendo neste procedimento aplicada uma voltagem elevada, levando a um arrebentamento do fusível ou anti-fusível, conseguindo-se, desta forma, obter um componente com valores lógicos permanentes. Este componente pode ser do tipo Field-Programmable. Mask-Programmable ou do tipo Existem igualmente memórias PROM que podem ser reescritas, Programmable Read Only Memory ) ou por EEPROM (Electrically Erasable Programmable Read Only ). A diferença entre designando-se neste caso por EPROM (Erasable CAPÍTULO 2. 10 SISTEMAS DIGITAIS RECONFIGURÁVEIS os dois tipos apresentados, consiste na forma como as memórias são apagadas. No primeiro caso, este processo é feito através da exposição à luz ultra-violeta enquanto no segundo, este processo é feito electricamente. [30] PLA - Programmable Logic Array Uma PLA é um dos tipos de dispositivos da categoria SPLD. Esta permite a implementação de circuitos combinatórios. É constituída por um plano de portas AND e outro de portas OR. A ligação dos dois planos permite a implementação de uma função lógica. A saída consiste, deste modo, numa soma de produtos. A estrutura deste dispositivo encontra-se representada na gura seguinte.[30] Figura 2.4: Estrutura de uma PLA PAL Programmable Array Logic Ao contrário da PLA que possui dois planos sendo ambos programáveis, a PAL possui apenas o plano de portas lógicas AND programável, sendo o plano OR xo. Assim, a saída é um conjunto de soma de produtos em que estes são programáveis e as somas são xas. Este circuito tem a desvantagem de possuir uma menor exibilidade em relação ao dispositivo lógico PLA. A sua estrutura encontra-se representada na gura seguinte.[30] 2.3. TIPOS DE DISPOSITIVOS LÓGICOS PROGRAMÁVEIS 11 Figura 2.5: Estrutura de uma PAL GAL Generic Logic Array Este consiste numa evolução do dispositivo PAL. A sua estrutura é idêntica, podendo, no entanto, ser reprogramável. Esta é a principal vantagem deste dispositivo. Figura 2.6: Lattice GAL [3] 2.3.2 CPLD (Complex Programmable Logic Device ) Os CPLD aparecem para satisfazer a necessidade de uma maior quantidade de blocos lógicos. Estes pertencem à categoria LSI, possuindo, deste modo, uma densidade de portas lógicas relativamente elevada. A sua estrutura é apresentada na gura seguinte. CAPÍTULO 2. 12 SISTEMAS DIGITAIS RECONFIGURÁVEIS Figura 2.7: Estrutura do CPLD [4] O conceito principal dos CPLDs consiste no agrupamento de vários blocos do tipo SPLD, podendo estes ser do tipo PAL ou PLA, no mesmo chip. Conforme a complexidade da função lógica que deverá ser desempenhada, serão utilizados apenas os blocos separados ou então será feita uma ligação entre blocos, conseguindo-se, desta forma, a elaboração de uma função com uma grande complexidade. Esta interligação é feita através do bloco Interconnect Array . Para além deste bloco, existem ainda blocos I/O para cada um dos blocos SPLD. Destacam-se então as principais características do CPLD: [4] Uma unidade central para interligação de blocos SPLD ( Routing Rápido; Interconnect Array ); simples, isto é, as ligações internas são simples; Aplicabilidade dos dispositivos CPLD Os CPLDs possuem uma grande facilidade a nível de design, custos de desenvolvimento baratos, conseguindo-se desta maneira aplicar estes dispositivos no mercado de uma forma rápida e eciente. Estes dispositivos são utilizados, actualmente, na área das comunicações sem os, comunicações industriais, comunicações móveis e computação gráca, entre outros. [31] 2.3.3 FPGA (Field Programmable Gate Array ) Uma FPGA consiste num dispositivo semicondutor programável baseado em matrizes de blocos lógicos conguráveis (CLBs) interligados via ligações programáveis. A partir da interligação destes blocos é possível criar uma enorme rede de blocos lógicos, 2.3. TIPOS DE DISPOSITIVOS LÓGICOS PROGRAMÁVEIS 13 obtendo-se um circuito de grande densidade e com grande exibilidade. Ao contrário Application Specic Integrated Circuits ), dos ASIC ( que são dispositivos construídos de fábrica para uma aplicação especíca, as FPGAs permitem, devido aos seus componentes reconguráveis, construir sistemas depois do seu fabrico e serem alterados quando o utilizador bem entender. Oferece, deste modo, uma maior portabilidade em relação aos ASICs.[4] 2.3.3.1 Evolução Em meados dos anos 80 a maioria dos sistemas digitais eram implementados integrando diversos componentes I/O, etc.. standard, tais como: microprocessadores, controladores Este facto, levava à construção de um sistema com grandes dimensões, uma vez que para um sistema de grande complexidade era necessária uma grande quantidade de componentes, levando à inevitável diminuição da frequência máxima de trabalho. Apareceram, então, o que se designou por circuitos integrados costumizados. Estes eram construídos para incorporar os diversos componentes necessários num único chip. Devido à sua costumização este processo era demoroso e caro, tornando-o pouco atraente para pequenas quantidades. Para combater estes problemas apareceram as designadas FPGAs, introduzidas pelo fabricante Xilinx em 1985 [32]. Estas permitem o desenvolvimento de sistemas digitais de grande complexidade num único chip sendo o tempo de projecto muito curto devido às potentes ferramentas CAD. A gura seguinte apresenta a evolução das arquitecturas das FPGAs. Figura 2.8: Evoluçao da arquitectura das FPGAs [5] Observando a gura anterior, é possível vericar a grande evolução nas arquitecturas da FPGAs sendo, actualmente, muito utilizada para a implementação de processadores através de livrarias IP podendo ser acoplados a estes periféricos, encontrando-se todos CAPÍTULO 2. 14 os componentes dentro do mesmo chip SISTEMAS DIGITAIS RECONFIGURÁVEIS e programados posteriormente através de lin- guagens comuns como C e C++, dando uma grande exibilidade no desenvolvimento de aplicações.[33] 2.3.3.2 Estrutura interna de uma FPGA Analisemos, de seguida, analisar com mais pormenor a estrutura interna de uma FPGA, uma vez que esta irá ser um dos pontos centrais deste trabalho. A estrutura genérica deste componente encontra-se representada na gura seguinte: Figura 2.9: Estrutura interna de uma FPGA[6] congurable logic blocks ) CLB ( Este componente constitui a unidade principal de uma FPGA. O seu número depende muito de dispositivo para dispositivo. Este consiste numa matriz congurável com 4 ou 6 entradas, alguns circuitos de selecção e ip-ops. A gura 2.10 apresenta um esquema dos componentes que se encontram no CLB. Figura 2.10: Bloco CLB ( congurable logic blocks ) [6] Esta matriz é recongurável, o que implica uma grande exibilidade e pode então ser congurada para efectuar uma função de RAM, lógica combinatória ou de register.[34] shift - 2.3. TIPOS DE DISPOSITIVOS LÓGICOS PROGRAMÁVEIS 15 Input/Output Block ) IOB ( Actualmente as FPGAs possuem dezenas de portas de entrada/saída, conseguindo-se, desta forma, uma forte interacção com outros sistemas. Os blocos de I/O encontram-se agrupados por blocos independentes entre si. A gura seguinte demonstra este facto. Figura 2.11: IOB (Input/Output Block) [6] Observando a gura anterior, verica-se igualmente a existência de uma unidade de conguração. Esta irá permitir uma programação dos blocos I/O, ou seja, programar os pinos I/O como sendo uma entrada, saída ou entrada e saída.[34] DCM ( Digital Clock Manager ) Nas primeiras versões das FPGAs havia um grande problema inerente ao relógio. O designer na implementação de qualquer sistema tinha de ter especial atenção a proble- mas de relógio como por exemplo o skew. Este fenómeno leva a que o sinal de relógio não chegue a todos os componentes síncronos ao mesmo tempo. É um problema que tem como causa o tamanho da ligação entre dois pontos, o que para frequências elevadas se torna mais signicativo. Existem igualmente outros fenómenos que aumentam a gravidade deste problema tais como variações de temperatura e acoplamentos capacitivos quer nas linhas, quer nos componentes. O DCM, adicionado recentemente nas FPGAs permite uma diminuição destes efeitos, reduzindo desta forma uma das grandes preocupações dos projectistas de sistemas reconguráveis.[34] Ligações Programáveis O bloco CLB permite efectuar uma operação lógica. No entanto, para formar uma rede lógica de grande densidade é necessária a utilização de vários blocos CLB interligados, bem como a sua ligação com blocos de I/O. Estas ligações encontram-se em torno de todos os blocos CLB tal como mostra a gura seguinte. Estas ligações são programáveis, CAPÍTULO 2. 16 SISTEMAS DIGITAIS RECONFIGURÁVEIS sendo a programação destas feita automaticamente pelas ferramentas CAD (Ex: ISE ), facilitando o trabalho realizado pelo designer. Xilinx Figura 2.12: Ligaçoes programáveis em FPGA [7] O facto de haver uma grande quantidade de ligações possíveis para cada CLB permite que efeitos indesejáveis (ex. Clock Skew) nos sinais globais, tais como o clock sejam reduzidos. [34] Memória A maioria das FPGAs actuais possui incorporadas memórias RAM, designadas mais frequentemente por Block RAM. A sua quantidade depende de dispositivo para dispo- sitivo. Estas permitem uma diminuição dos blocos CLB utilizados, facilitando deste modo o 2.3.3.3 design de sistemas digitais.[34] Aplicações Actualmente o domínio das FPGAs encontra-se em grande evolução. Devido à sua versatilidade cada vez mais é adoptada, conseguindo-se, com um custo relativamente reduzido, construir plataformas e sistemas que podem ser reconguráveis após a saída de fábrica. A aplicabilidade das FPGAs encontra-se nas seguintes áreas: Aeronáutica/Militar - são utilizadas para efectuar processamento digital de imagem bem como para utilização em aplicações Software Dened Radio. [35] 2.3. TIPOS DE DISPOSITIVOS LÓGICOS PROGRAMÁVEIS 17 Figura 2.13: Controlador TTP implementado em FPGA [8] Automóvel - Implementa sistemas de ajuda ao condutor, sistemas de conforto e sistemas de comunicação.[35] Ex: Controlador TTCAN desenvolvido pela Bosch. [36] Figura 2.14: Controlador TTCAN implementado em FPGA [9] Broadcast - Implementa funções que auxiliam na transmissão especialmente de áudio e vídeo.[35] Consumidor - Começam a desempenhar funções a nível doméstico, tais como controlo de uma rede interna de uma habitação, dispositivos electrónicos etc.[35] Industrial, Cientíca e Médica - Desempenham funções na automação industrial, controlo de motores e processamento de imagem em dispositivos médicos.[35] Comunicações sem os - Desempenham funções a nível de processamento em banda base, RF, controlo de uxo de informação bem como implementação de camadas protocolares tais como WCDMA, HSPDA, WiMAX etc.[35] Comunicações com os - As funções são em tudo semelhantes à anterior. No entanto, neste caso o ambiente é com os.[35] CAPÍTULO 2. 18 Figura 2.15: SISTEMAS DIGITAIS RECONFIGURÁVEIS Placa de Desenvolvimento Digilent NetFPGA optimizada para redes Ethernet [10] 2.3.3.4 Principais fabricantes e Produtos O mercado da fabricação de FPGAs encontra-se neste momento em desenvolvimento. Hoje em dia são ainda poucas as empresas a fabricar este tipo de dispositivos. O mercado encontra-se repartido essencialmente por 5 fabricantes: Xilinx, Altera, Lattice Semiconductor, Actel e QuickLogic. Apareceram, recentemente, no mercado os fabricantes Cypress, Achronix e SiliconBlue. Tendo sido a Xilinx o grande impulsionador das FPGAs, este é o maior fabricante de FPGAs seguido da Altera. Visto ter sido usada uma FPGA da Xilinx abordarei, de seguida, os principais produtos deste fabricante. [37] Produtos Xilinx Os produtos disponíveis pelo fabricante Xilinx possibilitam a aplicação de FPGAs em praticamente todas as áreas. Sendo a sua gama de produtos muito elevada, vamos de seguida apenas apresentar os produtos que o próprio fabricante considera de destaque. Nova Geração de FPGAs - Virtex 6 e Spartan 6 Recentemente, o fabricante Xilinx lançou o que considera a nova geração de FPGAs. Estas sobressaem em relação às suas antecessoras, visto o seu processo de fabrico ter passado para 40nm (Virtex 6) e 45nm (Spartan 6). Este facto leva a uma menor área de silício ocupada, tornando estes componentes, segundo o fabricante, cerca de 50% mais baratos que os antecessores. [28] Seguidamente, são apresentadas as características mais relevantes de cada um dos chips : 2.3. TIPOS DE DISPOSITIVOS LÓGICOS PROGRAMÁVEIS 19 Tabela 2.1: Principais caracteristicas das FPGAs Spartan 6 e Virtex 6[28] Virtex 5 A Virtex 5 foi pioneiro a nível de FPGAs de 65nm sendo igualmente a primeira a suportar tensões de alimentação de 1V, possuindo desta forma um consumo energético reduzido. Figura 2.16: Virtex 5 LX [11] Possui cerca de 330.000 células lógicas, 1.200 pinos de entrada e saída, 48 transceivers de baixo consumo (RocketIO - Transceiver desenvolvido pela Xilinx capaz de taxas de transmissões 6.5Gbps), capacidade de incorporar um processador PowerPC440, suporta PCI Express e possui blocos destinados a comunicação Ethernet. Estas características dependem do sub-tipo desta família.[38] A família Virtex 5 divide-se em 5 subtipos: Virtex 5 LX É concebida para o desenvolvimento em que seja necessária uma grande performance para execução de operações lógicas.[38] Virtex 5 LXT Possui igualmente uma grande performance a nivél lógico, bem como um baixo consumo em comunicações série (Transceivers Rocket IO).[38] CAPÍTULO 2. 20 Virtex 5 SXT SISTEMAS DIGITAIS RECONFIGURÁVEIS Possui, também, um baixo consumo em comunicações serie. É igualmente optimizado para efectuar processamento digital de sinal, bem como aplicações que necessitem de uma grande quantidade de memória.[38] Virtex 5 FXT Desenvolvido para aplicações que necessitem de uma taxa de transmissão elevada e para sistemas embutidos.[38] Virtex 5 TXT banda, tal como Para aplicações que necessitem de uma grande largura de bridging, switching, aplicações em sistemas de telecomunicações e transferência de dados.[38] Spartan 3A A gama Spartan constitui uma solução mais económica, quando a exigência das aplicações não é muito elevada. Esta gama pode possuir entre 50.000 e 3.4 milhões de gates lógicas.[39] Figura 2.17: Spartan 3A [12] Tal como na Virtex, dentro da gama Spartan existem algumas gamas e subgamas, tal como Spartan 3E. No entanto, o produto de destaque actualmente é a Spartan 3A. Dentro desta gama existem três modelos: Spartan 3A Esta FPGA é considerada a mais barata, possuindo optimiza- ções para aplicações que exijam uma grande quantidade de recursos I/O. Pode ter entre 50K a 1.4 Milhões de gates lógicas e entradas I/O desde 108 a 502 entradas/saídas. As aplicações actuais deste dispositivo encontram-se principalmente na área de sistemas embutidos, sendo capaz de incorporar o processador MicroBlaze da Xilinx.[39] Spartan 3AN Esta FPGA possui também uma grande quantidade de por- tas lógicas, com números iguais ao do modelo anterior. No entanto, esta não se destina a aplicações de grande exigência de I/O, mas sim às não voláteis, ou seja, aplicações em que uma determinada informação não se perca quando 2.4. LINGUAGENS DE DESCRIÇÃO DE HARDWARE (HDL) do encerramento do sistema. ash 21 Para tal, este dispositivo possui uma memória incorporada com 11Mb, sendo a maior memória on-chip actualmente em FPGAs.[39] Spartan 3A DSP Tal como indica o nome, este modelo tem como nalidade aplicações que envolvam uma grande quantidade de processamento digital de Block Ram ) por bloco lógico, sendo ideal para os algorit- sinal. Possui 40BRAM ( mos de processamento de sinal e de coprocessamento. Este dispositivo consegue, igualmente, incorporar o processador MicroBlaze da Xilinx. [39] 2.4 Linguagens de descrição de Hardware (HDL) As linguagens de descrição de hardware encontram-se numa classe especial das linguagens de programação. Estas, ao contrário das mais comuns linguagens de programação (Ex: Java), têm como objectivo fazer uma descrição de um circuito electrónico. A sua principal diferença encontra-se na sua sintaxe, permitindo trabalhar directamente com múltiplos processos (paralelismo) e com expressões temporais (Ex: Transição ascendente do relógio). Estas linguagens servem para simulação de circuitos digitais, podendo a descrição ser, mais tarde, sintetizada e implementada em hardware FPGAs).[40] As principais linguagens utilizadas são VHDL e Verilog. (Ex: No entanto, hoje em dia é possível já programar em linguagens de mais alto nível como Matlab e C++, sendo estas posteriormente convertidas para uma linguagem de descrição de hardware.[41] 22 CAPÍTULO 2. SISTEMAS DIGITAIS RECONFIGURÁVEIS Capítulo 3 Sistemas Computacionais e Ferramentas de Apoio 3.1 Sumário O trabalho realizado encontra-se, em grande medida, relacionado com arquitectura de computadores. Neste capítulo são apresentados os conceitos fundamentais sobre os sistemas computacionais. Este começa com uma breve introdução aos diversos sistemas existentes. De seguida, são apresentados os conceitos básicos sobre o instruction set de um processador e as diferentes fases que este toma para a execução das instruções. Será considerada a arquitectura do processador MIPS como exemplo para uma melhor percepção dos conceitos. Serão igualmente apresentados alguns exemplos de micro- processadores implementados em FPGA assim como algum trabalho relacionado. A terminar, serão apresentadas todas as ferramentas de apoio a este trabalho fazendo, deste modo, uma ponte entre a parte teórica e prática desta dissertação. 3.2 Introdução Devido aos avanços na área da microelectrónica, os sistemas computacionais fazem hoje parte da nossa sociedade. Estes têm sofrido uma grande explosão a nível de capacidade e potência, tornando-os, actualmente, indispensáveis. Esta evolução tem seguido a conhecida Lei de Moore, que nos diz que o número de transístores que po- dem ser colocados num circuito integrado aumenta exponencialmente, ou seja, duplica aproximadamente a cada dois anos. 23 24CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO Figura 3.1: Lei de Moore [13] É possível, actualmente, dividir os sistemas computacionais em três grandes tipos: de uso geral, servidores e embutidos. Sistemas de uso geral São os sistemas computacionais mais conhecidos. O exemplo mais evidente é o computador pessoal caracterizado pela sua boa performance relativamente ao seu baixo custo. São considerados os grandes impulsionadores na área de sistemas computacionais.[14] Servidores São orientados para grandes cargas de informação. Estas provêm de multiutilizadores que se encontram tipicamente numa rede e que fazem pedidos de processamento simultaneamente. Estes sistemas computacionais utilizam a mesma tecnologia que os sistemas de uso geral, contendo, no entanto, uma grande capacidade de Input/Output. Os servidores possuem dois extremos a ní- vel de capacidade e custo. Estes podem este ser um simples computador de uso geral que serve para armazenar dados, aplicações pequenas ou uma página de internet pequena. No outro extremo, encontram-se os super-computadores possuindo uma grande performance e um custo muito elevado. Estes possuem de centenas até milhares de processadores e possuem uma capacidade de memória que pode chegar até aos petabytes. Usualmente, são ligados como servidor e utilizados para cálculos cientícos de grande complexidade, tais como previsões meteorológicas.[14] Sistemas Embutidos São hoje o maior grupo de sistemas computacionais e utilizados numa enorme quantidade de aplicações. Consiste num sistema computacional desenhado para desempenhar uma ou poucas tarefas, isto é, é um sistema construído para satisfazer necessidades especícas podendo incluir Hardware e componentes mecânicos. Uma vez que estes sistemas são especializados para uma determinada tarefa, os projectistas conseguem facilmente optimizar o 3.2. INTRODUÇÃO 25 sistema reduzindo o tamanho e o custo deste. Exemplos de sistemas embutidos vão desde PDAs, leitores MP3, máquinas de lavar, aparelhos médicos etc. Deste modo, um sistema embutido possui sempre uma grande quantidade de periféricos, permitindo que a função desejada seja construída e controlada usualmente por um microprocessador. Ao conjunto do microprocessador mais periféricos designase por microcontrolador. Se for utilizada uma rede de sistemas embutidos estes designam-se por sistemas distribuídos.[14] Em qualquer sistema de computação, apenas é possível executar instruções muito simples, pelo que se torna necessária a construção de camadas de software que permitam obter uma abstracção para o programador. madas: Hardware , Sistemas de Podemos então dividir as seguintes ca- Software e Aplicações de Softwar e. Estas encontram-se hierarquizadas, tal como mostra a gura seguinte. Figura 3.2: Tipicas camadas de um sistema computacional[14] A camada de mais baixo nível ( Hardware ) permite a implementação de funções simples, fornecendo, desta forma, a estrutura base de um sistema computacional. A camada seguinte tem como objectivo tornar a construção de aplicações computacionais mais simples, fornecendo ferramentas úteis para a construção de uma aplicação e tornando a camada de hardware abstracta para o programador. Uma das ferramentas mais importantes é o que designamos por sistema operativo, que permite gerir todos os recursos disponíveis de uma forma abstracta para o programador. Incluem-se igualmente nesta camada os compiladores, que permitem traduzir um programa numa linguagem de mais alto nível (maior abstracção) numa linguagem que o hardware con- assembly ). segue executar ( Este código assembly é traduzido, posteriormente, para linguagem binária, ou seja, a linguagem da máquina, para que possa ser executado. Esta tarefa é feita pelo que designamos por assemblers . Por m, possuímos a camada 26CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO applications sofware o qual incorpora todo o software que é desenvolvido por um programador e em que o grau de abstracção é muito elevado. [14] 3.3 Organização de um computador Um computador digital possui como função primária o processamento de informação vinda de entradas e produção de resultados/saídas consoante um determinado algoritmo. Independentemente do tipo de estrutura que um determinado computador possui, existem alguns componentes que são comuns a todos os sistemas computacionais, desempenhando todos as mesmas funções básicas. Estes componentes encontram-se ilustrados na gura seguinte. Figura 3.3: Organização de um computador [14] Observando a gura anterior, é possível vericar 5 grandes componentes de um sistema computacional: unidade de controlo, componentes datapath, memória, input e output. Os input/output , tal como os nomes indicam, permitem receber ou trans- mitir informação para o computador. Dispositivos como um rato, teclado ou scanner são exemplo de componentes Input. Já o ecrã ou colunas de som são exemplo de com- ponentes output. Existem igualmente dispositivos drives, gravadores de cd's, etc. input/output, como é o caso de ash A memória, por sua vez, permite armazenar o programa a ser executado, bem como armazenar resultados intermédios importantes. formação é, usualmente, guardada no que se designa por memória do processador, existe outro tipo de memória designada por Esta in- DRAM. Dentro memória cache . Esta, possui um tamanho muito reduzido relativamente à memória DRAM mas uma grande 3.3. ORGANIZAÇÃO DE UM COMPUTADOR 27 velocidade. Tem como função reduzir o tempo de acesso a informação que se encontra na DRAM. Esta, contém a informação mais recentemente utilizada, pelo que o processador não necessita de aceder à memória DRAM se esta se encontrar na memória cache. Esta memória é do tipo SRAM, as quais são mais caras e ocupam mais espaço do que as memoria DRAM pelo que a capacidade utilizada normalmente anda à volta dos MBytes. Estas, possuem a vantagem de serem muito mais rápidas que as memórias DRAM. Finalmente, existe o processador ou CPU (Central Processor Unit ), o qual é responsável pela execução do programa que se encontra em memória. Este pode ser dividido em dois componentes: datapath e unidade de controlo. O datapath permite efectuar operações aritméticas, enquanto a unidade de controlo efectua o controlo de sinais do datapath, memória e I/O em conformidade com as instruções do programa a executar. [14] 3.3.1 Instruction Set Architecture (ISA) Para que seja possível a construção de programas, existe a necessidade de uma interface entre o hardware e programador. Esta interface designa-se por Instruction Set Architecture (ISA) e dene as palavras que a máquina entende, sendo o seu vocabulário designado por Instruction Set do processador. Dene, igualmente, os modos de endereçamento possíveis, os tipos de dados, os registos (de uso geral e reservados) e memória reservados para o programador. [42] Tal como foi dito, o programa a ser executado encontra-se em memória. além desta informação, dados necessários à execução do programa (Ex: Para Arrays de inteiros) são igualmente armazenados em memória. Podem-se distinguir dois tipos de organização do sistema computacional no que diz respeito à organização da memória: Arquitectura de Von Neumann e Arquitectura de Harvard. No primeiro tipo de arquitectura, a memória é utilizada simultaneamente para armazenar o programa e dados. Esta encontra-se representada na gura3.4 Figura 3.4: Arquitectura de Von Neumann No segundo tipo de arquitectura, o programa e os dados são armazenados em me- 28CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO mórias diferentes. Esta encontra-se representada na gura 3.5. Figura 3.5: Arquitectura de Harvard Existem obviamente prós e contras de uma arquitectura em relação à outra. O primeiro caso, tem a vantagem em relação ao segundo de apenas possuir um barramento, uma vez que só possuímos uma memória. No entanto, neste sistema existe uma maior limitação a nível de largura de banda, uma vez que apenas é possível adquirir um dos tipos de informação de cada vez. Esta arquitectura possui ainda o problema que do tamanho dos dados ter que ser do mesmo tamanho em bits que uma palavra do processador. A segunda arquitectura, possui a desvantagem de possuir mais um barramento para endereço e informação. No entanto, possui grandes vantagens o que leva que seja, actualmente, a arquitectura mais adoptada. Esta possui um throughtput mais elevado que a anterior, visto ser possível ler dados enquanto é requisitada a nova instrução, aumentando a velocidade de processamento. Possui igualmente a vantagem de o barramento para programa e dados não ter de possuir o mesmo tamanho, conseguindo deste modo uma maior exibilidade a nível de arquitectura. [43] 3.3.1.1 Instruction set Tendo em vista a construção de um processador, é necessário compreender como as instruções de um processador são construídas, de forma a, posteriormente, construir uma unidade de controlo e um datapath que implemente estas instruções. O instruction Set é um assunto um pouco subjectivo, uma vez que este varia de arquitectura para arquitectura, apesar de em alguns pontos as diversas arquitecturas se cruzarem. Nesta secção irá ser abordado o caso do processador MIPS. Independentemente da arquitectura usada, podemos dividir o um processador em 5 tipos de instruções: instruction set de aritméticas, transferência de dados, lógicas, salto condicional e salto incondicional. Instruções aritméticas Visto uma das funções de um processador ser executar operações aritméticas, existe um conjunto de instruções que permite efectuar operações tais como: adição, subtracção etc.[14] 3.3. ORGANIZAÇÃO DE UM COMPUTADOR Instruções para transferência de dados 29 Sendo os registos de uso geral muito limitados a nível de tamanho e de número, uma vez que apenas são utilizados para operações simples e passos intermédios, existe a necessidade de armazenar informação em memória (Ex: array de inteiros), pelo que é necessário aceder à memoria de dados. Estas instruções permitem, assim, escrever e ler valores da memória de dados.[14] Instruções lógicas É muitas vezes útil ao programador efectuar operações lógicas tais como AND, OR, XOR, Shift, existindo desta forma este tipo de instruções.[14] Instruções de salto condicional Muito raramente um programa segue uma ordem de execução ordenada, isto é, a instrução a ser executada é a seguinte em termos de posição de memória. As instruções de salto permitem, assim, saltar de uma posição de memória para outra denida pelo programador. As instruções de salto condicional, permitem saltar para uma pré-determinada posição de memória se uma condição se vericar. Ex: Salto para uma determinada posição de memória se um determinado registo de uso geral for zero.[14] Instruções de salto incondicional Muito semelhantes às anteriores, mas sendo neste caso o salto efectuado sem que uma determinada condição seja satisfeita, apenas por necessidade do programador. Para o caso da arquitectura MIPS, o correspondente Instruction Set reduzido é exibido na tabela seguinte. Existem outras instruções que não se encontram exibidas na tabela, não tendo interesse para a compreensão da arquitectura pelo que não serão exibidas. A arquitectura exibida apresenta 32 registos de uso geral: $s0. . . $s7, $t0...$t9, $zero, $a0. . . $a3, $v0. . . $v1, $gp, $fp, $sp, $ra e $at. A descrição da sua função não é importante para a compreensão do trabalho. 30CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO Tabela 3.1: Instruction Set reduzido da arquitectura MIPS [14] Observando a gura anterior, é fácil de vericar que nem todas as instruções possuem os mesmos nem o mesmo número de operandos. Este facto, leva a uma diferenciação do tipo de instruções. Na arquitectura MIPS distingue-se os tipos: R, I e J. A tabela seguinte mostra a correspondência entre o nome da instrução e o seu tipo. Tabela 3.2: Correspondência entre o nome da instrução e o seu tipo [14] A conversão das instruções nado assembler. assembly em instruções máquina será feita pelo desig- Este, conforme o tipo de instrução, irá formar uma palavra binária sendo, esta sim, reconhecida pela máquina. As estruturas dos vários tipos de instrução serão agora apresentadas.[14] 3.3. ORGANIZAÇÃO DE UM COMPUTADOR 31 Instrução do tipo R A estrutura da instrução do tipo R encontra-se representada na gura seguinte. Figura 3.6: Estrutura da instrução do tipo R [14] Observando a gura seguinte, distinguem-se os seguintes campos: Opcode (Op) - Indica a operação básica que deverá ser executada; Rs - Número do registo que contém o primeiro operando; Rt - Número do registo que contém o segundo operando; Rd - Número do registo que irá receber o resultado da operação; Shamnt - Serve para instruções de shift indicando o número de bits a serem shiftados; funct - Função a ser executada. indicada pelo campo Este campo, consiste numa variante da operação op. Ex: as operações ADD e SUB possuem o mesmo opcode, pelo que a distinção entre elas é feita através deste campo. Instrução do tipo I A estrutura do tipo I encontra-se representada na gura seguinte. Figura 3.7: Estrutura da instrução do tipo I [14] Este tipo de operação permite a atribuição de um valor imediato, ou seja, um valor que se encontra na própria instrução e não num registo. Este valor é limitado pelo número de bits do último campo. Os restantes campos possuem a mesma função que na instrução do tipo R. Instrução do tipo J A estrutura do tipo J encontra-se representada na gura3.8. 32CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO Figura 3.8: Estrutura da instrução do tipo J [14] Este tipo de estrutura apenas é utilizado para a instrução Jump. Devido ao campo address possuir 26 bits para o endereço, é possível efectuar um salto maior em memória do que numa instrução do tipo I. 3.3.1.2 Modos de endereçamento Tal como foi visto, para a execução de uma instrução existe a necessidade de aceder à informação que se encontra num registo ou em memória. Existe igualmente a necessidade de fazer saltos no programa (operações de salto). Os modos de endereçamento denem como a partir da informação das instruções os operandos são obtidos.[44] Vamos de seguida abordar os diferentes modos de endereçamento que a arquitectura de exemplo possui. Existem 5 formas de endereçamento: Pseudodirect . Immediate - O valor do operando encontra-se na própria instrução. Figura 3.9: Register Immediate Adressing Base - [14] - O operando encontra-se num registo. Figura 3.10: Immediate , Register, Base, Pc-relative, Register Adressing [14] O operando encontra-se em memória, sendo a sua posição calculada através da soma de um registo com um valor indicado na própria instrução. 3.3. ORGANIZAÇÃO DE UM COMPUTADOR Figura 3.11: Pc-relative 33 Base addressing [14] - Usado para instruções de salto incondicional. O endereço é cal- culado como sendo a soma entre o Program Counter mais um valor constante indicado na instrução. Figura 3.12: Pseudodirect Pc-relative addressing [14] - Usado para instruções de salto condicional, em que o ende- reço é calculado como sendo a concatenação de alguns bits mais signicativos do Program Counter com o valor que se encontra na própria instrução. Figura 3.13: Pseudodirect addressing [14] 3.3.2 Processador Até ao ponto actual foi visto a interface que um programador tem disponível para a elaboração de programas. Estes programas necessitam de algo físico que os execute sendo 34CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO esta é a função do microprocessador. Tal como foi visto, este divide-se, essencialmente, em dois componentes: datapath (Conjunto de unidades de execução) e unidade de controlo. Qualquer que seja o microprocessador, podemos denir uxo de operações que este executa a cada nova instrução: instruction fetch, instruction decode e execute. Figura 3.14: Fases de execução de uma instrução Instruction Fetch Instruction Decode - Recolha da nova instrução para execução. - Identica a instrução e o seu tipo, por forma a que a unidade de controlo saiba quais os componentes que devem ser activos num determinado momento para a correcta execução da operação. Execute - A fase em que a instrução é executada e o resultado guardado. Unidades de Execução e Unidade de controlo As unidades de execução ou datapath permite a execução de uma determinada tarefa, enquanto a unidade de controlo permite o controlo da operação, isto é, a selecção dos componentes de forma a encaminhar a informação para obter um determinado resultado. O conjunto unidade de execução e datapath simplicado da arquitectura exemplo (MIPS) encontra-se representada na gura seguinte. 3.3. ORGANIZAÇÃO DE UM COMPUTADOR 35 Figura 3.15: Exemplo de uma unidade de controlo e unidade de execução [14] Observando a gura anterior, é possível vericar a existência de componentes aritméticos, memórias, program counter, portas lógicas, banco de registos etc, os quais são essenciais para execução de uma determinada instrução. É possível vericar igualmente que todos os componentes têm ligação com a unidade de controlo, visto estes serem controlados em qualquer instante por esta entidade, encaminhando-se, desta forma, a informação entre os diversos componentes. Observa-se igualmente que a unidade de controlo apenas possui uma entrada: os bits 31 a 26 da ponde ao opcode instruction word. Este corres- da instrução, constituindo a única informação necessária para que a unidade de controlo coordene os vários componentes. É possível vericar igualmente uma arquitectura do tipo harvard uma vez que, existe uma memória para armazena- mento de dados e outra para o programa. A estrutura apresentada tem a grande desvantagem da frequência máxima de funcionamento ser bastante baixa, uma vez que o sinal tem de passar por todos os componentes em apenas um ciclo de relógio (Arquitectura este problema apareceu a estrutura Multi-cycle, Single-Cycle ). Para combater que permite executar uma instrução em vários ciclos de relógio, sendo que em cada ciclo uma tarefa simples é executada, 36CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO permitindo um aumento da frequência máxima do relógio. A sua estrutura não será apresentada. Existe igualmente a estrutura cute. pipelined, que divide as fases de fetch, decode e exe- Este processo é semelhante à linha de montagem de um automóvel, em que cada grupo se encontra responsável por uma determinada tarefa de montagem e em que a construção de um novo carro começa antes de o anterior terminar. O mesmo acontece nesta estrutura, em que são iniciadas as fases de uma instrução sem que a anterior tenha acabado, obtendo-se desta forma um maior throughtput de instruções. 3.3.3 Co-Processadores Um processador de uso geral permite efectuar uma grande quantidade de operações. No entanto, existem operações muito especícas que este não é capaz de efectuar ou o tempo de execução que levaria seria muito elevado. Esta é a principal função de um co-processador, ou seja, fornecer ao processador principal, funções suplementares como por exemplo: operações em vírgula utuante, grácas, processamento de sinal, encriptação etc.[45] 3.4 Utilização de FPGAs para implementação de sistemas computacionais A utilização de FPGAs para a implementação de processadores devido à sua grande exibilidade tem sofrido nos últimos anos uma grande evolução devido ao aumento das capacidades lógicas destes dispositivos. É possível distinguir dois tipos de implementações de processadores em FPGA: Hard-Core e Soft-Core . No primeiro caso, o núcleo do processador encontra-se implementado originalmente na pastilha de silício da FPGA. A vantagem deste tipo de implementação encontra-se relacionada com a frequência de trabalho do processador a qual pode ser muito elevada. Assim, obtém-se um sistema computacional com um processador de grande velocidade e com periféricos que podem ser costumizados para uma determinada aplicação. A grande desvantagem desta implementação encontra-se na sua exibilidade, uma vez que não é possível adicionar novas capacidades ao processador. No segundo caso, o núcleo do processador é implementado inteiramente através de ferramentas de síntese, ou seja, é implementado através de ferramentas CAD. Devido a este facto, estes possuem a desvantagem de não conseguirem trabalhar à frequência bem como ter a performance da implementação Hard-Core. No entanto, estes permitem 3.5. TRABALHO RELACIONADO 37 uma grande exibilidade, permitindo alterações signicativas às capacidades do núcleo e adição de novas funcionalidades. [46] 3.4.1 Exemplos de microprocessadores em FPGA De seguida são apresentados alguns dos microprocessadores disponibilizados pelo fabricante Xilinx. PicoBlaze Consiste num processador de 8 bits pertencente à categoria de soft-cores e foi cons- truído para incorporação nas famílias Spartan 3, Virtex II e Virtex II Pro, oferecendo uma solução compacta para aplicações que não requerem uma grande quantidade de processamento de informação.[47] MicroBlaze Pertence igualmente à categoria de núcleos soft-core e consiste num processador RISP de 32 bits. Ao contrário do PicoBlaze, este possui já uma unidade de vírgula utuante bem como outros componentes, que podem ser adicionados através de livrarias IP. É possível igualmente incorporá-lo na ferramenta EDK da Xilinx, permitindo que seja programado utilizando linguagens tais como C e C++.[48] PowerPC440 O PowerPC440 foi criado pelo IBM, sendo mais tarde incorporado em FPGAs da hard-core. Este constituí um processador de pipeline, permitindo igualmente a utilização da Xilinx, pertencendo desta forma ao tipo 32 bits possuindo uma arquitectura ferramenta EDK de forma a facilitar a construção de aplicações.[49] 3.5 Trabalho Relacionado Os trabalhos relacionados com o tema proposto nesta dissertação são muito escassos, sendo a abordagem ao problema feita de uma forma diferente. consideradas como VISC (Variable Nas arquitecturas Instruction Set Computer ), existe um dicionário de instruções base e compete ao compilador escolher o melhor set de instruções a utilizar, tentando, desta forma, optimizar o código a compilar, permitindo uma execução mais eciente do algoritmo. Existem igualmente processadores reconguráveis como por 38CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO exemplo: PRISM, PRISC, entre outros. Estes possibilitam a reconguração de um determinado hardware não permitindo, no entanto, a variação do instruction set. O trabalho desta dissertação envolve igualmente uma componente de interacção remota para transferência de informação acerca das instruções a carregar, bem como um novo programa para um processador, não havendo igualmente informação disponível sobre este assunto. 3.6 Ferramentas de apoio 3.6.1 Xilinx Integrated Synthesis Environment (ISE) O Xilinx ISE consiste numa ferramenta de software que permite a implementação, si- mulação e programação de qualquer FPGA ou CPLD deste fabricante. Todo o projecto é desenvolvido através de uma interface gráca. A imagem seguinte mostra o aspecto desta ferramenta. Este ambiente de desenvolvimento encontra-se dividido basicamente em 5 blocos, numerados na gura 3.16 pelos números de 1 a 5. Figura 3.16: Ambiente da ferramenta ISE[15] O bloco representado pelo número 1 representa a Toolbar, pelo que não é alvo de 3.6. FERRAMENTAS DE APOIO 39 grande explicação. Contém apenas alguns atalhos úteis para a implementação de um sistema digital. O bloco 2 é designado por Sources Window. Esta janela constitui a primeira etapa para a criação de um projecto de dispositivo lógico programável. Mostra os cheiros existentes no projecto, possibilitando igualmente a criação de novos cheiros. Através da tab sources é possível observar uma hierarquia do projecto, isto é, todos os cheiros que são utilizados para a implementação do projecto de uma forma hierarquizada. Observando a gura3.16, é possível observar que o módulo Top é o módulo superior do projecto, sendo que todos os restantes são chamados em camadas inferiores a estes. Ex: Main_Car (ver gura). Através deste bloco é também possível alterar denições do projecto, como por exemplo o modelo da FPGA, velocidade, O bloco 3 representa a Process Window. Package. Este bloco permite ao designer imple- mentar operações (processos) ao seu projecto. Os processos são exibidos igualmente de uma forma hierárquica. Este permite sintetizar, simular, implementar, criar módulos ou adicionar módulos já existentes. Dentro de cada processo existem ainda outros processos (forma hierárquica) encontrando-se segundo uma disposição que segue o diagrama de uxo de um projecto. Este diagrama será apresentado num tópico posterior. A janela 4 representa o que mais usualmente se designa por Área de trabalho . Nesta janela, é possível observar relatórios de implementação e outras informações úteis. É nesta janela que são editados os diversos cheiros VHDL, Verilog, Esquemático etc. Por último (janela número 5), encontra-se a janela Trasncript Window, que permite ao utilizador observar os processos correntes, bem como a visualização de mensagens importantes, tais como erros e avisos. Permite igualmente, em caso de erro de sin- taxe, o redireccionamento para a linha de código correspondente ou, sendo um erro de síntese, a implementação permite o redireccionamento para a internet para possíveis soluções.[15] Etapas de um projecto utilizando Xilinx ISE Para a implementação de um projecto para FPGA ou CPLD é necessário seguir determinados passos sequencialmente. O diagrama de operações seguido na ferramenta ISE encontra-se representado na gura3.17: 40CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO Figura 3.17: Diagrama de Fluxo de um projecto na ferramenta ISE[16] Design Entry ou criação do projecto Começa-se pela criação de um projecto. Neste, serão incluídos cheiros VHDL, Verilog, do tipo esquemático, blocos das livrarias IP e cheiros UCF. Os cheiros UCF representam as limitações a nível de ligação de pinos, de tempo e de área impostas pelo designer. Depois da criação do projecto, poder-se-á passar para a fase de síntese ou para a fase de simulação comportamental. Design Synthesis ou síntese do projecto Depois da implementação efectuada, é necessário sintetizar o sistema desenvolvido. Primeiro é iniciado um processo de detecção de erros de sintaxe. De seguida, são detectados erros de implementação. Ex: um sinal alterado por processos diferentes. Quando todos os conitos estiverem resolvidos, é criado um cheiro designado por entrada para a etapa Design Implementation. netlist que servirá de Figura 3.18: Entrada/Saída do processo de Síntese Design Implementation ou implementação do projecto Nesta fase, o cheiro criado pela síntese será convertido num projecto lógico que irá criar um cheiro 3.6. FERRAMENTAS DE APOIO 41 físico, que pode ser depois enviado para uma FPGA ou CPLD. Esta fase pode ser dividida em três subfases: Translate, Map e Place and Route. Na fase Translate as indicações contidas no cheiro UCF são convertidas para um cheiro lógico. Figura 3.19: Entrada/Saída do processo de A seguir, é executada a fase Map. Translate Nesta, o circuito lógico criado é dividido, de forma a ser enviado para FPGA, ou seja, todo o circuito é dividido pelos CLB e IOB disponíveis. Figura 3.20: Entrada/Saída do processo de Por m, a fase Place and Route, Map cria as ligações entre os vários blocos CLB ou IOB, formando o sistema construído, distribuído pela os diversos componentes lógicos. Xilinx Device Programming ou programação do dispositivo lógico Chegando a esta fase, o projecto deverá ser carregado para a FPGA. No entanto, antes do envio, o cheiro produzido até ao momento deverá ser convertido num bistream, para que a FPGA ou CPLD o aceitem: .bit. Depois de criado o cheiro .bit, é necessário programar a FPGA através do aplicativo incorporado no ISE, iMPACT e um cabo de programação. A maior parte das placas de desenvolvimento estas possuem um software adicional que permite programar usualmente por ligação USB. Design Verication ou teste do projecto a vericação de um projecto pode decorrer em diferentes etapas da construção de um sistema. Podem distinguir-se os principais momentos da vericação de um projecto: 42CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO Behavioral Simulation ou simulação comportamental Esta constitui a primeira simulação do sistema construído e pretende vericar se a implementação efectuada corresponde em termos ideais ao pretendido. Nesta simulação, é permitido simular código VHDL ou Verilog através de simuladores que conseguem exibir o valor de todos os sinais num determinado instante de tempo. A ferramenta ISE possui já um simulador: ISE Simula- tor. Em tópico posterior, iremos fazer uma breve apresentação ao simulador ModelSim. Functional Simulation é feita depois da fase ou simulação funcional A simulação funcional Translate, que fornece informação sobre a operação lógica do circuito implementado. O projectista pode vericar, neste ponto, a funcionalidade do seu projecto. Caso esta não se encontre como o esperado, é necessário alterar o código HDL. Static Time Analysis ou Analise temporal Depois da fase Map e Place and Route são criados relatórios que fornecem informações sobre os atra- sos dos sinais que são entregues ao circuito desenvolvido. Estes relatórios são bastante importantes, uma vez que é possível por exemplo vericar a frequência máxima de operação do circuito implementado. Timing Simulation ou Simulação Temporal A simulação temporal permite analisar o sistema considerando já os atrasos existentes nos sinais. Esta simulação pode ser feita pelos mesmos simuladores utilizados para a simulação comportamental, sendo, neste caso, uma simulação mais ável do que na simulação comportamental. In-Circuit Verication ou Vericação no circuito Constitui a última forma de vericar a funcionalidade do circuito. Após carregar a FPGA com uma determinada implementação, é possível ainda vericar o comportamento do sistema a nível físico, isto é, pode-se capturar todos os sinais necessários para que possam ser enviados para o computador e serem analisados. A ferramenta para fazer este debug in circuit designa-se ChipScopePro. 3.6.2 Xilinx Core Generator Esta ferramenta encontra-se incluída no ISE e permite a construção de blocos optimizados para FPGA. Estes blocos encontram-se em livrarias designadas por Livrarias IP Intelectual Property ). ( LOGICore ) construída pela pró- O ISE inclui já uma livraria ( pria Xilinx, possuindo componentes que abrangem uma vasta área de aplicações e que 3.6. FERRAMENTAS DE APOIO 43 são de uso livre. É possível, igualmente, através de internet, obter mais componentes para as livrarias IP. As áreas que a livraria LOGICore abrange são: Automóvel e industrial Este é constituído essencialmente por Protocolos de Comunicação, frequentemente utilizados nestas áreas. Ex: CAN. Componentes Básicos Flops etc. Bloco possuindo comparadores, Shift Registers, Flip- Estes componentes encontram-se devidamente optimizados, sendo, por isso, útil a sua utilização. Comunicações e Redes de Telecomunicações Estes blocos permitem efectuar processamento digital a nível das comunicações, com os e sem os. Pos- Ethernet, LVDS Direct Digital Synthesizer ), sui correctores de erros (Ex: Descodicador de Viterbi), blocos Low-voltage dierential signaling ), Modulação (Ex: ( Interfaces Serie (Ex: RS-232). Debug Possui ferramentas para debug do sistema. (Ex: Processamento Digital de Sinal Chip Scope Pro ). Possui blocos para correlação de sinais, ltros (Ex: FIR), Multiplicadores, Transformadas (Ex: DFT), funções trigonométricas etc. Funções Matemáticas Possui componentes que permitem efectuar operações em vírgula utuante, Multiplicadores, raiz quadrada, divisão, etc. Elementos de Memória Este grupo contém memórias CAM (Content-addressable memory ), memórias RAM e ROM as quais se encontram optimizadas e elementos de ordenação tais como FIFOs. Interfaces para barramentos Possui componentes de interface com barra- mentos tais como PCI, PCI Express e RapidIO. Processamento de áudio e vídeo Possui componentes para processamento digital de áudio e vídeo tais como aceleradores grácos, correctores gamma, codicadores H.264, codicadores e descodicadores MPEG etc. 3.6.3 ModelSim A ferramenta ModelSim é uma ferramenta poderosa para desenvolvimento de sistemas para FPGAs que permite a criação, gestão, simulação e implementação de sistemas 44CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO digitais, facilitando o design e vericação de uma determinada função de forma simples e rápida. Permite ao projectista utilizar diferentes métodos e linguagens lógicas no mesmo projecto. Este pode incluir as linguagens VHDL e Verilog. Os blocos desenvolvidos podem ser, depois, transformados em diagramas de blocos, permitindo a ligação entre vários blocos através de uma interface gráca. É possível igualmente construir blocos que implementam um determinado uxo de operações (máquina de estados nitos) gracamente. A gura3.21 mostra o exemplo de um diagrama de blocos e de uma máquina de estados nitos criados gracamente. [50] Figura 3.21: Ambiente de desenvolvimento da ferramenta ModelSim [17] A ferramenta ModelSim permite, igualmente, a passagem destes blocos implementados gracamente para uma das linguagens de descrição de hardware, conseguindo-se, deste modo, passar facilmente um projecto em modelsim para qualquer outro editor. É possível vericar, a qualquer momento, com o ModelSim o comportamento de qualquer componente, separadamente ou em conjuntos com outros componentes, através de diagramas temporais. Uma vez que esta ferramenta permite a integração de ferramentas de síntese e de implementação (Synplicity, Xilinx ISE e Altera Quartus), é possível elaborar simulações tendo em conta as limitações do projecto, tais como atrasos dos componentes, frequência máxima de trabalho etc, conseguindo-se, desta forma, uma simulação mais próxima da realidade.[51] 3.7. PLACAS DE DESENVOLVIMENTO 45 3.6.4 Eagle Visto as placas de desenvolvimento não possuírem um módulo wireless integrado, foi necessário construir placas de circuito impresso para adaptar o módulo às respectivas placas. Para tal foi utilizada a ferramenta Eagle que permitiu igualmente a construção de circuitos impressos para fazer degub dos sinais provenientes do módulo CC1101, de que falaremos em tópico posterior. Esta ferramenta, possui a facilidade de incorporar uma grande quantidade de componentes e conectores, permitindo a rápida construção de uma placa de circuito impresso. A sua interface encontra-se representada na gura seguinte. Figura 3.22: Ferramenta Eagle [18] 3.7 Placas de desenvolvimento Para a execução deste trabalho foram utilizadas duas placas de prototipagem em FPGAs diferentes: Celoxia RC10 e Nexys 2. Celoxica RC10 Esta placa de prototipagem foi desenvolvida pelo construtor Celoxica. Um diagrama de blocos representativo desta board encontra-se na gura seguinte. 46CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO Figura 3.23: Overview da placa de desenvolvimento Celoxica RC10 [19] Principais características Xilinx Spartan 3L XC3S1500L-4- FG320; joystick Um microcontrolador com ligação USB 2.0 para conguração da FPGA e para acesso a uma memória ash Micro Porta PS/2 para rato e teclado; 2 displays de sete segmentos; Porta RS-232; 8 LEDs; 2 conversores analógico-digitais de Um conector de expansão com 50 pi- com 5 posições; de 16MB; nos o qual inclui pinos de alimenta- 10 bits; ção, de I/O e de clock ; Saída para monitor VGA Ligação até 4 servo motores; Saída para LCD; Conector para barramento CAN; Duas saídas de áudio; Conector JTAG; 3.7. PLACAS DE DESENVOLVIMENTO 47 Figura 3.24: Celoxica RC 10 [20] Nexys 2 Esta placa foi desenvolida pelo fabricante Digilent. A gura seguinte mostra um diagrama representativo desta. Figura 3.25: Overview da placa de desenvolvimento Nexys 2 [21] Principais características Xilinx Spartan 3E-500 -4 -FG320; 1 Memória SDRAM da Micron com capacidade de 16Mbyte; Porta USB 2.0 para transferência de dados e conguração da FPGA; Oscilador de 50MHz e capacidade de um segundo oscilador; Alimentação através do USB, Baterias ou transformador; 1 Memória ash 60 pinos I/O através de 5 conectores de expansão; da Intel com capa- cidade de 16Mbyte; 8 LEDs; 48CAPÍTULO 3. SISTEMAS COMPUTACIONAIS E FERRAMENTAS DE APOIO 4 digitos de 7 segmentos; 4 botões; 8 switches ; Figura 3.26: Placa de desenvolvimento Nexys 2 [22] Capítulo 4 Processador com um instruction set variável 4.1 Sumário Pretende-se neste capítulo apresentar o processador com o instruction set variável desenvolvido. Começa com uma introdução à ideia que presidiu à realização deste processador. Por forma a conseguir a característica de recongurabilidade da unidade de controlo, é apresentada uma máquina de estados nitos reprogramável, a qual desempenha uma função decisiva para a construção do componente proposto. De seguida, é apresentado o processador desenvolvido bem como a explicação de todos os componentes necessários à obtenção de um instruction set variável. Para nalizar, é apresentado o processador de uso geral ao qual foi ligado o processador construído sendo apresentados alguns resultados sobre o sistema desenvolvido. 4.2 Introdução Tal como foi apresentado no capítulo 3, um processador pode dividir-se em dois principais componentes: datapath e unidade de controlo. Estas duas unidades, em conjunto, permitem-nos executar instruções. Ideia base Uma instrução segue sempre um determinado uxo de operações. Estas são executadas pelo datapath, enquanto o controlo e encaminhamento dos diversos sinais é da respon49 CAPÍTULO 4. 50 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL sabilidade da unidade de controlo. Esta unidade de controlo segue, desta forma, um diagrama de uxo de sinal. Para cada instrução este diagrama de uxo de sinal é diferente. Tendo em conta este facto, pode-se denir um processador com instruction set variável como um processador em que unidade de controlo possui um uxo de sinal variável, o que permite a execução de uxo de operações diferentes, ou seja, instruções diferentes. A unidade de controlo de um processador é geralmente feita recorrendo a uma máquina de estados nitos. Esta, para cada instrução segue determinados passos, que por sua vez, são comuns em parte a outras instruções. Desta forma, para construção de um processador com instruction set variável, é necessário a construção de uma máquina de estados nitos em que o seu uxo de operações pode ser alterado, contendo apenas a informação sobre uma determinada instrução (Máquina de estados nitos reprogramável), podendo esta ser alterada. Em relação ao datapath, este terá de ser xo e o mais genérico possível de forma a acomodar o maior número de instruções possíveis. Este facto leva a uma maior complexidade do datapath. O processador construído tem como objectivo a execução de operações sobre vectores binários e ternários, permitindo criar as bases para um futuro processador de uso geral. 4.3 Máquina de estados nitos 4.3.1 Máquina de estados nitos simples Uma máquina de estados nitos (FSM) consiste numa abstracção utilizada em sistemas digitais que permite impor alguma sequência de operações, sendo constituída por uma série de entradas, saídas e estados. A transição entre estados é feita de acordo com uma função de transição, enquanto as saídas são governadas por uma função de saída. O conceito de estados é abstracto, permitindo apenas marcar a sequência de operações.Em termos práticos um estado consiste numa variável que possui um número de valores nitos, o que explica a designação de nitos. Uma FSM possui informação sobre o estado corrente bem como o estado para o qual irá saltar na próxima transição do relógio, pelo que esta estrutura possui um componente de memória. O próximo estado é calculado tendo em conta a já dita função de transição. Este tipo de estrutura tem duas variantes: Máquina de Mealy e Máquina de Moore que denem como a saída é afectada pela entrada. Na primeira variante, a 4.3. MÁQUINA DE ESTADOS FINITOS 51 saída depende, para além do estado corrente, do valor da entrada nesse mesmo instante. No segundo caso, a saída apenas depende do estado corrente.[52] As guras 4.1 e 4.2 mostram cada um dos casos. Figura 4.1: Máquina de Moore Figura 4.2: Máquina de Mealy 4.3.2 Máquina de estados nitos reprogramável Uma máquina de estados nitos reprogramável (RFSM) consiste numa máquina de estados nitos em que é possível a alteração do seu comportamento. Este pode ser feito de duas maneiras: a primeira abordagem, consiste na utilização de FPGAs que têm a capacidade da reconguração parcial, ou seja, alterar sicamente parte da FPGA. A segunda abordagem, consiste na utilização de memórias RAM e ROM. Uma vez que se torna mais fácil e nem todas as FPGAs permitem a reconguração parcial, foi adoptado o segundo método. Uma análise mais aprofundada deste tipo de estrutura pode ser vista em [23] Implementação Tal como foi dito, uma máquina de estados nitos reprogramável pode ser feita com base em memórias. A gura seguinte, mostra um primeiro esquema de como esta pode ser construída. CAPÍTULO 4. 52 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Figura 4.3: Máquina de estados Finitos reprogramável [23] Esta máquina possui os seguintes componentes: Register ) - Permite armazenar o valor do estado corrente da RFSM; Registo ( Multiplexer Programável (PM) - Permite seleccionar a entrada pretendida conforme as especicações da máquina. É constituído por uma memória RAM Multiplexer RAM ) ( e um multiplexer, sendo as entradas de selecção deste as saídas da memória RAM. Este componente encontra-se representado na gura seguinte; Figura 4.4: SRAM State ( Multiplexer Programável (PM) [23] RAM) - Permite através do estado corrente e da entrada selecci- onada pelo bloco PM calcular o estado seguinte; Memória de saída (Output RAM) - Esta permite através do estado corrente calcular a saída da máquina; No entanto, esta máquina de estados apresenta um problema, uma vez que, quando existe a necessidade de avaliar mais do que uma entrada, será necessário a existência 4.3. MÁQUINA DE ESTADOS FINITOS 53 de estados adicionais, aumentado assim o tempo de execução da máquina, uma vez que só uma entrada em cada ciclo de relógio poderá ser analisada. Vejamos um exemplo: Figura 4.5: a) Diagrama de estados b) Diagrama de estados equivalente na RFSM Observando a gura 4.5, verica-se que o número de estados aumenta proporcionalmente com o número de entradas, ou seja, se é necessário avaliar n entradas, vamos necessitar de n-1 estados adicionais. Assim, se o número de entradas for relativamente elevado, o processamento irá tornar-se muito pouco ecaz. Para resolver este problema surge um modelo baseado em States Dummy States . Dummy são estados ctícios que inuenciam muito pouco a velocidade de transição en- tre estados. Esta encontra-se limitada, basicamente, pelo tempo de propagação pelos vários componentes.[23] A gura seguinte mostra o diagrama de estados correspondente: Figura 4.6: Diagrama de estados com Dummy States 54 CAPÍTULO 4. PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL A sua implementação com máquinas de estados nitos encontra-se na gura seguinte. Esta máquina designa-se por RFSM em cascata. Figura 4.7: RFSM em cascata [23] 4.4 Processador Combinatório com um set variável instruction Com este trabalho pretendeu-se implementar um processador com um instruction set variável, ou seja, que permita reprogramação, de forma a executar uma instrução diferente caso seja necessário. Esta reprogramação deverá ser feita em deverá ser possível mudar o instruction set real-time, isto é, do processador sem que seja necessário car- regar todo o software novamente na FPGA. Este processador permite fazer operações sobre vectores binários e ternários. O processador desenvolvido baseia-se na utilização de máquinas de estados nitos datapath que irá executar funções auxiliares para a concretização da operação em causa. Deste modo, o datapath reconguráveis (RFSM), permitindo seleccionar blocos de um deverá ser o mais generalista possível para conseguir executar uma vasta gama de instruções. 4.4.1 Macro - Esquema do sistema desenvolvido Na gura seguinte é apresentado um Macro - Esquema do sistema desenvolvido: 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL55 Figura 4.8: Sistema desenvolvido Observando a Figura 4.8 verica-se que existem 5 blocos principais: Uma unidade de controlo, dois módulos reconguráveis ( Variable Instruction Set Processor Reprogramable Fluxogram ) e dois programadores das unidades reconguráveis. e A descrição destes blocos será feita nas secções seguintes. 4.4.2 Variable Instruction Set Processor Este bloco consiste numa máquina de estados nitosreprogramável, um datapath , um componente de controlo e um conversor paralelo-serie.O macro - esquema seguinte ilustra este bloco: Figura 4.9: Variable Instruction Set Processor Parallel to serial Converter - Permite receber um determinado vector e transformá-lo numa sequência série. Este bloco é muito importante, uma vez que, se a informação entrasse na RFSM em formato paralelo o número de estados necessários seria enorme. CAPÍTULO 4. 56 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL RFSM (unidade de controlo principal) - Permite executar um uxo de operações (reprogramável) de forma a concretizar a operação pretendida. Para a execução de uma determinada operação (instrução) as saídas da RFSM, encontramse ligadas a unidades de execução do datapath,de forma a efectuar algumas ope- rações básicas tais como: contar, somar etc. Control Unit - Permite efectuar algumas operações de controlo adicionais sendo estas controladas pela saída da RFSM (unidade de controlo principal). Recebe igualmente o resultado da execução de uma instrução e reencaminha-a para o exterior. Datapath - Permite a implementação das operações aritméticas que levam a um resultado. O controlo de quais os blocos deste que deverão ser adicionados, encaminhando assim o resultado por um caminho especíco é feito através das saídas da RFSM. A gura seguinte apresenta os diversos componentes de uma forma mais detalhada que constituem o processador desenvolvido. É de notar que o componente Parallel to serial Converter Control Unit e se encontram apresentados na gura 4.10 como um único componente. Figura 4.10: Variable Instruction Set Processor Observando a gura datapath, podemos distinguir dois conjuntos de blocos: dades de Controlo e Unidades de Execução. Uni- 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL57 As Unidades de Controlo, tal como o nome indica, são componentes que permitem a correcta execução da operação pretendida. Estas controlam sinais para que a saída da operação seja encaminhada correctamente. Pelo diagrama anterior, verica-se a existência de três unidades de controlo: Controlo Unit/Parallel to Serial , Master Contro l e RFSM. As unidades de execução são os componentes que permitem efectuar uma determinada operação aritmética. Estes são: Counter/Comparator , Max Detector e Buer/Shifter . O Buer que se encontra entre o Counter/Comparator Max Detecto r, não se encontra englobado em alguma destas categorias. No entanto, este é um elemento essencial para o correcto funcionamento do datapath. A sua fune ção será discutida mais à frente. Na Figura 4.10, é de notar que os componentes com moldagem a cor vermelha são actualizados na transição descendente do relógio e os componentes de cor preta na transição ascendente do relógio. Todos os restantes componentes, excepto a RFSM que actualiza o seu estado na transição descendente, não são actualizados com o sinal de relógio. Analisemos então o comportamento de cada um dos componentes apresentados. 4.4.2.1 Unidades de Execução Counter/Comparator Este bloco, tal como o nome indica, permite contar e comparar valores. Este componente possui cinco entradas: Y1 Y1, Y2, MasterEnable , Input2 e Clock . - Este sinal provêm da RFSM e permite fazer um Reset ao contador isto é, colocar o contador a zero. É activo alto. Y2 - Este sinal provém igualmente da RFSM e permite activar a contagem, isto é, quando este sinal se encontra com o valor lógico '1', na transiçãodescendente do relógio o contador interno incrementa uma unidade. MasterEnable - Este sinal provêm do bloco encontra a '1', o bloco Counter/Comparator Master Control. Quando este se encontra-se activo, caso contrário, inactivo, isto é, mesmo que os restantes sinais de entrada variem, o componente não actualiza os seus valores. Input2 Clock - Simples sinal de relógio. Neste componente, o valor de saída é actualizado - Este sinal constitui um valor de comparação. na transição descendente. CAPÍTULO 4. 58 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Este apresenta três saídas: Comparator Flag . Valor do Contador, Zeros Comparator Flag e Ones Valor do Contador - Possui o valor actual do contador. Este valor é actualizado na transição descendente do relógio. Zeros Comparator Flag - Este sinal indica se o valor actual da subtracção do tamanho dos vectores a analisar e o contador possui o valor indicado pela entrada Input2, tomando o valor '1' em caso armativo. Ones Comparator Flag - Este sinal indica se o valor actual do contador é igual ao indicado pela entrada Input2. Max Detector Este bloco permite detectar qual o vector máximo que foi detectado desde o último reset. Este possui apenas duas entradas: Y4 - Permite efectuar um reset Y4 e Clock: do valor de máximo. Este sinal provém da máquina de estados nitos reprogramável. Clock - Sinal de relógio. Este componente é actualizado na transição descendente do relógio. Este apresenta apenas uma saída: Valor de Máximo. Esta indica o máximo valor encontrado na sua entrada que, no nosso caso, é o valor proveniente do contador. Buer/Shifter Para algumas operações pode ser mais fácil utilizar directamente a saída da RFSM. Buer/Shifter. Este, permite passar a informação das saídas Y5 e Y6 directamente para a saída (Buer ), através da concatenação com zeros, Para isso, foi criado o bloco de forma a obter um vector com o tamanho da saída genérica ou então ir fazendo um shifter ), para que os sucessivos valores fornecidos pela saída Y5 sejam convertidos shift ( de informação em série para paralelo. Este bloco possuiu sete entradas: Y1, Y5, Y6, Y17, Y18, Clock e MasterEnable: Y1 - Este sinal proveniente da RFSM quando com o valor lógico '1' coloca a saída a zero, sendo todos os valores recebidos até ao instante descartados. Y5, Y6 - Sinais que provêm da RFSM que irão ser colocados na saída (Y5 e Y6) ou shiftados (apenas Y5). 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL59 Y17 - Sinal que, tomando o valor lógico '1', permite efectuar uma das duas operações. Y18 - Permite seleccionar a operação desejada. Quando como o valor lógico '1' a operação Shift uma função de Clock é seleccionada. Caso contrário, a operação escolhida desempenha Buer. - Sinal de relógio. Os sinais de saída são actualizados na transição des- cendente do relógio. MasterEnable - Possui a mesma função que para o bloco Counter/Comparator. Provêm do bloco Master Control e só quando este se encontra activo os sinais internos são actualizados Em relação às saídas, este apenas possuí uma saída contendo o valor do vector em que se encontra armazenada a informação. Este vector de saída pode conter informação shiftada 4.4.2.2 ou, simplesmente, os valores de Y5 e Y6 concatenado com zeros. Unidades de Controlo As unidades de controlo permitem controlar o uxo de operações no foi referido anteriormente, este é constituído por três componentes: datapath. Como RFSM, Control Unit / Parallel to Serial e Master Control. O bloco RFSM já foi explicado em secção anterior, sendo apenas de realçar que este possuí possui 16 entradas e 20 saídas. Control Unit / Parallel to Serial Esta unidade permite passar a informação recebida em paralelo para um formato série. A operação tem de ser executada para diminuir o número de estados necessários na RFSM e o número de entradas nesta. Deste modo, a informação que entra na máquina de estados nitos terá de ser controlada para que não seja enviada informação incorrecta. Assim, este bloco possui igualmente uma função de controlo. Este possui várias entradas que permitem escolher como a informação recebida deve ser tratada. escolha é efectuada pela RFSM. Esta CAPÍTULO 4. 60 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Figura 4.11: Componente Control Unit / Parallel to Serial Observando a Figura 4.11, verica-se que este possui onze entradas: Input 2 , Don't Care Pos 1 , Don't Care Pos 2 , Multiplexer , Clock e Reset : Y11, Y12, Y3, Input 1 , Y19, Out Input 1 - Vector de Entrada. Possui um tamanho genérico e dados a analisar; Input 2 - Vector de Entrada. Possui um tamanho genérico podendo ter dados ou informações para efectuar operações de comparação; Don't Care Pos 1 Input 1 e indica em que posições deste se encontram os Don't Care Pos 2 Input 2 Y11 - Vector de Entrada. Possui um tamanho igual ao vector dont't cares ; - Vector de Entrada. Possui um tamanho igual ao vector e indica em que posições deste se encontram os dont't cares ; - Permite informar este bloco se o vector de entrada 1 e 2 devem ser consi- derados como vectores binários ou ternários. Caso este sinal se encontre com o valor lógico '0', os vectores de entrada são considerados binários, caso contrário, ternários; Y12 - Uma vez que o valor representa don't care don't care pode ser '1' ou '0' e o simbolo '-' ,o que em VHDL não é bem interpretado pelo sintetizador da Xilinx, foi considerado um sinal extra que permita escolher em caso de don't care (indicado pelo vector Don't Care Pos 1 ou Don't Care Pos 2) se o valor desse vector deve ser considerado como '0' ou como um '1'. Exemplo: Vector1= 1-10 e Y12=0 então o vector que irá entrar na RFSM será 1010. Caso Y12=1 então o vector de saída será 1110. 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL61 Y3 2. - Este sinal permite actualizar o valor de saída dos sinais Output 1 e Output Quando o sinal Y3 se encontra a '1', o próximo valor do vector de entrada é colocado nos sinais de saída. Este sinal é controlado pela RFSM. Y19 - Este sinal é muito importante quando em operações entre dois vectores ternários. Este quando possuindo o valor lógico '1' e encontrado um valor don't care num dos vectores de entrada o valor de Y12 é colocado não apenas no vector que possui o don't care, mas sim em ambos os vectores de entrada. Exemplo: Vector 1: 1-1 Vector 2: 010, Y11='1', Y12='0' e Y19='1' então o vector 1 cará 101 e o vector 2 000. Out Multiplexer - Este sinal possui o valor de saída da operação e é depois reencaminhado para a saída do processador desenvolvido. Não é ligado directamente à saída do processador, uma vez que este vai alterando ao longo da execução sendo desta forma apenas enviado quando todo o processamento termina. Clock - Sinal de Relógio. Os sinais de saída são actualizados na transição des- cendente do relógio; Reset - Sinal de Reset. Quando activo, os valores de saída são colocados a zero. Este componente possui 19 saídas: e Out : Output Output 1 , Output 2 , X3...X16, Count , Done 1 - Possui um dos bits do vector de entrada 1. Este valor é actualizado na transição descendente do relógio e quando a entrada Y3 se encontra com o valor lógico '1'. Output 2 - Possui um dos bits do vector de entrada 2. Este valor é actualizado na transição descendente do relógio e quando a entrada Y3 se encontra com o valor lógico '1'. X3...X16 - Constituem as restantes entradas para RFSM. São igualmente actu- alizadas na transição descendente e quando a entrada Y3 se encontra a '1'; Count - Esta saída possui o número de bits dos vectores de entrada que já foram enviados para a RFSM. Esta informação será enviada para o bloco Control ; Master Done Este toma o valor lógico `1' quando o resultado da operação pretendida se encontra disponivél. CAPÍTULO 4. 62 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Out - Este barramento possui a informação nal da execução de uma determinada operação. Os sinais x3 e x4 são utilizados para indicar à RFSM que uma determinada amostra don't care ou não. Caso o valor x3 seja '1' então o valor que se encontra na saída output 1 deverá ser considerado como don't care. Caso o valor x4 seja '1' então o valor que se encontra na saída output 2 deverá ser considerado como don't care. possui o valor Master Control Este componente, através da informação recebida pelo bloco Master Enable utilizado Count, Clock e Reset : valor do sinal entrada: Count Control Unit, por alguns componentes. decide o Possuí 3 sinais de - Informação relativa ao número de elementos dos vectores de entrada que já foram enviados para a RFSM; Clock - Sinal de Relógio. Este componente altera o seu sinal de saída na transição ascendente do relógio; Reset - Sinal de Reset. A saída (Master Enable) é actualizada na transição ascendente do relógio e serve para activar/desactivar a actualização de valores de alguns componentes. 4.4.2.3 Buer O componente Bue r possui uma importância elevada no funcionamento do datapath. Observando a Figura 4.10, verica-se que existem dois blocos que se encontram ligados, possuindo ambos uma actualização dos seus valores nas transições descendentes. Estes são: Counter/Comparator e Max Detector. Assim, se ambos os componentes fossem ligados directamente, iria causar problemas no bloco Max Detector, uma vez que, a sua saída (que depende da entrada) iria estar a ser actualizada ao mesmo tempo que a sua entrada iria ser alterada, levando a um estado de instabilidade. este problema, a solução é a utilização de um buer Para resolver que actualize as suas saídas na transição ascendente do relógio. Assim, o valor de saída do bloco Counter/Comparator será actualizado na transição descendente, sendo guardado no buer na transição ascendente. Detector Na transição descendente seguinte, este valor entra estável no bloco pelo que a ambiguidade é eliminada. Max 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL63 Figura 4.12: Buer Esta solução leva a um atraso de um ciclo de relógio até que a operação seja completada. Este facto tem de ser considerado pelo bloco Master Control por forma a não desactivar componentes que ainda estejam à espera de informação útil. 4.4.2.4 Multiplexers e portas lógicas Para terminar a explicação da gura 4.10 apenas falta falar sobre os elementos não dependentes do sinal de Clock: Multiplexers e uma porta lógica AND. Os multiplexers são controlados pelas saídas da RFSM, conseguindo-se, desta forma, encaminhar o sinal para os diversos blocos de processamento necessários para a execução da instrução. Um dos Multiplexers permite seleccionar uma das entradas para a RFSM (MUX 2-1) e o outro seleccionar a saída do processador. Em relação às portas lógicas, apenas foi utilizado um AND que permite fazer o 'e' lógico entre as duas primeiras entradas para a RFSM. O resultado desta operação poderá, conforme o valor de Y13, ser escolhido para segunda entrada da RFSM. 4.4.3 Carregamento de Instruções O carregamento de uma nova instrução é feito através da reprogramação da unidade de controlo, ou seja, da máquina de estados nitos reprogramável. Esta é uma máquina extremamente poderosa, uma vez que consegue desempenhar funções diferentes apenas por alteração de valores lógicos `0' e `1'. No entanto, todos os algoritmos que queremos executar terão de ser bem pensados e enviados de seguida para RFSM. Sendo assim, deve ser possível a comunicação com esta para a sua posterior reprogramação. dispositivo externo que permite esta operação designou-se de Ao Programador. A gura seguinte, mostra um macro - esquema da ligação deste ao processador desenvolvido: 64 CAPÍTULO 4. Figura 4.13: PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Macro - Esquema da ligação do programador ao processador com um conjunto de instruções variável Através da gura anterior, podemos observar que o programador envia os dados necessários à reprogramação. Este barramento inclui sinais que servem para escrever numa memória especíca dentro da RFSM, bem como os dados desta. O sinal de reset da RFSM encontra-se ligado ao programador, uma vez que, no nal da fase de Clock Clock que programação, a máquina de estados deverá voltar ao estado inicial. O sinal de que entra no módulo RFSM encontra-se negado relativamente ao sinal de entra no programador. Isto acontece para que os dados que se encontram no barramento DATA TO REPROGRAM já se encontrem estáveis quando da transição ascendente do clock do módulo RFSM, sendo feita uma correcta reprogramação. Os restantes sinais são explicados a seguir. Programador Analisemos agora a estrutura interna do programador. Esta pode ser observada na Figura 4.14. Figura 4.14: Estrutura do programador 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL65 Este pode ser dividido em dois sub-componentes: Através do componente Controller e Memória ROM. Controller, é possível endereçar a posição de memória (Me- mória ROM) onde se encontra a informação sobre a instrução pretendida, sendo esta carregada de seguida para a memória respectiva dentro da unidade de controlo. A selecção da instrução é feita através do barramento O sinal de PROGRAM INSTRUCTION SELECT. serve para fazer o pedido de reprogramação da unidade de RESET sinais DATA controlo. Quando o processo de reprogramação estiver terminado, o sinal é activado, colocando, deste modo, a RFSM no seu estado inicial. e Os ADRESS TO WRITE encontram-se na Figura 4.13 representados pelo barramento DATA TO REPROGRAM. A informação na memória (Memória ROM) encontra-se estruturada para que apenas uma das memórias da RFSM se encontre a ser escrita num determinado instante de tempo. O seu formato encontra-se representado na gura seguinte: Figura 4.15: Trama de reprogramação Observando a gura anterior, verica-se que existe 20 bits de dados. Este valor tem de coincidir com o tamanho máximo das palavras encontrado nas memórias da RFSM. No nosso caso, a memória com a palavra de tamanho máximo é a memória de saída (Output RAM) com 20 saídas, pelo que o número de bits do campo Data terá de possui 20 bits. De seguida, encontram-se os bits que activam a memória para o qual se vai escrever a informação do campo Data. Vamos observar um exemplo para uma melhor compreensão: Considere que o barramento com o valor 0 e que o componente ADRESS TO WRITE se encontra CONTROLLER se encontra a endereçar o seguinte conteúdo de memória. Figura 4.16: Exemplo de uma trama de reprogramação Uma vez que o último bit se encontra com o valor lógico `1', a escrita na memória de saída será activada. Assim, os dados 0000000000000000001 serão escritos no endereço 0 da memória de saída. 66 CAPÍTULO 4. PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL 4.4.4 Fluxograma reprogramável Este bloco tem como objectivo através de uma determinada entrada seleccionar a instrução de que deverá ser executada. Este vai permitir uma maior abstracção de camadas superior. Para observar este facto, vamos considerar o seguinte uxograma: Figura 4.17: Exemplo de Fluxograma No exemplo apresentado, representaram-se as instruções pelas siglas Z1 até Z8. Vamos considerar, como exemplo, que temos ao dispor as operações apresentadas na caixa a vermelho. Depois da reprogramação, vamos supor que a correspondência de cada uma das operações é a seguinte: Tabela 4.1: Correspondência Operação - Módulo Observando a gura, vemos que se o vector de entrada for 000, a instrução Z1 será escolhida sendo, desta forma, executada a operação Contar número de uns de um vector binário. Este vector de entrada, encontra-se representado na Figura 4.8 como sendo o sinal In_Vect. Imaginemos agora que, devido a uma posterior reprogramação, a correspondência passou a ser a seguinte: 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL67 Tabela 4.2: Correspondência Operação - Módulo após reprogramação Deste modo, segundo o uxograma anterior, para executar a operação Contar número de uns de um vector binário, seria necessário introduzir como vector de entrada 001. Deste modo, exigia-se que a entidade que chama o processador soubesse à priori que a correspondência teria mudado. Assim, para que a haja uma abstracção completa de camadas superior, verica-se a necessidade da reprogramação do uxograma. Através desta, apesar da mudança da correspondência, podemos recongurar o uxograma para que o módulo a ser chamado quando o vector de entrada In_Vect for 000 continue a ser contar número de uns de um vector binário. Esta é a principal razão para a construção desta entidade reprogramável. Procedamos, de seguida, à explicação da construção deste módulo. Implementação A implementação desta entidade é em tudo semelhante à unidade de controlo do processador com um conjunto de instruções variável. Neste caso, apenas é necessário calcular o módulo que deverá ser activado num determinado instante de tempo. Este cálculo pode ser feito directamente sobre os estados da máquina de estados nitos reprogramável e, consoante o estado nal desta, o valor da memória de saída irá conter a informação sobre qual a instrução a executar. Um exemplo encontra-se na Figura 4.18. Figura 4.18: Cálculo da instrução a executar CAPÍTULO 4. 68 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Observando a gura anterior verica-se que neste exemplo se o estado nal obtido coincidir com a7, a instrução que irá ser executada será a indicada por Z1. Assim no endereço 7 da memória de saída o conteúdo terá de ser 0001 (Caso a memória seja de 4 bits). Existem duas implementações possíveis para elaborar esta entidade. Ambas consistem no modelo em cascata sendo que a única diferença é a utilização ou não de States. Dummy Existem vantagens e desvantagens de ambas as implementações: RFSM s/ Dummy States Vantagens Exige um menor número de memórias RAM e multiplexers; Módulo de reprogramação mais simples; Trama de reprogramação pequena; Menor informação necessária para reprogramação; Desvantagens Maior tempo de processamento; Num ciclo de relógio apenas é possível a análise de uma entrada; RFSM c/ Dummy States Vantagens Cálculo do estado nal possível em apenas um ciclo de relógio (3 andares para uma entrada In_Vect de 3 bits); Possível a análise de várias entradas em apenas um ciclo de relógio; Desvantagens Trama de reprogramação maior relativamente ao caso anterior; Módulo de reprogramação mais complexo; Maior informação necessária para reprogramação; 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL69 Tendo em conta que as dimensões desta máquina de estados são relativamente pequenas, a diculdade de todos os componentes envolvidos na reprogramação não terão uma grande complexidade. Assim, analisando as vantagens e desvantagens de ambas as implementações, vericamos que as vantagens da primeira opção (S/ Dummy States) apenas se restringem à menor complexidade dos elementos em causa. Deste modo, como a complexidade do sistema não é elevada, optou-se pela utilização da segunda implementação. Esta permite uma maior rapidez no cálculo do módulo que deverá ser escolhido, uma vez que se utilizarmos uma cascata com o mesmo número de entradas, conseguimos obter o resultado nal em apenas um ciclo de relógio. Foi utilizada uma cascata de três andares, permitindo assim escolher entre 8 módulos, tal como representado na Figura 4.18. Reprogramação do uxograma Como no caso do bloco Variable Instruction Set Processor, terá de existir uma entidade que efectue a reprogramação da máquina de estados nitos reprogramável. A ligação deste módulo com o uxograma reprogramável é em tudo semelhante ao apresentado na Figura 4.13. Um esquema deste encontra-se representado na gura seguinte. Figura 4.19: Macro - Esquema da reprogramação do uxograma Analisando o esquema da Figura 4.19, verica-se a sua semelhança com o da Figura 4.13. A única diferença será nas tramas de reprogramação, uma vez que serão utilizados 3 andares na máquina de estados reprogramável e a entrada que passa a designar-se Fluxogram Select. Instruction Select, Esta entrada irá permitir escolher um dos uxogramas que se encontra retidos em memória. Será, de seguida, analisado o bloco Fluxogram Programmer. Fluxogram Programmer A estrutura do programador é em tudo idêntica ao programador do bloco Instruction Set Processor. A Figura 4.20 apresenta esta estrutura: Variable 70 CAPÍTULO 4. PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Figura 4.20: Programador do Fluxograma Observando a gura anterior, verica-se imediatamente a sua semelhança com a Figura 4.14. No entanto, nesta verica-se a existência de um sinal de Done. A sua existência irá permitir saber quando a operação do cálculo do módulo a executar se encontra completa. Este sinal pode ser implementado directamente no programador, uma vez que sabemos à partida quantos ciclos de relógio demora o cálculo da instrução a executar. No nosso caso, este demora apenas um ciclo de relógio após a reprogramação da máquina de estados nitos. Vamos agora analisar a estrutura da trama de reprogramação do uxograma. Esta encontra-se representada na gura seguinte: Figura 4.21: Trama de reprogramação do uxograma Observando esta, facilmente se verica a sua semelhança com trama de reprogramação da unidade de controlo do processador desenvolvido. Esta, no entanto, possui mais dois campos: WE LRAM3 e WE MRAM 3. Estes dois campos dizem respeito ao terceiro andar da máquina de estados reprogramável. A segunda diferença em relação à gura Figura 4.15 é o número de bits do campo Data. Esta contém apenas 4 Bits, sendo o suciente se observarmos a Figura 4.17. 4.4. PROCESSADOR COMBINATÓRIO COM UM INSTRUCTION SET VARIÁVEL71 4.4.5 Data Control Unit Depois de uma compreensão de como funciona o processador com um conjunto de instruções variável e como é possível escolher a instrução pretendida através de um uxograma reprogramável, estamos em condições de interligar os blocos apresentados até este momento. Para tal, terá de existir uma entidade superior a todos estes blocos que controle o uxo de informação entre eles, bem como a sincronização de operações (ex: uma instrução não poderá iniciar sem que o cálculo efectuado pelo uxograma reprogramável se encontre terminado). A esta unidade designaremos de Unit Data Control e encontra-se representada no macro esquema da Figura4.8. Podemos então sintetizar as funções que esta unidade deverá desempenhar: Transferência de informação de entrada para os componentes de nível mais baixo; Inicialização do cálculo da instrução que deverá ser executada; Transferência dos resultados do bloco Reprogramable Fluxogram para o bloco Variable Instruction Set Processor ; Controlo dos dados de saída resultantes da execução de uma instrução; Depois de denido as funções desta unidade de controlo, é possível a construção de um diagrama de uxo de sinal que nos permitira elaborar de uma forma mais simples um código para uma linguagem de programação. Este diagrama encontra-se representado na gura seguinte: Figura 4.22: Diagrama de Fluxo de Sinal da Unidade de Controlo Central CAPÍTULO 4. 72 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Para a implementação desta unidade de controlo utilizou-se uma máquina de estados nitos simples, não possuindo características reconguráveis, uma vez que o seu diagrama é constante para qualquer que seja a operação. Vamos proceder então à explicação do diagrama anterior: Esta máquina permanece no estado Idle (Desocupado) até que seja feito um pedido exterior. Este pedido é feito através do sinal Request. Após este, haverá uma transição de estado. Nesta transição, o sinal entrada de Program Program ux tomará o valor `1'. Este sinal liga à do programador do uxograma. Assim, este sinal irá desencadear a reprogramação da máquina de estados nitos relativa ao uxograma. Depois de a reprogramação ter terminado, é feita a execução do algoritmo no uxograma. A unidade de controlo ca então à espera que o sinal Flux Done, vindo do programador do uxograma, tome o valor lógico '1'. Este indica que o cálculo da instrução a executar se encontra terminado, sendo já possível a execução da mesma. De seguida a máquina de estados de controlo transita para o estado Durante a transição de estado, o sinal PROGRAM RFSM Activate RFSM. que se encontra ligado ao programador da unidade de controlo passa para o valor lógico `1'. Esta mudança irá desencadear uma reprogramação da unidade de controlo do processador sendo actualizada com a informação da instrução pretendida. Após esta, a máquina de estados Wait Result, cando neste à espera que o resultado da instrução Quando este terminar, o sinal Result Done irá tomar o valor lógico '1'. Este transita para o estado termine. indica que o resultado da operação pretendida já se encontra disponível. Para terminar, a unidade de controlo transita para o estado nesta transição um sinal Done Done State, em que ca com o valor lógico '1', indicando assim às camadas superiores que o resultado da operação pretendida já se encontra disponível. Estando neste momento todas as operações terminadas, a unidade de controlo transita novamente para o estado 4.4.6 Idle, cando neste até que um novo pedido seja efectuado. Instruction Set Desenvolvido Como referido anteriormente, visto o datapath ser xo, este permite a execução de um número limitado de instruções, podendo estas ser carregadas conforme a necessidade. As seguintes instruções foram desenvolvidas: Contar o número de uns de um vector binário; Contar o número de uns de um vector ternário; Contar o número de zeros de um vector ternário; 4.5. PROCESSADOR DESENVOLVIDO PARA CO-PROCESSAMENTO Contar o número máximo consecutivo de uns de um vector binário; Contar o número máximo consecutivo de uns de um vector ternário; Contar o número máximo consecutivo de zeros de um vector ternário; Vericar se um vector ternário apenas contém valores Vericar se um vector contém apenas uns/zeros; Vericar se um vector não contém apenas uns/zeros; Vericar se um vector contém K elementos a um/zero; Vericar a expressão Executar a operação vectori or vectorj; Vericar se dois vectores ternários são ortogonais; 73 dont care ; vectori and vectorj = vectorj; 4.5 Processador Desenvolvido para Co-processamento O processador desenvolvido não permite a execução de um programa sequencial ao qual estamos mais frequentemente habituados. Este serve, deste modo, para efectuar co-processamento, isto é, é útil para uma ligação a um processador de uso geral, sendo, a partir deste, chamado para efectuar operações reduzindo a carga no processador principal. Para demonstrar o funcionamento do processador desenvolvido, este foi acoplado a um processador de uso geral simples desenvolvido na universidade de Rostock. [53] Para a demonstração do processador desenvolvido, foram elaborados dois algoritmos de pesquisa combinatória: cobertura de matriz e satisfação booleana. Os algoritmos optimizados para estes problemas podem ser encontrados em [29] e [54]. Estrutura do Sistema Computacional de uso geral utilizado A estrutura do sistema base utilizado encontra-se representada na gura seguinte: 74 CAPÍTULO 4. PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Figura 4.23: Estrutura do processador base de uso geral utilizado Este sistema apresenta 5 componentes base: Processador, Arbitro do barra- mento, memória para o programa, memória para dados e um bloco I/O. Observando a gura 4.23, verica-se a existência de um barramento partilhado no qual se ligam a memória que contém o programa, memória para dados e bloco de I/O, sendo o acesso ao barramento gerido por um Árbitro. Este barramento possui 8 bits de dados e 16 para endereço. O acesso aos diferentes componentes encontra-se mapeado, sendo a gama [0x0000;0x3FFF] reservada à memória do programa, [0x4000;0x7FFF] para a memória de dados e [0x8000;0xFFFF] para dispositivos I/O. Visto existir mais do que um dispositivo I/O, esta gama encontra-se subdividida em várias sub-gamas conforme o dispositivo requerido. Processador Base O processador base possuí uma estrutura muito simples. Este incorpora um registo de uso geral (acumulador), o qual serve para efectuar cálculos intermédios, um set instruction com instruções de salto condicional, salto incondicional e instruções aritméticas. Este encontra-se em anexo. O uxo de operações do processador é muito simples. Possui 4 estados de execução: Fetch Op, Fetch Addr High, Fetch Addr Low e Execute. 4.5. PROCESSADOR DESENVOLVIDO PARA CO-PROCESSAMENTO 75 Figura 4.24: Diagrama de execução do processador O processador começa com o habitual fetch, no qual é identicada a operação a executar através do seu opcode. Neste, existem instruções com tamanho entre 1 e 3 bytes. bytes apenas possuem dois estados de execução: fetch sendo o segundo byte adquirido no estado execute. Nas instruções de 3 As instruções com 1 ou 2 op e execute, bytes, o uxo de execução passa por dois estados adicionais: Fetch Addr High e Fetch Addr Low, nos quais são adquiridos os valores dos 2º e 3º bytes , passando depois para a fase de execução. Alteração do Sistema Computacional de uso geral De forma a conseguir executar os algoritmos propostos para demonstração ao sistema de uso geral apresentado, foram feitas algumas alterações. Visto o número de registos base ser muito reduzido, começou-se pela adição de novos registos (8 bits) de uso geral (16 ao todo). De seguida, foi adicionado uma stack, permitindo, desta forma, guardar os valores dos registos, de modo a encontrar a melhor solução para o problema combinatório. Tendo como objectivo a execução de algoritmos sobre matrizes binárias e ternárias. Foram adicionadas duas memórias extra, contendo uma delas, os valores da matriz e a segunda indicando quais destes valores devem ser considerados como care. don't Por m, foi adicionado um registo que possuí o valor da solução num determinado instante. De forma a interagir com estes novos elementos, foram adicionadas novas instruções ao processador base (ver anexo), sendo igualmente adicionada um novo estado do uxo de execução permitindo instruções até 4 bytes: get_last_byte. 76 CAPÍTULO 4. PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Ligação ao processador combinatório desenvolvido Depois da adição de novos elementos ao processador, foi feita a ligação ao processador combinatório desenvolvido. Existem várias formas de ligação deste ao processador de uso geral (designaremos a partir deste ponto o processador combinatório por coprocessador): Por mapeamento, isto é, ligar o co-processador ao barramento de dados/endereços existente. Ligação directa, isto é, criar uma ligação directa, sem mais nenhum interveni- ente entre o processador e o co-processador; Ligação por I/O, isto é, ligar o co-processador ao bloco I/O e considerando-o como um dispositivo I/O. Foi utilizada uma ligação directa para conexão entre os dois componentes, permitindo desta forma uma interface mais simples entre processadores. A gura seguinte mostra a ligação feita, bem como os novos componentes incorporados no processador de uso geral. Figura 4.25: Ligação ao processador programável e novos componentes do processador de uso geral Para além dos componentes adicionados acima referidos, foram incorporados no processador mais 7 registos que se encontram designados na gura anterior como rands to Co-Processor. Ope- Estes registos são escritos através de instruções próprias e 4.6. RESULTADOS E DISCUSSÃO 77 servem para indicar quando na chamada ao co-processador qual o uxograma, operação e operandos (vectores binários e ternários) que irão ser analisados, sendo estes valores automaticamente direccionados para as entradas do co-processador. Quando da escrita de todos os registos necessários, é necessário pedir ao co-processador para que processe a informação. Isso é feito pela instrucção Reg recongInstr,REG , em que é o registo para o qual o resultado da operação deverá ser guardado. Quando car- regada esta instrução da memória do programa, o sinal é activado. request para o co-processador Quando feito este pedido, o processador ca à espera que o sinal tome o valor lógico 1. Quando tal acontece, o valor indicado pelo sinal e guardado num dos 7 registos do bloco Operands to Co-Processor, result Busy é lido bem como no re- REG ). Assim, o processador bloqueia quando existe um gisto indicado pela instrução ( pedido ao co-processador, estando, deste modo, a gastar recursos desnecessariamente. No entanto, não é objectivo deste trabalho a optimização mas sim demonstração, pelo que será mantida esta política. 4.6 Resultados e Discussão Para a demonstração do processador desenvolvido, este foi interligado a um processador de uso geral, o qual foi modicado de forma a permitir a execução de algoritmos de pesquisa combinatória. De seguida, são apresentados alguns resultados obtidos, principalmente a nível de ocupação de recursos dos diversos componentes. Foram desenvolvidos, para demonstração, os seguintes algoritmos de pesquisa combinatória: satisfação booleana e cobertura de matriz. De forma, para uma melhor percepção do sistema algumas informações foram apresentadas no ecrã VGA. Toda a interface com o monitor VGA e teclado pode ser encontrada em [55]. São apresentados agora alguns resultados no que diz respeito à ocupação da FPGA a nível de recursos. 78 CAPÍTULO 4. PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Unidade de controlo reprogramável (RFSM) Tabela 4.3: Utilização de recursos da unidade de controlo reprogramável A tabela 4.5, apresenta um resumo dos recursos no que diz respeito à unidade de controlo do processador com um instruction set variável, construída a partir de uma máquina de estados nitos reprogramável. Observando os resultados anteriores, é possível conrmar as expectativas previstas no que diz respeito à ocupação de recursos da unidade de controlo, vericando-se que estes são muito reduzidos, levando a uma grande motivação para o seu uso. Foi, assim, conrmado uma das grandes vantagens da utilização de um processador com um set de instruçõe s variáveis. É de notar igual- mente que este trabalho não teve como objectivo a optimização dos componentes, pelo que este pode ainda ser melhorado, diminuindo ainda mais os recursos ocupados. É de salientar que estes dependem do número de entradas, saídas, estados e da quantidade de andares que compõe a RFSM. No entanto, os valores destes parâmetros utilizados já são signicativos. Fluxograma reprogramável (Reprogrammable Fluxogram) A tabela seguinte mostra a utilização de recursos do componente gram : recongurable Fluxo- 4.6. RESULTADOS E DISCUSSÃO 79 Tabela 4.4: Utilização de recursos do uxograma reprogramável Tal como foi referido anteriormente, este componente é igualmente baseado em máquinas de estados nitos reconguráveis. Observando a tabela apresentada, é possível vericar a semelhança de resultados com a anterior. É de salientar que este possuí um número de estados, saídas e entradas menores que o componente anterior mas, devido ao maior número de andares, possuí uma ocupação comparativamente ao anterior semelhante. Processador com instruction set variável A tabela seguinte mostra a ocupação de recursos utilizada pelo processador construído: Tabela 4.5: Utilização de recursos do processador com instruction set variável A tabela 4.5, apresenta os resultados dos diversos componentes que constituem o processador desenvolvido. Este divide-se em dois componentes principais: Fluxogram e Processor, vistos já anteriormente. Em relação ao primeiro, é possível vericar que o seu tamanho depende muito do programador (FLUX_ROM + Flux_Controller) mais especialmente da memória ROM que contêm as informações sobre os diversos uxogramas. O tamanho ocupado por esta memória, deve-se ao facto de ser implementado CAPÍTULO 4. 80 PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL recorrendo a memória distribuída, isto é, a memória encontra-se implementada em blocos CLB. Uma forma de reduzir este tamanho, consiste na utilização de block RAMs o que se pretende fazer em projectos futuros. Em relação ao componente Flux_Controller este possuí um tamanho reduzido. Em relação ao componente Processor, as conclusões são em tudo idênticas ao componente anterior. No entanto, é de notar que o datapath construído ocupa relativamente pouco, sendo, no entanto, possível uma futura optimização bem como da memória ROM que possuí as informações do instruction set necessário. Sistema constítuido pelos dois processadores (combinatório e uso geral) bem como restantes componentes A tabela seguinte, apresenta a utilização de recursos considerando o sistema representado na gura 4.25. Tabela 4.6: Utilização de recursos do sistema constítuido pelos dois processadores (combinatório e uso geral) bem como restantes componentes Observando a tabela é possível vericar tal como seria de esperar os componentes que ocupam mais espaço na FPGA são os processadores. No entanto estes podem ser bastante optimizados. Em relação ao processador com um instruction set variavel já foram apresentadas as razões da ocupação desnecessária do espaço. Em relação ao processador de uso geral (Proc_i) este usa extensivamente variáveis, bem como a utilização de ciclos for, provocando inevitavelmente um aumento brusco dos recursos utilizados. Este sistemas foi implementado na placa de desenvolvimento Celoxica RC10, o qual incorpora uma FPGA Spartan 3 XC3S1500L. Por forma a uma melhor percepção dos recursos utilizados a tabela seguinte mostra em percentagem a quantidade de recursos desta FPGA utilizado pelos principais componentes que compõem o sistema desenvolvido: 4.6. RESULTADOS E DISCUSSÃO 81 Tabela 4.7: Utilização em percentagem dos recursos dos principais componentes Frequência Máxima de operação Através das recentes ferramentas de síntese, é possível hoje saber a frequência máxima de operação que o sistema projectado pode funcionar. Para o sistema em causa, obteve-se uma frequência máxima de 16MHz, o que levou à necessidade da redução da velocidade do relógio. Estas ferramentas, permitem igualmente saber qual o caminho do sistema desde o nível mais alto da hierarquia do projecto que limita a frequência máxima de trabalho. Foi observado que, o caminho envolvia o processador de uso geral. As razões para esta redução são as mesmas apresentadas para o caso da utilização de recursos enunciadas anteriormente. Por forma a vericar o desempenho do processador construído, o processador de uso geral foi retirado, bem como todos os componentes acoplados a este e interface gráca. Depois deste procedimento, a ferramenta de síntese devolveu um valor de aproximadamente 110MHz, ou seja, aproximadamente uma ordem de grandeza superior, indicando mais uma vez que o processador de uso geral necessita de uma grande optimização. Este valor no entanto não reecte a velocidade do processador com um instruction set variável, isto é, uma vez que é necessário re- programar a unidade de controlo, existe uma grande latência entre o pedido para a execução de uma instrução e a própria execução, constituindo deste modo a principal desvantagem da utilização de uma unidade de controlo reprogramável. Para reduzir esta latência, é necessário que a escrita nas memórias que constituem a unidade de controlo seja mais eciente, constituindo deste modo um tema para projectos futuros. 82 CAPÍTULO 4. PROCESSADOR COM UM INSTRUCTION SET VARIÁVEL Capítulo 5 Interacção Remota 5.1 Sumário Neste capítulo será apresentado todo o trabalho realizado em termos de interacção remota. Este começa com a apresentação do módulo CC1101 da Texas Instruments, carac- terísticas mais relevantes e a ligação deste às placas de desenvolvimento. De seguida, são apresentados os pontos mais relevantes que têm de ser contabilizados para o desenvolvimento da interface entre o módulo CC1101 e FPGAs. Para nalizar, é apresentada a interface construída para comunicação remota, ligação desta com o restante sistema computacional e resultados práticos obtidos. 5.2 Introdução Tendo este trabalho como um dos objectivos a interacção remota entre FPGAs, existe a necessidade da utilização de um módulo wireless. Objectivos Para a escolha do módulo wireless é necessário que este consiga atingir os seguintes objectivos: Possibilidade de alteração do set de instruções remotamente, bem como o carregamento de um novo programa assembly. Possibilidade futura da criação de uma rede de processadores, tindo processamento paralelo; 83 permi- CAPÍTULO 5. 84 INTERACÇÃO REMOTA Baixo Custo; Distância Razoável; Taxas de transmissão no mínimo da ordem dos Kbits/s; Ligação Bidireccional; O Transceiver escolhido foi o CC1101 da Texas Instruments. As suas aplicações co- merciais encontram-se na área de sistemas de baixa potência, monitorização industrial e de controlo, automação, redes wireless de sistemas de segurança e redes de sensores; Características do Transceiver CC1101 As características mais relevantes são apresentadas de seguida. Características de desempenho em rádio frequência Sensibilidade que pode chegar aos - 112dBm; 1.2 até 500Kbaud; Corrente de consumo no máximo de 32mA; Taxa de transmissão programável de Frequências 348MHz, Potência de saída até +10dBm; de trabalho: 387-464MHz 300e 779- 928MHz; Características analógicas Vários tipos de modulaçoes:2-FSK, frequência central para um perfeito GFSK, MSK, OOK e ASK; alinhamento com a portadora rece- Frequency Hopping ; bida; Compensação da Sensor de temperatura integrado; Envio de palavras de sincronização, Interface SPI a 4 os, com possibili- automática Características digitais detecção de endereços e correctores dade de modo burst ; de erro feitos automaticamente; Saída digital do indicador RSSI; 5.2. INTRODUÇÃO 85 Largura de banda do ltro de canal programável; FIFO de recepção e transmissão separadas com tamanho de 64Bytes; Indicador digital do indicador CCA; Outras características Wake On Radio ; Funcionalidade O consumo máximo no estado é 400nA; Sleep Tempo de passagem no máximo de 250us do estado Sleep para o estado de recepção ou transmissão; Descrição circuito Um diagrama simplicado do circuito integrado encontra-se na gura 5.1. Figura 5.1: Diagrama de blocos simplicado do circuito integrado CC1101 [24] Sendo este componente um transceiver, é possível distinguir os ramos de recepção e de transmissão. Recepção O sinal recebido começa pela passagem de um amplicador de baixo ruído (LNA). De seguida, este é convertido para uma frequência intermédia, sendo desdobrado nas suas componentes I/Q. Neste ponto, a componente analógica termina com a digitalização do sinal. CAPÍTULO 5. 86 INTERACÇÃO REMOTA Neste sinal digital são, então, feitas algumas operações, tais como desmodulação do sinal, ltragem, correcção de erros etc. Para nalizar, a informação recebida é colocada no buer de recepção, onde é acedida por protocolo SPI. Transmissão A nível do ramo de transmissão, o módulo começa por ir buscar informação ao buer de transmissão. Seguidamente, esta irá passar por alguns blocos de tratamento os quais são responsáveis por adição de bits de sincronização, modulação etc. Depois, são criadas as componentes I/Q da informação, sendo por m amplicadas pelo componente PA. Conguração Tal como foi referido, este CI possui a capacidade para funcionar em diferentes gamas de frequências. Para a realização deste trabalho foi escolhida a gama 387-464MHz, uma vez que nesta gama de frequências a ocupação do espectro é relativamente baixa quando comparada por exemplo com a gama de 2.4GHz, o que nos permite uma transmissão sem que haja grandes problemas a nivel de colisão entre dispositivos. Esta gama de frequências permite igualmente uma distância de transmissão relativamente elevada. De forma a obter o máximo rendimento do transceiver, é necessário fazer uma adaptação deste circuito à antena exterior para esta gama de frequências. O fabricante disponibiliza umas serie de congurações, bem como ferramentas para cálculo dos valores dos componentes electrónicos exteriores. Neste trabalho recorreu-se a um evaluation module, o qual já possui o transceiver CC1101 colocado em circuito impresso, bem como toda a malha de adaptação. Este encontra-se ilustrado na gura seguinte. O seu esquema eléctrico encontra-se em anexo. Figura 5.2: CC1101 Evaluation Module [25] 5.3. LIGAÇÃO 87 5.3 Ligação Uma vez que estes módulos não se encontram embutidos nas placas de desenvolvimento, foi necessária a construção de placas de circuito impresso para fazer a ligação entre o módulo e as placas de desenvolvimento. Uma vez que é necessário implementar o protocolo SPI em FPGA, foi criada igualmente uma placa que serve para fazer possui num buer, degub. Esta permitindo um isolamento em relação ao barramento SPI. Desta forma, é possível visualizar os diversos sinais sem afectar os sinais originais, uma vez que, qualquer ponta de prova possui uma capacidade parasita afectando o tempo de resposta e, deste modo, a transferência em si. Este buer permite igualmente, em caso de um erro humano, como por exemplo má colocação das pontas de prova, não colocar em causa a integridade quer do módulo wireless quer das placas de desenvolvimento. Para efectuar o debug, foi utilizado um logic analyzer o qual permite a visualização simultânea de vários sinais, facilitando a construção da interface. As placas desenvolvidas encontram-se representadas na gura seguinte. O seu esquema eléctrico bem como os desenhos das placas de circuito impresso encontram-se em anexo. Figura 5.3: Hardware utilizado 5.4 Conceitos Fundamentais Protocolo SPI O protocolo SPI foi desenvolvido pela Motorola e é utilizado por uma grande quantidade de fabricantes. A sua ligação constitui uma ligação Full-Duplex permitindo a recepção e transmissão simultaneamente. Os dispositivos envolvidos na transferência comunicam através de uma relação master /slave, sendo da responsabilidade do master iniciar a CAPÍTULO 5. 88 INTERACÇÃO REMOTA transferência, bem como gerar o relógio. A ligação entre dispositivos é feita a 4 os: master ), SCLK (Sinal de Relógio), MISO (Entrada de dados para o slave ) e SS (Selecção do slave ). existir múltiplas linhas de selecção dos slaves. de dados para o MOSI (Entrada Em caso de múltiplos Figura 5.4: Exemplo do protocolo SPI para múltiplos slaves, deverão Slaves [26] polaridade Neste protocolo é necessário denir dois parâmetros designados por do relógio (CPOL) e fase do relógio (CPHA). Estes denem os ancos em que a slaves estes poderão possuir estes parâmetros diferentes pelo que é da responsabilidade do master informação no barramento deve ser lida e alterada. Em caso de múltiplos recongurar-se para acessos diferentes.[26] Interface SPI Tal como já foi referido, o acesso ao CC1101 é feito através do protocolo SPI, sendo, a partir desta, feita toda a conguração do módulo wireless, assim como envio/recepção da informação a transmitir/receber. Este possuí uma conguração a 4 os, ou seja, utiliza 4 sinais: SCLK e CSn. Numa transferência SPI existe sempre um master MOSI, MISO, e um slave, sendo, no nosso caso, o master a FPGA e o slave o CC1101. Deste modo, os sinais de relógio bem como o chip enable devem ser controlados pela FPGA. Figura 5.5: Conguração SPI a 4 os 5.4. CONCEITOS FUNDAMENTAIS 89 Conguração da interface SPI Visto a FPGA ser o transmissão. master, tém a responsabilidade de gerar o relógio necessário à Para a comunicação com o CC1101, é necessário que os dados que se encontram sejam lidos na transição ascendente do relógio, enquanto a sua alteração deve ser feita na transição descendente do mesmo. Figura 5.6: Fase e polaridade do relógio para comunicação com o CC1101[27] Acesso por SPI Todas as transacções através da interface SPI começam com um byte de cabeçalho. Este, permite denir em que registo do módulo CC1101 vamos escrever/ler e o tipo de acesso. A sua estrutura encontra-se representada na gura seguinte: Figura 5.7: R/W\ B- Header Byte [27] Dene se a operação é de escrita ou de leitura; Dene se o acesso é A5...A0 - single ou burst. (Tópico abordado posteriormente); Endereço do registo ao qual se pretende aceder; O acesso ao módulo começa pela colocação do sinal CSn no nível lógico '0'. Este deverá manter-se até que a transferência termine. Quando o CSn é colocado a '0', é necessário que a FPGA espere que a linha MISO tome o valor lógico '0'. Isto indica que o cristal e as tensões de alimentação do módulo se encontram estáveis para a transferência. A partir deste momento, a transferência pode tomar lugar. como é feita a leitura e a escrita de um registo do módulo. A gura seguinte mostra CAPÍTULO 5. 90 INTERACÇÃO REMOTA Figura 5.8: Exemplo de comunicação com o CC1101 [24] Observando a gura anterior, é possível vericar que existem limites mínimos e máximos temporais que é necessário cumprir. Estes encontram-se em anexo diferindo para acessos single e burst. single ) Acesso simples ( Para fazer um acesso simples, o bit B do byte de cabeçalho deve possuir o valor lógico '0'. Após a transmissão deste, é feita a escrita ou leitura da informação dependendo do bit R/W\. Num acesso simples, após a transmissão/recepção dos dados, o chip ca à espera de um novo byte de cabeçalho e só depois é possível a transferência de novos dados. Acesso burst Neste caso, o bit B do byte de cabeçalho deverá possuir o valor '1'. Neste cabeçalho é enviado o endereço inicial que se pretende escrever/ler, sendo este incrementado automaticamente pelo CC1101 para o endereço seguinte. necessidade de um novo byte Deste modo, não existe a de cabeçalho. Este acesso só deve ser utilizado quando existe a necessidade de aceder a endereços consecutivos do CC1101. Para terminar um acesso burst apenas é necessário colocar a linha CSn com o valor lógico '1'. 5.4. CONCEITOS FUNDAMENTAIS 91 Command Strobes Command Strobes são um tipo especial de comandos que desencadeiam uma série de operações no CC1101. Estes, são acedidos através dos endereços 0x30 até 0x3D. Para despoletar uma das operações, apenas é necessário fazer uma leitura/escrita para estes registos. Esta leitura/escrita deverá ser feita, obrigatoriamente, com o bit B do byte de cabeçalho a '0'. Estes comandos permitem colocar o módulo, por exemplo, em estado de recepção, transmissão etc. os comandos disponíveis. Em anexo, encontra-se uma tabela com todos Caso o bit B seja colocado a '1' em qualquer um destes endereços, serão acedidos não os Command Strobes mas registos de Status . Estes registos contêm informações importantes, tais como o número de bytes na FIFO de transmissão e recepção, estado actual do módulo etc. Status Byte byte de cabeçalho, de dados ou um command strobe, é enviado pela interface SPI, um byte designado por status byte é enviado pelo chip que possui informação Quando um útil para a FPGA/Microcontrolador. A sua estrutura encontra-se representada na gura seguinte. Figura 5.9: Status Byte CHIP_RDYn - Este toma o valor lógico '0' enquanto as tensões de alimentação e o cristal estabilizarem, caso contrário '1'. STATE[2:0] - Estes indicam o estado actual da máquina de estados que controla o CC1101. Ex: Quando 001 o módulo wireless encontra-se no estado de recepção. FIFO_BYTES_AVAILABLE[3:0] - Caso seja feita uma leitura, este campo indica o número de bytes na FIFO de recepção. Caso seja feita uma escrita, este indica o número de bytes livres na FIFO de transmissão; Mapeamento do módulo CC1101 O módulo possui 47 registos de conguração. Estes registos permitem denir parâ- metros de grande relevância, tais como: modulação, taxa de transmissão, largura de ltros etc. Estes encontram-se situados nos endereços 0x00 até 0x2E. Para além destes, existem mais dois registos que se encontram situados nos endereços 0x3E e 0x3F. CAPÍTULO 5. 92 INTERACÇÃO REMOTA No primeiro, situa-se o registo de controlo de potência do PA. O segundo, tem como objectivo aceder às FIFOs de transmissão e recepção. Este acesso vai ser discutido no tópico seguinte. Entre os endereços 0x30 e 0x3D, situam-se os status commands strobes e os registos de (tópico já abordado anteriormente). Em anexo, encontra-se uma ilustração com todos estes registos e como devem ser acedidos. Acesso às FIFOs de transmissão e recepção O acesso a estes elementos é feito através do endereço 0x3D, tanto para escrita da FIFO de transmissão como para leitura da FIFO de recepção. Para efectuar uma leitura da FIFO de recepção, apenas é necessário indicar no byte de cabeçalho que se pretende fazer uma leitura e indicar o endereço 0x3D. Esta leitura pode ser feita através de um acesso simples ou burst. É de notar que esta leitura só deve ser feita quando esta possuir informação. O valor do número de bytes que se encontram na FIFO de recepção pode ser lido através do status byte ou lendo o registo status que se encontra no endereço 0x3B. Caso seja indicado no byte de cabeçalho uma operação de escrita, vamos estar a aceder, não à FIFO de recepção mas de transmissão. Os dados podem ser igualmente escritos das duas formas de acesso: single e burst. É preciso ter, igualmente, em conta se a FIFO não se encontra cheia, de forma a não perder informação. Esta informação pode retirada a partir do valor de bytes na FIFO indicado pelo acedendo ao registo status status byte ou, então, que se encontra no endereço 0x3A. Formato do pacote de informação Em cada transmissão é enviado um pacote, possuindo este campos extra à informação útil que queremos transmitir. São possíveis no módulo CC1101 congurar os seguintes campos: Preamble ; Tamanho da palavra de sincronização; Tamanho em bytes dos dados úteis (Opcional); Endereço de destino (Opcional); Payload ; Cyclic Redundancy Check nal); (Opcio- 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 93 Figura 5.10: Formato de pacote[24] O campo preamble consiste numa sequência de uns e zeros, sendo este campo co- locado automaticamente pelo CC1101 na transmissão e removido automaticamente na recepção. É possível congurar o número mínimo de bits que são enviados. Este campo, quando o módulo se encontra no estado de transmissão, emite continuamente até que seja detectada informação na FIFO de transmissão. Quando detectada informação nesta, o CC1101 começa a enviar a palavra de sincronização. Este possuí uma tamanho congurável pelo programador (16/32 bits), sendo colocado automaticamente na transmissão e removido na recepção. O módulo CC1101 permite tamanhos de pacote xos ou variáveis. Caso o tamanho seja variável, é enviado o campo length eld. Este campo tem de ser escrito pelo programador e deve conter o número de bytes de informação útil que são enviados no pacote. Esta informação deve ser colocada na transmissão e retirada na recepção pelo programador. Tal como foi dito, é possível criar uma rede a partir destes módulos. Caso essa funcionalidade seja activada, é igualmente necessário que o programador envie o endereço destino, sendo este enviado no campo Address Field. De seguida, é enviada a informação útil . Esta pode ter tamanho xo ou variável conforme tenha sido congurado o módulo wireless. Para nalizar, são enviados dois bytes que permitem testar se houve erros na trans- missão, permitindo sinalizar ao programador se a informação recebida é ou não válida. Esta informação é colocada automaticamente na transmissão, mas necessita de ser retirada pelo programador na recepção. 5.5 Implementação da interface para o módulo CC1101 Neste trabalho foi implementada toda a interface para o módulo CC1101. Serão agora apresentados todos os blocos construídos, que constituem a vida. stack protocolar desenvol- CAPÍTULO 5. 94 INTERACÇÃO REMOTA 5.5.1 Gerador do SCLK Uma vez que nesta ligação SPI a FPGA se encontra denida como Master, é necessário que esta gere o relógio necessário à transferência. Segundo as informações recolhidas do fabricante, a frequência máximo que o relógio pode ter é de 10MHz. No entanto, este indica, igualmente, que se tal frequência for utilizada, é necessário um tempo de espera entre cada byte transferido, no mínimo de 100ns. Figura 5.11: SCLK a 10MHz [27] No entanto, segundo o fabricante, pode usar-se uma frequência de relógio até 6.5MHz não sendo, neste caso, necessário um tempo de espera. Figura 5.12: SCLK a 6.5MHz [27] Uma vez que a taxa de transferência utilizada será na ordem dos Kbits/s, não existe a necessidade da utilização da frequência de relógio de 10MHz, uma vez que o acesso ao módulo irá ser feito, mesmo utilizando 6.5MHz muito mais rápido que a taxa de transferência entre módulos, facilitando, igualmente, o bloco na FPGA que gera o relógio (SCLK). O bloco construído possui 3 entradas: desenvolvimento), ligação SPI: Clock (proveniente do cristal da placa de Reset e Enable . Como saídas, este possuí apenas o relógio para a SCLK. Este bloco possuí igualmente um parâmetro genérico (Divider ), que pode ser alterado permitindo alterar a frequência do SCLK. Figura 5.13: Gerador SCLK Para a construção deste bloco, foi utilizada uma máquina de estados nitos e segue o diagrama de uxo de sinal apresentado na gura seguinte. 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 95 Figura 5.14: Diagrama deuxo de sinal do bloco Gerador do SCLK Observando a gura anterior, é possível vericar que a iniciação do relógio é despoletada por camadas superiores. Quando o sinal enable se encontra activo, o SCLK é gerado sendo a sua frequência alterada pelo valor genérico divider. o relógio dividido, consiste num contador que, quando atinge o valor A forma como é divider, o relógio SCLK troca de sinal lógico. Para as placas de desenvolvimento utilizadas, a frequência máxima do relógio do cristal destas é de 50MHz, pelo que foi utilizado um valor de 9 para divisão do relógio de entrada conseguindo-se, desta forma, uma frequência para o SCLK menor a 6.5MHz (valor já justicado anteriormente). 5.5.2 Controlador de transferência de um byte Esta camada encontra-se imediatamente acima do bloco Gerador de SCLK. Esta, tem como objectivo receber/transmitir um byte de informação gerindo o sinal de relógio SCLK e as linhas MISO, MOSI e CSn. A gura seguinte, mostra um esquema deste componente: 96 CAPÍTULO 5. INTERACÇÃO REMOTA Figura 5.15: Controlador de transferência de um byte O respectivo diagrama de uxo de sinal encontra-se representado na gura seguinte, sendo este executado por uma máquina de estados nitos simples: Figura 5.16: Diagrama de uxo de sinal do bloco Transfer1Byte Esta, encontra-se, por defeito, no estado Idle, até que seja feito um pedido por um elemento superior, sendo este pedido feito através do sinal de entrada transfer_cs. Init onde coloca o CSn a zero esperando que o CC1101 coloque a zero a linha MISO (CSn_Chip ) indicando, Quando activo, a máquina de estados transita para o estado desta forma, que a transferência pode tomar lugar. No entanto, esta não é a única condição, isto é, caso a linha CSn já se encontre a zero e seja necessário a transferência de um novo byte, não existe a necessidade de esperar pela linha MISO com o valor zero. Para indicar que o byte a transferir não é o primeiro (Byte de cabeçalho) existe uma ag, a qual toma o valor '1' quando a transferência do primeiro byte é concluída. Então, caso um destes casos aconteça, o SCLK é activo e a linha MOSI ca com o valor do bit mais signicativo. Transita, deste modo, para o estado Transfer, o qual ca à espera da próxima transição ascendente do relógio (SCLK). Neste ponto, é lida a informação 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 97 da linha MISO, sendo guardada para o vector DataRx. De seguida, é testada a variável Numero de bits. Se esta contiver o valor 0, é porque o para o estado Finish. accionado um sinal de byte já foi enviado, transitando Neste, a ag irá possuir o valor lógico um, sendo igualmente done, indicando à camada superior que a transferência de um byte se encontra concluída. Caso contrário, se ainda não foi transmitido o byte (Numero de Bits diferente de 0), a máquina transita para o estado Change. Esta espera pela próxima transição descendente do SCLK, alterando nesta a informação que se encontra na linha MOSI, regressando de seguida para o estado Transfer, repetindo-se o ciclo até byte se encontre concluído. Quando a FSM regressa ao estado Idle esta testa se o sinal transfer_cs ainda se encontra activo. Se tal acontecer, o ciclo que a transferência do repete-se sem a espera pela linha MISO tomar o valor 0. Caso contrário, a ag é colocada a zero indicando que o próximo byte será um byte de cabeçalho e colocando a linha CSn com o valor lógico '1'. 5.5.3 Controlador da transferência SPI Tal como foi dito na secção conceito introdutórios, a transferência SPI para o módulo CC1101 é inicializada por um byte de cabeçalho seguida de um byte de dados em caso de escrita. Ao mesmo tempo são recebidos status bytes ou dados no caso de uma leitura. Este bloco utiliza o anterior para a gestão da transferência de dados fazendo-o apenas por acesso simples. Este recebe o cabeçalho e os dados a transmitir, (caso seja leitura o segundo byte possui um valor genérico) chama as camadas anteriores e separa automaticamente a informação que recebe da interface SPI para as respectivas saídas: status byte e informação de registos/Dados. O seu bloco encontra-se representado na gura seguinte: Figura 5.17: Bloco SPI O respectivo diagrama de uxo de sinal encontra-se representado na gura seguinte: CAPÍTULO 5. 98 INTERACÇÃO REMOTA Figura 5.18: Diagrama de uxo de Sinal do bloco SPI Este bloco é controlado por uma FSM, começando no estado a0. Esta mantém- se neste, até que seja feito um pedido da camada superior a partir do sinal request. Quando tal acontece, a FSM transita para o estado a1 onde é feito um pedido de header byte. Caso o sinal strobe_request transmissão do se encontre com o valor lógico , a máquina passa direc- header byte seja transmitido. Quando é recebido o sinal de done, o valor do sinal de saída StatusByte_Out é actualizado, uma vez que na transmissão do header byte é recebido na linha MISO o StatusByte . De setamente para o estado a2, cando à espera que o guida, é enviado o segundo byte. Caso seja feita uma leitura, o segundo byte possui o valor genérico 0x00. Caso contrário, ou seja, numa operação de escrita, é transmitido o valor proveniente da camada superior ( DataTx_In ). Após o pedido de transmissão a FSM ca à espera do sinal de done. Quando este toma o valor lógico '1', em caso de uma operação de leitura o sinal de saída DataRX_OUT é actualizado com a informação proveniente da linha MISO. Caso seja feita uma operação de escrita, o sinal proveniente na linha MISO é novamente o Byte, pelo que o sinal de saída correspondente será novamente actualizado. Status Depois das 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 respectivas atribuições, ao sinal Done_Tick 99 é atribuído o valor lógico '1', indicando à camada superior que a transmissão se encontra concluída. Para nalizar, a FSM regressa ao estado a0. Caso seja efectuado um pedido para um command_strobe, a FSM irá passar não do estado a1 para o a2, mas para o estado a4. Neste, é feita uma espera que a transmissão header byte se encontre concluída. Segundo o fabricante, quando se pretende enviar um command_strobe, deve ser feita uma leitura arbitrária após o envio do primeiro header byte. Para tal, é enviado, de seguida. um segundo header byte para um endereço do genérico, transitando, depois, a máquina para o estado a2 e sendo feita uma leitura normal. 5.5.4 Controlador da transferência de dados A construção deste módulo teve como objectivo receber a informação de um pedido vindo de uma camada superior para uma transferência reunindo-a e distinguindo automaticamente em conformidade com os parâmetros recebidos se o pedido se trata de um commnand Strobe ou uma simples leitura/escrita para um registo Esta informação é de seguida enviada para o bloco SPI. A gura seguinte, mostra um diagrama de blocos deste componente. Figura 5.19: Bloco Transfer Control O respectivo diagrama de uxo de sinal encontra-se representado na gura seguinte. CAPÍTULO 5. 100 INTERACÇÃO REMOTA Figura 5.20: Diagrama de uxo de sinal do bloco TransferControl Este bloco foi construído através de uma máquina de estados nitos, encontrando-se esta por defeito no estado a0. Quando é feito um pedido, é vericado o endereço de Adress(5:0) ) e o bit B. Em conformidade com estes valores, este bloco detecta automaticamente se se trata de um command_strobe ou de um acesso a um registo, activando a linha Request Strobe do bloco SPI em caso armativo. É então, feito um entrada ( pedido à camada SPI para a transferência da informação, passando de seguida para o estado a1. Neste, a máquina de estados nitos espera de uma conrmação de envio a qual é feita através do sinal Done. Quando este valor possui o valor lógico '1', a transferência encontra-se concluída fazendo regressar a FSM ao estado a0, podendo, neste momento, receber outro pedido. 5.5.5 Congurador do módulo CC1101 Estando o protocolo SPI implementado, é necessário agora congurar o módulo wireless, ou seja, congurar todos os registos para que este se adapte em conformidade com as características escolhidas. Ao bloco responsável por esta função designou-se de Congurador. Os valores dos registos que devem ser congurados encontram-se, por sua vez, numa memória ao qual este componente acede de forma sucessiva, enviando esta informação para as camadas inferiores. A gura seguinte, mostra um diagrama de blocos deste componente. 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 101 Figura 5.21: Componente Congurador O respectivo diagrama de uxo de sinal encontra-se representado na gura seguinte: Figura 5.22: Diagrama de uxo de sinal do bloco congurador Observando a gura anterior, pode-se observar que a máquina de estados nitos que controla este componente começa por efectuar um reset ao módulo CC1101, recorrendo, para isso, a um command_strobe que se encontra no endereço 0x30. De seguida, este transita para o estado a0 o qual ca à espera da conrmação da conclusão do comando de reset. Tendo a certeza, neste momento, que o chip se encontra no seu estado inicial, começa a conguração de todos os registos, por ordem crescente de endereços. Este CAPÍTULO 5. 102 INTERACÇÃO REMOTA ciclo repete-se pelos estados a1 e a2.Quando é atingido o endereço 0x2E, a conguração crescente de endereços pára, uma vez que a partir deste endereço, encontram-se os registos de status e os command strobes . É feito, então, um salto para o endereço 0x3E, onde se encontra o registo que programa a potência do sinal transmitido. A FSM passa, deste modo, para o estado PA_State, onde é feito o pedido à camada inferior para a conguração deste registo, transitando de seguida para o estado PA_wait. existe uma espera pelo sinal de done Neste, da camada inferior, indicando que o registo já se encontra congurado. Conclui-se, desta forma, a conguração dos registos do CC1101, sendo esta conclusão indicada à camada superior pela activação do sinal Done_conf. Após a fase de conguração, a máquina de estados mantêm-se no estado a3, o qual recebe pedidos e os reencaminha para as camadas inferiores, transitando para o estado a4, onde ca à espera da indicação da conclusão da transferência, regressando, novamente, para o estado a3 após a sua conclusão e esperando pelo próximo pedido. 5.5.6 Controlador do módulo CC1101 Após a conguração do módulo wireless, é necessário efectuar o seu controlo, isto é, colocá-lo em modo de transmissão e recepção, bem como gerir a informação nas FIFOs dividindo a informação em campos para utilização nas camadas superiores. Este bloco permite, a camadas superiores, obter a completa abstracção com as características do módulo, isto é, as camadas superiores apenas se preocupam em enviar/receber informação, não necessitando de saber pormenores, tais como o estado do módulo, uma vez que, esta gestão é feita automaticamente pelo bloco em causa. Trama construída pelo componente controlador Tal como foi referido anteriormente, o módulo CC1101 possuí uma trama com uma determinada estrutura. No entanto, um programador pode denir uma sub-trama, bastando para isso dividir o espaço reservado para dados, criando, desta forma, uma trama que só o programador conhece e só este consegue separar a informação correctamente. Visto a aplicação em causa ter como objectivo enviar informação para diversos componentes, existe a necessidade de criar um campo, o qual vamos designar por identier . byte Este, terá o tamanho de 1 e, conforme o valor indicado neste campo, é possível distinguir para que componente a informação transferida remotamente se destina. bytes. Deniu-se, igualmente, que o tamanho dos dados úteis seria de 4 gura seguinte, mostra a trama que é enviada/recebida por cada módulo wireless. A 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 103 Figura 5.23: Sub-trama criada pelo componente controlador Implementação de uma ligação Bidireccional Um dos objectivos para este trabalho é permitir uma ligação bidireccional, isto é, os módulos wireless devem conseguir transmitir e receber. Para que isto seja possível, é necessário que o módulo se encontre sempre no modo de recepção, excepto quando pretende transmitir. Esta funcionalidade é congurável no módulo CC1101, ou seja, este permite denir que, após a transmissão, o módulo passa automaticamente para o modo de recepção. Este método, no entanto, necessita de alguma robustez, uma vez que, existe sempre a probabilidade de colisão de informação. Esta pode ser reduzida, em parte, activando outra funcionalidade deste módulo: CCA ( ment ). Clear Channel Assess- Esta funcionalidade permite saber se existe alguma informação a ser recebida. Assim, caso seja feito um pedido de transmissão e a ag CCA se encontre activa este não irá ser processado, sendo por isso necessário tentar voltar novamente mais tarde. Este método é bom e diminui a probabilidade de colisão, mas não o combate a 100%, pelo que foi construído um componente que implementa um protocolo, diminuindo a probabilidade de perda de informação. Este será apresentado em tópico posterior. Diagrama de blocos e diagrama de uxo de sinal O diagrama de blocos deste componente encontra-se representado na gura seguinte. Figura 5.24: Componente Controlador O respectivo diagrama de uxo de sinal encontra-se representado na gura seguinte. CAPÍTULO 5. 104 INTERACÇÃO REMOTA Figura 5.25: Diagrama de uxo de sinal do bloco controlador Este bloco encontra-se implementado, mais uma vez, a partir de uma FSM simples. Esta começa no estado a0, no qual espera que a conguração termine. Quando recebida a conrmação, este tenta colocar o módulo em modo de recepção através de um mand_strobe com- (SRX), passando de seguida para o estado a2, esperando que o comando esteja concluído. De seguida, é lido o estado do módulo. Uma vez que existem tempos que não podem ser controlados pelo programador, por vezes o módulo pode atingir os estados de underow da FIFO de transmissão ou overow da FIFO de recepção. Neste caso, estes dados são limpos e é pedido, novamente, que o módulo passe para o estado de recepção. Quando tal acontece, a FSM transita para o estado RX. Neste, é feito, constantemente, um pedido para saber o número de bytes que se encontram na FIFO de recepção. Caso este número seja maior ou igual ao valor do tamanho do pacote, é feita a leitura da FIFO, retirando a informação e enviando-a para a camada superior, indicando a esta que existe nova informação, recebida através do sinal Done_Recep. Caso o número de bytes na FIFO de recepção seja inferior ao tamanho do pacote, é testado se existe algum pedido para transmissão. Em caso armativo, começa o processo de transmissão e segue os seguintes passos: 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 105 1. Enviado para a FIFO de transmissão o endereço destino pretendido; 2. Enviado para a FIFO o campo identier (identicador); 3. Enviado para a FIFO os dados; 4. Enviado um command_strobe para o módulo transmitir; 5. É lido o estado em que o módulo cou até que volte ao modo de recepção. 6. É lido o número de bytes que se encontram na FIFO de transmissão. Caso este valor seja não nulo, quer dizer que o canal se encontrava ocupado quando na tentativa de transmissão. Neste caso, é feito um tempo de espera pseudo-aleatório (o que diminui as probabilidades de uma nova ocupação do canal) repetindo-se, ao m deste, os passos 4,5 e 6 até que seja enviada a informação. Caso o número de bytes seja igual a zero, a informação foi transmitida retornado a máquina para o estado RX e repetindo-se todo o ciclo de operações. 5.5.7 Controlador de transmissão De forma a diminuir a complexidade da interface para a transmissão de dados, foi o construído o módulo ao qual designamos por Controlador de transmissão. permitir criar alguma abstracção da interface do módulo anterior. Este irá O diagrama de blocos deste componente encontra-se representado na gura seguinte. Figura 5.26: Diagrama de blocos do sistema incorporando o controlo de tranmissão O respectivo diagrama de uxo de sinal encontra-se representado na gura seguinte. CAPÍTULO 5. 106 INTERACÇÃO REMOTA Figura 5.27: Diagrama de uxo de sinal do controlador da transmissão A máquina de estados nitos que controla este bloco inicia no estado a0. Neste, são colocados, por defeito, a zero todos os sinais que invocam uma transferência à camada inferior. Neste estado, é vericado um sinal do módulo controlador indicando se o módulo está pronto para receber informação para transmitir (sinal Done_Trans ). Se tal acontecer e for feito um pedido, este pedido é executado imediatamente, caso contrário, se o módulo não estiver pronto mas for feito um pedido, este é guardado sendo activada uma ag indicando que mal o módulo esteja pronto este pedido deve ser atendido. Quando o módulo atende o pedido, este activa o sinal Request_Trans, desencade- ando todo o uxo de transmissão no módulo controlador e fazendo transitar a máquina de estados para o estado a1. Neste, é activado um sinal de indicando que o módulo se encontra ocupado. sinal Done_Trans Busy à camada superior, Neste estado, é igualmente testado o que, quando tomar o valor zero, indica que o módulo anterior já se encontra a processar o pedido, desactivando, assim, o sinal Request_Trans, ou seja, a indicação para atender um pedido. A máquina transita, de seguida, para o estado a2 onde espera a conclusão do pedido. Visto um dos objectivos ser uma ligação bidireccional, quando o sinal de conclusão do pedido é activo foi introduzido um tempo de espera, de forma a libertar o canal RF permitindo, deste modo, que o segundo módulo wireless tenha a possibilidade de enviar informação. No nal deste tempo, todo o ciclo se repete. 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 107 5.5.8 Controlador do protocolo de comunicação Tal como foi dito anteriormente, existe sempre a possibilidade de perda de pacotes. Esta pode ser reduzida graças à utilização do indicador CCA. No entanto, isto não garante que a informação chega ao seu destino, uma vez que, pode haver uma colisão quando os dois tentam enviar ao mesmo tempo. Para reduzir a probabilidade de perca de pacotes, foi implementado um protocolo simples baseando-se em pacotes de acknowledge. A gura seguinte, mostra um exemplo do protocolo implementado. Figura 5.28: Diagrama ilustrativo do protocolo desenvolvido Este protocolo funciona da seguinte maneira: 1. O pacote é enviado. Neste momento, um começa a incrementar. pacote timer com tempo pseudo-aleatório Este serve para que, em caso da não recepção de um acknowledge, o pacote seja retransmitido passado um determinado tempo, tempo esse que deverá possuir um valor mínimo, uma vez que é necessário que a informação seja escrita no módulo que transmite, seja propagada até ao seu destino, e seja enviado um pacote de acknowledge possuindo este, igualmente, um tempo de escrita no módulo e um tempo de propagação no canal. acknowledge identicado através do campo identier. Este, no caso de um acknowledge, possui 2. O módulo que envia o pacote ca à espera da recepção de um pacote o valor 0x00,pelo que não deverá ser utilizado para o envio de dados úteis. 3. Caso o pacote acknowledge seja recebido, o módulo pode enviar o próximo pa- cote. Caso contrário, quando o timer atingir o valor pseudo-aleatório amostrado CAPÍTULO 5. 108 INTERACÇÃO REMOTA quando no envio, o pacote é retransmitido repetindo-se este ciclo. É de notar que, quando um dos módulos ca à espera do pacote não enviar pacotes acknowledge acknowledge, nada o impede de para o outro módulo. O diagrama de blocos deste componente encontra-se representado na gura seguinte: Figura 5.29: Componente Protocolo Podemos dividir este componente em dois diagramas de uxo de sinal: de recepção e transmissão. Recepção Figura 5.30: Diagrama de uxo de sinal da parte da recepção O controlo da recepção é implementado através de um simples processo, ao contrário dos restantes componentes implementados com recurso a máquina de estados nitos. Neste processo, começa-se pela análise do sinal done_recep proveniente do módulo anterior. Caso este se encontre com o valor lógico '0', não é feita nenhuma operação, mantendo-se os sinais Done_recep e Done_trans iguais a zero, ou seja, indicando à camada superior que nada foi recebido nem transferido. Caso seja recebido algum 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 pacote, é avaliado o campo identier. 109 Caso este possua o valor 0x00, indica que a in- acknowledge, pelo que a informação transmitida foi recebida pelo destino, sendo activado o sinal Done_trans indicando que o pacote foi transmitido. Neste momento, o timer pára de contar e é reiniciado. Caso o pacote formação recebida se trata de um sinal recebido seja um pacote de dados, é indicada à camada superior que recebeu um pacote SendACK indicando à parte responsável pela transmissão de pacotes que deve enviar um pacote acknowledge. activando o sinal Done_Recep. É, igualmente, activado o sinal Transmissão Figura 5.31: Diagrama de uxo de sinal da parte da transmissão O controlo da transmissão, ao contrário da recepção, é efectuado por uma máquina de estados nitos simples. Esta encontra-se por defeito no estado Idle. Neste estado, é testado se o módulo se encontra ocupado, sinal este proveniente da camada inferior. contra livre, é testado se existe algum pacote acknowledge Quando este se en- que deve ser enviado. Se tal acontecer, é feito um pedido à camada inferior para transferência de um pacote identier com o valor 0x00, passado a máquina de estados nitos para o estado Transmit_ACK, esperando que a informação tenha sido enviada. Quando tal acontece, a FSM regressa ao estado IDLE. Caso não seja necessário enviar um acknowledge, é testado se foi feito um pedido com o campo para envio de informação. Para vericar a existência de um pedido, é vericado o sinal send. Em caso armativo, são activados sinais para o módulo anterior, indicando que CAPÍTULO 5. 110 INTERACÇÃO REMOTA uma nova transferência deve ser feita. Após isto, a máquina de estados nitos passa Transmit_Packet, o qual espera pela conrmação do envio do pacote. Quando tal acontece, o timer pseudo-aleatório começa a contar e a FSM regressa ao estado IDLE, repetindo-se este ciclo. para o estado 5.5.9 Módulo Transceiver Este bloco engloba todos os blocos construídos até ao momento e através de uma máquina de estados nitos facilita a interface com o módulo protocolo para a transmissão de informação. A recepção não sofre qualquer processamento. O diagrama de blocos seguinte, mostra este componente. É de relembrar que o componente congurador possui mais sub-camadas. Figura 5.32: Módulo Transceiver O respectivo diagrama de uxo de sinal da FSM encontra-se representado na gura seguinte: Figura 5.33: Diagrama de uxo de sinal do bloco Esta máquina encontra-se, por defeito, no estado a0. Transceiver Neste estado, todos os si- nais que evocam um pedido ao componente protocolo encontram-se a zero. Neste, 5.5. IMPLEMENTAÇÃO DA INTERFACE PARA O MÓDULO CC1101 é testado, igualmente, se foi feito algum pedido (sinal Request_Transmit ) 111 por parte da camada superior. Em caso armativo, é feito então o pedido ao bloco protocolo e a saída busy_transceiver toma o valor lógico '1', indicando à camada chamadora que o módulo se encontra ocupado. quest_Transmit processado. Após a transição para o estado a1, o sinal Re- toma o valor lógico 0, uma vez que o pedido já se encontra a ser Neste estado, é feita uma espera pela concretização da transferência, a qual é identicada pelo sinal mento, a saída done_trasmit done_trans vindo do componente protocolo. Neste mo- toma o valor lógico '1', indicando que a informação foi enviada e que o módulo se encontra livre para uma nova transmissão. Para nalizar, a máquina volta ao estado inicial, repetindo-se todo o ciclo. 5.5.10 Módulo CC1101 Este componente encerra toda a interface com o módulo de rádio frequência e permite a criação de uma interface simples de utilização. O diagrama de blocos deste componente encontra-se representado na gura seguinte. Figura 5.34: Módulo CC1101 Observando a gura anterior, é possível vericar que foram adicionadas duas FIFOs, encontrando-se estas ligadas ao componente transceiver. Estas são extremamente necessárias, uma vez que, sendo a taxa de transmissão do módulo wireless relativamente baixa em relação à velocidade do oscilador da placa de desenvolvimento, estas são capazes de armazenar informação que irá ser enviada, posteriormente, quando possível, não sendo por isso necessário à entidade que utiliza esta interface esperar pela conclusão da transmissão libertando desta forma recursos. Para gerar estas FIFOs recorreu-se a um módulo IP designado por Fifo Generator. Este módulo permite denir vários parâmetros, tais como o tamanho da fo pretendida, os sinais de controlo para o exterior, etc. Uma vez que cada pacote de informação possui 40 bits de informação (dados + identicador), foi denido neste módulo IP uma FIFO CAPÍTULO 5. 112 INTERACÇÃO REMOTA com o tamanho de 1024x40 bits, sendo este um valor aceitável para a aplicação em causa. A interface de comunicação com o módulo wireless tornou-se, deste modo, bastante simples, sendo necessários apenas 10 sinais de uso simples para efectuar uma transmissão ou recepção via comunicação wireless: TX_FIFO_Cheia - Este sinal indica quando a FIFO de transmissão se encontra cheia; TX_FIFO_Vazia - Este sinal indica quando a FIFO de transmissão se encon- tra vazia; Escrever - Sinal indicando que vai escrever informação na FIFO de transmissão; Identidade_Enviar - Possui o valor da identidade a enviar. (Relembrar que não pode ser usado o valor 0x00); Dados_Enviar - Informaçãoa transmitir. RX_FIFO_Cheia - Este sinal indica quando a FIFO de recepção se encontra cheia; RX_FIFO_Vazia - Este sinal indica quando a FIFO de recepção se encontra vazia; Ler - Sinal indicando que quer ler informação da FIFO de recepção; Identidade_Recebida Dados_Recebidos - Possui o valor da identidade recebida; Informação recebida. Escrita na FIFO de transmissão Para efectuar uma escrita na FIFO, apenas é necessário colocar a informação relativa Identier e dos dados nos respectivos sinais. De seguida, deve ser activado o sinal escrever devendo manter-se activo durante um ciclo de relógio. ao campo Leitura da FIFO de recepção A FIFO de recepção tem um funcionamento um pouco diferente. Para a leitura de informação deste, é necessário possuir um ciclo de espera, isto é, quando se pretende efectuar uma leitura é necessário activar o sinal ler durante um ciclo de relógio podendo ler a informação recebida apenas no próximo ciclo. 5.6. LIGAÇÃO DO MÓDULO CC1101 AO RESTANTE SISTEMA 113 5.6 Ligação do módulo CC1101 ao restante sistema Por m, é necessário efectuar a ligação do módulo wireless ao restante sistema construído, ou seja, a ligação aos processadores. Esta ligação deverá permitir remotamente a conguração do instruction set do co-processador, bem como o carregamento de um novo programa escrito na linguagem assembly para o processador de uso geral, permitindo, desta forma, a execução de um programa completamente diferente. Alteração do instruction Para efectuar a alteração do set do co-processador instruction set do co-processador remotamente é necessário efectuar duas alterações: A memória ROM, que se encontra no programador da unidade de controlo, deverá passar a memória RAM. O mesmo acontece com a memória que se encontra no programador no uxograma programável tendo esta que passar a memória RAM. Com estas alterações, foram acrescentados sinais a estes componentes, de forma a endereçarem a posição de memória que deve ser escrita. A gura seguinte, mostra as alterações efectuadas, incluindo os sinais adicionados: Figura 5.35: Programador da unidade de Figura 5.36: Programador do uxograma controlo Reprogramação do programa assembly Para efectuar o carregamento de um novo programa para o processador de uso geral é instruction set do co-processador, isto é, a memória ROM que possuí o programa assembly deverá necessário efectuar uma alteração semelhante à necessária para alteração do passar a memória RAM, sendo igualmente necessário a adição de sinais para a escrita na memória. CAPÍTULO 5. 114 INTERACÇÃO REMOTA Diagrama nal do sistema construído O diagrama da gura seguinte mostra o sistema completo construído: Figura 5.37: Diagrama de blocos do sistema completo construído Observando a gura 5.37, é possível vericar a interligação entre os diversos blocos. É de notar a existência de um novo bloco, o qual foi designado por RF Arbiter. Este componente tem a função de ler a informação recebida por rádio frequência, procedendo à sua separação em conformidade com o identicador recebido, enviando de seguida a informação para o componente a que se destina. É através deste componente que é feita a reprogramação dos diversos componentes, sendo esta controlada por uma placa de desenvolvimento situada remotamente. A gura seguinte, mostra a ligação deste componente ao restante sistema: Figura 5.38: Sinais utilizados para a reprogramação remota Analisando a gura anterior, é possível observar que este componente liga a todas as memórias RAM através de um barramento de dados e de endereços comum, sendo utilizados 3 sinais separados para indicar qual das memórias deve ser escrita com o endereço e dados que se encontram no barramento. Uma vez que é carregada nova 5.6. LIGAÇÃO DO MÓDULO CC1101 AO RESTANTE SISTEMA 115 informação, torna-se necessário que o processador não se encontre a processar enquanto são carregados os novos dados. Deste modo, foi criado o sinal fazer o reset wirelessReset, permitindo ao processador de uso geral inactivando-o de qualquer operação. Quando este sinal é inactivado, o processador retoma o seu processo de funcionamento normal, mas correndo um novo programa se tal for carregado. Todos os sinais apresentados são controlados via rádio frequência, sendo o valor destes actualizados em conformidade com o identicador recebido. A tabela seguinte, mostra a correspondência entre o identicador e a alteração dos sinais que este desencadeia: Tabela 5.1: Correspondência entre o identicador e operação remota desencadeada Programador Remoto Visto um dos objectivos deste trabalho a conguração remota do sistema computacional construído é necessário implementar numa placa de desenvolvimento mecanismo de reprogramação com ligação ao módulo wireless. Este sistema remoto deve ser então capaz de enviar um novo programa assembly bem como o novo set de instruções para o co-processador. Esta informação pode ser guardada em memória sendo apenas necessário quando da necessidade de reprogramação lê-la e enviando os correctos identicadores, conseguindo-se desta forma alterar o comportamento do sistema computacional remotamente. O esquema seguinte mostra o sistema completo construído: CAPÍTULO 5. 116 INTERACÇÃO REMOTA Figura 5.39: Interacçao remota O módulo programador, em caso de pedido de reprogramação, segue os seguintes passos: 1. Envia um pacote com o identicador igual a 0x10, colocando remotamente o endereço a escrever nas memórias a zero; 2. É enviada informação do programa assembly com o respectivo identicador igual a 0x01; 3. É enviado um pacote com o identicador igual a 0x03 incrementando assim o endereço a escrever; 4. É lido endereço seguinte da memória que contêm o programa assembly e repetindo os passos 2,3 e 4 até que todo o programa assembly seja carregado; 5. É enviada informação sobre as instruções para o co-processador. Este processo é igual ao descrito para escrita na memória com o programa assembly, alterando-se apenas o endereço de envio 0x01 para 0x04 e os dados enviados dizem respeito à memória que contém a informações sobre as instruções. 6. Por m, é enviada a informação acerca do uxograma para o co-processador. Este processo é igual ao anterior, sendo apenas alterado o endereço de envio para 0x05 e os dados enviados encontram-se na memória que contêm informações sobre o uxograma reprogramável. 5.7. RESULTADOS E DISCUSSÃO 117 5.7 Resultados e Discussão Nesta secção são apresentados os resultados. Visto a análise em relação ao sistema constituído pelos processadores já foi referida, nesta secção iremos discutir apenas os resultados de síntese obtidos para os componentes que compõe a stack protocolar. Serão também analisados alguns resultados práticos no que diz respeito às características do módulo wireless utilizado. Utilização de recursos da interface sem os desenvolvida De seguida, são apresentados os resultados sobre a utilização de recursos da interface RF nas duas placas de desenvolvimento utilizadas: Tabela 5.2: Utilização de recursos do componente CC1101 na placa de desenvolvimento Celoxica Tabela 5.3: Utilização de recursos do componente CC1101 na placa de desenvolvimento Nexys2 A respectiva utilização de recursos em percentagem encontra-se representada na tabela seguinte. CAPÍTULO 5. 118 Tabela 5.4: INTERACÇÃO REMOTA Utilização de recursos em relação à capacidade total de cada uma das placas de desenvolvimento Observando os resultados, é possível vericar que os recursos utilizados por esta interface são relativamente baixos. No entanto, esta interface pode ainda ser alvo de melhoramentos, principalmente no que diz respeito à passagem das memórias utilizadas, as quais se encontram implementadas em memória distribuída, para Block RAMs. Testes às características do módulo wireless Por forma a avaliar alguns parâmetros do módulo wireless utilizados, foram realizados alguns testes. Estes, contemplam distâncias máximas, taxa de transferência, consumo entre outros. Para efectuar estes, foi criado um projecto de teste, por forma a avaliar os parâmetros mais importantes. Este, envia constantemente um contador via rádio frequência e fornece algumas informações no monitor VGA, tais como: número de pacotes recebidos, número de pacotes reenviados, informação recebida, número de pacotes acknowledge entre outros. Este projecto foi então carregado para as duas placas de desenvolvimento. Para a realização destes testes foram utilizados os seguintes parâmetros do wireless : Modulação: Datarate : GFSK; 100KBaud; Tamanho do pacote de dados xo: AutoFlush 6 Bytes; CRC; Vericação de endereços; 4 Bytes de palavra de sincronização. 6 Bytes de preamble ; módulo 5.7. RESULTADOS E DISCUSSÃO Teste 1 - Módulos 119 Wireless separados de uma distância de aproximadamente 1m com/sem FEC Por forma a avaliar o comportamento da comunicação RF, em condições que podemos designar de ideais, foram carregados os projectos de teste para as placas de desenvolvimento, separando-se os módulos a uma distância de aproximadamente 1m. Neste teste foi activada/desactivada a opção de correcção automática de erros (FEC) para vericar o seu impacto na taxa de transferência. Obtiveram-se assim os seguintes resultados: Tabela 5.5: Resultados obtidos a uma distãncia de aproximadamente 1m, durante aproximadamente 1 hora Observando os resultados, é possível vericar que nenhum pacote se perdeu, uma vez que, o número de reenvios possui um valor nulo, o que nos leva a concluir que realmente é possível considerar que para esta distância nos encontramos nas condições ideais. É possível vericar igualmente, que o número de pacotes recebidos pelos dois módulos é igual ao número de pacotes enviados pelo módulo oposto. Em relação à taxa de transmissão, verica-se que esta é semelhante nos dois módulos wireless o signica que a interface construída permite uma boa divisão da largura de banda pelos dois módulos. A taxa de transmissão obtida foi cerca de 5.8 Kbits/s o que perfaz uma taxa de transferência de 11.6 Kbits/s (somatório das taxas de transmissão de cada um dos módulos). Contabilizando agora a restante informação para além da útil, isto é, o envio dos pacotes acknowledge e dados de acesso ao meio (bits de sincronização e de preamble), obtendo-se uma taxa de transferência de 74 Kbits/s. No entanto, o módulo foi congurado para uma taxa de 100KBaud. Esta diferença de valores tem como uma das origens o facto da utilização de um tempo de espera, entre o envio de um pacote e o próximo. Uma vez que, existe um tempo subjacente à passagem do módulo do estado de transmissão para recepção e vice-versa, e como não é utilizado o tamanho máximo do pacote, para uma mesma quantidade de informação é CAPÍTULO 5. 120 INTERACÇÃO REMOTA necessário fazer mais transições entre estados, levando inevitavelmente à diminuição da taxa de transferência, constituindo assim outra causa da discrepância entre os valores teóricos e práticos da taxa de transmissão. Por m, o valor teórico não contabiliza uma transmissão bidireccional, o que leva a uma diminuição da taxa de transferência. Comparando agora os resultados obtidos com/sem correcção de erros, é possível vericar que a taxa de transmissão (incluindo acesso ao meio) diminuiu bastante. Este facto é explicado pelas etapas de processamento extra quando da activação desta funcionalidade. Teste 2 - Módulos Wireless separados de uma distância de aproximadamente 240m com/sem FEC De seguida, foi avaliado o comportamento dos módulos para distâncias maiores. Para tal, foram colocados a uma distância de aproximadamente 240m. Obtiveram-se os seguintes resultados: Tabela 5.6: Resultados obtidos a uma distãncia de aproximadamente 240m, durante aproximadamente 15 min Observando os resultados, é possível vericar imediatamente que existem pacotes que se perderam, uma vez que, existe pacotes reenviados. Este facto, leva a uma inevitável queda na taxa de transmissão. No entanto, apesar de pacotes perdidos, devido ao protocolo implementado, não existe informação perdida, indicando deste modo, que a interface criada é viável. Após o estudo sem a utilização do corrector automático de erros, este foi accionado. Vericou-se como seria de esperar uma melhoria nos resultados no que diz respeito ao número de pacotes reenviados, sendo este valor muito baixo. Verica-se como no teste anterior que a taxa de transmissão com esta funcionalidade diminui, pelas razões já explicadas. No entanto, esta taxa de transmissão manteve- se aproximadamente igual ao teste anterior ao contrário da taxa de transmissão sem 5.7. RESULTADOS E DISCUSSÃO correcção automática de erros. 121 Este facto, leva-nos a concluir que existe um ponto em que a taxa de transmissão sem/com corrector de erros irá ser praticamente igual, tornando-se a partir deste viável a utilização desta funcionalidade. Distância máxima Apesar da distância considerada no teste 2, através das experiências efectuadas o módulo consegue receber até a uma distância de aproximadamente 270m. No entanto, para este valor existe já uma grande quantidade de pacotes a serem reenviados, tornando a ligação sem os muito lenta. Os testes realizados foram feitos sem obstáculos, pelo que estes valores apenas são válidos para este tipo de ambiente. Através das experiências feitas, foi observado igualmente o fenómeno conhecido por desobstrução de Fresnel isto é, foi vericado que para longas distâncias é necessário que os módulos se encontrem a uma altura relativamente elevada para que a transmissão seja possível (para mais informações consultar [56]). Por todas estas razões, foi considerada como distância máxima 240m. Consumo Visto uma das grandes preocupações na escolha do módulo wireless era o consumo energético, foi medido o seu consumo energético à potência (programável) máxima e mínima. Obteve-se então para uma potência máxima (10dBm), um consumo de aproximadamente 9.8mA e 6.4mA para a potência mínima (-30dBm), sendo estes valores bastante baixos, tendo principalmente em conta a distância que atingem, conseguindose desta maneira uma boa relação potência - distância. Podemos então concluir que todos os objectivos no que toca à interacção remota foram concluídos, conseguindo-se uma ligação ável, de baixo custo, taxas de transferência sucientes e baixo consumo. Interface gráca Tal como foi dito, foram elaborados algoritmos combinatórios para demonstração do sistema construído. Este, encontra-se vericado e correctamente a funcionar. A interface gráca para demonstração encontra-se representada na gura seguinte. Esta diz respeito à placa de desenvolvimento que contém o processador com um conjunto de instruções variável. 122 CAPÍTULO 5. INTERACÇÃO REMOTA Figura 5.40: Interface do demonstrador Capítulo 6 Conclusão e Trabalho Futuro 6.1 Sumário Este capítulo completa a dissertação. Aqui é feito um breve resumo do trabalho realizado e principais conclusões. Para terminar são apresentadas algumas propostas para trabalho futuro. 6.2 Conclusão Devido aos avanços tecnológicos a nível de sistemas computacionais dos quais se destacam os sistemas reconguráveis, existe cada vez mais uma tendência para a adopção deste tipo de dispositivos para aplicações na grande parte das áreas, quer de investigação quer comerciais. O grande impulsionador deste tipo de sistemas foi a FPGA, o que permitiu a construção de sistemas de grande complexidade com um reduzido tempo de projecto e uma grande exibilidade no design, que continua a aumentar com a constante evolução na área da microelectrónica, bem como o constante aparecimento de novas ferramentas CAD para implementação, síntese e simulação para sistemas digitais. Neste âmbito, é de grande interesse o desenvolvimento de novos sistemas para este tipo de dispositivos, o que, no contexto desta dissertação, foi a incorporação de um processador com um set de instruções variável remotamente, o que permitiu o desen- volvimento de uma nova forma de estruturação da arquitectura de computadores. Numa primeira parte deste trabalho, foi efectuado um estudo sobre os diferentes tipos de sistemas computacionais e a organização de um computador. Foi possível analisar os conceitos fundamentais da execução de uma instrução num microprocessador. Tentando tirar partido das grandes capacidades das FPGAs, foi então idealizada uma forma de reduzir o instruction set de um processador apenas ao estritamente 123 CAPÍTULO 6. 124 CONCLUSÃO E TRABALHO FUTURO necessário para a execução de um determinado programa, o que levou ao estudo mais aprofundado da unidade de controlo de um microprocessador, assim como a utilização de máquinas de estados nitos reprogramáveis para a sua implementação. Este facto, permitiu a construção de uma unidade de controlo reprogramável, adaptando-se em conformidade com a instrução a executar. De forma a desenvolver o que designamos de processador, foi criado um datapath com especialização para análise de vectores binários e ternários controlados pela unidade de controlo reprogramável. Através da utilização da estrutura desenvolvida, foi possível concluir as previsões para uma das grandes vantagens deste tipo de arquitectura: a redução do espaço utilizado pela unidade de controlo. No entanto, foi igualmente possível vericar a grande desvantagem deste tipo de arquitectura: tempo de latência, isto é, existe sempre um tempo necessário entre o pedido e execução da instrução, uma vez que, a unidade de controlo tem de ser programada para executar a instrução em causa. De forma a demonstrar o funcionamento, o processador desenvolvido foi acoplado a um processador de uso geral, desempenhando assim funções de co-processamento. O processador de uso geral utilizado foi, no entanto, modicado de forma a ser possível a construção de algoritmos de pesquisa combinatória, uma vez que estes necessitam de instruções para análise matricial e operações de recuo e avanço de maneira a encontrar a melhor solução. Actualmente, devido à grande auência às tecnologias sem os, é de grande interesse a utilização de sistemas rádio para a realização de várias tarefas remotamente. Neste trabalho, pretendeu-se adicionar mais uma função: a reprogramação de um tion set instruc- remotamente, bem como alteração do programa que um processador executa. Apesar da grande utilização de tecnologias sem os, continua a vericar-se a falta de componentes nas livrarias IP fornecidas pelos fabricantes de FPGA, o que motivou ainda mais a utilização de uma interface sem os para interacção remota de FPGAs. Devido à grande preocupação ambiental, houve um grande interesse na escolha de um módulo wireless de baixo consumo, pelo que foi utilizado o transceiver CC1101 do fabricante Texas Instruments. Este, provou ser uma boa escolha demonstrando uma boa relação a nível de desempenho-preço, bem como a capacidade de utilização a grandes distâncias e baixo consumo. Numa segunda parte, foi então desenvolvida toda a interface para a comunicação sem os entre FPGA, o qual englobou a construção de circuitos impressos para ligação às mesmas. Para a construção desta, foi necessário o desenvolvimento de várias camadas, começando pelo protocolo de comunicação com o módulo wireless (SPI) até à simples interface com o projectista através de FIFO. De forma a dar uma percepção ao designer da contínua recepção e transmissão foram feitas camadas intercalares, 6.3. TRABALHO FUTURO 125 automatizando o processo de conguração do transceiver para recepção e transmissão. De forma a melhorar a qualidade da ligação remota, foi igualmente implementado um protocolo de comunicação que provou uma grande imunidade à perda de pacotes sendo este protocolo implementado directamente na FPGA. Criou-se, desta forma, um componente de fácil utilização podendo ser reutilizado em muitas outras aplicações. Para nalizar, foi interligado o sistema constituído pelos dois processadores à interface sem os que permitiu a reprogramação do instruction set remotamente, bem como a alteração do programa a executar pelo processador. Para tal, foi necessária a construção de outro sistema enviando e controlando a informação necessária à reprogramação. A este sistema desenvolvido igualmente em FPGA, designou-se por Programador. De forma a demonstrar os resultados, estes foram projectados no monitor VGA, permitindo uma fácil execução dos algoritmos combinatórios (Satisfação booleana e Cobertura de Matrizes) desenvolvidos, bem como a percepção da reprogramação remotamente. É de salientar que todos os componentes apresentados neste trabalho foram implementados e vericados, funcionando todos eles correctamente. Podemos então concluir que todos os objectivos propostos neste trabalho foram concluídos, conseguindo-se, desta forma, demonstrar as capacidades dos dispositivos lógicos programáveis para construção de microprocessadores quer especializados quer de uso geral e a sua exibilidade para a construção de stack protocolares para interacção remota. 6.3 Trabalho Futuro Com o desenvolvimento deste trabalho resultaram algumas ideias para trabalho futuro destacando-se as seguintes: Optimização do processador desenvolvido Tal como foi visto, é possível reduzir ainda mais o tamanho do processador com um instruction se t variável. Isso permitirá uma maior adesão a este tipo de estrutura, principalmente para sistemas que necessitem de uma grande capacidade de periféricos, libertando, deste modo, o espaço ocupado pelo processador. Para além da redução de espaço, é necessário ainda encontrar formas mais ecientes da reprogramação da unidade de controlo, de forma a tornar o sistema o mais rápido possível. CAPÍTULO 6. 126 CONCLUSÃO E TRABALHO FUTURO Construção de um processador de uso geral com um instruction set variável remotamente Uma vez que as bases para a construção de um processador com um instruction set variável remotamente se encontram desenvolvidas, é possível pensar, agora, no desenvolvimento de um processador de uso geral com estas características, motivando a uma maior utilização deste tipo de arquitectura. O estudo efectuado, pode ser estendido, igualmente, a arquitecturas multi-core, conseguindo-se desta forma uma maior taxa de processamento. Teste e optimização da interface sem os Apesar de terem sido aproveitadas uma grande quantidade de funcionalidades do transceiver CC1101, existem características deste módulo úteis não utilizadas. Neste contexto, é de grande interesse o estudo da melhor forma para as incluir na interface construída. Uma das características mais importantes não utilizadas, consiste na utilização de funções de poupança de energia, permitindo uma redução de potência do módulo quando da inexistência de necessidade de comunicação. Outra grande capacidade não aproveitada consiste na alteração das características rádio do módulo dinamicamente, isto é, a possibilidade de congurar o transceiver para receber, por exemplo, noutra modelação, taxa de transmissão entre outras características conforme as necessidades correntes. Existe, igualmente, alguns testes que deverão ser feitos e, em caso de falha, corrigidos. Um desses exemplos consiste na ligação de múltiplos transceivers, recorrendo para isso a funcionalidade de detecção de endereços do módulo e efectuar testes à imunidade do sistema construído, uma vez que este apenas foi testado para uma ligação ponto-a-ponto. Criação de uma rede sem os para processamento paralelo em FPGAs No contexto de aproveitamento do módulo wireless é possível, como projecto futuro, propor um sistema para processamento paralelo via rádio frequência, isto é, dividir um determinado problema por diversas FPGAs numa rede e, através de um sistema central de controlo, executar um algoritmo de grande complexidade, recebendo estes os resultados provenientes dos diversos módulos. Nesta rede podemos incluir processadores com set de instruções variável o que permite uma optimização de recursos numa rede de processamento paralelo. O conceito de reprogramação do programa a executar em cada uma das FPGAs é também aplicado. 6.3. TRABALHO FUTURO 127 Reconguração remota para aplicações na área do cognitive radio. Foi concluído que as FPGAs continuam a impulsionar os sistemas de rádio cognitivo. Desta forma é possível aproveitar as suas características, de forma a tornar este conceito ainda mais emergente no quotidiano. Uma das aplicações futuras consiste na utilização de rádios que incorporam FPGAs, permitindo que estas sejam reconguradas remotamente para alteração das características de rádio a receber/transmitir. Umas das possíveis ideias, consiste em ter uma estação base que constantemente sente o espectro envolvente e, em conformidade com o que detecta, possuir a responsabilidade de recongurar os rádios cognitivos da sua rede, conseguindo-se, desta forma, facilitar a transição para uma nova frequência de transmissão de informação, o que leva inevitavelmente a um melhor aproveitamento do espectro. 128 CAPÍTULO 6. CONCLUSÃO E TRABALHO FUTURO Apêndice A Instruções do Co-Processador e Processador de Uso geral A.1 Sumário Este apêndice descreve as diversas instruções do Co-Processador e Processador de uso geral. Inicia-se com uma explicação detalhada do uxo da unidade de controlo para a execução de cada uma das instruções desenvolvidas. Para nalizar são apresentadas as instruções que compõem o processador de uso geral utilizado. A.2 Instruções do Co-Processador O Co-Processador desenvolvido pretende mostrar o funcionamento de uma arquitectura com uma unidade de controlo variável. O processador com um instruction set variável desenvolvido encontra-se representado na gura seguinte. A sua unidade de controlo bem como todos sinais de controlo encontram-se explicados no capítulo 4. 129 130APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL Figura A.1: Processador combinatório com um instruction set variável As seguintes instruções foram desenvolvidas: Contar o número de uns de um vector binário; Contar o número de uns de um vector ternário; Contar o número de zeros de um vector ternário; Contar o número máximo consecutivo de uns de um vector binário; Contar o número máximo consecutivo de uns de um vector ternário; Contar o número máximo consecutivo de zeros de um vector ternário; Vericar se um vector ternário apenas contém valores Vericar se um vector contém apenas uns/zeros; Vericar se um vector não contém apenas uns/zeros; Vericar se um vector contém K elementos a um/zero; Vericar a expressão Executar a operação vectori or vectorj; Vericar se dois vectores ternários são ortogonais; vectori and vectorj = vectorj; dont care ; A.2. INSTRUÇÕES DO CO-PROCESSADOR 131 Em todos os diagramas de uxo de sinal que se seguem, estes não contemplam um estado que indica o nal da execução de uma instrução. Isto deve-se ao facto, que o nal da execução depende do componente Master Control, podendo por isso acabar em qualquer estado. Contar o número de uns de um vector binário O diagrama de uxo de sinal correspondente a esta operação encontra-se representado na gura seguinte. Neste são representadas as saídas que se encontram activas em cada estado bem como o nome do estado. Figura A.2: Diagrama de uxo de sinal para a instrução que permite contar o número de uns de vector binário Tendo em vista contar o número de uns de um vector binário, a RFSM começa por activar a saída Y1 colocando assim o contador com o valor a 0. esta transita para o estado a1 onde é activada a saída Y3. Control Unit/Parallel to Serial De seguida, Esta irá pedir ao bloco para actualizar as entradas na RFSM para que o sinal de entrada comece a ser analisado. Neste ponto é analisada a entrada 1. Se o valor de entrada for igual a 1, a máquina irá transitar para o estado a2, caso contrário irá transitar automaticamente para o estado a1 e o ciclo repete-se. Caso transite para o estado a2, será activada a saída Y2 incrementando desta maneira o contador. Tal como foi visto o Multiplexer de saída permite seleccionar a saída de do processador combinatório. Para que a saída tome os valores que provêm do buer (ver Figura A.1) é necessário que: Y14 = 1, Y15 = 0 e Y16 = 0. 132APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL Contar o número de uns de um vector ternário Esta operação permite contar o número de uns de um vector ternário ou seja com valores lógicos `1', `0' e don't care. O diagrama de uxo de sinal correspondente encontra-se na gura seguinte: Figura A.3: Diagrama de uxo de sinal para a instrução que permite contar o número de uns de vector ternário Observando a gura anterior verica-se que é em tudo semelhante ao anterior. A única diferença é que neste caso o sinal Y11 se encontra com o valor `1'. indica ao componente Control Unit/Parallel to Serial Isto que o vector de entrada deverá ser considerado como um vector ternário, pelo que este deverá analisar o vector que contêm a posição dos don't cares dos vectores de entrada. Como o sinal Y12 se encontra a zero, quando é encontrado um don't care o valor que será enviado para a RFSM terá o valor lógico `0'. Deste modo a memória que contêm informação sobre esta operação e a anterior será semelhante mudando apenas a memória de saída contendo o valor correspondente da saída Y11 com o valor lógico a `1'. Contar o número de zeros de um vector ternário Esta operação é semelhante à anterior, no entanto ao invés de contar o número de uns, conta o número de zeros de um vector ternário. representado na Figura A.3. O seu diagrama encontra-se A.2. INSTRUÇÕES DO CO-PROCESSADOR 133 Figura A.4: Diagrama de uxo de sinal para a instrução que permite contar o número de zeros de vector ternário Observando a gura anterior, verica-se a sua semelhança com a Figura A.3. Neste caso, como queremos analisar o número de zeros, a máquina de estados reprogramável deverá transitar para o estado a2 não quando encontrar um `1' lógico mas sim um `0'. Deste modo, iremos contar não o número de uns mas sim o número de zeros. Esta máquina, para funcionar exige que outra saída seja alterada: Y12. Esta quando com o valor lógico `1' irá indicar ao componente considerar o valor lógico don't care como Control Unit/Parallel to Serial que deverá sendo `1'. Deste modo os don't cares não serão contabilizados na contagem. Encontrar o número máximo de uns consecutivos de um vector binário Esta operação permite a contagem do número máximo de uns consecutivos de um vector binário. Um possível diagrama de uxo de sinal para esta operação encontra-se representado na gura seguinte: 134APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL Figura A.5: Diagrama de uxo de sinal para encontrar o número máximo de uns consecutivos de um vector binário Nesta operação foi utilizado um novo componente do datapath: o Max Detector. A máquina de estados nitos começar por colocar o contador a zero, bem como o valor de saída do bloco Max Detector. Estas operações são executadas no estado a0. De seguida é actualizado os valores das entradas na RFSM. Se o valor de entrada possui o valor lógico `1' então o contador irá incrementar de uma unidade. Caso contrário irá ser reiniciado. Todo este processo se irá repetir até que o sinal Master Enable tome o valor `0'. Observando a Figura 6 verica-se que o valor do contador entra no bloco Detector Max pelo que será detectado o número máximo de uns consecutivos de um vector binário. A nossa saída será então o resultado devolvido pelo bloco Max Detector. Para este ser seleccionado é necessário que todas as entradas de selecção do multiplexer de saída se encontrem a zero (Y14 = Y15 = Y16 = 0). Encontrar o número máximo de uns consecutivos de um vector ternário Esta operação é em tudo idêntica à anterior. A única diferença é que temos de indicar que o vector deve ser interpretado como vector ternário. Isto é feito tal como foi dito anteriormente pela activação da saída Y11. conveniente que o valor lógico don't care Para a contagem do número de uns é seja interpretado como valor lógico `0'. Assim a saída Y12 terá de possui o valor `0'. O diagrama de uxo de sinal desta operação encontra-se representado na Figura A.6. A.2. INSTRUÇÕES DO CO-PROCESSADOR 135 Figura A.6: Diagrama de uxo de sinal para a instrução que permite contar o número máximo de uns consecutivos de um vector ternário Encontrar o número máximo de zeros consecutivos de um vector ternário A operação seguinte permite contar o número máximo de zeros consecutivos de um vector ternário. O seu diagrama de estados encontra-se representado na Figura A.7. Figura A.7: Diagrama de uxo de sinal para a instrução que permite contar o número máximo de zeros consecutivos de um vector ternário Observando a gura anterior facilmente se verica a sua semelhança com a Figura A.6. Neste caso no entanto, a máquina de estados transita para o estado a3 quando a entrada possuí o valor lógico '0' e não '1', conseguindo-se deste modo contar o número de zeros invés do número de uns. Detector É de notar igualmente a utilização do bloco tal como na operação anterior. Max 136APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL Vericar se um vector contém só uns (zeros) A operação que se segue tem como objectivo detectar se um vector binário contém todos os seus valores com o nível lógico `1' ou com o nível lógico `0'. O seu diagrama de estados encontra-se representado na gura seguinte. Figura A.8: Diagrama de uxo de sinal para a instrução que permite vericar se um vector contém só uns (zeros) A RFSM começa por colocar a saída do componente Buer/Shifter a zero. Tal é feito a partir do sinal Y1. Como a saída desta operação será o resultado deste componente é necessário que escolher esta no multiplexer de saída. Para tal basta colocar os sinais Y14 e Y15 com o valor lógico `1'. De seguida é actualizada a entrada da RFSM colocando activando a saída Y3. De forma a colocar o componente Buer/Shifter em funcionamento é activado igualmente o sinal Y17. Como se pretende que a saída seja o valor de 000000 &Y6&Y5 o sinal Y18 mantém o valor lógico `0'. De seguida é então analisada a entrada. Se esta for igual a zero a máquina de estados nitos irá transitar para o estado a2, caso contrário transita par ao estado a3. Caso o primeiro valor da entrada se encontre a zero, a saída Y5 irá ser activada. É então pedido a actualização da entrada da RFSM e são analisados os próximos valores da entrada. Se todos valores analisados se mantiverem com o valor `0' então a máquina irá permanecer no estado a2, obtendo-se assim a saída 00000001 . O mesmo acontece caso o primeiro valor analisado se encontre a `1'. Neste caso a máquina transita para o estado a3 e se nenhum `0' aparecer esta irá permanecer neste estado obtendo-se na saída 00000010 . Estando a máquina quer no estado a2 quer no estado a3 se o valor de entrada variar, esta irá transitar para o estado a4 permanecendo neste até a operação terminar. A saída neste caso será um vector com todos os valores a zero indicando que nenhuma das condições foi vericada. A.2. INSTRUÇÕES DO CO-PROCESSADOR 137 Vericar se um vector não tem uns (zeros) Esta operação é muito semelhante à anterior se tivermos em conta que é a sua negação. Isto é, um vector não possuirá uns lógicos se o vector estiver preenchido totalmente com zeros. O mesmo acontece na vericação se um vector genérico não tem zeros, isto é, apenas possui uns. Deste modo a única alteração que deverá ser feita relativamente ao diagrama anterior é colocar a saída Y5 activa invés da saída Y6 quando a máquina se encontra no estado a3 e trocar a saída Y5 por Y6 no estado a2. Deste modo quando o vector a analisar não contêm uns a saída será 00000010 e quando não possui zeros a saída tomará o valor 00000001 . Caso o vector possua zeros e uns a saída tomará o valor 00000000 como na operação anterior. O diagrama de uxo de sinal desta instrução encontra-se representado na gura seguinte. Figura A.9: Diagrama de uxo de sinal para a instrução que permite vericar se um vector não tem uns (zeros) Vericar se dois vectores ternários são ortogonais A operação que se segue tem como função determinar se dois vectores ternários são ortogonais um em relação ao outro. Vamos começar por denir quando dois vectores ternários são ortogonais: Dois vectores ternários são ortogonais quando existe pelo menos um `1' e um `0' na mesma posição mas de diferentes vectores. exemplo: Figura A.10: Ortogonalidade entre vectores Vejamos um 138APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL Caso seja encontrado um don't care em qualquer uns dos vectores numa determinada posição deste, automaticamente pode-se passar para a posição do vector seguinte. No algoritmo implementado os um don't care don't cares são tratados como valores lógicos `0'. Caso apareça num dos vectores automaticamente em ambos os vectores, na posição em causa será colocado um zero, conseguindo-se desta forma que esta posição não afecte o cálculo da ortogonalidade. O diagrama de uxo de sinal desta operação encontra-se representado na gura seguinte: Figura A.11: Diagrama de uxo de sinal para a instrução que permite vericar se dois vectores ternários são ortogonais Analisando a Figura A.11 verica-se que a máquina começa por fazer um através da saída Y1 ao bloco Buer/Shifter. da saída Y19 pela razão já explicada. Reset É de salientar igualmente a activação Dá-se inicio então à vericação. A máquina testa os dois vectores num ciclo de relógio. Caso encontre um par de valores (1,0) ou (0,1) verica-se a condição de ortogonalidade, transitando assim para o estado a5 e colocando a saída Y5 activa indicando deste modo que os vectores são ortogonais. A saída deste caso será então o resultado devolvido pelo bloco Buer/Shifter e retornará o valor 00000001 em caso armativo. Caso contrário um vector nulo. Vericar se um vector contém exactamente K componentes a um (zeros) A operação seguinte permite vericar se um determinado vector possui K componentes com o valor lógico `1' ou `0'. O valor K é introduzido na entrada Input 2 (ver Figura A.1) e o vector a analisar na entrada Input 1(ver Figura A.1). Relembrando a Figura A.1 observa-se que uma A.2. INSTRUÇÕES DO CO-PROCESSADOR das saídas disponíveis do bloco Counter/Comparator 139 indica quando o valor do vector Input 2 é igual ao valor do contador (Ones Comparator Flag) bem com a subtracção do tamanho genérico dos vectores pelo valor armazenado em Input 2 (Zeros Comparator Flag). Estas a linha Y15. ags encontram-se disponíveis para saída. Esta é escolhida activando Em relação ao diagrama de uxo de sinal, este é exactamente igual ao da operação contar o número de uns de um vector binário exceptuado a saída do multiplexer de saída que é diferemte. Deste modo a saída será 00000001 quando existe K elementos com o valor `1', 00000010 quando existem K elementos com o valor `0', 00000011 quando existem K elementos a `1' e a `0' e 00000000 quando a condição não é satisfeita. Vericar se a expressão vectori and vectorj = vectorj está correcta Esta operação permite vericar se a expressão vectori & vectorj = vectorj se encontra correcta. Para executar esta, é necessário primeiro efectuar a operação and. Para tal é necessário activar a saída Y13 para que a segunda entrada da RFSM seja o resultado da operação vectori & vectorj. Depois de executada a operação and é necessário fazer uma operação de comparação entre o resultado da operação and e o vectorj. É de notar que para a operação esteja correcta o vectorj deverá ser a entrada Input 1 e o vectori a entrada Input 2. O diagrama de uxo de sinal desta operação encontra-se representado na gura seguinte: Figura A.12: Diagrama de uxo de sinal para a instrução que permite vericar se a expressão vectori and vectorj = vectorj está correcta Nesta operação o resultado provém do componente Buer/Shifter. Tal como em 140APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL operações anteriores inicia-se a operação fazendo um reset ao bloco Buer/Shifter. De seguida a máquina transita para o estado a1. Inicialmente considera-se que a expressão se encontra correcta, activando-se desta maneira a saída Y5. São analisadas então em cada ciclo de relógio um par de entradas. A maquina irá manter-se no estado a1 até que seja encontrado um par (1,0) ou (0,1) indicando desta forma que a expressão se encontra incorrecta. Quando tal acontece a máquina transita para o estado a4 mantendo-se neste até que a execução termine. Neste estado a saída Y5 encontra-se inactiva indicando deste modo que a expressão se encontra incorrecta. Assim quando a condição vectori & vectorj = vectorj se verica a saída será 00000001 , caso contrário 00000000 . Executar a operação vectori or vectorj Para esta operação foi utilizado uma nova funcionalidade: fer/Shifter. o Shifter do bloco Buf- Esta irá permitir formar o resultado bit a bit. O resultado da operação é dado na saída Y5 a cada ciclo de relógio e shiftado de uma unidade, formando-se deste modo um vector com o resultado da operação or. O diagrama de uxo de sinal correspondente encontra-se representado na gura seguinte: Figura A.13: Diagrama de uxo de sinal para a instrução que permite executar a operação vectori or vectorj Tal como a operação anterior, a sequência de operações inicia-se com uma operação de reset, no qual coloca o vector de saída a zero. De seguida são actualizadas as entradas da RFSM procedendo-se à análise destas. Começando pela primeira entrada, caso esta possua um valor lógico `1' imediatamente a maquina transita para o estado a4 uma vez que o resultado irá dar `1' sem que seja necessário analisar a segunda entrada. Caso A.2. INSTRUÇÕES DO CO-PROCESSADOR 141 a primeira entrada possua o valor lógico `0' é necessário avaliar a segunda entrada. Se a segunda entrada possuir novamente o valor lógico `0' a máquina irá transitar para o estado a3 resultando uma saída Y5=0. A activação do sinal Y17 quer no estado a3, quer no estado a4 irá indicar ao bloco Buer/Shifter que deverá receber o valor indicado por Y5 e executar um shift lógico. Caso a segunda entrada tome o valor `1' então o resultado da operação será `1' colocando assim a máquina no estado a4 sendo colocada neste a saída Y5 com o valor lógico `1'. valores obtêm-se o resultado na saída do bloco Após o processamento de todas o Buer/Shifter. Vericar se um vector apenas possui don't cares Com esta operação pretende-se se saber se um dado vector possui apenas valores don't Care1 que liga à entrada x3. Através deste é possível valor don't care ou não. Foi utilizado o bloco Coun- care. Para isso foi utilizado o sinal saber se a entrada x1 possui o ter/Comparator para efectuar esta operação. O diagrama de uxo de sinal encontra-se representado na gura seguinte: Figura A.14: Diagrama de uxo de sinal para a instrução que permite vericar se um vector apenas possui don't cares Inicialmente é colocado o contador com o valor 0. No estado seguinte é incrementado don't cares. É então analisada a entrada x3 que indica se amostra actual possui o valor don't care. Se tal acontecer é analisada a amostra seguinte. Se todas as amostras possuírem don't cares a maquina encontrar-se-á sempre no estado a2 não sendo deste modo alterado de uma unidade. Desta forma é considerado que o vector apenas possui o valor do contador que se encontra com o valor 00000001 . Se uma das amostras possuir o valor lógico `0' a máquina irá transitar para o estado a3 fazendo um reset ao contador colocando na sua saída o valor 00000000 . Esta irá manter-se no estado a3 mantendo-se neste até ao nal da execução. 142APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL A.3 Instruções do processador de uso geral O processador de uso geral utilizado após algumas modicações tem a seguinte estrutura. Na gura seguinte é já exibida a ligação ao processador desenvolvido. Figura A.15: Processador de uso geral e ligação ao co-processador O instruction set do processador original foi igualmente alterado de forma a ser possível a realização dos algoritmos de satisfação booleana e cobertura de matrizes. Este encontra-se representado na tabela seguinte. A.3. INSTRUÇÕES DO PROCESSADOR DE USO GERAL Tabela A.1: Instruction Set do processador de uso geral 143 144APÊNDICE A. INSTRUÇÕES DO CO-PROCESSADOR E PROCESSADOR DE USO GERAL Apêndice B Módulo CC1101 B.1 Sumário Este apêndice apresenta algumas informações adicionais sobre o módulo wireless utilizado, bem como os desenhos das placas de circuito impresso desenvolvidas. B.2 Restrições temporais Interface SPI Tal como foi visto é necessário ter atenção às restrições temporais na ligação com o módulo. Estas encontram-se apresentadas detalhadamente na guraB.1 e tabelaB.1. Figura B.1: Diagrama temporal do módulo CC1101 [24] 145 APÊNDICE B. MÓDULO CC1101 146 Tabela B.1: Restrições temporais do módulo CC1101 [24] Comutação entre estados A tabela seguinte mostra os tempos de atraso na transição entre estados de operação. Tabela B.2: Tempos de atraso na comutação entre estados [24] B.3 Mapeamento do módulo CC1101 A tabela seguinte mostra o respectivo mapeamento do módulo CC1101. B.4. COMMAND STROBES 147 Tabela B.3: Mapeamento dos diversos registos do módulo CC1101 B.4 Command Strobes A tabela seguinte ilustra os diversos command strobes possíveis no módulo CC1101 bem como a descrição da sua funcionalidade. APÊNDICE B. MÓDULO CC1101 148 Tabela B.4: Endereço dos command strobes e sua função [24] B.5 Esquema do Kit CC1101EMK433 Figura B.2: Esquema do Kit CC1101EMK433 adaptado para uma frequência de trabalho de 433MHZ B.6. PLACAS DE CIRCUITO IMPRESSO CONSTRUÍDAS B.6 Placas de circuito impresso construídas Placa de Debug Figura B.3: Placa de Figura B.4: Placa de Debug - Top Layer Debug - Bottom Layer 149 150 APÊNDICE B. MÓDULO CC1101 Placa de ligação do módulo wireless às placas de desenvolvimento Figura B.5: Placa de ligação do módulo wireless às placas de desenvolvimento - Layer Figura B.6: Placa de ligação do módulo wireless às placas de desenvolvimento - Layer Top Bottom Bibliograa [1] http://www.willsmith.org/collectible_chips/. [2] http://www.beis.de/Elektronik/DPLCM/DPLCM.html. [3] http://www.goldmine-elec products.com/prodinfo.asp?number=A20321. [4] Xilinx. Programmable logic design - quick start handbook, Junho 2006. [5] Xilinx. Revolutionary architecture for the next generation platform fpgas, Dezembro 2003. [6] http://www.xilinx.com/company/gettingstarted/index.htm. [7] http://labspace.open.ac.uk/mod/resource/view.php?id=360467. [8] http://www.designreuse.com/news/16992/ttpcontrolleripalteracostcyclonefpgafamiliesaerospace applications.html. [9] http://www.semiconductors.bosch.de/en/20/ttcan/index.asp. [10] http://www.digilentinc.com/Products/Detail.cfm?NavTop=2&NavSub= 521&Prod=NETFPGA. [11] http://www.phxmicro.com/Training/AMCC/PPC440Core.html. [12] http://www.hardwarezone.com.au/reviews/view.php?cid=10&id=1725. [13] http://www.networkworld.com/community/node/20520. [14] Petterson A. David; Hennessy L. John. hardware and software interface. Computer Organization and Design, The 3th edition, 2005. [15] http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_project_navigator_overview.htm. [16] Xilinx. Xilinx ISE Design Suite 10.1 Software Manuals, 2008. 151 BIBLIOGRAFIA 152 [17] http://www.cadinformatique.com/images/ModelSim_Des_big.jpg. [18] http://www.martijnthe.nl/publications/electronic-toy prototype/index.html. [19] Celoxica. RC 10 Manual. www.celoxica.com. [20] http://www.arl.wustl.edu/ lockwood/class/cse566 f06/projects/photos.html. [21] Digilent. Nexys 2 Manual. www.digilentinc.com. [22] 451&Prod=NEXYS2 http://www.digilentinc.com/Products/Detail.cfm?NavPath=2, 400. [23] Valery Sklyarov. Recongurable models of nite state machines and their imple- Journal of Systems Architecture, 47:10431064, 2002. mentation in fpgas. CC1101 Low-Cost Low-Power Sub-1GHz RF Transceiver Da- [24] Texas Instruments. tasheet. www.ti.com. [25] Mouser Electronics. [26] http://www.embedded.com/columns/technicalinsights/184400800?_requestid=190366. [27] CC1101 Design Note DN503. [28] http://www.xilinx.com/products/v6s6.htm. [29] Iouliia Skliarova. combinatória. Arquitecturas reconguráveis para problemas de optimização PhD thesis, Universidade de Aveiro, 2004. [30] ece.ut.ac.ir/classpages/S84/LogicLab/FPGA.pdf. [31] Xilinx. Xilinx CPLD Applications Handbook, 2005. [32] http://www.xilinx.com/company/history.htm. EDK Concepts, To and Techniques A Hands-On Guide to Eective Embedded System Design, 2009. [33] Xilinx. [34] http://www.xilinx.com/company/gettingstarted/index.htm. [35] http://www.xilinx.com/esp/index.htm. [36] http://bwrc.eecs.berkeley.edu/People/Grad_Students/rcshah/documents/ttcan.ppt. [37] http://www.interfacebus.com/Programmable_Logic.html. [38] http://www.xilinx.com/products/virtex5/. [39] http://www.xilinx.com/products/spartan3a/. [40] A. Dewey and A. Gadient. Vhdl motivation. IEEE Design & Test of Computers, 3(2):1216, April 1986. [41] Narinder Lall Eric Cigan. Integrating matlab algorithms into fpga designs into fpga designs, 2005. [42] http://encyclopedia2.thefreedictionary.com/instruction+set+architecture. [43] http://wiki.answers.com/Q/Dierence_between_von_newman_and_harvard_computer_arch [44] http://encyclopedia2.thefreedictionary.com/addressing+mode. [45] http://www.bitpipe.com/tlist/Coprocessors.html. [46] http://www.embedded.com/columns/technicalinsights/184400800?_requestid=190366. PicoBlaze 8-bit Embedded Microcontroller User Guide for Spartan-3, Virtex-II, and Virtex-II Pro FPGAs, 2008. [47] Xilinx. [48] http://www.xilinx.com/products/design_resources/proc_central/microblaze_arc.htm. [49] Xilinx. Embedded Processor Block in Virtex-5 FPGAs Reference Guide, 2009. [50] http://www.eda experten.de/pdf/ModelSimDesignerDS60.pdf. [51] http://www.cadinformatique.com/HDL_la_simulation.htm. [52] Peter J. Ashenden. Digital Design, An Embedded Systems Approach Using VHDL. 2008. [53] http://www-md.e-technik.uni rostock.de/lehre/vlsi_i/proc8/index.html. [54] Skliarova I. ; Sklyarov V. Design methods for fpga-based implementation of combinatorial search algorithms. [55] http://sweet.ua.pt/ a16360/index.html. [56] http://www.terabeam.com/support/calculations/fresnel zone.php. Nomenclature ASIC - Application Specic Integrated Circuits CAD - Computer-Aided Design CAM - Content-addressable memory CCA - Clear Channel Assessment CI - Circuito Integrado CLB - Congurable Logic Blocks CPHA - Clock Phase CPLD - Complex Programmable Logic Device CPLD - Complex Programmable Logic Device CPOL - Clock Polarity CPU CS - Central Processing Unit Chip Select DCM - Digital Clock Manager DRAM EDK - Dynamic Random Access Memory Embedded Development Kit EEPROM EPROM FIFO FPGA - Electrically Erasable Programmable Read Only Erasable Programmable Read Only Memory First In, First Out Field Programmable Gate Array 155 FSM - Finite State Machine GAL - Generic Logic Array HDL - Hardware Description Languages HSPDA IOB IP - High-Speed Downlink Packet Access Input/Output Block Intelectual Property ISA - Instruction Set Architecture ISE - Integrated Synthesis Environment ISE - Integrated Synthesis Environment LNA - Low Noise Amplier LSI - Large Scale Integration LSI - Large Scale Integration LVDS - Low-voltage dierential signaling Matlab - MATrix LABoratory MISO - Master Input, Slave Output MOSI - Master Output, Slave Input MPEG - Moving Picture Experts Group MSI - Medium Scale Integration MSI - Medium Scale Integration NoC - Network On Chip PA PAL PCI PDA - Power Amplier Programmable Array Logic Peripheral Component Interconnect Personal Digital Assistants PLA - Programmable Logic Array PLD - Programmable Logic Device PROM RAM RF - Programmable ROM Random Access Memory Rádio Frequência RFSM RISP - Recongurable Finite State Machine Reduced Instruction Set Processor ROM - Read Only Memory SCLK - SPI Clock SoC - System On Chip SPI - Serial Peripheral Interface SPLD - Simple Programmable Logic Device SPLD - Simple Programmable Logic Device SRAM - Static Random Access Memory SS - Slave Selected SSI - Small Scale Integration SSI - Small Scale Integration TTCAN - Time Triggered Controller Area Network TTCAN - Time-Triggered CAN TTP - Time-Triggered Protocol UCF - User Constraint File VISC - Variable Instruction Set Computer VLSI - Very Large Scale Integration VLSI - Very Large Scale Integration WCDMA WiMAX - Wideband Code Division Multiple Access Worldwide Interoperability for Microwave Access