Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Volume
MINI-PROJECTOS
V0.1
JOO M. P. CARDOSO
Mini-Projectos
Joo M. P. Cardoso Faculty of Sciences and Technology University of Algarve Cell Phone +351 916629046 Email: jmpc@acm.org URL: http://w3.ualg.pt/~jmcardo Portugal
ndice
tinyMIPS tinyPIC Arquitectura para implementar controladores PID Processamento de Sinal ou de Imagens Filtro Passa-Baixo para Imagens Template Matching (correspondncia de padres) 13 8 12 12 1 5
ii
M I N I - P R O J E C T O S
1
Mini-projectos
Conjunto de projectos que envolvem desenvolvimento hardware/software.
Captulo
ste captulo apresenta um conjunto de mini-projectos que pretende ilustrar o projecto de sistemas digitais utilizando linguagens de descrio de hardware, ferramentas de sntese lgica, e implementao utilizando FPGAs. Alguns dos projectos contemplam verdadeiras solues hardware/software. Os exemplos apresentados cobrem um leque variado de implementaes, desde cores de microprocessadores ou de microcontroladores at implementao de arquitecturas especficas para realizar determinadas tarefas. Nos trabalhos mencionados nas subseces seguintes pode ser necessrio desenvolver ou adaptar pequenos programas de software de forma a, por exemplo, validar os resultados.
tinyMIPS
O tinyMIPS pretende ser um microprocessador com algumas facilidades de configurao. O tinyMIPS destinado a sistemas embebidos com necessidade de um ncleo de processamento baseado na arquitectura ISA do MIPS (R2000/R3000), com a possibilidade de alguns aspectos do microprocessador poderem ser configurados. A ideia principal desenvolver um core com possibilidade de ser conectado a hardware especfico ou a outros cores de processamento no mesmo FPGA. A ISA (Instruction-Set Architecture) do MIPS R3000 utiliza instrues de 32 bits, representadas pelos trs formatos de instrues ilustrados na Tabela I. A Figura 1 apresenta o diagrama de blocos simplificado da arquitectura do MIPS. Esta verso do tinyMIPS deve ser implementada com datapath multiciclo sem pipelining. O sistema tambm no ter nveis de cache, que pode ser uma vantagem em determinados sistemas de tempo-real, pois permite lidar com tempos de execuo mais previsveis (os hit/miss de caches produzem imprevisibilidade em termos de tempo de execuo).
As Tabela II, Tabela III, Tabela IV, Tabela V, e Tabela VI apresentam as instrues que o tinyMIPS executa (as linhas das tabelas coloridas indicam instrues que no so consideradas nesta verso).
Tabela I. Tipos de instrues e campos de cada tipo.
Tipo Cdigo da instruo R 6 bits rs rt rd Shamt Funct 5 bits 5 bits 5 bits 5 bits 6 bits I 6 bits rs rt Endereo imediato 5 bits 5 bits (16 bits) J 6 bits Endereo (26 bits)
PC
ALU
opcode Dados
Figura 1. Diagrama de blocos simplificado da arquitectura do MIPS. Tabela II. Instrues aritmticas
Instruo add subtract add immediate add unsigned subtract unsigned add immed. unsigned
Exemplo add $1,$2,$3 sub $1,$2,$3 addi $1,$2,10 addu $1,$2,$3 subu $1,$2,$3 addiu $1,$2,10
Formato R R I R R I
Instruo and or and immediate or immediate shift left logical shift right logical shift right arithmetic
Exemplo and $1,$2,$3 or $1,$2,$3 andi $1,$2,10 or $1,$2,10 sll $1,$2,10 srl $1,$2,10 sra $1,$2,10
Significado $1=$2&$3 $1=$2|$3 $1=$2&10 $1=$2|10 $1=$2<<10 $1=$2>>10 $1=$2>>10, com extenso de sinal
Comentrio 3 operandos 3 operandos AND constante OR constante Deslocamento esquerda Deslocamento direita Deslocamento direita
Formato R R I I R R R
Exemplo lw $1,10($2)
Significado $1=Memory[$2+10]
Comentrio Carrega registo com a palavra lida da memria Escreve registo na posio de memria Carrega constante nos 16 bits mais significativos I
Formato
I I
sw $1,10($2)
Memory[$2+10]=$1
lui $1,10
$1=10x2^16
Instruo branch on equal branch on not equal set less then Set less then immed. set less then unsigned
Exemplo Beq $1,$2,10 Bne $1,$2,10 Slt $1,$2,$3 Slti $1, $2, 100 Sltu $1,$2,$3
Significado if($1==$2)go to PC+4+10 if($1!=$2)go to PC+4+10 if($2<$3)$1=1;else $1=0 if($2<100)$1=1;else $1=0 if($2<$3)$1=1;else $1=0
Comentrio Equal test Not equal test Less than compare Less than compare with constant Less than unsigned compare I I
Formato
R I R
if($2<100)$1=1;else $1=0
Comentrio Jump to target address For switch, procedure return For procedure call J J R
Formato
A Figura 2 ilustra um possvel diagrama de estados considerando um datapath multiciclo para o cMIPS.
IR MEM[PC] instruction fetch A R[rs] B R[rt] R-type ORi LW
Memory Execute
SW
Para alm das instrues definidas anteriormente, o tinyMIPS deve ter as seguintes facilidades de configurao: Nmero de bits do datapath e dos registos do banco de registos;
Tamanho da memria de programa; Tamanho da memria de dados e nmero de bits de cada posio de memria; Possibilidade de ter dois registos ($2 e $3) do banco de registos conectados a portos de entrada e dois registos ($4 e $5) conectados a portos de sada. A escrita/leitura destes registos deve ter funcionalidade similar aos registos de portos do PIC, com a diferena que neste caso no h portos de entrada/sada e por isso no h necessidade de controlo tri-state).
Para compilar para o tinyMIPS pode ser utilizado o ambiente gratuito fornecido pela MIPS [8] que requer a instalao do compilador gcc da GNU [9]. Contudo deve referir-se que o cdigo assembly gerado (opo s do gcc) pode conter instrues MIPS no suportadas pelo tinyMIPS. O assembly gerado necessita de um assemblador que por exemplo fornea a representao binria do programa de forma a ser carregada na memria de programa. O desenvolvimento do assemblador est fora do mbito deste trabalho.
tinyPIC
O tinyPIC um microprocessador baseado na arquitectura do PIC16C54 [5]. A verso, cujo diagrama de blocos simplificado apresentado na Figura 3, no incorpora temporizadores, WDTs, nem modo sleep. Nesta verso existem vrios parmetros de configurao: Nmero de bits para representar os dados (afecta o banco de registos, o hardware para as entradas sadas do microcontrolador, a ALU, e o registo W); Possibilidade de incluso do suporte a chamadas de rotinas (instrues RETLW e CALL);
Os formatos das instrues do tinyPIC so apresentados nas Figura 4. As instrues que o tinyPIC deve executar esto ilustradas nas Tabela VII, Tabela VIII, e Tabela IX. Nas tabelas as linhas coloridas a laranja representam instrues que no devem ser consideradas nesta verso do tinyPIC e as linhas coloridas a cinzento representam instrues cuja execuo depende da configurao inicial do tinyPIC.
Memria de Memria de Programa Programa (at 512 (at 512 instrues de instrues de 12 bits) 12 bits)
12 bits
9 bits
Program Counter (F2) Status (F3) Banco de Banco de Registos Registos (at 32 (at 32 registos de registos de 88 bits) bits)
Registo de Instruo
5 bits
Porto A (F5)
Descodificao da Instruo
8 bits
MCLR
PORTO A
CLK
ALU
Porto B (F6)
W
PORTO B
TRIS A
TRIS B
11 opcode
11 opcode 11 8 opcode 7
5 d
4 f (FILE #)
d = 0, destino em W d = 1, destino em f
(a) (b)
7 k (LITERAL) 5 4 f (FILE #)
b (BIT #)
(c)
Figura 4. Formato das instrues: (a) de cada instruo sobre o ficheiro de registos orientada ao byte; (b) de instrues com imediatos e de instrues de controlo; (c) de cada instruo sobre o ficheiro de registos orientada ao bit.
Tabela VII. Instrues sobre o ficheiro de registos orientadas ao byte. opcode (Bin) Mnemnica Operao Registo de Status 0001 11df ffff 0001 01df ffff 0000 011f ffff 0000 0100 0000 0010 01df ffff 0000 11df ffff 0010 11df ffff 0001 00df ffff 0010 10df ffff 0011 11df ffff 0010 00df ffff 0000 001f ffff 0000 0000 0000 0011 01df ffff ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ IORWF INCF INCFSZ MOVF MOVWF NOP RLF f,d f, d F f, d f, d f, d f, d f, d f, d f, d F f, d W + f d|f W & f d|f 0f 0W ~f d|f f - 1 d|f f - 1 d|f W || f d|f f + 1 d|f f + 1 d|f f d|f Wf f(n) [d|f](n+1), C [d|f](0), f(7) C 0011 00df ffff RRF f, d f(n) [d|f](n1), C [d|f](7), f(0) C 0001 10df ffff 0000 10df ffff 0011 10df ffff XORWF SUBWF SWAPF f, d f, d f, d W f d|f f - W d|f f(0-3) f(4-7) d|f Tabela VIII. Instrues com imediatos e instrues de controlo. opcode (Bin) Mnemnica Operao Registo de Status 1110 kkkk kkkk 1001 kkkk kkkk ANDLW CALL k k k&WW PC + 1 Pilha (PC + 1 Topo da pilha), k PC<7:0>, '0' PC<8> Z AND de W com o imediato de 8 bits, k. O resultado colocado no registo W. Chamada a uma sub-rotina. Primeiro, o endereo de retorno (PC+1) colocado na Pilha. O valor de 8 bits, k, carregado no PC<7:0>. O bit 8 do PC colocado a zero. Descrio Z C, DC, Z XOR de W com o registo f. Subtrai W ao registo f em complemento para dois. Troca no registo f os 4 bms com os 4 bMs. C Rotao de um bit para a direita do contedo do registo f. O bit de transporte envolvido na rotao. C, DC, Z Z Z Z Z Z Z Z Z C Soma o contedo de W com o registo f (um registo do ficheiro de registos). "AND" de W com o registo f. Coloca a zero o registo f. Coloca a zero o registo W. Complementa o registo f. Decrementa o registo f. Decrementa o registo f. Se o resultado for zero salta a prxima instruo. OR do registo W com o registo f. Incrementa o registo f. Incrementa o registo f. Se o resultado for zero salta a prxima instruo. O contedo do registo f movido. Move o contedo de W para o registo f. Nenhuma operao. Rotao de um bit para a esquerda do contedo do registo f. O bit de transporte envolvido na rotao. Descrio
CLRWDT
TO, PD
Reset do WDT e tambm reset do prescalar do WDT se estiver atribudo. Os bits de status, TO e PD, so colocados a um.
GOTO IORLW
k k
k PC<8:0> k || W W
k k
Os 8 bits do imediato k so colocados no registo W. Os 6 bms do registo W so carregados no registo OPTION. O registo W carregado com os 8 bits do imediato k. O PC carregado do topo da Pilha (o endereo de retorno). Esta instruo demora 2 ciclos.
SLEEP
TO, PD
O bit de status PD (power down) colocado a zero. O bit de status TO (time-out) colocado a um. O WDT e o pr-escalar se lhe estiver atribudo so colocados a zero. Desliga os relgios internos (modo de adormecimento).
TRIS XORLW
f k
O registo TRIS de f (f = 5, 6, ou 7) carregado com o contedo do registo W. XOR de W com os 8 bits do imediato k. O resultado colocado no registo W.
Tabela IX. Instrues sobre o ficheiro de registos orientadas ao bit. opcode (Bin) Mnemnica Operao Registo de Descrio
Status
0100 bbbf ffff 0101 bbbf ffff 0110 bbbf ffff BCF BSF BTFSC f, b f, b f, b 0 f(b) 1 f(b) Testa bit b do ficheiro f: Salta se zero. 0111 bbbf ffff BTFSS f, b Testa bit b do ficheiro f: Salta se um. Se o bit b do registo f igual a um, ento salta a prxima instruo. O bit b do registo f colocado a zero. O bit b do registo f colocado a um. Se o bit b do registo f igual a zero, ento salta a prxima instruo.
A Figura 5 apresenta um diagrama de blocos de um sistema de controlo tpico utilizando um controlador PID.
Comando de Referncia
Sada
Controlador PID
Atuador
Sensor
Neste trabalho pretende-se a implementao em FPGA de uma arquitectura que implemente o PID. A arquitectura dever permitir a parametrizao do nmero de bits para representar os dados de entrada e de sada e para representar os dados internos. Dever ser utilizada a virgula fixa para representar os dados. Uma possvel arquitectura para o PID encontra-se representada na Figura 6. O diagrama corresponde a uma implementao da equao do PID discreta:
U (k ) = U (k 1) + q 0 e(k ) + q1 e(k 1) + q 2 e(k 2)
No diagrama, R?s representam registos, e q0, q1, e q2 representam os coeficientes obtidos com os parmetros Kc, Td, e Ti de sintonia. A arquitectura utiliza 3 somadores, 1 subtrator, 3 multiplicadores, e 3 limitadores que so utilizados para que caso os resultados sada dos somadores ultrapassem a gama de valores representvel utilizando o formato de vrgula fixa especificado, so saturados com o mnimo ou com o mximo valor representvel. Os valores dos coeficientes q? podem ser sintonizados automaticamente com a utilizao de uma unidade de processamento capaz de implementar um mtodo de sintonia existente (note, contudo, que a implementao de um destes mtodos est fora do mbito deste trabalho). Os valores para q0, q1, e q2 so obtidos pelo clculo das equaes:
T q 0 = K C 1 + d T S
T T q1 = K C 1 + 2 d S TS Ti
q2 = K C
Td TS
Em que Td, Ti, e Kc representam os parmetros de entrada do controlador e Ts representa o perodo de amostragem em segundos.
SP
PV
R2
q0
q1
q2
U(k-1)
R5
Somador 1
Somador 2 U(k)
A sada do sistema convertida em PWM (Pulse-Width Modulation). Na Figura 8 apresentado um diagrama de blocos que indica as sadas do sistema aps converso para PWM. No exemplo so utilizados 16 bits para representar a sada do mdulo PID. A Figura 9 ilustra o funcionamento da converso para PWM para o exemplo anterior utilizando um contador.
Kc Td Ti Ts RF Arquitectura do Controlador PID Conversor PWM PWM Sentido H-bridge Sensor
Figura 7. Diagrama de blocos do sistema: a regio a sombreado representa os componentes implementados no FPGA.
A arquitectura para o PID e o bloco de converso para PWM devero adicionar a possibilidade de configurar:
10
Nmero de bits da amplitude e da parte fraccionria para cada entrada/sada da arquitectura do PID; Nmero de bits de representao para a entrada do conversor PWM; A definio do perodo de amostragem com introduo deste em ms (parmetro do sistema); A definio das constantes Kc, Td, e Ti (parmetros do sistema).
A implementao final de teste no FPGA dever possibilitar: A entrada do valor referncia utilizando os botes da placa disponibilizada; A ligao da sada PWM a um interface externo ao FPGA que conecta este a um motor DC; A ligao da entrada a um medidor das rotaes do motor.
Mdulo PID 16 Bloco Valor Absoluto 15 Mdulo PWM 1 bit
PWM
1 bit
Bit de Sinal
Figura 8. Sada do PID ligada a um conversor para PWM de forma a poder actuar num motor DC, por exemplo [6].
32762
32763
32764
32765
32766
32767
32762
32763
32764
32765
32766
32767
32764
11
Em processamento de imagens muitas das vezes necessrio reduzir/eliminar o rudo existente em imagens. O algoritmo apresentado na Figura 10 um exemplo de um algoritmo para reduo de rudo utilizando um filtro passa baixo. Na implementao deste trabalho a imagem de sada deve ser representada no ecr utilizando o mdulo de interface a um monitor VGA disponibilizado. A imagem de entrada e a imagem de sada so imagens com 256 nveis de cinzento (8 bits de representao por cada pxel). A implementao dever incluir: Definio do tamanho da imagem (parmetros Xsize e Ysize); Definio dos valores do array K (9 parmetros); Definio do parmetro scale.
Uma implementao melhorada obtida se desenrolarem os dois loops internos do algoritmo apresentado (ver Figura 10). A primeira verso realizada deve implementar o algoritmo inicial e uma segunda verso poder entrar em linha de conta com os desenrolamentos referidos. No final deve ser avaliada a melhoria de desempenho obtida.
Xsize e Ysize referem o nmero de pxeis da imagem por cada linha e coluna, respectivamente.
12
// input/outputs // unsigned short Xsize = 64; // unsigned short Ysize = 64; // unsigned byte [] IN, size = Xsize*Ysize; // unsigned byte[] K = {1, 2, 1, 2, 4, 2, 1, 2, 1}; // 6 bits so suficientes para representar os K // unsigned byte [] OUT, size = Xsize*Ysize; // unigned byte scale = 16; for (int row=0; row < Ysize-3+1; row++) { for (int col = 0; col< Xsize-3+1; col++) { int sumval = 0; for (int wrow=0; wrow < 3; wrow++) { for (int wcol = 0; wcol<3; wcol++) { sumval += IN[(row +wrow) * Xsize + (col+wcol)] * K[wrow * 3 + wcol]; } } sumval = (sumval * scale) >> 8; OUT[row *Xsize + col] = (unsigned byte) sumval; } }
Figura 10. Algoritmo do filtro passa-baixo para processamento de imagens.
Janela + Coeficientes
Figura 11. Diagrama de blocos do sistema para o filtro FIR. Template Matching (correspondncia de padres)
A tcnica de template matching muito utilizada no processamento de imagem e de vdeo. A tcnica permite calcular a semelhana entre imagens. As imagens podem ter o mesmo tamanho ou serem de diferente tamanho. No ltimo caso, a imagem de entrada, de maior tamanho, percorrida pela imagem de referncia de forma a que em cada posio seja calculado o grau de semelhana. Depois de a imagem de referncia ter sido deslocada horizontal e verticalmente por toda a imagem de entrada o algoritmo devolve o valor mnimo da funo de semelhana utilizada e a posio na imagem original correspondente a esse valor mnimo.
13
O sistema a implementar uma verso simplificada de um sistema de identificao de faces. O diagrama de blocos do sistema apresentado na Figura 12. A Figura 13 apresenta uma provvel implementao do algoritmo na qual utilizada apenas uma imagem de referncia.
Arquitectura Especfica para Template Matching
Match?
Pretende-se com este trabalho implementar uma verso do algoritmo apresentado tendo em ateno o seguinte: O tamanho (Xsize e Ysize) da imagem de entrada deve ser pr-definido como parmetro; Cada pxel da imagem de entrada e das imagens de referencia representado por 8 bits (256 nveis de cinzento); O tamanho (templateXSize e templateYSize) das imagens de referncia deve ser pr-definido como parmetro (todas as imagens de referncia devem ser do mesmo tamanho); O algoritmo deve calcular concorrentemente a semelhana entre a imagem de entrada e 3 imagens referncia; Cada imagem considerada deve estar armazenada numa memria interna ao FPGA distinta; O algoritmo deve indicar qual foi a imagem referncia com grau de semelhana com uma regio da imagem de entrada maior e com base num valor de threshold (definido como parmetro) indicar se o grau de semelhana permite concluir que as duas imagens so efectivamente semelhantes;
14
// input/outputs // unsigned short Xsize = 64; // unsigned short Ysize = 64; // unsigned short templateXsize = 16; // unsigned short templateYsize = 16; // unsigned byte [] InputImage, size = Xsize*Ysize; // unsigned byte [] TemplateImage, size = Xsize*Ysize; unsigned int MinimumSimilitude = Integer.MAX_VALUE; unsigned short Xpos=0, Ypos=0; // start position of the best matching unsigned int Threshold = 400000; for (int row=0; row < Ysize-templateYsize+1; row++) { // traverse input image for (int col = 0; col< Xsize-templateXsize+1; col++) { // traverse input image int Similitude = 0; for (int wrow=0; wrow < templateYsize; wrow++) { for (int wcol = 0; wcol<templateXsize; wcol++) { byte grayInputImage = InputImage[col+wcol][ row + wrow]; byte grayTemplateImage = TemplateImage[ wcol][wrow]; int aux = (grayInputImage - grayTemplateImage); Similitude += aux*aux; } } if(Similitude < MinimumSimilitude) { MinimumSimilitude = Similitude; Xpos = col; Ypos = row; } } } if(MinimumSimilitude <= Threshold) System.out.println("match: "+MinimumSimilitude+" x: "+Xpos+" y: "+Ypos); else System.out.println("not match: "+MinimumSimilitude+" x: "+Xpos+" y: "+Ypos);
Figura 13. Segmento de cdigo para o pattern matching considerando apenas uma imagem na base de dados. Melhoria de imagens utilizando equalizao baseada em histograma
Pretende-se implementar um algoritmo de melhoria de uma imagem representada em 256 nveis de cinzento utilizando equalizao baseada num histograma global. O resultado do algoritmo expresso na Figura 14. A Figura 15 apresenta o cdigo do algoritmo baseado em [10]. A implementao dever possibilitar que o tamanho (Xsize e Ysize) da imagem de entrada possa ser pr-definido como parmetro.
15
// #define L 256 // number of gray values // unsigned short Xsize = 64; // unsigned short Ysize = 64; // unsigned byte image[Xsize][Ysize]; (input image) // unsigned byte histogram[L]; (histogram) // int gray_level_mapping[L]; (gray mapping) // unsigned byte out_image[Xsize][Ysize]; (output image) for (i = 0; i < L; i++) histogram[i] = 0; // Compute the image's histogram for (i = 0; i < N; i++) { for (j = 0; j < N; ++j) { histogram[image[i][j]] += 1; } } // Compute the mapping from the old to the new gray levels Float cdf = 0.0; Float pixels = (float) (Xsize*Ysize); for (int i = 0; i < L; i++) { cdf += ((float)(histogram[i])) / pixels; gray_level_mapping[i] = (int) (255.0 * cdf); } // generate the new image for (int i = 0; i < Xsize; i++) { for (int j = 0; j < Ysize; j++) { out_image[i][j] = gray_level_mapping[image[i][j]]; } }
Figura 15. Equalizador baseado em histograma.
16
Bibliografia
1. Dominic Sweetman, See MIPS Run, Morgan Kaufmann, San Francisco,
Editor
for
Windows, Software,
4. SPIM:
robtica baseado em computao reconfigurvel, Dissertao de Mestrado, ICMC, Universidade de So Paulo, Brasil. 2001.
7. David Gwaltney, Ken King, and Keary Smith, Implementation of
Adaptive Digital Controllers on Programmable Logic Devices, in 5th Annual Military and Aerospace Programmable Logic Devices (MAPLD) International Conference, 10-12 Sep. 2002, Laurel, MD, USA. Apresentao: http://klabs.org/richcontent/MAPLDCon02/presentations/session_e/e 3a_gwaltney_s.ppt
8. MIPS
9. http://www.cygwin.com/ 10. P. M. Embree, and B. Kimble, C Language Algorithms for Digital Signal
17