Vous êtes sur la page 1sur 20

1

Volume

MINI-PROJECTOS

V0.1

Disciplina de Integrao Hardware-Software: 2005/2006

Universidade do Algarve Joo M. P. Cardoso

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

Melhoria de imagens utilizando equalizao baseada em histograma Bibliografia 15 17

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

Endereo Instruo Memria de Instrues

Dados Registos r0-r31 Registo r# Registo r# Registo r#


M U X

ALU

Endereo Memria de Dados

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

Significado $1=$2+$3 $1=$2-$3 $1=$2+10 $1=$2+$3 $1=$2-$3 $1=$2+10

Comentrio 3 operandos 3 operandos add constant 3 operandos 3 operandos 3 operandos

Formato R R I R R I

Tabela III. Instrues lgicas e de deslocamento.

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

Tabela IV. Instrues de transferncia de dados.

Instruo Load word

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

store word load upper immed.

sw $1,10($2)

Memory[$2+10]=$1

lui $1,10

$1=10x2^16

Tabela V. Saltos condicionais e comparaes.

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

Set less then immed. unsigned

Sltiu $1, $2, 100

if($2<100)$1=1;else $1=0

Less than unsigned compare with constant

Tabela VI. Saltos incondicionais.

Instruo jump jump register jump and link

Exemplo j 1000 jr $31 jal 1000

Significado go to 1000 go to $31 $31=PC+4;go to 1000

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

decode / operand fetch

Memory Execute

SW

BEQ & Equal BEQ & ~Equal

4 S A fun BS A or ZX S A + SX S A + SX PC PC + PC PC + SX || 00 M MEM[S] MEM[S] B PC PC + 4 Write-back

R[rd] S R[rt] S R[rt] M PC PC + 4 PC + 4 PC + 4 PC PC

Figura 2. Diagrama de estados para o cMIPS datapath multiciclo.

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

MUX Unidade de Controlo

PORTO A

CLK

ALU

Porto B (F6)

W
PORTO B

TRIS A

TRIS B

Figura 3. Diagrama de blocos simplificado da arquitectura interna do tinyPIC.

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

0000 0000 0100

CLRWDT

00h WDT, 0 WDT

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.

101k kkkk kkkk 1101 kkkk kkkk

GOTO IORLW

k k

k PC<8:0> k || W W

Coloca no PC o contedo de k. OR de W com os 8 bits do imediato k. O resultado colocado no registo W.

1100 kkkk kkkk 0000 0000 0010 1000 kkkk kkkk

MOVLW OPTION RETLW

k k

kW k OPTION k W, Pilha PC (TOS PC)

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.

0000 0000 0011

SLEEP

0 PD, 1 TO; 00h WDT, 0 WDT

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).

0000 0000 0fff 1111 kkkk kkkk

TRIS XORLW

f k

W TRIS do porto f kWW

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.

Arquitectura para implementar controladores PID


O controlador PID (Proporcional, Integral, Derivativo) um componente muito importante em uma grande variedade de sistemas de controlo (veja-se o exemplo de uma implementao do controlador PID pela NASA [7]). Alguns sistemas, na robtica por exemplo, podem ter vrios controladores PID que funcionam concorrentemente.

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

Figura 5. Diagrama de blocos de um sistema de controlo baseado no controlador PID [6].

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

R1 e(k) R3 e(k-1) R4 e(k-2)

PV

R2

q0

q1

q2

U(k-1)

R5

Somador 1

Somador 2 U(k)

Limitadores Limitador Somador 3

Figura 6. Possvel arquitectura para o PID [6].

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].

Contagem Sada PID PWM

32762

32763

32764

32765

32766

32767

Contagem Sada PID PWM

32762

32763

32764

32765

32766

32767
32764

Figura 9. Converso para PWM utilizando um contador [6].

11

Processamento de Sinal ou de Imagens


Os trabalhos seguintes representam algoritmos utilizados em sistemas com necessidades de processamento de imagens ou vdeo. Para armazenar os arrays utilizados pelos algoritmos, as implementaes devem utilizar block RAMs dos FPGAs utilizados. Os tamanhos das imagens (Xsize e Ysize)1 ou dos arrays utilizados pelos algoritmos devem ser definidos por utilizao de parmetros pr-definidos estaticamente (implementao de mdulos com facilidades de parametrizao). Os algoritmos que necessitem de utilizao de floats ou doubles devem ser implementados com virgula fixa. Neste caso devem ser parmetros da implementao o nmero de bits esquerda e direita da virgula.
Filtro Passa-Baixo para Imagens

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.

Arquitectura Especfica para o FIR

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

Imagem 1 ... Imagem N

Match?

Imagem com mais similitude?

Figura 12. Diagrama de blocos do sistema de template matching.

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

Arquitectura Especfica para o Histogram Equalizer

Figura 14. Diagrama de blocos do sistema histogram equalizer.

// #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,

CA, 1999, ISBN 1-55860-410-3.


2. John Hennessy, and David Patterson, Computer Organization & Design: The

Hardware/Software Interface, Morgan Kaufman, 3rd edition, August 2004.


3. Downcast

Systems, MIPSter - MIPS http://www.downcastsystems.com/mipster/

Editor

for

Windows, Software,

4. SPIM:

A MIPS R2000/R3000 http://www.cs.wisc.edu/~larus/spim.html

5. PIC16C5X Data Sheet EPROM/ROM-Based 8-bit CMOS Microcontroller

Series, 2003 Microchip Technology Inc., http://www.microchip.com


6. A. L. Giorgini, Implementao de um controlador PID digital para

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

Technologies Inc., MIPS SDE Lite, http://www.mips.com/content/Products/SoftwareTools/SDE_Lite/con tent_html

9. http://www.cygwin.com/ 10. P. M. Embree, and B. Kimble, C Language Algorithms for Digital Signal

Processing, Prentice-Hall, ISBN: 0-13-133406-9, 1991.

17

Vous aimerez peut-être aussi