projeto de estruturas de um processador risc para

Propaganda
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.
Download