PROJETO DE ESTRUTURAS DE UM PROCESSADOR RISC PARA APLICAÇÃO EM UM SOC PARA CONTROLE DE IRRIGAÇÃO J. D. Costa, G. S. Beserra, G. M. Araújo, J. C. Marra, A. F. Rocha, J. C. Costa Universidade de Brasília-Brasil [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] RESUMO Neste trabalho foram implementadas as estruturas que compõem um processador RISC CMOS de 16 bits, em tecnologia 0.35 um, utilizando uma metodologia hierárquica de projeto. O processador em questão é parte integrante de um sistema em chip (SoC) para comunicação sem fio em um sistema de controle de irrigação. Foram desenvolvidas uma ULA de 16 bits, a unidade de controle do processador, o banco de registradores, as memórias ROM e RAM e o controlador de interrupção utilizando técnicas de projeto orientado à testabilidade. Os módulos foram projetados e simulados utilizando ferramentas do CADENCE, e atenderam às especificações previamente definidas. Após validadas, as estruturas foram enviadas para fabricação. ABSTRACT In this paper structures of a CMOS 16-bit RISC microprocessor in technology 0.35 um were developed using a hierarchical approach. This microprocessor is part of a wireless communication System-on-Chip (SoC), which will be used for irrigation control on crops. A 16-bit ALU (Arithmetic-Logic Unit), a control unit, registers, ROM and RAM memories were designed, in this work, using DFT (Design for Testability) techniques. Details of the project, layouts and simulations are also shown in this text. The microprocessor’s modules were designed and simulated in CADENCE environment. The results obtained in simulations matched the design specifications. After validation, the structures were prototyped. PROJETO DE ESTRUTURAS DE UM PROCESSADOR RISC PARA APLICAÇÃO EM UM SOC PARA CONTROLE DE IRRIGAÇÃO J. D. Costa, G.S. Beserra, G. M. Araújo, J. C. Marra, A. F. Rocha, J. C. Costa Universidade de Brasília-Brasil RESUMO Neste trabalho foram implementadas as estruturas que compõem um processador RISC CMOS de 16 bits, em tecnologia 0.35 um, utilizando uma metodologia hierárquica de projeto. O processador em questão é parte integrante de um sistema em chip (SoC) para comunicação sem fio em um sistema de controle de irrigação. Foram desenvolvidas uma ULA de 16 bits, a unidade de controle do processador, o banco de registradores, as memórias ROM e RAM e o controlador de interrupção utilizando técnicas de projeto orientado à testabilidade. Os módulos foram projetados e simulados utilizando ferramentas do CADENCE, e atenderam às especificações previamente definidas. Após validadas, as estruturas foram enviadas para fabricação. 1. INTRODUÇÃO O constante avanço tecnológico dos semicondutores e o aumento do mercado de dispositivos eletrônicos têm impulsionado o desenvolvimento de sistemas computacionais em um único circuito integrado (C.I.). Tais sistemas são tipicamente compostos de milhões de transistores que englobam hardware digital e analógico e são conhecidos como SoC’s (Systems on Chip). O projeto desse tipo de sistema é algo complexo uma vez que devem ser levadas em consideração questões como portabilidade, limite de consumo de potência, desempenho, confiabilidade e interferência eletromagnética, entre outras. A Universidade de Brasília, em conjunto com outras sete instituições (USP, UFSC, UFPE, UFRJ, Unicamp, UFRGS e EMBRAPA) vem desenvolvendo um Soc para controle de irrigação [1]. Este sistema tem como objetivo determinar a necessidade hídrica das culturas a partir da medição da umidade do solo e de dados meteorológicos, visando a otimização da utilização de água e de energia. A implementação desse sistema faz parte do projeto “Sistema em chip, Microssistemas e Nanoeletrônica”, SCMN, dentro do programa “Instituto Milênio”, financiado pelo Ministério da Ciência e Tecnologia (MCT). O sistema em chip proposto é composto por uma placa de circuito impresso, que disponibiliza a interface para programação do chip via PC. A figura 1 apresenta seu arranjo. Figura 1 - Hardware do Sistema de comunicação sem fio [2] O C.I. de comunicação (SoC) foi projetado para tecnologia AMS 0.35 µm CMOS. O chip possui um transceptor RF operando na faixa de 902 a 928 MHz, um microprocessador RISC de 16 bits operando em 10 MH, uma memória SRAM de 8 KB, uma memória ROM de 2KB e interfaces de comunicação analógica e digital. [3] Neste artigo é apresentado o projeto das estruturas que formam o processador do sistema em questão. O texto está divido em cinco seções. Após esta introdução, é feita uma breve descrição do processador. Na seção 3 o projeto dos módulos que compõem o processador e das unidades de memória é apresentado. A seção 4 discute as técnicas de projeto orientado à testabilidade usadas neste trabalho. Por fim, na seção 5, são apresentadas as conclusões sobre este projeto. 2. DESCRIÇÃO DO PROCESSADOR Baseado em arquitetura RISC de 16 bits, o processador possui um banco de registradores com 16 unidades de 16 bits, especificados na Tabela 1. Doze posições de memória são utilizadas como registradores para comunicação com as interfaces das unidades de RF, de comunicação serial e de conversão A/D. Registradores Instruções $zero, $t0, $t1, $t2, $a0, Add, Sub, Addi, Shift, And, $a1, $a2, $s0, $s1, $s2, $s3, Or, Not, Xor, Slt, Lw, Sw, $int, $gp, $sp, $pc, $ra Lui, Beq, Blt, J, Jal Tabela 1. Registradores e Instruções do processador [2],[4]. Estão contempladas 16 instruções lógicas, aritméticas, de transferência de dados e de desvios condicionais e incondicionais, apresentadas na Tabela 1. A arquitetura do processador também provê a execução de procedimentos (sub-rotinas), três tipos de interrupção e duas sinalizações de erro. A unidade lógicoaritmética opera em ponto fixo e seu somador é do tipo carry lookahead [5]. Estão presentes também, unidades de memória do tipo RAM e ROM. Na Figura 5 estão apresentados o caminho de dados e as linhas de controle do processador e na figura 6 pode ser visto o diagrama de estados do sistema de controle. as operações soma, subtração, AND, OR, XOR, NOT, LUI (carregamento dos 8 bits mais significativos), deslocamentos à direita e à esquerda e comparação entre as duas entradas. Esse dispositivo opera em ponto fixo e possui um somador do tipo Carry lookahead. A figura 3 apresenta o diagrama da ULA de 16bits. 3. IMPLEMENTAÇÃO Dada a complexidade da realização do projeto do sistema proposto, uma abordagem hierárquica foi adotada. A figura 2 apresenta um diagrama de blocos que ilustra as etapas do desenvolvimento do mesmo. Figura 3- Diagrama de Blocos da ULA A figura 4 apresenta a simulação de uma subtração. As entradas A e B são inseridas serialmente (vide figura 3). Os padrões utilizados neste teste foram: A = 0000 0000 0001 0101 e B= 0000 0000 0000 0110. A saída_4 apresenta o resultado da operação. Para reduzir o número de pinos do chip foi usado um conversor paralelo-serial de 16 bits (figura 3) que funciona conforme o descrito a seguir. Quando L_S =1 os dados presentes nas entradas do conversor são carregados nos flip-flops que o compõem. Quando L_S=0 os dados de entrada são colocados na saída conversor a cada período de clock. Para que o primeiro valor (menos significativo) apareça na saída não é necessário que L_S seja zero. Basta que o valor já esteja carregado (que L_S tenha sido 1) e que o clock esteja alto. Da figura 4 pode-se ver que o valor obtido nesta saída foi 0000 0000 0000 1111, conforme o esperado. Figura 2 – Diagrama de Metodologia de projeto Até o presente momento foram implementados e enviados para fabricação os módulos que compõem o processador em questão. Para simular estes blocos foi usada a ferramenta SpectreS do pacote CADENCE [6]. Esta seção apresenta detalhes sobre o projeto destes módulos, bem como alguns dos resultados de simulações obtidos. 3.1. Unidade Lógico-aritmética (ULA) A unidade lógico-aritmética proposta é um dispositivo combinacional que aceita duas palavras de 16 bits e realiza Figura 4 – Simulação da ULA A figura 7 apresenta o layout completo da unidade lógico-aritmética, incluindo estruturas de teste. Figura 5: caminho de dados e linhas de controle [2] Figura 6: Máquina de Estados Finitos do Sistema de Controle [2] Figura 7 – Layout da ULA (Área: 1216,0µm x 432,5µm) 3.2. Unidade de controle A unidade de controle do processador proposto foi implementada usando uma PLA (matriz lógica programável) que recebe como entradas o estado corrente (S3, S2, S1, S0 - figura 8) e o campo do código de operação do registrador de instruções (Inst0...Inst3). Na saída, são apresentados os sinais necessários ao controle do caminho de dados tais como Wins, Wreg ,etc (vide figuras 6, 8) e o número do estado seguinte (P3, P2, P1, P0). O funcionamento da unidade de controle é determinado pela máquina de estados ilustrada na figura 6. A figura 8 apresenta um diagrama deste módulo. O projeto da PLA é baseado em pseudo-NMOS NOR [7] Entre as principais vantagens dessa PLA, incluem-se a simplicidade e o tamanho reduzido. DefWPC ActInt 0 0 1 DesvPc0 1 0 1 DesvPC1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 Tabela 2- Sinais de Controle para a Instrução jal LouD RegMem 0 0 0 MemReg 2 MemReg 1 MemReg 0 T1Ula 0 0 1 OpUla0 T2Ula0 1 0 1 OpUla1 T2Ula1 0 1 1 PCreg0 Wmem 0 0 0 PCReg1 WPC 1 0 1 PCReg2 Wreg 1 0 1 Rmem Wins 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 instrução seguinte no registrador $ra. Conforme pode ser visto na figura 6 esta instrução passa pelos estados zero, um e doze. A tabela 2 apresenta os valores esperados para os sinais de controle para cada um desses estados. Da figura 9 pode-se observar que a instrução é carregada serialmente e, após 4 ciclos de relógio (CLK1), os bits ficam disponíveis na entrada da PLA. A PLA então realiza as operações necessárias e disponibiliza as saídas de controle, que podem ser lidas de forma serial na saída5, após 22 pulsos de clock. Na saída da PLA também ficam disponíveis os bits que determinam o estado seguinte. Esses bits podem ser observados depois de 4 pulsos de clock na saída6. Quando CLK2=1 o estado seguinte passa para o estado atual (S3, S2, S1, S0 – vide figura 8). Figura 9- Simulação da Unidade de Controle (Instrução jal) A figura 10 apresenta o layout da unidade de controle, incluindo estruturas de teste. Figura 8 – Unidade de Controle A figura 9 apresenta a simulação da instrução jal que realiza um desvio incondicional salvando o endereço da Figura 10 – Layout da Unidade de Controle (271,5µmx290,0µm) 3.3. Controle de Interrupção O sistema projetado comporta 3 tipos de interrupção e duas sinalizações de erro, listadas a seguir: Recepção de dados pela unidade de RF (Int=1) Recepção de dados pela porta serial (Int=2) Recepção de dados pela interface A/D (int=3) Erro de overflow (ULA) Erro de endereçamento (Memória) O tratamento das interrupções se dará por meio de três operações: verificação da ocorrência de interrupção ao final de cada ciclo de instrução, armazenamento do endereço da instrução em execução e do tipo de interrupção gerada no registrador $int (no caso da existência de um pedido de interrupção), e por fim, a transferência da execução do programa para um endereço de memória predeterminado, onde uma instrução de desvio encaminhará a execução para a rotina de tratamento da interrupção. Para efetuar essas tarefas, foi incluído um módulo de apoio definido como controlador de interrupções, o qual concentra as atividades de comunicação com a unidade de controle e preparação dos dados para armazenamento. A unidade, de uma maneira geral, recebe os sinais de interrupção e erro e requisita a interrupção (ReInt) ao controle, quando necessário. Quando isto acontece, o circuito informa às interfaces que as solicitações de interrupção estão bloqueadas (IntIdle = 0) e impede a entrada dos pedidos no controlador, de modo que apenas uma interrupção fique registrada. O circuito mantém o sinal ReInt ativado até que um sinal AcInt seja recebido, indicando que o pedido de interrupção foi atendido pelo controle do processador e que se encontra em tratamento. Para tratar do caso em que dois ou mais pedidos de interrupções ocorrem simultaneamente foi incluído um sistema de prioridade. A figura 11 apresenta o esquemático do controlador de interrupções. A figura 12 apresenta a simulação do caso em que ocorre um erro de endereçamento de memória. Nesta figura pode-se observar que inicialmente o sistema está ocioso (IntIdle=0). Quando ocorre o erro de memória, um pedido de interrupção é feito ativando o sinal Reint. Este sinal permanece ativado até que o processador comece a tratar a interrupção (ActInt=1). Quando isto ocorre, IntIdle é desativado, possibilitando a solicitação de novas interrupções. Os sinais Bit3...Bit0 indicam ao processador qual a interrupção foi requisitada (no caso do erro de overflow : B3=1, B2=0,B1=0,B0=0). Figura 12 – Simulação do Controlador de Interrupções A figura 13 apresenta o layout do controlador de interrupções proposto, incluindo estruturas de teste. Figura 13 – Layout do controlador de interrupções (Área: 132,0µm x 111,0µm) Figura 11- Controlador de Interrupções 3.4. Memória ROM Para armazenar as rotinas de inicialização do sistema em chip será necessária uma memória ROM. A estrutura escolhida foi uma ROM MOS de 2kB, sendo que, como cada palavra será de 16 bits, são necessários 10 bits de endereço (210x16 bits = 16384 bits). Para testar essa estrutura, foi implementada uma ROM de 256 bits (4 bits de endereço). A ROM MOS consiste em uma matriz de transistores. As portas são conectadas às linhas de palavras, as fontes são aterradas, e os drenos são conectados às linhas de bits (figura 13). Cada linha de bit está conectada à fonte de alimentação via um transistor de carga PMOS. Se houver um transistor NMOS em uma célula particular, essa célula está armazenando um “0”, caso contrário, a célula está armazenando um “1”. O decodificador de linhas seleciona uma das palavras pelo aumento da tensão na linha da palavra correspondente. Os transistores das células conectados a essa linha de palavra conduzirão, puxando a tensão das linhas de bits para o nível lógico zero. As linhas de bits que estão conectadas às células sem transistores permanecerão com a tensão da fonte de alimentação por causa da ação dos transistores de carga PMOS (pull-up). Desse modo, os bits da palavra endereçada podem ser lidos [8]. Uma rotina de tratamento de interrupção foi utilizada como exemplo para programar a ROM. Da mesma forma que na ULA, foram inseridos conversores cujo funcionamento é análogo. Como exemplo, a palavra armazenada na primeira posição (0000) da ROM foi 0010 0111 0000 0000. A figura 15 mostra o resultado da simulação para a0=a1=a2=a3=0. Figura 15 – Leitura da palavra armazenada na posição 0000 O layout final da memória ROM implementada, incluindo a estrutura de teste, está representado na figura 16. O teste foi feito incluindo-se multiplexadores, cujo sinal de seleção determina se a ROM funcionará em modo teste ou em modo normal. No modo teste, a saída dos conversores é uma combinação das entradas de endereço. Figura 13 – Trecho do circuito da ROM O decodificador de linha utilizado possui 4 bits de entrada e 16 bits de saída, conforma mostra a figura 14. Figura 16 – Layout da memória ROM (331,9µmx233,8µm) Figura 14 – ROM implementada 3.5. Memória RAM Para atender às especificações do sistema, foi escolhida uma memória RAM estática (SRAM) de 8kB, com endereçamento de palavras de 16 bits. Nesta etapa do projeto, para verificar o desempenho da solução escolhida, foi implementada uma SRAM de 128 bits (23 x 16 bits). A seguir é apresentada a estrutura implementada (figura 17). 3.5.2. Amplificador sensor O amplificador sensor usado (figura 19) foi um sensor de corrente, que consiste em 4 transistores PMOS, de dimensões iguais, numa configuração cruzada [9]. Ele é selecionado quando sel = 0. Quando a célula é acessada, há uma diferença de corrente entre as linhas de bit na entrada do amplificador, que é igual à corrente consumida pela célula. Para a leitura do dado na célula, foi acrescentado um estágio que converte a corrente diferencial entre as saídas do amplificador (DL e –DL) em tensão. Este amplificador consome menos corrente e é mais rápido do que o amplificador diferencial convencionalmente usado. Figura 17 – Arquitetura da SRAM A matriz consiste em células nas quais os bits são armazenados. O decodificador de linha ativa uma das 23 palavras. Trata-se de um circuito lógico combinatório que seleciona a palavra de acordo com o endereço correspondente na sua entrada. A matriz é formada por células 6T (6 transistores). A pré-carga alimenta as linhas bit e –bit antes de uma operação de leitura. Ela é ativada quando controle = 1. Quando write = 1 e sel = 1, o circuito de escrita armazena o valor de Din na palavra selecionada pelo decodificador. Quando write = 0 e sel = 0, o amplificador sensor é habilitado e, a partir da diferença de corrente entre as linhas de bit, mostra 0 ou 1 na saída, dependendo do valor armazenado na célula. 3.5.1. Célula 6T A célula 6T consiste em um par cruzado de inversores conectados por dois transistores de acesso às linhas bit e – bit (figura 18). Os transistores de acesso conduzem quando a linha da palavra (W) é selecionada [7]. Figura 19 – Amplificador sensor 3.5.3. Circuito de escrita O objetivo de uma operação de escrita é aplicar tensões na célula RAM de forma que ocorra uma mudança de estado na mesma. A figura 20 mostra o circuito utilizado, onde os transistores são habilitados para permitir que o dado e seu complemento sejam carregados nas linhas de bit [7]. Figura 20 – Circuito de escrita Figura 18 – Esquemático da célula 6T 3.5.4. Pré-carga O circuito de pré-carga (figura 21) carrega as linhas de bit com uma tensão próxima de Vdd antes de uma operação de leitura. Nas outras etapas de funcionamento, a précarga permanece desabilitada (controle = 0) [10]. Figura 23 – Layout da SRAM (274,4µmx521,3µm) 3.6. Banco de registradores Conforme descrito no item 2, o banco possui 16 registradores de 16 bits. A figura 24 mostra a estrutura da célula utilizada nos registradores. O circuito possui uma porta de escrita e duas de leitura [3]. Figura 21 – Pré-carga 3.5.5. Decodificador de linha O decodificador de linha seleciona uma das 8 palavras da matriz SRAM de acordo com os 3 bits de endereço em sua entrada. É um circuito combinacional implementado com portas NOR. 3.5.6. Simulação Foram feitas simulações para operações de escrita e de leitura, conforme é mostrado na figura 22. Neste caso, foi escrito o dado 0000 0000 1111 1111 nas posições 000, 001 e 100. Em seguida, foi feita uma leitura em cada uma dessas posições. Figura 24 – Célula de um registrador [3] Na simulação a seguir (figura 25), foram realizadas na célula duas operações de escrita (escreve 0 e escreve 1), e operações de leitura utilizando a porta “a”, a porta “b”, ambas as portas simultaneamente. Figura 22 – Simulação da SRAM O layout completo da SRAM implementada está representado na figura 23. Figura 25 – Simulação de uma célula A figura 26 mostra o layout do banco de registradores completo, incluindo a estrutura de teste, que consistiu na inserção de alguns multiplexadores cujo sinal de seleção define as saídas data_a e data_b. No modo de teste, as saídas dos multiplexadores correspondem à saída de uma única célula isolada, enquanto que no modo normal, as saídas dos multiplexadores correspondem às saídas do banco completo. 6. AGRADECIMENTOS Ao CNPq, à CAPES e à FINATEC pelo apoio financeiro. 7. REFERÊNCIAS [1] PADCT, Projeto Instituto do Milênio SCMN [Millenium Institute], tech. report, MCT/PADCT, Brazil, 2000. [2] G. M. Benício, Projeto de Microprocessador RISC 16-Bit para Sistema de Comunicação sem Fio em Chip, (dissertação de mestrado em engenharia elétrica), Universidade de Brasília, Brasília, 2002. [3] J. D. Costa et all., “Modulo I.P. de um processador para aplicações embarcadas sem fio” [Wireless Microprocessor IP Module], Proceedings IX Iberchip Workshop, Iberchip, Havana, Cuba, 2003 (in Portuguese). Figura 26 – Layout do banco (878,9µmx880,8µm) 4. PROJETO VOLTADO PARA TESTABILIDADE As técnicas utilizadas no projeto orientado à testabilidade (Design for Testability –DFT) permitem o aumento da controlabilidade e observabilidade do circuito com um pequeno acréscimo de hardware. As técnicas utilizadas nesse projeto foram o particionamento do circuito em módulos de menor complexidade e a inserção de pontos de teste. Para reduzir o número de pinos do chip foram utilizados conversores serial-paralelo (para as entradas) e paralelo-serial (para as saídas). É válido ressaltar estes conversores não serão utilizados na versão final do sistema. Para gerar os padrões de teste dos circuitos mais simples foi utilizado o método exaustivo. Já para os blocos mais complexos foi feito um modelamento de falhas (stuck at) para simplificar o teste. 5. CONCLUSÃO Neste artigo foram projetadas as estruturas que compõem o processador, usando técnicas de projeto orientado à testabilidade. Com a ferramenta CADENCE, foram feitos layouts e simulações desses módulos isolados, que foram enviados para fabricação. Após o retorno desses dispositivos da foundry serão realizados testes que permitirão a análise do seu funcionamento e a verificação de desempenho. Esses resultados serão de suma importância para a integração desses módulos e realização do processador como um todo. [4] R. R. Linder, Linguagem de Máquina para um processador num sistema em chip (SoC), (dissertação de mestrado em engenharia elétrica), Universidade de Brasília, Brasília, 2002. [5] Patterson, David A. e Hennessy, John L., "Organização e Projeto de Computadores – A interface Hardware e Software".Morgan Kaufmann Publishers, 1998. [6] CADENCE DESIGN SYSTEM INC. Version 4.4.6 [7] WESTE, N. e ESHRAGHIAN, K., "Principles of CMOS VLSI Design – A Systems Perpective".AddisonWesley, 1985. [8] Sedra, Adel S. e Smith, Kenneth C. , Microeletrônica Makron Books, 2000. [9] E. Seevinck, “A current sense-amplifier for fast CMOS SRAMs”, Symposium on VLSI Circuits, IEEE, 1990. [10] A. Chandrakasan et all.(editors), “Design of HighPerformance Microprocessor Circuits”, IEEE Press, 2001.