5 EXPERIMENTOS E TESTES DE VALIDAÇÃO
5.2 EXECUÇÃO
Inicialmente foram realizados testes unitários para validação da síntese da ferramenta, esses testes consistiram em realização da síntese em pequenos trechos de códigos para verificar se o parser estava gerando corretamente a árvore, se está árvore gerada estava sendo corretamente transformada na árvore genérica proposta e se a síntese utilizando esta representação intermediária estava acontecendo corretamente, a Tabela 5 mostra alguns desses testes unitários.
Os testes foram classificados pela linguagem de entrada Java ou SystemVerilog e com ou sem otimização. Para esta versão a maioria dos testes foram realizados usando a linguagem Java como entrada e sínteses de alto nível sem otimização, mas alguns testes foram realizados para confirmar que a ferramenta também é capaz de gerar RTL com outras linguagens como SystemVerilog e usar a síntese de alto nível com otimização. Na Tabela 5 mostra um conjunto de testes que foram realizados pela ferramenta, primeiro, foram realizados experimentos o número 1, 2, 3, 4 e 5 que são testes básicos para consolidar metodologia utilizada pela ferramenta.
Depois de validar a síntese por unidade, foram feitos experimentos de aplicações de processamento de imagem (síntese de código e execução do mesmo na placa de prototipação) para demonstrar que o SynMaker é capaz de realizar sínteses de alto nível e executar em uma plataforma FPGA. A Figura 37.a mostra o funcionamento do projeto básico da plataforma de desenvolvimento de câmera digital Altera DE2-70. A Figura 37.b mostrar o mesmo projeto, mas agora com módulos gerados e colocados automaticamente pelo SynMaker, o processo inicia-se com um código em Java de um
68 filtro de processamento de imagem chamado filtro de Sobel e finaliza-se com este filtro em execução na placa. Outros filtros de processamento de imagem também foram testados e alguns aplicativos simples de manipulação de imagem também ratificaram o funcionamento ferramenta. Nº Teste Linguage m de entrada Tipo de Metodologia 1 Síntese de Declaration, Assignment, Binary Expressions, Unary Expressions, Literal Expressions, Name Expressions JAVA/ SYSTEM VERILOG SIMPLES/ OTIMIZADA 2
Síntese de Array and Method Call Expression JAVA SIMPLES 3 Sínteseof Object Creation Expression JAVA/ SYSTEM VERILOG SIMPLES
4 Síntese de For and If
Statements JAVA SIMPLE
5 Síntese de function, Constructions and Classes JAVA/ SYSTEM VERILOG SIMPLES / OTIMIZADA
Tabela 5. Testes de validação realizados.
Alguns experimentos foram executados para confirmar o funcionamento da metodologia e da ferramenta SynMaker. Para executar os experimentos inicialmente é escolhido um filtro de processamento de imagem, este filtro é codificado em linguagem de alto nível, a linguagem usada nesses experimentos foi o Java, após desenvolvimento do algoritmo, este filtro é testado utilizando a própria ferramenta SynMaker, através do seu simulador com o comando sm_simu. Após a verificação de que este código funciona em alto nível, o mesmo é dado como entrada para o SynMaker realizar a síntese, cria-se primeiro o projeto pelo comando sm_create, copia-se o código que foi desenvolvido para o projeto criado e depois pelo comando sm_synth “caminho do código desenvolvido” –scp realiza-se a síntese. Este comando de síntese irá gerar além do código sintetizado, um projeto para plataforma Quartus II que conterá todos os módulos do projeto base de execução da câmera e o código sintetizado embutida nele, esse projeto é executado logo após a sua criação na placa de prototipação DE2-70 com câmera digital da altera. Esse procedimento foi realizado com alguns filtros clássicos de processamento de imagem, dentre eles estão, Filtro de Sobel com três tipos de implementação diferente, Filtro de Mediana, Filtro de Média, Filtro de Binarização, Conversão para escala de cinza e mudança de cores na tela. Para confirmar o funcionamento da metodologia explicada na seção 4.2.6 o exemplo do filtro do sobel foi implementado de três maneiras diferentes em alto nível e gerou o mesmo resultado.
69 5.3 ANÁLISE E INTERPRETAÇÃO
Os experimentos de aplicações de processamento de imagem foram realizados, analisados e apresentaram os resultados resumidos na Tabela 6, esses dados foram adquiridos usando a ferramenta Quartus II Web Edition 9.1. Os resultados para cada um desses experimentos é relativo ao projeto completo gerado pela ferramenta, não apenas para o módulo sintetizado para algoritmo do filtro de processamento de imagem que é dado como entrada, ou seja, além dos módulos sintetizados pela ferramenta a um o conjunto de módulos básicos que complementam o projeto neste resultado apresentado.
Projeto Base com Algoritmo de processamento de imagem Total de registradores Total de elementos lógicos Período de Clock (ns) Total de potência estática (mW) Filtro de Sobel implementação 1 1499 2725 7.223 565.42 Filtro de Sobel implementação 2 1539 2728 6.556 574.46 Filtro de Sobel implementação 3 1530 2729 6.324 570.55 Filtro de Média 1495 2925 7.015 581.65 Filtro de Binarização 1489 2970 6.178 592.81 Conversão escala de cinza 1329 2084 6.726 540.06
Tabela 6. Resultado da síntese do SynMaker para filtros de processamento de imagem.
Os resultados demonstrados na Tabela 6 consistem nos filtros e aplicações de processamento de imagens testados no SynMaker, tanto o código em alto nível quanto o código sintetizado do filtro de sobel implementação 1 presente na primeira coluna podem ser vistos nos anexos. O total de registradores e elementos lógicos foi conseguido através do sumário da análise de compilação do Quartus II, o total de energia foi obtido pela ferrramenta Power Analyzer Tool e o período de clock pela ferramenta Classic Timing Analyzer, ambas presente também no software Quartus II.
O Filtro de Sobel foi sintetizado de três maneiras diferentes, a primeira maneira o código em Java possui apenas uma classe e uma função para o algoritmo do filtro completo, a segunda maneira o código do filtro possui três classes, sendo uma delas
(a) (b)
Figura 37. Altera DE2-70 Digital Camera Development Platform. (a) Projeto Base. (b) Projeto base alterado pelo SynMaker com o filtro de sobel.
70 com uma função com parte do código do filtro, outra classe com uma função que determinar o limiar do filtro e a terceira classe com outra função que realiza troca de sinal do pixel. A terceira maneira o filtro possui duas classes, sendo uma delas com duas funções internas, onde uma destas funções contém parte do código do filtro, e a outra função determina o limiar do filtro e outra classe contém apenas uma função que faz a mudança de sinal do pixel, dentre elas a primeira maneira de implementação obteve um consumo de energia, um total de registradores e uma quantidade de elementos lógicos inferior as outras, porém um período de clock maior. O total de elementos lógicos foi muito próximo entre as três implementações e a implementação número três foi a que obteve o menor período de clock.
Dentre todas as aplicações sintetizadas a que apresentou menor consumo de energia, menor número de registradores e elementos lógicos foi a conversão para escala de cinza e menor período de clock foi o Filtro de binarização. Dentre eles o filtro que apresentou maior ciclo de clock foi o filtro de média, o que apresentou maior consumo e maior numero de elementos lógicos foi o filtro de binarização, entre tanto quem apresentou maior quantidade de registradores na síntese foi a segunda maneira de implementação do filtro de sobel.
71
6 CONSIDERAÇÕES FINAIS
6.1 CONTRIBUIÇÕES
Foi apresentada, nesta dissertação, uma nova ferramenta para síntese de alto nível de filtros de processamento de imagem desenvolvidos em Java ou SystemVerilog, também foi demonstrado, através de vários exemplos, que a metodologia utilizada na ferramenta é bastante eficiente, convertendo vários algoritmos de filtros de processamento de imagem desenvolvido em linguagem de alto nível orientada a objeto, com restrições, em seu RTL correspondente. Com isso é possível concluir que este trabalho contribuiu com a comunidade científica por ter sido desenvolvido um novo sistema de síntese de alto nível, com um fluxo de projeto e metodologia de síntese para plataformas FPGA que o designer de circuitos pode programar em qualquer linguagem, se essa linguagem é suportada pela ferramenta, este programa é convertido em uma representação intermediária Genérica da ferramenta que gerará uma implementação RTL que pode ser compilada e programada para a plataforma FPGA DE2-70 de Câmera Digital da Altera através do Software Quartus II. Incluídos na ferramenta ainda estão presentes um parser SystemVerilog, um parser JAVA, uma representação intermediária Genérica e uma metodologia de síntese própria para desenvolver projetos que funcionaram na plataforma de desenvolvimento de câmera digital da altera.
6.2 TRABALHOS FUTUROS
Os Trabalhos futuro poderão se concentrar em implementar um middleware para suportar o compilador LLVM. O código objecto Optimized do LLVM pode ser convertido para a representação intermédia genérica do SynMaker e depois o SynMaker continua o seu fluxo de síntese. Permitir a síntese de algoritmos de processamento de imagem mais sofisticados, algoritmos de inteligência artificial e realidade aumentada. A ferramenta precisa ser expandida para mais dispositivos que estão presentes no Altera DE2-70 Digital Platform Development Camera - Terasic, esses dispositivos por exemplo, são o display de sete segmentos, leds, botões de comutação, conexão de rede Ethernet, de comunicação sem fio e outros, os seus dispositivos precisam ser adicionados na biblioteca de síntese de alto Nível, como foi feito com os módulos LTM e TOUCH_TCON, que devido a isso podem ser usados na síntese da ferramenta. Outro trabalho que pode ser feito é expandir a ferramenta para dar apoio para mais linguagens e outras sintaxes que ainda não estão implementadas ou não estão definidas na metodologia. A esperança é que SynMaker facilite a concepção, desenvolvimento e interação entre o designer e projetos de hardware.
72
REFERÊNCIAS
[1] ADAMS, J. K.; THOMAS, D.E. Tutorial: The Design of Mixed Hardware/Software
Systems. DAC, 1996, p. 515–520.
[2] ADVE, V.; LATTNER, C. LLVM: A Compilation Framework for Lifelong
Program Analysis & Transformation, Symposium on Code Generation and
Optimization (CGO 2004), IEEE CS Press, p. 75–86.
[3] ADIMEC. Disponível em:<http://info.adimec.com/blogposts/bid/39656/CCD-vs- CMOS-Image-Sensors-in-Machine-Vision-Cameras>.Acesso em: 04/03/2013. [4] ADOLFO, G.; ALVAREZ, P. Especificação e Implementação de uma
Representação Intermediária Unificada para Sistemas Digitais. Master’s
Dissertation, Polytechnic School of University of São Paulo, São Paulo, Brazil, 2005. 135 pages.
[5] ALTERA CORPORATION. 1995-2012. Disponível em: <http://www.altera.com>.
Acesso em: 17/04/2013.
[6] AMELLAL, S.; KAMINSK, B. Scheduling of a control and data flow graph. IEEE
Int. Symposium on Circuits and Systems, 3:1666–1669, May 1993.
[7] AUERBACH, J. et al. Lime: a Java-compatible and synthesizable language for
heterogeneous architectures. SIGPLAN Conferences, Not. 45, 10 (October 2010), 89-108.
[8] AUTOESL DESIGN TECHNOLOGIES, INC. AutoESL's AutoPilot. 2010.
Disponível em: <http://www.autoesl.com/autopilto_fpga.htm>. Acesso em: 01 out. 2011.
[9] BERGAMASCHI, R. A. Bridging the domains of high-level and logic synthesis.
Computer-Aided Design of Integrated Circuits and Systems, IEEE Transactions, v. 21, n. 5, p. 582-596, mai 2002, doi: 10.1109/43.998629.
Disponível em
<http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=998629&isnumber=215 47>. Acesso em: 21 nov. 2011.
[10] BERKELEY DESIGN TECHNOLOGY, INC. An Independent Evaluation of:
High-Level Synthesis Tools for Xilinx FPGAs, 2010. Disponível em:
<www.BDTI.com>.Acesso em: 1 mar. 2012.
[11] CALYPTO DESIGN SYSTEMS, INC. Catapult C Synthesis. 2010. Disponível
em:<http://www.mentor.com/products/esl/high_level_synthesis/catapult_synthesis>. Acesso em: 01 out. 2011.
[12] CANIS, A. et al. LegUp: high-level synthesis for FPGA-based processor/accelerator
systems. In Proceedings of the 19th ACM/SIGDA international symposium on
Field programmable gate arrays (FPGA '11), 2011, New York, NY, USA, p. 33-
36, DOI=10.1145/1950413.1950423. Disponível em: <http://doi.acm.org/10.1145/1950413.1950423>. Acesso em: 10 jan. 2012.
[13] CASSEAU, E.; LE GAL, B. High-level synthesis for the design of FPGA-based
signal processing systems. Systems, Architectures, Modeling, and Simulation.
SAMOS 2009 International Symposium, p.25-32, 20-23, jul. 2009, DOI:
10.1109/ICSAMOS.2009.5289238. Disponível em: <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5289238&isnumbe r=5289219>. Acesso em: 12 fev. 2012.
[14] CHEN, D et al. LOPASS: A Low-Power Architectural Synthesis System for FPGAs
With Interconnect Estimation and Optimization.Very Large Scale Integration (VLSI) Systems, IEEE Transactions, v. 18, n. 4, p. 564-577, abr 2010 doi:
73 10.1109/TVLSI.2009.2013353. Disponível em: <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5109476&isnumber=54 37466>. Acesso em: 21 nov. 2011.
[15] CROMAR, S.; LEE, J.; CHEN, D. FPGA-targeted high-level binding algorithm for power and area reduction with glitch-estimation. In Proceedings of the 46th
Annual Design Automation Conference (DAC 2009). ACM, New York, NY,
USA, 838-843, DOI=10.1145/1629911.1630125. Disponível em <http://doi.acm.org/10.1145/1629911.1630125>. Acesso em: 12 nov. 2011.
[16] CONG, J. et al. High-Level Synthesis for FPGAs: From Prototyping to
Deployment. Computer-Aided Design of Integrated Circuits and Systems, IEEE
Transactions, v.30, n.4, p.473-491, abr. 2011,
doi:10.1109/TCAD.2011.2110592. Disponível em <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5737854&isnumber=5 737840>. Acesso em: 20 mar. 2012.
[17] COUSSY, P. GAUT: High-Level Synthesis tool From C to RTL. 2010.
Disponível em: <http://www-labsticc.univ-ubs.fr/www-gaut/>. Acesso em: 15 out. 2011.
[18] COUSSY, P. et al. An Introduction to High-Level Synthesis.Design & Test of
Computers, IEEE, v. 26, n. 4, p. 8-17, ago. 2009, doi: 10.1109/MDT.2009.69.
Disponível em:
<http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5209958&isnumber=52 09950>. Acesso em: 14 out. 2011.
[19] COUSSY, P.; LHAIRECH-LEBRETON, G.; MARTIN, E. Hierarchical and Multiple-Clock Domain High-Level Synthesis for Low-Power Design on FPGA.
Field Programmable Logic and Applications (FPL), 2010 International
Conference, p. 464-468, ago. 31 2010, doi: 10.1109/FPL.2010.94. Disponível em <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5694295&isnumber=56 94025>. Acesso em: 03 abr. 2012.
[20] EDWARDS, S et al. Design of Embedded Systems: Formal Model, Validation and
Synthesi. Proceedings of the IEEE 85(3), 366–390, 1997.
[21] EJNIOUI, A; NAMBALLA, R.; RANGANATHAN, N. Control and data flow
graph extraction for high-level synthesis. Proceedings. IEEE Computer society
Annual Symposium. VLSI, 2004. p.187-192, 19-20 fev. 2004, doi:10.1109/ISVLSI.2004.1339528. Disponível em: <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1339528&isnumber=29 536>. Acesso em: 22 out. 2011.
[22] GAJSKI, D. et al. Specification and Design of EmbeddedSystems, Prentice-Hall,
Englewood Cliffs, N. J., 1994.
[23] GILL, A. Introduction to the Theory of Finite-State Machines. Electronic
Sciences Series, McGraw-Hill, New York, NY 10020, USA; 1962.
[24] GONZALEZ, R. C.; WOODS, R. E. Digital Image Processing. 2ª ed. New Jersey:
Prentice Hall, 2002.
[25] GUPTA, R. K.; DE MICHELI, G. System Synthesis via Hardware-Software Co-
Design, Technical Report CSL-TR-1992-548, Stanford University, Computer
Systems Laboratory.
[26] GUPTA, S. et al. SPARK: A parallelizing approach to the High-Level synthesis of
digital circuits. Kluwer Academic Publishers, 2004.
[27] IMPULSE C ACCELERATED TECHNOLOGIES. Disponível em:
74
[28] KASTENBERG, H.; KLEPPE, A.G.; RENSINK, A. Engineering Object-Oriented
Semantics Using Graph Transformations. Technical Report TR-CTIT-2006-12,
Centre for Telematics and Information Technology University of Twente, Enschede. ISSN 1381-3625.
[29] LEP MOTION. Disponível em: <https://leapmotion.com/>.Acesso em: 12/03/2013. [30] MARTIN, G.; SMITH, G. High-Level Synthesis: Past, Present, and Future. IEEE
Design and Test of Computers, Jul. 2009.
[31] MARTIN, S. A. M. F. Ferramenta de apoio ao desenvolvimento de sistemas de
processamento de imagem em tempo real implementados em plataformas reconfiguráveis. Departamento de Engenharia Eletronica e de Computadores,
Porto, 2007.
[32] OBRIZAN, V. A method for automatic generation of an RTL-interface from a C++
description. Design & Test Symposium (EWDTS), 2010, East-West, p.186-189, 17-20, set.2010, doi:10.1109/EWDTS.2010.5742152. Disponível em: <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5742152&isnumbe r=5742029>. Acesso em: 23 jan. 2012.
[33] PHILIPPE, C.; MORAWIEC, A. High-level Synthesis: From Algorithm To
Digital Circuit. Springer, 2008.
[34] RANGANATHAN, N.; NAMBALLA, R.; HANCHATE, N. CHESS: a
comprehensive tool for CDFG extraction and synthesis of low power designs from VHDL. Emerging VLSI Technologies and Architectures, IEEE Computer Society
Annual Symposium, v.0, p.6, p.2-3, mar. 2006, DOI: 10.1109/ISVLSI.2006.27.Disponível
em: <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1602460&isnumbe r=33676>. Acesso em: 12 nov. 2011.
[35] SINHA, S.; SRIKANTHAN, T. Hardware complexity metrics for high level
synthesis of software functions. VLSI Design, Automation and Test (VLSI-DAT), 2011 International Symposium, p. 1-4, 25-28 abr. 2011, doi:10.1109/VDAT.2011.5783553. Disponível em: <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5783553&isnumber=57 83538>. Acesso em: 02 mar. 2012.
[36] SUTHERLAND, S. et al. SystemVerilog for Design Second Edition: A Guide to
Using SystemVerilog for Hardware Design and Modeling. Out. 29, 2010,
Springer.
[37] SYSTEMC USER´S GUIDE VERSION 2.0. Disponível em: <http://www.cse.iitd.ac.in/~panda/SYSTEMC/LangDocs/UserGuide20.pdf>
Acessado em: 04/04/2013.
[38] TERASIC ALTERA. Disponível em:<http://www.terasic.com.tw/cgi-
bin/page/archive.pl?No=226>.Acesso em: 18/03/2013.
[39] The Source for Java(TM) Technology Collaboration. Java Compiler Compiler
(JavaCC). Disponível em:<http://javacc.dev.java.net/>. Acesso em: 13 set. 2011.
[40] TRIPP, J.L.; GOKHALE, M.B.; PETERSON, K.D. Trident: From High-Level
Language to Hardware Circuitry. IEEE Computer, v.40, n.3, p.28-37, mar.2007, DOI:10.1109/MC.2007.107. Disponível em: < http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4133993&isnumber=4 133979>. Acesso em: 10 fev. 2012.
[41] VALLERIO, K. S.; JHA, N. K. Task graph extraction for embedded system
synthesis. Proceedings 16th International Conference, VLSI Design, 2003. p. 480- 486, 4-8 Jan. 2003, doi: 10.1109/ICVD.2003.1183180. Disponível em:
75 <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1183180&isnumber=26 547>. Acesso em: 17 out. 2011.
[42] VAREA, M. Modelling And Verification Of Embedded Systems Based On Petri
Net Oriented Representations. Tese (Doutorado) - Department Of Electronics And
76
7 ANEXO
Anexo I
Código do Filtro de Sobel desenvolvido em Java
Este código escrito em linguagem Java é um exemplo de entrada aceito pelo SynMaker, o mesmo pode ser sintetizado e simulado pela ferramenta. O código está presente em um só arquivo chamado de TestSobel.java e possui duas classes que serão sintetizadas pela ferramenta, onde a primeira classe chamada Sobel possui uma função chamada fsobel que realiza a alteração nos pixels da imagem de acordo com o algoritmo de Sobel e outra chamada de sinal_cor que apenas inverte a magnitude de escala de cinza.
A outra classe TestSobel que representa a classe top-level do sistema, esta classe possui, apenas, o método run que representa a natureza cíclica do funcionamento da aplicação, em outras palavras tudo que estiver dentro desse método deve ser pensado pelo usuário como se estivesse num laço infinito, é também onde deve ser implementada as chamadas de funções iniciais da aplicação.
// Federal University of Pernambuco - UFPE // Center for Information Technology - CIN //2013/07/22 17:01:50 package br.ufpe.cin.hls.sample; import br.ufpe.cin.hlslib.system.HLSSynth; import br.ufpe.cin.hlslib.system.HLSSystem; import br.ufpe.cin.hlslib.system.LTM; import br.ufpe.cin.hlslib.system.touch_tcon;
class Sobel extends HLSSynth {
final int vetor=1056; int oy;
int[] buffer=new int[2*vetor+3]; public int fsobel(int a,int b, int c) {
int soma; int somay,somax; int y;
int x;
int[][] GX = new int[3][3]; int[][] GY = new int[3][3];
77 int res; // Máscara de Sobel GX[0][0] = -1; GX[0][1] = 0; GX[0][2] = 1; GX[1][0] = -2; GX[1][1] = 0; GX[1][2] = 2; GX[2][0] = -1; GX[2][1] = 0; GX[2][2] = 1; GY[0][0] = 1; GY[0][1] = 2; GY[0][2] = 1; GY[1][0] = 0; GY[1][1] = 0; GY[1][2] = 0; GY[2][0] = -1; GY[2][1] = -2; GY[2][2] = -1; oy= (a+b+c)/3; // gera tons de cinza
// Carregar e deslocar o buffer (tamanho do buffer : 2 linhas e 3 pixels)
for(int m=0;m<vetor*2+2;m++) buffer[m]=buffer[m+1]; buffer[vetor*2+2]= oy; //Reinicialização de variáveis somax=0; somay=0; x= 1; y= 1; // Realizar convoluções // GRADIENTE X
for(int i= -1; i<=1; i=i+1) {
for(int j=-1; j<=1; j=j+1) {
somax = somax + buffer[x+i+(y + j)*vetor]*GX[i+1][j+1];
} }
// GRADIENTE Y
for(int i=-1; i<=1;i=i+1) {
for(int j=-1;j<=1;j=j+1) {
somay = somay + buffer[x+i+(y + j)*vetor]*GY[i+1][j+1];
} }
// MAGNITUDE DOS GRADIENTE
if (somax<0) somax=-somax; if (somay<0) somay=-somay; res=somax+somay;
// Definição do limiar para o filtro
if(res>255) res=0; else if(res<0)
res=0;
else if(res>=0 && res<=25) res=0;
else
res=255; return res; }
78
public int sinal_cor(int d) {
// inversão da escala de cinza
int res; res= 255-d; return res; }
}
public class TestSobel extends HLSSystem{
// Instanciação de objetos que representam IPs do Projeto base
LTM ltm=new LTM();
touch_tcon tcon=new touch_tcon();
// Instanciação de objeto que será sintetizado pela ferramenta e posteriormente
// inserido no Projeto base
Sobel sobel2=new Sobel();
// Método obrigatório presente na classe que será sintetizada no modulo top-level do projeto
public void run() {
int iLCD_R_t=0, iLCD_G_t=0,iLCD_B_t=0; int oLCD_t ;
int pixel_sobel_t;
iLCD_R_t = tcon.getNextPixelR(); //output_1
iLCD_G_t = tcon.getNextPixelG(); //output_2
iLCD_B_t = tcon.getNextPixelB(); //output_3
pixel_sobel_t=sobel2.fsobel(iLCD_R_t,iLCD_G_t,iLCD_B_t);//input_1,2,3 ; output_4
oLCD_t=sobel2.sinal_cor(pixel_sobel_t);//input_4 ; output_5
ltm.setLtm_r(oLCD_t);//input_5
ltm.setLtm_b(oLCD_t);//input_6
ltm.setLtm_g(oLCD_t);//input_7
} }
79 Anexo II
Código SystemVerilog Gerado pelo SynMaker a partir do código de exemplo do Anexo I, relativo a Classe Sobel.
Esse código é sintetizado pelo SynMaker a partir do código de entrada dado pelo anexo I, mas especificamente pela parte do código relativa a classe Sobel, o mesmo pode fazer parte de um projeto da ferramenta Quartus II e posteriormente pode ser compilado e programado na placa DE2-70, esse projeto pode ser eventualmente o projeto base descrito nessa dissertação.
// File Generated by SynMaker High Level Synthesis Tools // Federal University of Pernambuco - UFPE
// Center for Information Technology - CIN //2013/07/22 17:01:50
module Sobel( input logic SobelfsobeliCLK , input logic SobelfsobeliRST_n , input int