SERVIÇO DE PÓS-GRADUAÇÃO DO ICMC-USP
Data de Dep • • 30.08.1999
Assinatura cçjr‘t
Projeto da Unidade de Controle de uma Arquitetura Sistólica para Solução de
Sistemas Lineares, utilizando-se Metodologias Avançadas para Projeto de
Hardware
Marcos Roberto Bombacini
Orientador: Prof Dr. Eduardo Marques
Dissertação apresentada ao Instituto de Ciências Matemáticas e de Computação - ICMC-USP, como parte dos requisitos para obtenção do titulo de Mestre em Ciências — Área: Ciências de Computação' e Matemática Computacional.
São Carlos Agosto/1999
Agradecimentos
À Deus, por tudo permitir e possibilitar.
À minha família, que soube compreender minha ausência e sempre me incentivou.
Ao Prof. Dr. Eduardo Marques, pela orientação, paciência e amizade, que
foram fundamentais na elaboração deste trabalho.
Agradeço especialmente ao Prof. Jorge Luiz e Silva, pela colaboração,
apoio, incentivo e amizade que sempre teve para comigo nos momentos mais difíceis.
À prof. Sandra Abib, pelo exemplo, confiança e respeito.
Agradeço a todos os funcionários deste instituto, que direto ou indiretamente
contribuíram na realização deste trabalho. Especialmente à Beth, sempre disposta a
atender-me com atenção e afinco.
Aos amigos: Toni, André, Paulo Saia, Tatuí, Alencar, Cabral, Eduardo
Amorim, Rosely, Mori, Sadao e tantos outros que tornaram estes anos de trabalho
mais alegre.
À Luciane, pelo carinho, companhia, apoio, pela compreensão e
principalmente por ser uma pessoa tão especial. Sem ela nada disso seria possível.
Índice 1 INTRODUÇÃO 1
1.1 JuslIPICATIVA 2
2 METODOLOGIAS AVANÇADAS PARA PROJETO DE HARDWARE 3 2.1 MODELAGEM DE SISTEMAS DIGITAIS 3
2.1.1 Domínios e Níveis de Modelagem 5 2.2 A EVOLUÇÃO DO PROJETO EM Ano NívEL com FERRAMENTAS EDA 7
2.2.1 Metodologia de Projeto em Alto Nível com Ferramentas EDA 10 2.2.2 Iniciando um Projeto em Alto Nível 11 2.2.3 Uma Visão Geral do Processo 11
2.3 FERRAMENTAS E PROCESSOS DE AUTOMAÇÃO DE PROJETO EM ALTO NÍVEL 14 2.3.1 Entrada de Projeto 14 2.3.1.1 Descrições Comportamentais 15 2.3.1.2 Descrições ao Nível de Transferência de Registradores (RTL) 15 2.3.1.3 Descrições em forma de Portas Lógicas 16 2.3.2 Síntese 16 2.3.2.1 Síntese Comportamental 16 2.3.2.2 Síntese HDL 17 2.3.2.3 Síntese Lógica 17 2.3.2.4 Separação Clara entre Exploração e Implementação 18 2.3.2.5 O Balanceamento Alcançado pela Ferramenta de Síntese 19 2.3.3 Simulação 20 2.3.3.1 Validação 21 2.3.4 Verificação 22 2.3.4.1 Estratégias para Verificação 24 2.3.4.2 Simulação "Pins-Out" 25 2.3.4.3 Modelo de Representação 25 2.3.4.4 Visualizando os Resultados da Verificação 27 2.3.5 Teste de Síntese 27
3 FPGAS (FIELD PROGRAMMABLE GATE ARRA YS) 30 3.1 VisÃo GERAL DA FPGA 30 3.2 A FPGA BASEADA EM SRAM 33 3.3 PROGRAMANDO A FPGA 37 3.4 COMPUTADORES RECONFIGURÁVEIS 40
3.4.1 Hardware Fixo 40 3.4.2 Hardware Reconfigurável 41
4 ESTUDO DA LINGUAGEM VHDL 43 4.1 HISTÓRICO E CARACrISRÍSTICAS BÁSICA DO VHDL 43 4.2 O PORQUÊ DO VHDL 45
5 ARQUITETURAS SISTÓLICAS 50 5.1 HISTÓRICO E CARACTERÍSTICAS BÁSICAS DOS SISTEMAS ARRANJOS SISTÓLICOS 51 5.2 APLICAÇÕES 55
5.2.1 Exemplo de uma Aplicação de Sistemas de Equações Lineares 56 5.2.2 Métodos para Solução de Sistemas Lineares 57 5.2.3 Técnicas de Projeto e Mapeamento 59
6 PROJETO DA UNIDADE DE CONTROLE 61
6.1 CÁLCULO DA MATRIZ É 66 6.2 CÁLCULO DO VETOR g 68
7 DETALHES DA IMPLEMENTAÇÃO DA UNIDADE DE CONTROLE 71 7.1 BLOCOS COMBINACIONAIS 71
7.1.1 Estágio Multiplicador 71 7.1.2 Estágio Somador/Subtrator 73 7.1.3 Estágio Acumulador 77
7.2 ELEMENTOS DE MEMÓRIA 77 7.2.1 Memória RAM do tipo Dual-Port 78 7.2.2 Registrador intermediário com clock, clear e enable 79 7.2.3 Registrador de valores constantes e de valores escalares 80
8 ANÁLISE E DISCUSSÃO DOS RESULTADOS 81 8.1 PROCEDIMENTO UTILIZADO 81 8.2 VALORES INICIAIS DAS MATRIZES E DOS VETORES 81 8.3 VALORES DAS CONSTANTES 82 8.4 RESULTADOS OBTIDOS 82
9 CONCLUSÕES 144 9.1 SUGESTÕES PARA DESENVOLVIMENTO FUTURO 145
10 REFERÊNCIAS BIBLIOGRÁFICAS 147
11
Índice de Figuras
FIGURA 2.1 - DOMÍNIOS E NÍVEIS DE ABSTRAÇÃO 6 FIGURA 2.2 - PROPÓSITOS DOS SISTEMAS EDA 9 FIGURA 2.3 - DIFERENTES NÍVEIS DE CONCEPÇÃO PARA PROJETOS EM HARDWARE 10 FIGURA 2.4 - ETAPAS BÁSICAS DO PROJETO EM ALTO NÍVEL 12 FIGURA 2.5 - SÍNTESE LÓGICA 18 FIGURA 2.6 - Os PONTOS DE EQUILÍBRIO OBTIDOS PELA FERRAMENTA DE SÍNTESE 24 FIGURA 3.1 - CLASSES DE FPGAs 31 FiGuRA 3.2 - A FPGA 34 FIGURA 3.3 - CLBs E INTERCONEXÕES 35 FIGURA 3.4 - U/vi EXEMPLO DE BLOCO LÓGICO CONFIGURÁVEL 36 FIGURA 3.5 - DIAGRAMA DE FLUXO DE PROJETO - ENTRADA DO PROJETO 37 FIGURA 3.6 - DIAGRAMA DE FLUXO DE PROJETO - IMPLEMENTAÇÃO DO PROJETO 38 FIGURA 3.7 - DIAGRAMA DE FLUXO DE PROJETO --- VERIFICAÇÃO DO PROJETO 39 FIGURA 3.8- DIAGRAMA DE FLUXO DE PROJETO --- CONFIGURAÇÃO DA FPGA 40 FIGURA 5.1 - FLUXO SISTÓLICO DE DADOS SAINDO E VOLTANDO DA MEMÓRIA 51 FIGURA 5.2 - ANALOGIA COM O SISTEMA VASCULAR HUMANO 53 FIGURA 5.3 - DIFERENÇA ENTRE ARQUITETURAS COMUNS E SISTÓLICAS 54 FIGURA 5.4 - TOPOLOGIAS SISTÓLICAS MAIS COMUNS 55 FIGURA 5.5 - ARQUITETURA SISTÓLICA EM ANEL PARA SOLUÇÃO DE SISTEMAS LINEARES 59 FIGURA 6.1- DESTAQUE PARA A UNIDADE DE CONTROLE NA ARQUITETURA SISTÓLICA 61 FIGURA 6.2 - DETALHAMENTO DA UNIDADE DE CONTROLE 62 FIGURA 6.3 - SEQUÊNCIA DE ESCRITA DA MATRIZ F E O VETOR g NAS FIFOS DOS EPS 63 FIGURA 6.4 - ORGANIZAÇÃO GERAL PIPELINE 66 FIGURA 6.5 - SEQÜÊNCIA DE OPERAÇÕES DA MATRIZ A. 67 FIGURA 6.6 - DIAGRAMA DE BLOCOS DA IMPLEMENTAÇÃO DA MATRIZ É. 68 FIGURA 6.7 - SEQÜÊNCIA DE OPERAÇÕES DO VETOR B. 69 FIGURA 6.8 - DIAGRAMA DE BLOCOS DA IMPLEMENTAÇÃO DO VETOR . 70 FIGURA 7.1 - DIAGRAMA DE BLOCOS DE UM MULTIPLICADOR DE N BITS 72 FIGURA 7.2 - ALGORITMO DA OPERAÇÃO DE MULTIPLICAÇÃO. 73 FIGURA 7.3 - DIAGRAMA DE BLOCOS DE UM SOMADOR/SUBTRATOR DE N BITS 74 FIGURA 7.4 - ALGORITMO DA OPERAÇÃO DE SOMA/SUBTRAÇÃO 76 FIGURA 7.5 - DIAGRAMA DE BLOCOS DO MÓDULO ACUMULADOR. 77 FIGURA 7.6 - MEMÓRIA RAM DUAL-PORT. 78 FIGURA 7.7- REGISTRADOR INTERMEDIÁRIO COM CLOCK, CLEAR E ENABLE 80 FIGURA 8.1 - VALORES INICIAIS DAS MATRIZES E DOS VETORES 81 FIGURA 8.2 - VALORES ADOTADOS PARA AS CONSTANTES. 82
111
Resumo
Este trabalho consiste no desenvolvimento de uma unidade de controle, cuja função é gerenciar vários elementos de processamento que compõem uma arquitetura computacional classificada como arranjo sistólico, com o propósito de solucionar problemas que envolvam sistemas lineares. A partir de uma formulação matemática de alto nível de abstração, estabeleceu-se uma sequência de operações que possibilitou a codificação do modelo matemático em linguagem VHDL. Foram empregadas metodologias e ferramentas avançadas para o projeto de hardware que aceleraram o ciclo de desenvolvimento do projeto, e para a implementação utilizaram-se dispositivos reprogramáveis FPGAs (Field Programmable Gate Arrays). São apresentados resultados numéricos na forma de diagrama de tempo que evidencia o sincronismo da técnica de Pipeline, indicando que a abordagem e a metodologia adotada é viável e eficiente para a solução do problema.
iv
Abstract
This work presents the development of a unit controller for a computer arquitecture composed of processing elements, which are connected in a ring topology, implementing a systolic array. It has the purpose of solving linear systems using an iterative solution technique. The unit controller was built based on a mathematical formulation which allowed the translation of the mathematical model into a VHDL language. Advanced methodologies and tools for hardware project were employed to accelerate the product development cycle and to implement reprogrammable devices on FPGAs (Field Programmable (iate Arrays). Numerical results are presented using timing diagrams that verify the synchronization of the Pipeline technique showing the feasibility and efficiency of the approach employed and the methodology used for solving the problem.
Introdução
1 Introdução
Tradicionalmente o projeto lógico digital tem sido descrito sobre papéis e implementado
com lógica TTL utilizando componentes discretos com integração em pequena escala. A
montagem de protótipos tem sido feita pela conexão com fios dos elementos do sistema
("wirewrapping9. Esta técnica porém impõe dificuldades na montagem, depuração e validação
do funcionamento dos circuitos e ao mesmo tempo exige muita atenção e detalhes e está sujeita a
uma série de erros. Depurar erros pode significar em alguns casos somente a detecção de fios
conectados erroneamente a partir de uma documentação que depende exclusivamente dos papéis
e anotações do projetista. O projeto, na verdade, só é validado ao término da implementação do
protótipo. Outra limitação da técnica de "wireivrapping" é que ela não pode ser utilizada
diretamente com dispositivos SMD ("Surface Mounted Devices') e não funciona
adequadamente para as freqüências de "clock" utilizadas nos circuitos atuais.
A flexibilidade e as características de integração das FPGAs ("Field Progranunable Gate
Array" ) tornam esses dispositivos ideais para o desenvolvimento de pesquisa nas áreas
mencionadas. As FPGAs permitem que o projetista verifique seu Projeto de uma perspectiva em
nível de sistema. O projeto pode ser feito no papel com alguns detalhes e logo em seguida
integrado em um único dispositivo FPGA. Os projetos são descritos geralmente utilizando
linguagens de descrição de hardware (tais como VHDL, Lola, Verilog, ou ABEL) ou editores de
esquemáticos (tais como o VLEWlogic PROcapture, Mentor Design Architect, OrCAD SDT ou
Capture for Windows).
As linguagens de descrição de hardware mencionadas atendem muito mais
eficientemente, que os diagramas esquemáticos, uma série de exigências do projeto de sistemas
atuais de hardware tais como elevada complexidade e alta velocidade. O uso da linguagem
VHDL garante uma maior robustez de projeto, uma vez que a especificação do hardware poderá
ser submetida a uma série de experimentos de validação. Além disso, o VHDL permite projeto
no estilo "topdown", baseado em funções de alto nível, ao invés de projetos elaborados ao nível
de portas lógicas.
1
Introdução
1.1 Justificativa
A pesquisa em hardware evolui muito rapidamente, o que tem gerado a necessidade de
novas metodologias para o seu desenvolvimento, uma vez que os projetos estão se tomando cada
vez mais sofisticados e as exigências de velocidade e eficiência se tomando cada vez mais
estritas. Com a atual infra-estrutura baseada em projetos de "wirewrapping", fica praticamente
impossível o desenvolvimento de hardware de alto desempenho, comprometendo as pesquisas
nessa área. Com a introdução das novas metodologias avançadas para o projeto de hardware, e
com o LaSD-ICMC-USP propiciando uma infra-estrutura de pesquisa e ensino de boa qualidade,
pretende-se Contribuir de maneira significativa para o desenvolvimento de hardware, bem como
para a geração de recursos humanos numa área atualmente carente no Brasil e de grande valor
estratégico, dada a demanda crescente de informatização da sociedade. Essas atividades,
juntamente com as pesquisas realizadas em outros centros de desenvolvimento de hardware no
Brasil, são essenciais para se obter um alto nível de qualidade, tornando assim o país
tecnologicamente competente.
Cabe ressaltar, que o projeto da unidade de controle e da unidade de interfaceamento
propostas nos próximos capítulos, visam primeiramente o fortalecimento do aprendizado destas
novas metodologias, e que a construção do protótipo do Arranjo Sistólico vivifica o espírito de
"engenheiro" em nossos pós-graduandos.
2
Metodologias Avancadas para Projeto de Hardware
2 Metodologias Avançadas para Projeto de Hardware
O propósito desse tópico é descrever uma nova metodologia para projeto de hardware,
que é baseada em ferramentas de alto nível permitindo assim um ciclo de desenvolvimento com
grande confiabilidade e menor tempo de desenvolvimento, além de permitir a manipulação de
projetos complexos de forma mais eficiente. [SYN94].
2.1 Modelagem de Sistemas Digitais
Para se discutir modelagem de sistemas digitais, primeiro precisa-se concordar com" a
definição do que seja um sistema digital. Cada engenheiro poderia definir isso de maneiras
diferentes, dependendo do seu "background" e da área em que ele está trabalhando. Alguns
podem considerar um único circuito VLSI como sendo um sistema digital. Outros poderiam
considerar uma visão mais ampla e pensar em um computador completo, inserido dentro de um
gabinete com controladores.de periféricos e outras interfaces [KUN87].
Para o propósito desse trabalho, considera-se um sistema digital, qualquer circuito digital
que processe ou armazene informação. Desse modo pode-se considerar um sistema digital, tanto
um sistema completo, quanto as várias partes das quais ele é construído [A5H96].
Para se conseguir abranger toda essa gama de sistemas digitais, deve-se inicialmente
reconhecer a complexidade com a qual se está lidando. É humanamente impossível compreender
sistemas tão complexos de maneira completa, portanto é necessário encontrar métodos para lidar
com essa complexidade, de tal forma a permitir, com algum grau de confiança, projetar
componentes e sistemas que obedeçam a determinados requisitos.
A forma mais conhecida para enfrentar esse desafio é a de adotar uma metodologia
sistemática de projeto. Iniciando-se por um documento com requisitos para o sistema, pode-se
projetar uma estrutura abstrata que obedeça a esses requisitos. Depois disso, pode-se então
decompor essa estrutura em uma série de componentes que, quando juntos, vão interagir para
executar a mesma função. Cada um desses componentes pode por sua vez ser decomposto até
que se chegue a um nível onde se tenha componentes primitivos que executem uma função
3
Metodolo,eias Avançadas para Projeto de Hardware
específica. O resultado desse processo é um sistema hierarquicamente decomposto, construído a
partir de elementos primitivos.
A vantagem dessa metodologia é a de que cada subsistema pode ser projetado
independentemente dos outros. Quando se usa um subsistema, pode-se imaginá-lo como uma
abstração ao invés de serem considerados os detalhes do subsistema. Assim em qualquer estágio
do processo de desenvolvimento do projeto, o envolvimento se dá apenas com as informações
relativas à partes do projeto, liberando-se assim da sobrecarga excessiva de detalhes [GSC9.5] .
-0 termo modelo portanto é usado para caracterizar o que se entende do sistema como um
todo. O modelo representa a informação que é relevante e suprime os detalhes irrelevantes. Isso
implica que pode haver vários modelos para o mesmo sistema, uma vez que diferentes
informações são relevantes em diferentes contextos. Um tipo de modelagem poderia concentrar-
se em representar a função do sistema, enquanto outro tipo repreSentaria a maneira pela qual o
sistema é composto.
Existem várias razões para se formalizar essa idéia de modelo. A primeira, supondo-se a
necessidade de um sistema digital, os requisitos do sistema podem ser especificados. A tarefa
dos engenheiros então é projetar um sistema que satisfaça esses requisitos. Para fazer isso, deve
ser dada a eles uma compreensão dos requisitos do sistema foram especificados, de preferência
de uma forma que os deixe livres para explorar implementações alternativas e para escolher as
melhores, de acordo com algum critério estabelecido. Um dos problemas que muitas vezes surge
é o de que os requisitos são por sua vez incompletos e ambíguos, e o cliente e os engenheiros de
projeto discordam no que possa ser significativo no documento como requisitos do sistema. Esse
problema pode ser evitado através do uso de um modelo formal para comunicar os requisitos.
Uma segunda razão para se utilizar modelos formais é comunicar a compreensão de um
sistema a um usuário. O projetista nem sempre pode prever todas as maneiras possíveis sobre
como utilizar um sistema, e portanto não é capaz de enumerar todos os comportamentos
possíveis para o mesmo. Assim, um modelo formal é uma valiosa ferramenta para documentação
de um sistema.
4
Metodologias Avançadas para Projeto de Hardware
Uma terceira motivação para a modelagem é a de possibilitar o teste e a verificação de
um projeto fazendo uso de um projeto de simulação. Se no início for um modelo de requisitos
que defina o comportamento de um sistema, o comportamento pode ser simulado utilizando
entradas de teste e observando as saídas resultantes do sistema. De acordo com essa metodologia
de projeto, pode-se então projetar um circuito a partir de subsistemas, cada um com seu próprio
modelo de comportamento. Pode-se simular esse sistema composto com as mesmas entradas de
teste e comparar as saídas com aquelas obtidas na simulação prévia. Se estas forem as mesmas, é
sabido que o sistema composto obedece os requisitos para os casos testados. Caso contrário;
nota-se que alguma revisão do projeto é necessária. Esse processo pode continuar até chegar ao
nível mais inferior.
A quarta motivação para modelagem é a de que ela permite uma verificação formal da
funcionalidade do projeto. Uma verificação formal requer uma série de especificações
matemáticas sobre os requisitos funcionais do sistema.
Finalmente, pode-se colocar a síntese de circuitos como uma motivação não menos
importante do que todas as motivações citadas acima, pois é através da síntese que será possível
otimizar e até mesmo validar os projetos.
2.1.1 Domínios e Níveis de Modelagem
No item 2.1, foi mencionado que há diferentes tipos de modelos para um sistema, cada
um enfocando diferentes aspectos. Esses modelos podem ser classificados em três domínios:
função, estrutura e geometria. O domínio funcional diz respeito às operações executadas pelo
sistema. Por essa razão, esse é o domínio mais abstrato de descrição, uma vez que ele não indica
como a função é implementada. O domínio estrutural trata de como o sistema é composto de
seus sistemas interconectados. O domínio geométrico trata de como o sistema é posto em espaço
físico.
Cada um desses domínios pode também ser dividido em vários níveis de abstração. No
nível mais elevado é considerada uma visão global da função, estrutura ou geometria, e a níveis
mais baixos são introduzidos os detalhes mais finos sucessivamente A FIGURA 2.1 representa os
5
Metodologias Avançadas para Projeto de Hardware
domínios dos três eixos independentes e representa os níveis de abstração por círculos
concêntricos cruzando cada um dos eixos.
vie ral
~cern de Regictialor de T nci onelerea
‘gilL"
RegistradoeT
Agodyno
P"23Skt44al tr- Aa Tnagei
"Ice
A
Baetões
Células Palace
Plano 13gezi Geométrico
FIGURA 2.1 - DOMÍNIOS E NÍVEIS DE ABSTRAÇÃO
Os eixos radiais mostram os três diferentes domínios de modelagem. Os anéis
concêntricos mostram os níveis de abstração, com os níveis mais abstratos do lado externo e os
níveis mais detalhados em direção ao centro.
Observando essa classificação em maiores detalhes, é mostrado como a cada nível podem
ser criados modelos para cada domínio. Como um exemplo, pode ser considerado um sistema de
microcontrolador na forma de um único chip utilizado como o controlador para algum
instrumento de medição, com conexões de entrada de dados e algumas formas de saídas de
display. O desenvolvimento desse sistema seria distribuído através das várias camadas descritas
na FIGURA 2.1.
Ealrutural Funcional
Chate-teemoileelliccersedor
Eeprdiã] Diferencia
6
Metodologias Avançadas para Projeto de Hardware
De uma maneira mais abstrata, a função do sistema pode ser descrita em termos de um
algoritmo, muito parecido com um algoritmo para um programa de computador. Esse nível de
modelagem funcional é muitas vezes chamado modelagem comportamental.
No capítulo 3 é descrita uma metodologia de projeto de hardware em alto nível através do
uso de ferramentas EDA (Electronic Device Automation).
2.2 A Evolução do Projeto em Alto Nível com Ferramentas EDA
Nas aplicações específicas para circuito integrado, conhecidas como ASIC (Application Specific Integrated Circuit) podem ser encontrados circuitos integrados (CIs) com 50.000 portas
lógicas ou mais. Com o aumento gradativo na capacidade de integração dos chips poderá ser concideravelmente aumentado de 100 portas lógicas por pino atualmente, para até 3.000 portas
lógicas por pino, por volta do ano 2001. Essa complexidade não pode mais ser manipulada
utilizando as ferramentas de projeto auxiliado por computador, Computer-Aided Engineering
(CAE), tradicionais Essas ferramentas resultam em ciclos de projeto muito longos tanto para a
fase concepção lógica quanto para a fase de implementação em portas lógicas, com custos de
desenvolvimento muito altos, e com uma probabilidade de erros inaceitável [LEU97].
Essa evolução pode ser comparada ao avanço das linguagens de programação em alto
nível, tais como a linguagem C, que vem substituindo a programação ao nível de linguagens
montadoras (assembly). As ferramentas de projeto em alto nível, portanto estão elevando os
projetistas de sistemas a um novo patamar de produtividade e independência tecnológica,
possibilitando, assim que uma complexidade cada vez maior do projeto possa ser manipulada,
com a capacidade de corrigir defeitos antes do processo de fabricação, e tornando os projetos
mais portáveis e reutilizáveis.
A evolução na automação de projeto eletrônico, Electronic Design Automation (EDA),
começou nos anos 70 com as ferramentas de projeto auxiliado por computador, Computer-Aided
Design (CAI)), ferramentas essas que deram assistência aos projetistas na geração de padrões e
de layout. As ferramentas de verificação física supervisionavam o trabalho dos projetistas, porém
os engenheiros dessa época não pensavam em termos da lógica ao nível de layout, por causa
7
Metodologias Avançadas para Projeto de Hardware
disso os projetos tinham de ser traduzidos manualmente partindo-se desde as portas lógicas até
as máscaras, tomando as alterações lógicas na máscara difíceis e ineficientes [VE\193a].
Nos anos 80, as ferramentas CALE proporcionaram aos engenheiros um nível mais alto de
abstração nos projetos, permitindo-lhes pensar de forma a levar em consideração as portas
lógicas. Os engenheiros, nesse momento, possuíam ferramentas computadorizadas de captura
esquemática, roteamento, e de simulação lógica que foi introduzida, permitindo a verificação do
funcionamento dos projetos até a fase de prototipação do hardware. Entretanto, as falhas na
arquitetura eram difíceis de serem detectadas ao nível de portas lógicas principalmente para
grandes sistemas [BLI94].
Portanto, o propósito dos sistemas EDA, como uma evolução natural dos sistemas CAD
nos anos 70, tem sido manipular a complexidade dos projetos. Os objetivos permaneceram
constantes: aumentar a produtividade, a qualidade, e a previsibilidade de um projeto conforme
descrito na FIGURA 2.2.
As ferramentas EDA, atualmente, evoluíram para o projeto em alto nível e estão baseadas
em três poderosas ferramentas: síntese, simulação, e teste, onde a síntese se destaca como a parte
principal das ferramentas, pois proporciona a tradução automática das abstrações de alto nível
em descrições para as portas lógicas [MCC90].
8
Anos 70
Produtividade
Qualidade
Previsibilidade
Anos 80
CAD
--> digitalização
--> autoteste
--> abstrato a partir do layout para SPICEC)*
CAE
Produtividade --> captura esquemática rápida
Qualidade --> gerar vetores de teste automaticamente
Previsibilidade --> simular na forma de portas lógicas
Anos 90 EDA
Produtividade --> ferramentas de síntese criam o circuito
Qualidade --> teste de síntese, teste automático de estruturas, otimização para projetos de alta qualidade
Previsibilidade --> simulação do sistema, teste
SPICES (Simulador, Progrcun Integrated Cireuits Especially) é um programa simulador de circuito genérico para dc não linear, introdução não linear, e análises lineares em ac. Circuitos podem conter resistores, capacitores, indutores, indutores mútuos, origens de tensão e corrente independentes, quatro tipos de origens dependentes, linhas .de transmissão, e os quatro dispositivos mais comuns de semicondutores: diodos, ElTs, IFETs, e MOSFETs.
Metodologias Avançadas para Projeto de Hardware
FIGURA 2.2 - PROPÓSITOS DOS SISTEMAS EDA
Antes do surgimento da síntese, o máximo que poderia ser obtido era a simulação da
lógica a partir do projeto descrito em linguagens de descrição de hardware, Hardware
Description Language (HDL) tais como o VHDL (Very-High Speed Integrated Circuit (VHSIC)
ou Verilog®. [PER91, HAR90]. O projeto poderia ser verificado, mas o código não poderia ser
traduzido em um projeto manufaturável. A síntese representa a diferença principal entre as
ferramentas EDA e o CASE tradicional.
9
Metodologias Avançadas para Projeto de Hardware
O projeto no CAE é limitado pela captura esquemática com portas lógicas. Em contraste,
as ferramentas EDA suportam uma variedade de representações, tais como diagramas de bloco,
máquinas de estado, e descrições textuais, em linguagens de descrição de hardware, permitindo
assim que inovações arquiteturais sejam muito mais fáceis de serem implementadas. A
capacidade de simulação é aumentada, uma vez que o projeto é representado de uma forma mais
compacta. Um diagrama que representa o desenvolvimento por níveis de projeto pode ser visto
na FIGURA 2.3 [NAV93].
Comportamental
Portas Lógicas
FIGURA 2.3 - DIFERENTES NÍVEIS DE CONCEPÇÃO PARA PROJETOS EM HARDWARE
Projetos com ferramentas EDA também são independentes da tecnologia. Um projetista
pode ter inicialmente como tecnologia alvo uma FPGA (Field-Programmable Gate Array),
[ACT95, BLI94, BRO9613] para um protótipo com ASIC, mas também pode migrar para VLSI
(Very Large System lntegration).
2.2.1 Metodologia de Projeto em Alto Nível com Ferramentas EDA
Os benefícios do projeto em alto nível como: tempo mais curto para a entrada dos
projetos no mercado, projetos mais confiáveis, reutilização mais fácil do projeto, projetos bem
10
Metodologias Avançadas para Projeto de Hardware
documentados, etc., mostram claramente que os engenheiros de amanhã serão avaliados pela
capacidade de trabalhar de maneira eficaz e principalmente pela habilidade produtiva em
trabalhar com as novas ferramentas EDA [SYN94].
2.2.2 Iniciando um Projeto em Alto Nível
Pode-se caracterizar nessa abordagem para projeto duas fases para um início: certificar-se
de ter compreendido como a metodologia funciona antes de começar, e começar gradativamente.
Em geral, na fase de desenvolvimento propriamente dita, são usados os arquivos no
formato de "netlists" já existentes (arquivos contendo uma descrição da interconexão entre
elementos lógicos de um projeto) como bibliotecas para a maioria do projeto, e através de uma
linguagem de descrição em alto nível, como o VHDL, por exemplo, define-se um novo projeto.
2.2.3 Uma Visão Geral do Processo
Os modernos projetós em alto nível incluem captura de projeto, simulação em alto nível e
para portas lógicas, sínteses comportamental e lógica, verificação, e geração de vetores de teste.
Do mesmo modo que a metodologia de projeto tradicional, o projeto em alto nível se
inicia com as especificações do projeto, baseadas em:
• Função
• Qualidade (cobertura a falha)
• Custo (molde tamanho/área)
• Limitações de tempo (global, por exemplo, 20MHz).
Como já foi visto, em geral, para se editar um projeto, utilizam-se linguagens de
descrição de hardware, tais como Verilog ou VHDL. Existem HDLs ao nível comportamental
(nenhum conhecimento da arquitetura do circuito) e ao nível da transferência de registradores
Register-Transfer Level-RTL (registrador implícito e arquitetura funcional de blocos) que cria
uma descrição funcional da rede a ser implementada.
Partindo-se da especificação do projeto, podem ser verificadas na FIGURA 2.4 as etapas
básicas do projeto em alto nível.
11
Metodologias Avançadas para Projeto de Hardware
A partir da FIGURA 2.4 destacar-se-ão as várias etapas, que são detalhadas abaixo:
L Desenvolver uma descrição do projeto utilizando descrições funcionais RTL (entrada de
Projeto/captura de projeto).
Correspondendo na FIGURA 2.4 à parte do funcionamento comportamental, o processo de
criar a rede de descrição RTL é muitas vezes abordada de forma duplamente relacionada.
A primeira abordagem corresponde à fase que envolve uma definição de arquitetura do
tipo "top-down" onde todas as unidades funcionais do projeto são definidas, criando assim um
projeto estruturado de forma hierárquica. Essas unidades são tipicamente unidades de controle,
ALUs, RAM, ROM, ou "datapaths".
A segunda abordagem corresponde à fase de descrições funcionais "bottom-up" do
projeto utilizando a linguagem descrição de hardware fonte para descrever as características
funcionais de cada uma das unidades da arquitetura ao nível de RT.
Especificação
Implementação
Si mul ação Comportamental
Simulação Comportamental
V
Simulação RTL (Opcional)
Síntese e Teste de Síntese
Verificação
Simulação em Portas Lógicas
Pnáli se das Podas Légicas
Fabricante do Silício
?locação e Roteamento
V Silicio
FIGURA 2.4 - ETAPAS BÁSICAS DO PROJETO EM ALTO NÍVEL
Funci onamento Comportamental
Funci onamento RTL
Portas Légicas
Layout
12
Metodologias Avançadas para Projeto de Hardware
II. Validar a descrição (simulação RTL).
Correspondendo na FIGURA 2.4 à parte do funcionamento RTL, após as descrições RTL
terem sido completadas, o processo de validação começa. Normalmente, o processo de validação
continua "bottom-up" onde cada módulo é testado "unidade a unidade" para assegurar o
funcionamento desejado. Esse é o processo de simulação onde os estímulos de teste são
projetados para testar todos os comportamentos funcionais dos módulos. Após todas as partes do
projeto terem sido validadas, os módulos são montados para uma validação completa final.
JIL Traduzir para portas lógicas (síntese) e otimizar o projeto em termos da área e da
velocidade.
Correspondente na FIGURA 2.4, com relação ainda à parte do funcionamento da RTL,
quando a validação for concluída de uma descrição completa de projeto RTL, é chegado o
momento de concluir a fase de síntese.
Na fase de síntese do projeto, o desenho é traduzido para uma representação em forma de
portas lógicas e é otimizado, atendendo a um conjunto particular de metas de projeto e a uma
biblioteca contendo a tecnologia alvo. O resultado do processo de síntese é uma representação
otimizada em uma dada tecnologia específica na forma de portas lógicas.
IV Aplicar teste de síntese.
Também como parte da FIGURA 2.4 para funcionamento de RTL, o teste de síntese vai
complementar a síntese lógica uma vez que esta cria uma estrutura para o projeto, permitindo
assim a manipulação dos detalhes estruturais para o teste. [MUR95].
O teste de síntese desempenha quatro funções: verificação das regras do projeto para
teste, Design For Test (DFT), inserção de sondas para varredura; re-otimização do tempo e da
área; e geração padrão de teste automática, Automatic Test Pattern Generation (ATPG).
13
Metodologias Avançadas para Projeto de Hardware
V. Verificar o funcionamento (simulação ao nível de portas lógicas).
Na FIGURA 2.4, para obter maior garantia da funcionalidade nos blocos correspondentes
as portas lógicas e layozzt, pode-se desejar acrescentar uma etapa extra de verificação. O "tzetlist"
pode ser simulado (com as características de desempenho da tecnologia alvo utilizada no projeto)
para verificar se as características de desempenho desejadas e o funcionamento do projeto foram
satisfeitos.
Se as especificações não forem satisfeitas, o arquivo fonte RTL pode ser modificado para
que se experimente uma nova arquitetura que seja mais compatível com as metas do projeto.
Entretanto se a descrição satisfizer os objetivos do projeto, prossegue-se na implementação do
circuito em silício, trabalhando, por exemplo, com um fornecedor de ASIC.
VI. Validar o projeto (simulação).
A etapa de verificação final do projeto é a simulação para a validação do ASIC ou CI,
comum quando da produção desses dispositivos.
2.3 Ferramentas e Processos de Automação de Projeto em Alto Nível
Como já visto à automação de projeto em alto nível consiste basicamente de quatro
etapas distintas: entrada de projeto, síntese, simulação, e teste de síntese. Serão detalhadas então,
cada uma destas etapas para o projeto em alto nível.
2.3.1 Entrada de Projeto
A maioria dos projetos em forma de portas lógicas é capturada via um editor
esquemático, embora em alguns projetos possa ser utilizado um editor de texto para criar um
"netlist". A captura de projetos em alto nível, por outro lado, faz uso de uma mistura de entrada
em blocos (entrada do tipo esquemática para partes estruturais do projeto), e de uma entrada
textual para as funções no interior dos blocos. Alguns editores especializados possibilitam a
captura gráfica de funções lógicas, suas estruturas e um tipo específico de hardware. (Dois
exemplos são o Sistema de Projeto COSSAPTm para o projeto de processadores digitais de sinais
da Synopsys, e a ferramenta StatemateTm para máquinas de estado finitas da i-Logix, Inc.).
14
Metodologias Avançadas para Projeto de Hardware
Como visto na FIGURA 2.3, mais especificamente com relação ao modelo RTL na edição
dos projetos, serão destacadas a seguir as diferenças entre: descrição comportamental,
funcionamento dos RTL, e formato de portas lógicas:
2.3.1.1 Descrições Comportamentais
Descrições comportamentais estão sendo utilizadas mais e mais por projetistas para criar
e explorar as descrições dos algoritmos nos projetos, antes de sintetizar uma descrição RTL.
Uma descrição comportamental diz basicamente o que um projeto supõe realizar, mas com
alguma arquitetura alvo pré-definida, memória e elementos de controle.
Da mesma forma uma especificação HDL comportamental contém instruções, operações,
variáveis, e "arrays" semelhantes ao código de especificação para o algoritmo original.
Os benefícios da entrada de dados comportamentais e da simulação de algoritmos para
projetos, estão nas especificações de "timing" mais rápido, simulação em alto nível mais rápida
(utilizando um simulador comportamental), exploração dos algoritmos ótimos, de uma
arquitetura ótima, e alta qualidade final no momento da implementação.
2.3.1.2 Descrições ao Nível de Transferência de Registradores (RTL)
Estas descrições informam não apenas "Qual é" o projeto, mas também "como é" o
projeto. Dão uma boa noção da arquitetura e do esquema de clock, além de poderem gerar os
projetos com diferentes tipos de tecnologia.
Quando um projeto for capturado primeiramente ao nível comportamental, ele poderá ser
manualmente transformado em uma descrição RTL ou automaticamente sintetizado utilizando-se
uma ferramenta de síntese comportamental. O código RTL serve como "fonte" para o restante
do desenho do projeto. Isso significa que todas as alterações no projeto (especificações,
arquitetura, eliminação de "bugs", e assim por diante) são primeiro refletidos no código RTL.
Os benefícios ao se trabalhar em RTL utilizando metodologias de projeto em alto nível incluem:
15
Metodologias Avançadas para Projeto de Hardware
• A capacidade de dedicar uma porção maior do tempo de projeto para explorar conceitos de arquitetura
• Melhorar a qualidade do projeto através da otimização automática e da análise de arquitetura
• Consistência entre os níveis de abstração
• Projetos independentes de tecnologia alvo
• Reutilização de módulos
• Uma variedade de formatos são aceitos como entrada
2.3.1.3 Descrições em forma de Portas Lógicas
As descrições em forma de portas lógicas são representações não físicas de um projeto. A
implementação do projeto é descrita como uma rede booleana ou um "netlist". Essas descrições
conservam a arquitetura derivada da RTL, e também mostram a arquitetura booleana ou a
implementação lógica da função. Embora as descrições em fomia de portas lógicas possam ser
tecnologicamente independentes, elas tipicamente não o são, porque foram mapeadas e
otimizadas para uma biblioteca de tecnologia alvo em particular.
2.3.2 Síntese
A síntese consiste de três processos distintos: síntese comportamental, síntese HDL, e
síntese lógica.
2.3.2.1 Síntese Comportamental
Na síntese comportamental, constrói-se o "datapath" (por onde fluem os dados no interior
de uma lógica digital), memória, e elementos de controle através do uso de métodos automáticos
de escalonamento, alocação de hardware, compartilhamento de registrador, memória, e controle
de inferência — tarefas que o projetista costumava executar manualmente. Utilizando-se a
metodologia RTL, ele não precisa especificar a arquitetura exata de um projeto e pode explorar
muitas implementações alternativas resultando em arquitetura otimizada [0UC96].
16
Metodoloeias Avançadas para Projeto de Hardware
2.3.2.2 Síntese HDL
Na síntese HDL converte-se a entrada, que está na forma de HDL (tanto VHDL como
Verilog), em equações booleanas não otimizadas ou em um "netlist" otimizado. Esse processo
analisa a linguagem, verifica a sintaxe e a semântica, propaga constantes, elimina código extinto. aloca e compartilha recursos.
A otimização ao nível de portas lógicas executadas pela ferramenta de síntese requer um
suporte grande de bibliotecas de tecnologias, como CMOS, BiCMOS, ECL. e FPGA.
2.3.2.3 Síntese Lógica
A síntese lógica converte equações lógicas para um formato "netlist", e então o otimiza
para uma tecnologia ASIC em particular. A síntese lógica consiste de duas fases distintas: • Otimização lógica para minimizar equações Booleanas.
• Tecnologia de mapeamento para converter equações em células de biblioteca ASIC.
Ambas as fases levam em consideração limitações de área e de velocidade. No futuro,
elas também levarão em conta limitações de custo. A primeira etapa no processo de síntese é
estabelecer limitações de tempo e de área (e limitações de potência para projetos ECL). O
processo de se estabelecer as limitações para a síntese é semelhante ao de se desenvolver
estímulos para simulação. Limitações de tempo incluem caminho crítico, período de "clock", condições de "setup" e de "hold", e máximo "fanout" de transição. As limitações criadas podem
considerar o ambiente ao redor, incluindo fatores como condições de operação e temperatura.
Devido ao poder e à velocidade da tecnologia de síntese, pode-se analisar alternativas de
implementação, medindo-se os efeitos das mudanças na área e na velocidade, contrário aos
métodos ao nível de portas lógicas, onde raramente há tempo suficiente para caminhos
alternativos de implementação. Na FIGURA 2.5 pode-se ter uma visão clara do processo de
síntese, a partir de uma descrição em VHDL.
17
,------ ---. •-____ _...„, Biblioteca da 41-
Tecnologia Alvo •_.___, ..„--.
Limitaçõ\ Timing/Área
Metodologias Avaneadas para Projeto de Hardware
entity N.410L_FUNC is port(A.13 : h BIT VECTOR(1 to
EOL : out BOCILEAN and VIIOL_FUNC:
TradugSo
OtimizagEo Otimingio
Projeto de Tamanho Projeto com Velocidade Reduzido Rápida
RGURA 2.5 - SÍNTESE LÓGICA
2.3.2.4 Separação Clara entre Exploração e Implementação
Uma das maiores diferenças entre o projeto na forma de portas lógicas e o projeto em alto
nível é a separação clara entre a versatilidade em se explorar diferentes frentes para um
determinado projeto e a implementação de um projeto na forma de portas lógicas. Captura,
exploração, e implementação são fases integradas em um único processo na elaboração de um
projeto, na forma de portas lógicas, já referenciado na FIGURA 2.4.
No projeto em alto nível, a implementação é realizada para sintetizar o HDL capturado, e
é direcionada a partir das metas estabelecidas pelo projetista (velocidade, área, potência, e assim
por diante). A exploração de alternativas múltiplas para a implementação pode ser realizada
rapidamente via alteração das metas do projeto. Em outras palavras, os métodos para portas
lógicas forçam a implementação antes que se possa explorar as possibilidades do projeto.
Portanto, o projeto em alto nível permite que se explorem alternativas antes da implementação.
18
Metodologias Avançadas para Projeto de Hardware
No projeto em alto nível, a implementação do projeto na forma de portas lógicas, na
maioria das vezes, é executada por intermédio de síntese da descrição comportamental ou da
descrição RTL. Algumas partes do projeto podem ser "hand-crafted" (alteradas manualmente, ex: geração de clock em um chip), algumas podem ser projetadas pelos geradores de módulo de
silício específicos (ex., RAM/ROM), e alguns "netlists" podem ser incluídos a partir de projetos gerados anteriormente.
A expectativa dos novos projetistas, portanto, é que pelo menos 90 por cento dos
projetos sejam sintetizados, em sua origem, a partir das descrições RTL em portas lógicas. Uma
vez criado o "netlist", o processo de implementação permanece o mesmo a partir desse processo
usado no projeto em forma de portas lógicas. Todas as revisões do projeto e todas as etapas de
validação permanecem as mesmas.
A síntese, portanto é a ligação entre dois ambientes de projetos até então distintos:
projetos ASICs e projetos de sistemas. A síntese e as linguagens de descrição de hardware vêm
modificando o nível de abstração do projeto ASIC, tornando possível estabelecer um
relacionamento bidirecional entre projetistas de sistemas e projetistas de ASICs.
Esse relacionamento é uma evolução natural, à medida que o custo envolvido no
desenvolvimento de sistemas está cada vez mais alto em um projeto ASIC proprietário,
exatamente o oposto do que ocorre a um componente padrão no mercado tradicional. A síntese
portanto faz com que tanto as tarefas do ASIC como as tarefas do projeto de sistemas sejam
combinadas.
2.3.2.5 O Balanceamento Alcançado pela Ferramenta de Síntese
Para uma otimização de área em um circuito FPGA, por exemplo, a meta é minimizar a
área total de um projeto (onde a área pode incluir uma combinação de células e interconexões).
O processo básico para conseguir isso é o de minimizar cada expressão em alto nível, e então
tentar encontrar sub-expressões comuns entre as várias funções booleanas. Esse processo é
chamado de otimização global de multiníveis. Após identificar essas sub-expressões comuns, a
otimização global de multiníveis cria variáveis intermediárias que representam as sub-
19
Metodologias Avançadas para Projeto de Hardware
expressões, para então substituir ligações para essas sub-expressões nas diferentes sub-funções.
Esse processo é chamado de estruturação.
Se a descrição HDL original tiver variáveis intermediárias, ela já estará em uma descrição
lógica multinível. Nesse caso, a ferramenta de síntese tentará identificar melhor as variáveis
intermediárias. Algumas das variáveis intermediárias serão substituídas, porque geram sub-
expressões adicionais comuns.
Há limites para essa minimização porque não é prático enumerar todas as possíveis
soluções, mas é possível controlar as tentativas nessa minimização tendo co- mo parâmetro o
"nível de esforço" das ferramentas de síntese.
A ferramenta de síntese ainda não é de domínio completo do projetista. Apesar do
processo de otimização lógica produzir boas sub-expressões, o conhecimento detalhado dessa
ferramenta é uma parte essencial no processo.
Cabe observar que as ferramentas de síntese lógica comerciais hoje em dia são melhores
na produção de lógica totalmente síncrona; isto é, todos os flip-flops são alimentados por um
sistema de clock bem definido que atua como entrada primária para o projeto. Há algumas
ferramentas de suporte para projetos assíncronos, mas o projetista que precisa desse suporte deve
estar atento, no sentido em que os circuitos totalmente síncronos podem em geral, estar de
acordo com os modelos de simulação, enquanto circuitos assíncronos podem não estar. A
maneira mais comum de produzir lógica assíncrona é partir de um HDL, utilizando "clocks"
ligados a "latches" ou a "flip-flops".
2.3.3 Simulação
O projeto em forma de portas lógicas combina validação e verificação. O projeto em alto
nível trata desses processos como duas atividades separadas. A separação entre a validação da
função e a verificação do desempenho leva a ciclos de simulação menores, reduzindo assim o
tempo global de desenvolvimento do projeto quando se utiliza de metodologias de projeto em
alto nível. O projeto em alto nível distingue entre validação e verificação com o seguinte questionamento:
20
Metodolocias Avançadas para Projeto de Hardware
Validação = O projeto capturado reflete precisamente a função pretendida?
Passa-se então à discussão do que é validação e em seguida verificação.
2.3.3.1 Validação
Na validação é estabelecido um corpo de prova suficiente de tal forma a comprovar que o
projeto capturado seja exatamente o que o projetista pretendia capturar (não há nada incorreto,
perdido, ou funções não procuradas). Ao nível de HDL (comportamental ou RTL), pode-se
validar as funções de um projeto via simulação de HDL. Neste caso pode-se verificar a
velocidade e a área após a criação de uma implementação em forma de portas lógicas usando
síntese.
A maioria dos módulos em HDL capturados requer apenas validação funcional. A
simulação, na forma que se apresenta hoje, é exclusivamente utilizada para a validação, mas em
breve deverão ser baseadas em padrões de validação podendo vir de múltiplas fontes (ex.,
VHDL, texto ASCII, etc.). É, portanto importante planejar vetores de simulação usados no
processo de validação, pois estes vetores serão apropriados para o uso na verificação funcional
do resultado pós-síntese. Nenhuma das fontes de validação padrão mapeia exatamente os padrões
que podem ser utilizados na forma de portas lógicas.
Como a simulação tradicional, a simulação em alto nível também envolve projeto
interativo e procedimentos de depuração, mas com um alto nível de abstração. Para facilitar a
depuração, bons relatórios de erro são relevantes; as mensagens devem identificar de maneira
clara as áreas com problemas no projeto original. Quando ferramentas de HI)L forem utilizadas,
um depurador código fonte será exigido, e uma visualização esquemática do projeto também será
útil. Mensagens comuns incluem erros, o diretório real (onde se está na estrutura de diretórios),
"análise" de mensagens (a "análise" é a primeira etapa na leitura do código VHDL), e os
resultados da simulação.
A validação dos resultados sintetizados ocorre na forma de portas lógicas. Uma vez que
um grande número de vetores pode ser necessário para validar o funcionamento. A velocidade de
simulação passa então a ser um ponto importante dos tópicos a ser questionado. Assim a
aceleração do hardware na forma de portas lógicas é uma maneira de acelerar a simulação;
21
Metodologias Avançadas para Projeto de Hardware
"multithreads" (o uso do computador com vários processos compartilhando múltiplas CPUs) é outra maneira.
O processo de validação pode também ser acelerado através do uso de simulação de
multiníveis. Uma seção do projeto pode ser analisada na forma de portas lógicas, enquanto as
outras partes do projeto estão sendo representadas em níveis mais elevados de abstração. Isso
possibilita que partes do projeto sejam "plugged in" e testadas individualmente. É mais fácil e
mais rápido depurar partes simples individualmente do que todas as portas lógicas ao mesmo
tempo.
Verificação = A implementação combinou com a descrição validada, inclusive as
limitações?
Passa-se então à discussão do que é verificação.
2.3.4 Verificação
A verificação examina dois projetos e determina se eles são ou não idênticos em algum
conjunto específico de propriedades. Muitas vezes deseja-se saber se dois projetos são idênticos
em seu funcionamento no comportamento ciclo-a-ciclo.
No projeto em alto nível a comparação pode ser realizada após o projeto ter sido
sintetizado, ou seja, entre uma descrição HDL e sua implementação na forma de portas lógicas.
Utilizando "netlists" ou gráficos, essas duas descrições podem ser comparadas através da
equivalência funcional, tipicamente através da simulação. A ferramenta automatiza os processos
de comparação. Além disso, as próprias ferramentas de síntese devem possibilitar que se utilize
informação sobre limitações de tempo padrão. Pode-se ter na ferramenta, por exemplo, janelas
para o usuário, para auxiliar a julgamento de erros. Para se conduzir os testes de fabricação seria
possível exportar os vetores resultantes da simulação.
A verificação pós-síntese concentra-se na função, na velocidade e na área. A maior parte do trabalho será realizada nesse estágio, onde será abordada a verificação funcional, porque as
ferramentas de síntese automatizam bastante a análise da velocidade e da área.
22
Metodologias Avançadas para Projeto de Hardware
Tipicamente, gerar-se-á alternativas até que as metas de área sejam alcançadas, e então se
executa a verificação final, utilizando os procedimentos prescritos pelo fornecedor de ASIC
escolhido. Isso na maioria das vezes envolve a execução de duas a quatro tentativas de
otimização enquanto apenas uma verificação é realizada.
A verificação do desempenho de projetos em alto nível é quase idêntica à verificação de
desempenho do projeto com portas lógicas. Uma exceção para isso é quando a análise estática de
tempo é utilizada para verificar projetos. Com essa abordagem, os objetivos de desempenho
descritos explicitamente, (já utilizados para direcionar a implementação via síntese), podem ser
utilizados como padrão para verificar o projeto final. Esse método simplifica bastante a
verificação devido a maneira pela qual os padrões estabelecidos de descrição funcional em IML
se relacionam com as metas de implementação. Fornecedores de ASIC continuam a exigir uma
simulação de tempo completa com portas lógicas para validar os projetos antes da fabricação.
Na FIGURA 2.6 podemos ver um diagrama descrevendo os principais passos no processo
de simulação.
23
MetodoloRias Avançadas para Projeto de Hardware
FIGURA 2.6 - OS PONTOS DE EQUILÍBRIO OBTIDOS PELA FERRAMENTA DE SÍNTESE
2.3.4.1 Estratégias para Verificação
No projeto em alto nível, várias estratégias de verificação do sistema são possíveis:
• Segmentos Particionados. Particionar um projeto proporciona uso eficiente dos
recursos computacionais. Entretanto, podem ser perdidas interações críticas de sinal
aonde se segmenta a interface.
• Nível de portas lógicas completo. A vantagem da verificação completa ao nível de
portas lógicas é a precisão, mas ela pode tomar-se extremamente intensa para a CPU.
• Multinível. Nesse método, são feitas múltiplas execuções, com a maioria do sistema representado por modelos abstratos. A vantagem dessa abordagem é de que isso é
muitas vezes o melhor ponto de equilíbrio entre o tempo de execução da simulação e
24
Metodologias Avançadas para Projeto de Hardware
precisão da simulação. A desvantagem é que isso requer que muitas simulações sejam
executadas. Dispositivos de interface devem ser modelados cuidadosamente.
2.3.4.2 Simulação "Pins-Out"
Projetistas experientes sabem que, enquanto 95 % de todos os ASICs passam por testes
funcionais "stand-alone", apenas cerca de 50 % deles na verdade funcionam quando conectados
em uma placa do sistema. Para evitar essas incompatibilidades, os projetistas verificaram que
simular um projeto no contexto do seu sistema é crucial para o sucesso na primeira vez. Esse
processo é denominado de simulação "pins-out".
Mas a verificação do sistema não é eficaz ao nível de portas lógicas. Os netlists para as
portas lógicas do sistema são muito grandes para os simuladores de software e erros de projeto
são muitas vezes encontrados depois da implementação ser concluída.
Para se fazer uma simulação pins-out eficiente de um ASIC no interior de um ambiente
de sistema de trabalho, faz-se necessário desacoplar a função da implementação para representar
porções do sistema como modelos abstratos. Pode-se encomendar esses modelos de um terceiro
fornecedor, ou escrever os próprios modelos utilizando um HDL. Isso resultará em uma rápida
execução, mas deve-se assegurar que os modelos são precisos o suficiente para serem
significativos.
2.3.4.3 Modelo de Representação
À medida que um modelo é construído, pode-se representar os elementos do projeto de
várias formas.
• Caixa Preta. Considerada uma caixa preta no projeto físico, ou seja, apenas são
levadas em consideração, o tamanho físico a ser ocupado no projeto. Nenhuma
funcionalidade é especificada.
• Duto Funcional. Utilizado para representar um comportamento funcional ou
estatístico (por exemplo, freqüência de overflow da FIFO). Consideração de tempo
25
Metodologias Avançadas para Projeto de Hardware
pode ser excluída. Detalhes de funções como manipulação de interrupções, por
exemplo, são normalmente excluídos.
• Comportamental/RTL. Esse nível de representação dá uma descrição precisa de
como o módulo funciona, e incorpora informações de ciclos de clock e funcionalidades
especificadas.
• "Netlist" para Portas Lógicas. Esse nível inclui a implementação lógica completa de
um projeto, incluindo todo o tempo.
• Modelador de "Hardware". Embora a precisão do modelo de "hardware" seja tão
boa quanto um modelo de "software" detalhado, o modelo de hardware provavelmente
será executado mais rapidamente Nesse modelador, podemos verificar realmente o
interfaceamento entre o CI (o silício propriamente dito) e as ferramentas de simulação
de software. Quanto mais detalhada a funcionalidade, maior o tempo de verificação.
Este é o ponto de equilíbrio fundamental: precisão do modelo versus tempo de
execução. Uma forma de evitar que se tenha de definir esse ponto de equilíbrio, é
particionar o projeto, quebrando-o em vários grupos distintos e simulando cada grupo
separadamente. A chave para se obter essa divisão de forma eficiente é escolher o
agrupamento em termos do tráfego de sinal, não da implementação. É importante
também levar em conta que modelar o "hardware" tem uma maior produtividade e
exatidão durante os primeiros estágios do desenvolvimento, quando se interage muito
com os detalhes do projeto [NAV87].
• Emulação de "Hardware". Nesse caso, codificar-se-ia.o VHDL para síntese, criando
uma descrição RTL do projeto, e então se passa à descrição do emulador. Ao se fazer
isso, necessita-se endereçar o clock, interfacear protocolos, sincronização, e dataflow
(por onde fluem os dados). A emulação capacita rapidamente a criar um protótipo de
hardware, de forma que se possa verificar a funcionalidade do projeto numa velocidade
próxima da implementação final. O VHDL trata estímulos como outro módulo no
projeto, tornando-o "autodocumentado". Emulação de hardware pode ser melhor
aproveitada quando da validação final de um projeto, pois pode ser necessário um
processo intensivo de simulação.
26
Metodologias Avançadas para Projeto de Hardware
2.3.4.4 Visualizando os Resultados da Verificação
Os resultados da simulação no ambiente de projeto de alto nível podem ser visualizados
em vários formatos.
• Forma de Onda: mostra os resultados graficamente conforme eles são determinados
pelo simulador.
• Listagens Tabulares: boa para visualizar dutos e simulações baseadas em ciclos de
clock. Pode-se customizar o formato das listagens e salvar o arquivo de resultados
para uso posterior.
• Amostras Especializadas: normalmente específicas do projeto. Ao invés de esperar
que a ferramenta contenha esse formato, pode-se criar uma forma específica de
amostra. As ferramentas, portanto devem permitir que se crie uma amostra específica.
Amostras especializadas são muito úteis para analisar comportamento complexo.
• Amostras Interativas. Se a forma de onda está disponível, pode-se retomar no
processo em um esquemático, tomando-o mais fácil de avaliar e depurar. A amostra
esquemática deveria ser ligada ao visualizador de forma de onda, de maneira que os
resultados no esquemático estejam de acordo com o planejado na amostra em forma
de onda.
2.3.5 Teste de Síntese
Ferramentas de teste de síntese automatizam o projeto para teste à medida que o projeto
está sendo criado. O teste de síntese possibilita minimizar o seu custo durante o ciclo de projeto e
evita o alto custo de reprojeto para teste. Além disso, ferramentas de síntese de teste
proporcionam a geração de teste padrão automático para criar padrões com alto grau de
cobertura de falhas.
O teste de síntese inicia-se já nos primeiros momentos do ciclo de projeto modificando
automaticamente os circuitos para testes, conservando os objetivos iniciais de desempenho e de
área. O teste de síntese também faz o seguinte:
• Remove redundâncias lógicas do projeto
• Identifica possíveis lógicas não testáveis
• Dá advertência em concordância com as regras
27
Metodologias Avançadas mira Projeto de Hardware
• Insere estruturas de [estabilidade automaticamente
• Re-otimiza o projeto para área e velocidade
• Gera vetores de teste
Como resultado do teste de síntese, pode-se ter: alta qualidade no projeto e projetos
altamente testáveis.
O teste de síntese é mais eficaz quando usados bloco a bloco no projeto. Uma vez que o
bloco seja sintetizado com ferramentas de projeto em alto nível, ferramentas de teste de síntese
são utilizadas para verificar a conformidade do projeto com regras de varredura e proporcionar
informações de cobertura a falhas. Com o teste de síntese, pode-se avaliar rapidamente o projeto
e sua testabilidade. Assim, cada bloco está preparado e está bem posicionado para uma excelente
cobertura a falhas. Uma vez que o projeto esteja completo, o teste de síntese automaticamente
insere estruturas de teste de varredura, determina a velocidade e a área da varredura do projeto, e
gera o conjunto padrão de teste final.
As três principais fases do teste de síntese são:
• Projeto para Teste. A fase DFT ("Design for Test") inclui verificação das regras para uma varredura em concordância, yeedback" de testabilidade, inserção de varredura de
caminho com restrições, otimização de um projeto com teste e alocação, e produção de
um "netlist" testável, e otimizado. Testabilidade é acrescida a um projeto baseado nos
requisitos de área, desempenho, e cobertura de falhas durante a fase.
• Geração padrão de teste automático. Uma vez que um projeto [estável seja criado
durante a fase DFT, a ATPG (Automatic Test Pattern Generation) seqüencial ou
combinacional fornece os elementos de varredura no projeto para criar padrões de teste
necessários para o alto grau de cobertura de falhas.
• Cobertura a Falha definida. Uma falha é definida como um defeito de fabricação que
fará com que um projeto falhe. O modelo de falha mais comum é o modelo "stuck-at"
no qual cada entrada e saída de uma porta lógica possui uma falha em um nível "stuck-
at-1" ou "stuck-at-O". Se a cobertura a falhas de um conjunto de padrões de teste for
menor do que 100 %, um subconjunto de entradas e saídas poderá possuir um stuck-at-
1 ou stuck-at-O [5IE82].
28
MetodoloR ias Avançadas para Projeto de Hardware
• Benefícios da Síntese de Teste e da abordagem de varredura. Teste de Síntese
combina síntese, projeto para teste, tempo e análise de área, e tecnologias ATPG com
metodologias de teste de varredura para proporcionar uma solução de teste automática
para projetos em alto nível. Através do uso de projeto automático baseado em
varredura, o teste de síntese proporciona uma metodologia comprovada, previsível para
conseguir alto grau de cobertura a falhas com um mínimo impacto no tempo de
desenvolvimento do projeto, área e desempenho.
São descritas no Capítulo 3 as características e potencialidades dos FPGAs (Field
Progratnmable Gate Array).
29
FPGAs (Fied Programmable Cate Arravs)
3 FPGAs (Field Programmable Cate Arrays)
Com a introdução dos Field Programmable Gale Array (FPGA — um chip com lógica
configurável) no inicio dos anos 80, ao engenheiro de hardware foi dado o poder de implementar
projetos em silício ao nível de chips sem ter de fabricar um chip. À medida que esses
componentes e suas ferramentas de software amadureceram, o uso de FPGAs expandiu-se desde
o teste e verificação de projetos digitais até a utilização no sistema. Essa visão global descreve os
fundamentos bem como a utilização atual dessa tecnologia. [VCC97].
FPGAs executam a função de um circuito LSI dedicado, como um gate array, e são
programáveis pelo usuário. A vantagem mais significativa da utilização de componentes FPGAs
é a capacidade de produzir o protótipo de um projeto lógico e implementá-lo em silício num
período de horas, enquanto componentes gate arrays convencionais podem levar meses e a um
custo elevado para desenvolver e produzir um silício funcional. Desde a sua introdução, FPGAs
têm aumentado em número de portas utilizáveis, enquanto decrescem em preço. Atualmente, têm
sido utilizados como glue logic, para testes e verificações lógicas em projetos de sistemas para
projetos de sistemas adaptativos e mais recentemente como dispositivos de coprocessamento.
FPGAs são usadas também para emular outras arquiteturas compostas, e são aplicáveis para a
construção rápida de protótipos.
3.1 Visão Geral da FPGA
Existem quatro categorias principais de FPGAs comercialmente disponíveis atualmente:
array simétrico, baseado em linhas, mar de portas lógicas, e PLD hierárquico conforme ilustra a
FIGURA 3.1. Em todas essas FPGAs as interconexões e como elas são programadas variam.
Atualmente há quatro tecnologias em uso. Elas são: "static RAM cells", "antifuse", EPROM
transistores, e EEPROM transistores. Dependendo da aplicação, uma tecnologia de FPGA pode
ter características mais desejáveis para a aplicação em questão [R0S93].
30
Interconexão
Bloco LCioico
Bloco PLD
FPGAs (Fied Programmable Gate Arrays)
Array Simétrico Baseado em Linhas
Bloco LOgICO
Interconexâo
Mar de Portas Lógicas PLC, Hierárquico
MIIMMEME 111111111111MIMMTe= MMIEMEMEI EMIIMMINIERIMM 1111MMEMEM 1.11MMEMEM INIMMENWEIMMI MEMMEML" MEMIIMME MIEMINIMMINE EIMMIIMME EINIMEMEMEM
FIGURA 3.1 - CLASSES DE FPGAs
Tecnologia RAM estática - Nas FPGAs RAM estáticas as conexões programáveis são feitas utilizando-se transistores de passagem, "gates" de transmissão ou multiplexadores que são
controlados pelas células SRAM. A vantagem dessa tecnologia é a de que ela possibilita rapidez
na reconfiguração no circuito. A maior desvantagem é o tamanho do chip necessário para a tecnologia RAM.
Tecnologia AntiFuse - Uma conexão antifuse permanece em um estado de alta
impedância; e pode ser programada por estado de baixa impedância ou estado "fused". A um
custo menor do que o da tecnologia RAM, esse componente é programado uma única vez.
Tecnologia EPROM / EEPROM - Esse método é o mesmo utilizado em memórias
EPROM. Uma vantagem dessa tecnologia é a de que ela pode ser reprogramada sem espaço de armazenamento interno da configuração; no entanto só transistores EPROM não podem ser
31
FPGAs (Fied Programmable Gate Arravs)
reprogramados no circuito. A tabela I mostra algumas das características das tecnologias de
programação descritas acima.
Características da Tecnologia FPGA
Tecnologia Volatilidade Re
programação
Área de Chip R (ohm) C (ff)
RANI
estática
Sim no circuito grande 1 -2 K 10- 20 ff
PLICE
AntiFuse
Não não antifuse ---
pequena
prog. trans.-
grande
300- 500 3 - 5 ff
ViaLink
AntiFuse
Não não antifuse ---
pequena
prog. trans.-
grande
50- 60 3 - 5 ff
EPROM Não fora do
circuito
pequena 2 - 4 k 10 -20 ff
EEPROM Não fora do
circuito
2x EPROM 2 -4 k 10 -20 ff
TABELA 1 - Características de Programação para Tecnologias FPGA
32
FPGAs (Fied Programmable Gate Arravs)
A tabela 2 mostra algumas das FPGAs disponíveis comercialmente [ALT96, =95].
FPGAs Comerciais
Fabricante Arquitetura Tipo de Bloco
Lógico
Tecnologia de
Programação
Actel Baseado em linhas Baseada em
Mul tiplex adores
Antifuse
Algotronix (Xilinx) Mar de Portas
Lógicas
Multiplexers & Basic
Gates
RAM estática
Altera PLD Hierárquico Bloco PLD EPROM
QuickLogic Array Simétrico Baseada em
Multiplexadores
Antifuse
Xilinx Array Simétrico Look-up Table RAM estática
Tabela 2 - FPGAs Comercialmente Disponíveis
3.2 A FPGA baseada em SRAM
As FPGAs ("Field Programmable Gafe Arrays") proporcionam os benefícios de um
VLSI CMOS, embora evitando o custo inicial, o atraso de tempo, e risco inerente de uma
máscara gate array convencional. As FPGAs são customizadas pelo carregamento de dados no
interior das células de memória. A FPGA pode tanto ter leitura ativa de seus dados de
configuração externamente de maneira serial ou paralela PROM (modo mestre), ou a
configuração dos dados pode ser escrita no interior da FPGA (escravo e modo periférico). A
FPGA pode ser programada em um número ilimitado de vezes e suporta freqüências de clock
com mais de 50 MHz. Na FIGURA 3.2 está descrita a estrutura básica interna de uma FPGA.
33
Células de 1/0
'92,ttne
Ekri
Recursos de Interconexiio
FPGAs (Fied ProRrammable Gate Arravs)
FtouRA 3.2 - A FPGA
A FPGA tem três elementos configuráveis principais: blocos lógicos configuráveis Configurable Logic Blocks (CLBs), blocos de entrada e saída Input/Output Blocks (I0Bs), e interconexões. Os CLBs proporcionam os elementos funcionais para a construção da lógica do
usuário. Os IOBs proporcionam a interface entre os pinos do encapsulamento e as linhas de
sinais internos. Os recursos de interconexões programáveis proporcionam trilhas de roteamento
para conectar as entradas e saídas dos CLBs e IOBs formando redes apropriadas. A configuração
customizada é estabelecida pela programação das células de memória estáticas internas que
determinam as funções lógicas e as conexões internas implementadas na FPGA [BR092].
34
FPGAs (Fied Programmable Cate Arravs)
CLB CLB CLB
mi ¡ali MEM MEEI MEEI IM!
CLB
Matriz de
CLB
I I
CLB
III ma IMi MIM IMI MIM IM!
CLB
Roteamento
CLB CLB
FIGURA 3.3 - CLBs E INTERCONEXÕES
A FIGURA 3.3 mostra uma FPGA como um arranjo bidimensional de blocos lógicos que
podem ser interconectados através de trilhas de interconexão. Todas as conexões internas são
compostas de segmentos de metal com pontos de chaveamento programáveis para implementar o
roteamento desejado. Uma abundância de diferentes recursos de roteamento é proporcionada
para conseguir eficiência no roteamento automático. Há quatro principais tipos de interconexão,
três são diferenciados pelo comprimento relativo entre seus segmentos: linhas de comprimento
simples, linhas de comprimento duplo e linhas longas. (NOTA: O número de canais de
roteamento mostrados na FIGURA 3.3 é apenas para propósito de ilustração, na verdade o número
de canais de roteamento varia de acordo com o tamanho do arranjo).
35
FPGAs (Fied ProRrammable Gate Arravs)
Ligação de Hardware Acrescentada à Próxima Célula
FF
H
G
FF
FIGURA 3.4 - Um EXEMPLO DE BLOCO LÓGICO CONFIGURÁVEL
Os elementos do Bloco Lógico Configurável Ou CLBs (Configurable Logic Block) são
mostrados na FIGURA 3.4. Cada CLB contém um par de flip-flops (1-14) e dois geradores de
função independentes (F e (3) com quatro entradas. Esses geradores d& função têm bastante
flexibilidade, pois a maior parte das funções lógicas combinacionais necessita de menos do que
quatro entradas. Os CLBs implementam a maior parte da lógica em uma FPGA. A flexibilidade e
simetria da arquitetura CLB facilita a alocação e o roteamento de uma dada aplicação [ACT95,
ALT96, XIL97].
36
FPGAs (Fied Programmable Gate Arrays)
3.3 Programando a FPGA
A seguir segue o fluxo de projeto digital padrão para implementação de Hardware
orientado a objeto [CHA94]. Nas FIGURAS 3.5, 3.6, 3.7 e 3.8 estão descritas a etapa do projeto.
ETAPA 1: Entrada do Projeto
Ferramentas de Entrada
• Viewlogic - ProseriesTM
• Synopsysni
• Exemplar Logic Synthesis
SystemTM
• ALDEC - Active FPGATM
• DATA 1/0 - SynarioTM
Saída -- Traduzida tiara o
formato de Netlist
FIGURA 3.5 - DIAGRAMA DE FLUXO DE
PROJETO — ENTRADA DO PROJETO
No estágio do desenho o projeto digital é
criado com um editor de desenho de
esquemático digital ou uma linguagem de
descrição de Hardware (HDL). A entrada
esquemática do programa utiliza símbolos
gráficos de circuitos, a entrada de programa
HDL utiliza uma linguagem descritiva (ex:
VerilogTm, ABEL Tm ou VHDL). Há uma
ampla variedade de softwares com
programas de entrada. Como a saída desses
programas produzem netlists, deve-se
assegurar que as configurações na biblioteca
para a FPGA alvo estejam disponíveis na
ferramenta que tenha sido selecionada.
37
FPGAs (Fied Programmable Gare Arravs)
ETAPA 2: Implementação do
Projeto - Mapeamento
Ferramentas de Implementação
• Xilinx - XACTIm
• SynopsysTM
• Exemplar Logic Synthesis
SystemTM
• ALDEC - Active FPGATM
• DATA 110 - SynarioTM
Saída -- 0 projeto roteado &
mapeado gera um arquivo bitstream
de configuração da FPGA
FIGURA 3.6 - DIAGRAMA DE FLUXO DE
PROJETO — IMPLEMENTAÇÃO DO PROJETO
No estágio de implementação do
projeto, o "netlist" produzido pelo programa de
entrada de projeto é convertido na forma de um
arquivo "bitstream" o qual configura a FPGA.
A primeira etapa mapeia o projeto no interior
dos recursos da FPGA; a segunda etapa aloca
ou atribui blocos lógicos criados no processo de
mapeamento em localizações específicas na
FPGA. A terceira etapa executa o roteamento
das trilhas entre os blocos lógicos. A saída é um
arquivo "array" de célula lógica, Logic Cell .
Array File (LCA) para uma FPGA em
particular. Esse arquivo LCA é então
convertido em um arquivo "bitstream" para
configurar a FPGA.
38
FPGAs (Fied Programmable Gare Arravs)
ETAPA 3: Verificação do Projeto - Simulação Ferramentas de Verificação
• Viewlogic - ProseriesTM
• SynopsysTM
• Cadence VHDL_XLTM Verilog-
XLTm
• ALDEC - Active FPGATM
• DATA 1/0 - SynarioTM
Saída -- Simulação do Projeto
Passou/Falhou Se Falhou >> Retorna a Entrada do Projeto
Se Passou >> Configura a FPGA
FIGURA 3.7 - DIAGRAMA DEFLUXO DE
PROJETO --- VERIFICAÇÃO DO PROJETO
A etapa de verificação do projeto testa a
lógica do projeto e os tempos utilizando
estímulos de entrada. Vários pacotes de
software de CAE proporcionam ferramentas de
verificação e de simulação. Essas ferramentas
são projetadas para executar caracterização
detalhada do projeto, por executar tanto as
simulações funcionais como as de tempo. A
verificação no circuito é outra maneira de testar
o projeto. Testes de verificação no circuito
testam o circuito sob condições de operação
típicas. O computador reconfigurável virtual,
Virtual ComputerTM Reconfigurable Computer
pode ser utilizado como uma verificação do
sistema no circuito.
39
FPGAs (Fied Programmable Gate Arrays)
ETAPA 4: Configuração da FPGA - Execução
Métodos de Configuração
• Modo Mestre: carrega de uma memória externa (PROM) no modo de dados Serial ou
Paralelo.
• Modo Não Mestre: carrega de outro dispositivo (MPU, FPGA) em um periférico
Síncrono/Assíncrono ou Escravo Serial.
FIGURA 3.8 - DIAGRAMA DE FLUXO DE PROJETO --- CONFIGURAÇÃO DA FPGA
Configuração é um processo no qual o projeto do circuito (arquivo "bitstream") é
carregado no interior de uma FPGA. O método de configurar a FPGA determina o tipo de
arquivo "bitstream". FPGAs podem ser configuradas por uma PROM. A PROM serial é a mais
comum. A FPGA pode ter sua configuração lida de maneira ativa serial externa ou PROM
paralela (modo mestre), ou os dados da configuração podem ser escritos no interior da FPGA
(modos escravo ou periférico). Se a FPGA for usada em uma Plataforma de Computação
Reconfigurável, o arquivo bitstream é convertido para uma função em linguagem de alto nível
(ex: 'C'). Através desse método a FPGA está configurada no interior de um programa de
aplicação [0LD95].
3.4 Computadores Reconfiguráveis
A tecnologia da computação reconfigurável é a capacidade de modificar uma arquitetura
de hardware no sistema computacional em tempo real .
3.4.1 Hardware Fixo
Os computadores atuais são sistemas de hardware fixo baseado em microprocessadores.
O parâmetro de poder computacional de um microprocessador está no número de funções que
este possa manipular ao invés de estar no número de aplicações mais importantes que o mesmo
deixa disponível. A cada nova geração de microprocessadores, o desempenho nas aplicações
aumenta de forma incremental, mas não o suficiente. Em muitos casos a aplicação deve ser
reescrita para conseguir que esse desempenho incremental melhore. Hardwares fixos tradicionais
podem ser classificados em três categorias: Lógicos (Gate Arrays, PALs, etc.), Controle
Embutido (controllers ex. ASICs & Custom VLSI Devices) e Computadores
(Microprocessadores ex. x86, 68000, PowerPC).
40
FPGAs (Fied Programmable Gaze Arrays)
Sistemas de computação atuais são sistemas de Hardware fixo. As CPUs -Central
Processing Unit- padrão (tais como 486, PowerPCTm, Pentiumn') são processadores de propósito
geral e a multiplicidade de tarefas necessárias pelos vários programas de aplicação é repartida
entre os elementos da CPU. A CPU manipula todas as diferentes instruções pela recombinação
desses elementos internos fixos.
3.4.2 Hardware Reconfigurável
Circuitos digitais podem ser programados e substituídos no interior de um sistema
computacional reconfigurável, quando necessário, por um software de aplicação durante a
execução [VCC97].
Sistemas computacionais reconfiguráveis são aquelas plataformas computacionais cujas
arquiteturas podem ser modificadas pelo software para se adaptarem à aplicação de maneira
instantânea. Para se obter o máximo "throughput", um algoritmo deve ser colocado em hardware
(ex. ASIC, DSP, etc.). Ganhos dramáticos de desempenho são obtidos através da implementação
em hardware de um algoritmo. Em um sistema computacional reconfigurável, a implementação
em hardware adquire o corpo de uma função através de funções básicas à medida em que a
aplicação a executa pON96a].
O Hardware Reconfigurável pode ser classificado em três categorias:
&Lógicos (FPGAs),
b Embutidos no controle (Coprocessadores Reconfiguráveis, FPGAs fortemente
acopladas a sistemas tradicionais),
c.Computadores (plataformas computacionais totalmente reconfiguráveis utilizando
FPGAs, em um sistema projetado para computação de propósito geral).
Os principais motivos para se utilizar essa abordagem são:
41
FPGAs (Fied Programmable Cate Arravs)
a.Ganhos de Desempenho em alta velocidade: a versão mais rápida de qualquer programa
de cálculo é aquela na qual um "chip" de computador tenha sido projetado apenas para aquele
cálculo especifico em particular,
b.Flexibilidade no Hardware: à medida que as novas formas de resolver os problemas
surgem, a RPU - "Reconfigurable Processor Unit" - otimiza a potência computacional por
implementar os cálculos diretamente em um "chip" de computador customizado.
No próximo item tem-se um sumário abordando o histórico da linguagem VHDL, onde
também será discutida sua aplicabilidade em problemas de projeto de "hardware". Destacam-se
os motivos pelos quais esta linguagem emerge rapidamente como uma das mais importantes
linguagens comerciais para projeto eletrônico.
42
Estudo da Linguagem VHDL
4 Estudo da linguagem VHDL
4.1 Histórico e Características básica do VHDL
VHDL é uma linguagem para descrever sistemas eletrônicos digitais. Ela surgiu em 1980,
com o programa Very High Speed Integrated Circuits (VHSIC) do govemo dos Estados Unidos.
No decorrer desse programa, tomou-se claro que havia uma necessidade de se padronizar uma
linguagem para descrever a estrutura e a função de circuitos integrados (ICs). Daí a linguagem
VHDL (VHSIC Hardware Description Language) Ter sido desenvolvida [C0E95].
Descreve-se a seguir como ela foi em desenvolvida em maior profundidade sob os
cuidados do Institute of Electrical and Electronic Engineers (EEEE) e adotado na forma do
padrão EEEE 1076 Standard VHDL Language Reference Manual em 1987 [ASH96].
Como todos os padrões do EEEE, o padrão VHDL é tema de revisão a cada cinco anos.
Comentários e sugestões dos usuários do padrão de 1987 foram colhidas pelo grupo de trabalho
do EEEE responsável pelo VHDL, e em 1992 uma versão revisada desse padrão foi proposta.
Essa nova versão foi eventualmente adotada em 1993 e denominada VHDL-93 [EEE94]. Esse
trabalho utiliza a versão do VHDL de 1993.
VHDL é projetado para preencher um número de necessidades no projeto digital.
Primeiro, ela possibilita a descrição da estrutura de um sistema, que é, decomposto em
subsistemas e como esses subsistemas estão interconectados. Segundo, ela permite a
especificação da função de um sistema utilizando formas familiares de linguagem de
programação. Terceiro, conforme um resultado, ela permite que o projeto do sistema seja
simulado antes de ser fabricado, de maneira que os projetistas possam rapidamente comparar
alternativas e testá-las para uma correção sem o atraso e o custo de um novo protótipo em
hardware. Quarto, ela permite que a estrutura detalhada de um projeto seja sintetizada a partir de
uma especificação mais abstrata, permitindo aos projetistas concentrarem-se em decisões de
projeto mais estratégicas e reduzir tempo de mercado.
Em 1980, o govemo dos Estados Unidos lançou um esforço agressivo para avançar o
estado-da-arte na tecnologia do silício [LI593]. O objetivo era melhorar de maneira significativa
43
Estudo da Linguagem VHDL
o desempenho operacional e a densidade do circuito para os "chips" de silício VLSI (Very Large
Scale Integration). O governo dos Estados Unidos observou que para as prestadoras de serviço
serem capazes de trabalhar em conjunto para desenvolver os produtos VLSI, para documentar os
projetos resultantes, a fim de poder reutiliza-los em futuros produtos, e para atualizar de forma
eficiente os projetos existentes, elas necessitariam de um meio de comunicação em comum para
os dados de projeto. Era necessário que as descrições do projeto fossem legíveis pelo
computador e executáveis. Elas também reconheceram que com as altas densidades dos chips
VHSIC (Very High Speed Integrated Circuit) exigidos pelo governo e os grandes sistemas
necessários em arranjos futuros, um meio de produzir em série o processo de desenho e gerenciar
os grandes volumes -de dados de projeto era necessário. Assim nasceu o conceito de projeto
padrão de hardware e a linguagem de descrição para resolver todos esses problemas.
Em 1983, o governo dos Estados Unidos divulgou urna requisição de proposta para
'desenvolver a linguagem e para implementar um conjunto de ferramentas para uso com a
linguagem. A vencedora da licitação foi uma equipe composta pela Intermetrics, "International
Business Machines", e pela "Texas Instruments", tendo corno líder da engenharia de
desenvolvimento a 1:13M, e como presidente o "IEEE Computer Society Design Automation
Standards Subcommitee", foram observados os benefícios que surgiriam para a indústria
advindos de uma linguagem padrão de descrição de hardware.
O padrão VHDL é uma linguagem descritiva, uma linguagem que é legível tanto pelo ser
humano quanto pela máquina, dessa forma ela é bem apropriada para preservar especificações de
projeto. VHDL é também uma linguagem de projeto que lida com a fronteira, uma linguagem
que pode ser utilizada com muitos tipos de ferramentas de projeto tais como simuladores,
sintetizadores de projeto, compiladores de silício, ferramentas de alocação e ligação, geradores
de teste, ferramentas de especificação de arquitetura e de análise, analisadores de tempo, e
podem suportar pesquisas em todas essas áreas. No momento, muitas ferramentas assim estão
chegando ao mercado e pesquisas nas universidades nas áreas relacionadas, que haviam sido
abandonadas por anos antes do advento do VHDL, hoje estão sendo encorajadas a usar o VHDL.
Corno mencionado anteriormente, o principal poder da linguagem VHDL é a de que ela é
um padrão. Assim, a indústria pode comunicar desenhos mais facilmente entre participantes em
um processo de projeto. Essa capacidade de comunicar projetos é igualmente importante no
44
Estudo da Linguagem VHDL
campo da pesquisa, uma vez que, com o VHDL, colaborações entre pesquisadores de várias
instituições tomam-se mais fáceis. Mas, a padronização não é suficiente para a grande onda de
interesse na linguagem. VHDL também tem de ser excelente tecnicamente e capaz de permitir
aos projetistas e pesquisadores descrever as concepções que eles estão desenvolvendo e utilizar
as descrições com ferramentas de uma maneira que simplifique o projeto ou o processo de
pesquisa. O VHDL satisfaz esses dois propósitos [BAL95].
O escopo do VHDL cobre desde a descrição da arquitetura até a descrição das portas
lógicas. A linguagem é hierárquica e a simulação em níveis mistos são suportadas. Os conceitos
incorporados no modelo temporal para a linguagem espelham o hardware real -- os modelos
VHDL de projeto comportam-se da mesma maneira como se fosse um hardware real. Muitas
outras excelentes linguagens cobrem subconjuntos das capacidades que existem dentro do
VHDL, mas nenhuma delas é tão compreensível. Elas não cobrem a ampla gama coberta pelo
VHDL com a mesma importância, porque como o VHDL é uma linguagem padronizada pelo
IEEE, esta terá um efeito significativo no suporte de ciclos de vida de produtos descritos em
VHDL. Nos níveis mais elevados de abstração, toma-se um excelente meio de especificação para
futuros projetos a serem criados em novas tecnologias ou com arquiteturas alternativas. Nos
níveis mais baixos de abstração, a linguagem serve bem como uma especificação do que é para
ser fabricado [TUC92a].
Por tudo isso, 'VHDL é uma "linguagem para todas as épocas", uma linguagem que
suporta pesquisas em projetos de automação, projeto e teste e ciclos de vida de produtos.
4.2 O Porquê do VHDL
O padrão VHDL foi desenvolvido para organizar um número de problemas repetitivos no
desenvolvimento, alteração e documentação do hardware digital. Por exemplo, uma remessa
típica de hardware para o govemo incluiria dezenas de milhares de páginas de documentação que
precisariam ser esmiuçadas durante a aprovação, teste e julgamento no decorrer da manutenção
do ciclo de vida do componente. Uma boa linguagem de descrição de hardware resolve esse
problema porque a documentação é executável e todos os elementos estão vinculados a um único
modelo [LEU97].
45
Estudo da Linguagem VHDL
Até o momento, o padrão VHDL tem sido aquele de maior aceitação na indústria devido
as suas. Muitas das linguagens existentes foram desenvolvidas para servirem aos simuladores
que a executam, e são muitas vezes desenvolvimentos proprietários de companhias particulares.
Outras são alvo de tecnologias particulares, ao nível de projeto, ou a metodologia de projeto.
VHDL é uma tecnologia independente, ela não está vinculada a nenhum simulador em particular
ou conjunto de valores, e não impõe uma metodologia de projeto a um projetista. O que ela faz é
proporcionar ao projetista a liberdade para a escolha da tecnologia e das metodologias enquanto
permanecer dentro de uma única linguagem. Ninguém pode prever as mudanças que ocorrerão
na tecnologia de hardware digital no futuro. Portanto, VHDL proporciona capacidades de
abstração que facilitam a inserção de novas tecnologias nos projetos já existentes.
Assim o VHDL oferece um grande número de benefícios sobre outras linguagens de descrição de hardware.
Disponibilidade Pública: VHDL foi desenvolvido de acordo com um contrato e agora é
um padrão do IEEE. O governo tem um forte interesse em manter o VHDL como um padrão
público. As vantagens desse status são aparentes; sem esse, muitos outros benefícios descritos
abaixo não existiriam.
Suporte de Metodologia de Projeto e Suporte de Tecnologia de Projeto: VHDL foi
projetado para suportar muitas metodologias diferentes de projeto (ex., "top-down" versus "library-based") e muitas tecnologias de projeto (ex., síncrona versus assíncrona, PLA versus
"rondam logic"). Dessa forma, a linguagem é utilizada de maneira a proporcionar auxílio em
projetos, em organizações que operam com muitas metodologias de projeto diferentes, e que têm
necessidades de projeto muito diferentes. VHDL também é largamente utilizado pelos
distribuidores de "CAD/CAE house" que vendem ferramentas de projeto "library-based", assim
como para companhias aeroespaciais que desenvolvem um grande volume de projetos ASIC.
Independência da Tecnologia e Independência do Processo: VHDL foi projetado para
ser independente tanto da tecnologia como do processo. Com isso queremos dizer que VHDL
não tem embutido dentro dele uma compreensão de tecnologias e processos particulares.
Embora, tais informações possam ser escritas utilizando VHDL. Assim, uma descrição funcional
de um sistema (ou seja, que possa ser simulada) pode ser desenvolvida em um nível acima do
46
Estudo da Linguagem VHDL
nível de porta lógica, e então decomposta em implementações ao nível de portas lógicas
dependendo da tecnologia de implementação escolhida (ex., CMOS, NMOS, GaAs). As
vantagens dessa capacidade para Segunda fonte são aparentes.
Ampla gama da Capacidade Descritiva: VHDL suporta a descrição comportamental do
"hardware" desde o nível digital (ex., bloco) até o de portas lógicas. Uma das principais
vantagens do VHDL reside na capacidade de capturar a operação de um sistema digital em um
grande número desses níveis descritivos de uma vez só, utilizando uma coerente sintaxe e
semântica através desses níveis, e simular esse sistema utilizando qualquer mistura desses níveis
de descrição. É possível, portanto simular projetos que misturem descrições comportamentais de
alto nível de alguns subsistemas com implementações detalhadas de outros subsistemas no
modelo.
Isso facilita o desenvolvimento de um projeto que reflete corretamente a intenção da
especificação geral do sistema. Durante a manutenção do sistema, reprojetar ou fazer alterações
no mesmo podem ser ocorrer pela substituição do VHDL na descrição e resimulação com o
conjunto de teste.
Muitas linguagens de descrição de hardware existem, as quais operam melhor ao nível
lógico e ao nível de porta lógica; por esse motivo, projetistas de hardware podem estar mais
familiarizados com o uso das linguagens HDL para suportar projetos lógicos de baixo nível.
Enquanto VHDL é perfeitamente apropriado para esse nível de descrição, ele se estende bem
além desse nível [D0N95].
Modificar Projetos: VHDL é um padrão e, como um resultado, está garantido que os
modelos em VHDL executam sua operação em qualquer sistema que se conforma com esse
padrão. Isso significa que os modelos desenvolvidos em um local serão executados em outros
locais (c produzirão os mesmos resultados da simulação) se em ambos os locais usarem ou não
os mesmos conjuntos de ferramentas de VHDL.
Dessa forma os projetistas podem tentar um grande número de componentes diferentes e
escolher aqueles que melhor se adaptam às limitações e requisitos do sistema que está sendo
projetado. Como resultado disso equipes podem trocar descrições de alto nível dos subsistemas
47
Estudo da Linguagem VHDL
de um sistema digital possibilitando que cada subsistema seja desenvolvido independentemente
do progresso de outros subsistemas. Por exemplo, suponha que uma organização esteja
desenvolvendo um sistema digital e queira encomendar um subsistema à outra organização. A
organização contratante poderia desenvolver uma descrição VHDL de alto nível do sistema com
os subsistemas separados em entidades de projeto. A descrição em alto nível seria então dada
para a contratada para desenvolvimento. A organização contratada poderia desenvolver o
subsistema em VHDL enquanto todos os envolvidos teriam uma descrição simulável do resto do
sistema. A organização contratante também seria capaz de desenvolver sua parcela do sistema e
testá-la sem esperar que o subsistema seja desenvolvido. Isso reduz tremendamente o esforço de
integração e reduz o tempo todo do desenvolvimento significativamente.
Projeto de Larga escala e Re-utilização do Projeto: O VHDL foi modelado em uma
filosofia semelhante a daquela de muitas linguagens de programação modernas — que os
auxílios na decomposição do projeto são tão importantes quanto a capacidade de descrição
detalhada quando ela vem a suportar o desenvolvimento de grandes projetos sendo executados
pelas equipes multipessoais. Há vários elementos da linguagem especificamente almejados para
essa meta. Pacotes, declarações de configuração, e o conceito de múltiplos corpos exibindo
diferentes implementações de uma entidade estão presentes também na linguagem para suportar
compartilhamento de projeto, experimentos e gerenciamento de projetos.
Esses elementos da linguagem tendem também a suportar reutilização de projetos, uma
vez que eles promovem o encapsulamento da informação do projeto e a capacidade de ser
flexível em conformidade com outras convenções de projeto quando enquanto utilizarem uma
parte do projeto já pronta.
Apoio Governamental: A repartição pública do programa VHSIC desenvolveu o VHDL
com uma clara visão de como ela própria queria utilizar o VHDL. VHDL pode ser utilizado no
decorrer do ciclo de vida de um sistema digital, e está para se tornar provavelmente o principal
componente do processo de arranjo. O Departamento de Defesa está atualmente requisitando
descrições VHDL de todos os contratados que desenvolvem ASICs. Quanto mais os conjuntos
de ferramentas VHDL tornam-se disponíveis e esses conjuntos de ferramentas amadurecem o
governo pode estar esperando expandir seus domínios a outros tipos de contratos para
48
Estudo da LinguaRem VHDL
desenvolvimento de hardware e aumentar o escopo dos requisitos do VHDL para incluir certas
informações na descrição e proporcionar descrições simuláveis.
A seguir serão apresentados os conceitos envolvidos em arquiteturas sistólicas, bem
como suas características básicas. Destacam-se ainda suas vantagens estruturais no tratamento de
problemas computacionais que utilizem um elevado grau de paralelismo.
49
Arquiteturas Sistálicas
5 Arquiteturas Sistálicas
O conceito de arquitetura sistólica é conhecido e utilizado em várias aplicações e em
sistemas de computação dedicados à solução de problemas específicos, cujas características
básicas são a grande demanda computacional e a necessidade de respostas em tempo real. Essa
classe de arquiteturas paralelas também apresenta características de simplicidade, regularidade e
modularidade que facilitam implementações em hardware.
Sá o conceito de arquitetura de frente de onda, se diferencia da arquitetura sistólica no
aspecto de sincronismo de transferência de dados entre um elemento de processamento e outro.
A arquitetura sistólica, por ser síncrona, tem o seu sincronismo estabelecido por um clock único,
já a arquitetura frente de onda não por ser síncrona, a transferência dos dados segue adiante,
depois de uma verificação e permissão do elemento de processador sucessor. Sendo assim, a
arquitetura de frente de onda é mais tolerante quanto a falhas do que a arquitetura sistólica.
As arquiteturas sistólicas podem ser consideradas como a forma mais natural de se
implementar algoritmos em hardware. Podem ser usadas para resolver muitos problemas
regulares contendo operações repetitivas em grandes quantidades de dados. Suas características
de regularidade e modularidade facilitam o projeto, sendo muito adequadas para a
implementação em hardware. Uma importante área de aplicação dessas arquiteturas é a álgebra
matricial. Muitos algoritmos bem conhecidos para manipulação de matrizes já foram mapeados
em arquiteturas sistólicas [MOR90].
Uma enorme variedade de problemas científicos e de engenharia requer a solução de
sistemas de equações lineares. Quando o número de incógnitas toma-se muito grande a tarefa de
resolver o sistema toma-se computacionalmente intensa e a maioria dos métodos existentes não é
eficaz quando a aplicação necessita de respostas em tempo real. Um método baseado em redes
neurais recorrentes, recentemente desenvolvido por Wang e Li [WAN94], apresenta uma solução
analógica que pode ser mapeada em uma arquitetura sistólica, alcançando um bom desempenho
em função do paralelismo.
50
Memória
_
Arquiteturas Sistólicas
5.1 Histórico e Características Básicas dos Sistemas Arranjos Sistólicos
No início dos anos 80 H. T. Kung da Universidade de Carnegie Mellon propôs
arquiteturas sistólicas para resolver os problemas de sistema de propósito específico que devem
muitas vezes equilibrar computações intensivas com demanda de largura de banda de entradas e
saídas. Arquiteturas Sistólicas (Arranjos Sistólicos) são multiprocessadores trabalhando na forma
de "pipeline" nos quais os dados são pulsados de uma maneira rítmica partindo da memória e
passando através de uma rede de processadores antes de retomar à memória conforme o modelo
da FIGURA S I.
P: Processadores
FIGURA 5.1 - FLUXO SISTÓLICO DE DADOS SAINDO E VOLTANDO DA MEMÓRIA.
Um clock global e atrasos explícitos de tempo sincronizam esse fluxo de dados em
pipeline, que consistem de operandos obtidos da memória e resultados intermediários para serem
utilizados por cada processador. Os processadores modulares unidos por interconexões regulares
e locais proporcionam blocos de construção básicos para uma variedade de sistemas de propósito
geral. Durante cada intervalo de tempo, esses processadores executam uma breve, e invariante
seqüência de instruções.
Arranjos Sistólicos lidam com as necessidades de desempenho de sistemas de propósito
específico por conseguir uma computação paralela e por evitar gargalos de memória e de
entrada/saída. Um alto grau de paralelismo é conseguido na aplicação do pipeline através dos
múltiplos processadores, tipicamente em uma forma bidimensional. Arquiteturas sistólicas
maximizam as computações executadas em um conjunto de dados uma vez que eles foram
obtidos da memória ou de um dispositivo externo. Assim, uma vez que um conjunto de dados
51
Arquiteturas Sistólicas
entra em um arranjo Sistólico, ele é passado para qualquer processador que necessite dele, sem
uma intervenção de armazenamento em memória. Apenas os processadores nas fronteiras do
arranjo fazem entrada e saída da memória [ALM94, BLI94].
Um número crescente de sistemas de propósito especial utiliza organização sistólica para
algoritmos específicos, particularmente para processamento de sinais. Além disso, arquiteturas
sistólicas programáveis (reconfiguráveis) (tais como a Warp da Camegie Mellon e Matrix-1 da
Saxpy) têm sido construídas que não são limitadas pela implementação de um único algoritmo.
Embora conceitos sistólicos fossem originalmente propostos para sistemas baseados em VLSI
sendo implementados em nível de "chips", esse tipo de arranjo tem sido implementado em uma
ampla variedade de níveis físicos.
Em 1978 foram introduzidos o termo e o conceito "Systolic Array" para designar uma
classe especial de arquiteturas de computadores. A partir disso, muita pesquisa tem sido
realizada sobre algoritmos e arquiteturas suportadas por esse conceito. O termo Systolic Array
designa uma classe de arquiteturas paralelas e estabelece uma analogia com o sistema vascular
humano conforme o modelo mostrado na FIGURA 5.2. O coração envia e recebe uma grande
quantidade de sangue como resultado do bombeamento freqüente e ritmado do fluxo sangüíneo
através das artérias e de veias. Analogamente à arquitetura, o coração corresponde à fonte e ao
destino dos dados (por exemplo, uma memória global), a rede de veias e artérias eqüivale à rede
de processadores e "links" que compõem a arquitetura. Outra analogia é que a arquitetura
intercala ciclos de admissão e expulsão de dados, da mesma forma que o coração, quando
bombeia sangue pelas artérias e veias [KUN82, F0R87, ALM94].
O poder por trás dos arranjos sistólicos vem do modo com que os dados fluem entre os
elementos de processamento. Tipicamente um arranjo sistólico é capaz de realizar operações
simples como multiplicação de matrizes ou inversão. Eles são, portanto, máquinas de finalidade
específica, usados principalmente em equipamentos dedicados e não em computadores de
finalidade geral. Atualmente, o conceito de arquitetura sistólica é conhecido e utilizado em várias
aplicações e sistemas de computação dedicados à solução de problemas numéricos particulares
[SED92].
52
Arquiteturas Sistólicas
Artérias Veias
Elfflal Sangue Venoso (Pobre em 02)
Sangue Arterial (Rico em 02)
FIGURA 5.2 - ANALOGIA COM O SISTEMA VASCULAR HUMANO
H. T. Kung [KUN82] definiu arquiteturas sistólicas como uma metodologia de
mapeamento de computação de alto nível em estruturas de hardware. Basicamente, um arranjo
sistólico é um sistema em que os dados fluem pela memória do computador ritmicamente,
passando por vários elementos de processamento antes de retornar novamente para a memória do
sistema. O arranjo sistólico possui um conjunto de células interconectadas, capazes de executar
operações simples. Por possuírem características como simplicidade, comunicação regular e
estruturas de controle, essas células possuem muitas vantagens de implementação sobre outros
tipos de elementos de processamento. Em sistemas sistólicos, essas células são organizadas em
topologias tipo árvore ou "arrays". A comunicação com o mundo exterior é realizada apenas
através das células de fronteira da topologia [FOR87, ALM94].
Pode-se classificar as tarefas computacionais em duas grandes famílias: computação tipo
"compute-bound" e computação tipo "1/0-bound". Se o número de operações realizadas pelo
computador for maior que o número de operações de entrada/saída, a computação é denominada
compute-bound, caso contrário é denominada 1/0-bound. Um exemplo de processamento tipo compute-bound é uma operação de multiplicação de duas matrizes, onde o número de operações
de multiplicação e soma é bem maior que o número de operações de entrada de dados nas
matrizes. Um exemplo de processamento 1/0-bound é a soma de duas matrizes, onde o número
de operações tipo soma é bem menor que o número de operações de carga dos dados das
matrizes.
53
MEMÓRIA
EP
Arquiteturas Sistólicas
MEMÓRIA 4•1.
EP El' El' EP EP EP
a) 100 ns —5 MOPS b) 100 as —30 MOPS
a) Arquitetura comum b)Principio Básico de Arquiteturas Sistólicas.
FIGURA 5.3 - DIFERENÇA ENTRE ARQUITETURAS COMUNS E SISTOLICAS
As arquiteturas sistólicas visam solucionar problemas computacionais do tipo compute-
bound, visto que os dados são aproveitados ao máximo pelo arranjo sistólico antes de voltar para
a memória principal do sistema. Desse modo, restringe-se os acessos à memória principal
fazendo com que o desempenho do sistema cresça como um todo. O princípio básico de um
sistema sistólico consiste em substituir um elemento de processamento por um arranjo de
elementos de processamento destacando-se na FIGURA 5.3, aumentando significativamente a
capacidade de processamento da arquitetura, sem obrigatoriamente ser necessário aumentar a
memória. A função da memória nesse caso é similar ao de um coração, ou seja, a memória deve
fornecer "pulsos" de dados aos elementos de processamento. O problema dessa arquitetura se
resume em garantir que os dados retirados da memória sejam efetivamente utilizados por cada
célula de processamento e "bombeados" de célula para célula através do arranjo sistólico
[DUN90].
Serão destacadas na FIGURA 5.4 algumas topologias sobre as quais os elementos de
processamento podem ser arranjados.
54
E- '1 -T- _L. E-
-T-
(1 cada polígono representa um tipo de EP.
-0-111-111-
Arquiteturas Sistólicas
FIGURA 5.4 - TOPOLOGIAS SISTÓLICAS MAIS COMUNS.
A partir das considerações iniciais podemos definir uma arquitetura sistólica como uma
classe de arquiteturas que pOssuem as seguintes características [KUN82, F0R87]:
• Regularidade Espacial e Localidade:
• Regularidade Temporal e Sincronismo:
• Computação Pipeline e Concorrência:
• Entrada e Saída Fechadas:
• Modularidade:
5.2 Aplicações
Uma característica básica da maioria das aplicações que se utilizam de arquiteturas
sistólicas é a grande demanda computacional e a necessidade de respostas em tempo real. São
descritas a seguir as grandes áreas de aplicação das arquiteturas sistólicas e os principais
algoritmos utilizados [KUN82, F0R87].
Processamento de sinais, processamento de imagens e reconhecimento de padrões: filtros
141R (Finite Impulse Response) e DR (Infinita Impulse Response), convolução 1-D, convolução e
correlação 2-D, transformada discreta de Fourier, interpolação, ordenação estatística,
classificação de distância mínima, cálculo de matriz de covariância, classificação de sinais
sísmicos, processamento de sinais de radar, reconhecimento sintático de padrões, detecção de
curvas, reamostragem de imagens e etc.
55
Arquiteturas Sistálicas
Álgebra Matricial: multiplicação de matrizes, triangularização de matrizes, operações
sobre matrizes esparsas, solução de sistemas lineares triangulares e etc.
Aplicações não numéricas: estruturas de dados, ordenação de filas e pilhas, algoritmos de
grafos, reconhecimento de linguagens, programação dinâmica, arranjos aritméticos, operações
sobre base de dados relacionais e etc.
5.2.1 Exemplo de uma Aplicação de Sistemas de Equações Lineares
Sistemas de equações lineares estão associados com muitos problemas em engenharia e
ciência, assim como aplicações de matemática nas ciências sociais e estudos quantitativos de
problemas de economia e finanças. Um sistema linear é descrito da seguinte maneira:
El: ajjxj + a12x2 + ••• + alnxn = bl
E2: anxi + a22x2 + ..• + a2nxn = b2
(5.1)
En: an j x j + an2x2 + + annxn = bn
ou na forma matricial
Ax=b (5.2)
onde A e 9111xn e representa a matriz de coeficientes aji (i, j = 1, 2,..,n) ,x e b 9/11x1 e
representam os vetores das incógnitas xj (i=1,2, ...,n) e dos termos constantes bi (i= 1,2, ...,n),
respectivamente. Resolver o sistema linear significa determinar as incógnitas xj, xn que
satisfazem as equações, dados os elementos au e bi,
56
Arquiteturas Sistólicas
5.2.2 Métodos para Solução de Sistemas Lineares
Os métodos para solução de sistemas de equações lineares são divididos principalmente
em dois grupos [BUR85]:
Métodos Exatos ou Diretos: são aqueles que forneceriam a solução exata, se não fossem
os erros de arredondamento, com um número finito de operações. Como exemplos de métodos
exatos pode-se citar: Decomposição LU, Processo de Cholesky e o Método de Eliminação de
Gauss, dentre outros.
Métodos Iterativos: são aqueles que permitem obter as raízes de um sistema com uma
dada precisão através de um processo infinito convergente. Os métodos iterativos fornecem uma
seqüência de aproximações da solução, através da repetição de tiim processo. O método é dito
estacionário quando cada aproximação é obtida da anterior sempre pelo mesmo processo.
Quando os processos variam de passo para passo, mas se repetem ciclicamente a cada s passos o
método é chamado s-cíclico. Os métodos iterativos mais conhecidos são o método de Jacobi-
Richardson e o método de Gauss-Seidel.
Além desses métodos clássicos, amplamente conhecidos e estudados, novas propostas de
solução freqüentemente são sugeridas pela comunidade acadêmica. Recentemente, Wang e Li
[WAN94] propuseram uma rede neural recorrente (RNN) analógica para a solução desse
problema. A dinâmica da RNN proposta pode ser descrita como:
j.tv'(t) = -AT A v(t) + ATb (5.3)
,inx1 e gtrixl e onde v(t) e e representa um vetor que descreve os estados de cada nó, v'(t)
representa a taxa de variação dos estados no tempo, A e b representam os termos definidos na
equação (5.2) e iu é um parâmetro escalar.
Wang e Li provaram que: a) o sistema em (5.3) é sempre estável, (b) o estado em que o
sistema estabiliza é a solução da equação original (5.2). A taxa de convergência do sistema é
determinada pelo valor de j.t.
57
Arquiteturas Sistólicas
Usando termos mais familiares a teoria de redes neurais recorrentes, pode-se definir o
termo W através da equação (5.4):
w _AT A e gt n xn (5.4)
Na forma da matriz pesos de conexão pode-se definir o termo 0 através da equação (5.5):
= ATbe 9r1 (5.5)
Na forma de um vetor de threshold (bias) da rede neural proposta. Dessa forma, pode-se
reescrever a equação (5.3) na forma da equação (5.6):
1.tv'(t) = -W v(t) + e (5.6)
Uma vez que as redes neurais analógicas desse tipo são na maioria das vezes sistemas
dedicados e requerem massivas interconexões com reconfigurabilidade limitada, os autores
sugerem uma implementação analógica constituída de uma rede linear de neurônios compostos
por um somador, um integrador e um inversor que são vistos em detalhes na FIGURA 5.5 em uma
topologia em anel. Com esse propósito, é desejável encontrar uma versão discretizada dessa rede
neural. Os autores utilizaram o método de Euler, discretizando para isso a equação (5.6) na
forma:
v(k +1) — v(k) — Wv(k)+0 At
(5.7)
Essa discretização fornece uma relação entre os estados dos neurônios (v) nos intervalos
de tempo k e k+I.
Redistribuindo os termos pode-se criar uma expressão iterativa (5.8):
Í \
v(k +1) = I — —At W v(k)+ —At 0 (5.8) A , A
Pode-se reescrever essa expressão com base no método iterativo RF na forma:
v(k +1) =Fv(k)+ g (5.9)
Onde:
F = I - cW
g = c 9
At c =— A
(5.10)
(5.11)
(5.12)
Observando as deduções, nota-se que c, referenciado como um "fator de extrapolação"
[HAG81], é um valor constante a ser escolhido livremente. A escolha adequada desse valor c irá
garantir a convergência do processo. Para esse projeto o valor escolhido foi de 1.
58
ER, • EP, EP,
BUF BUF BUF
Unidade de Controle
MÁQUINA HOSPEDEIRA
( HOST)
Detalhamento do EP
Figura 5.5 - Arquitetura Sistálica em Anel para Solução de Sistemas Lineares.
5.2.3 Técnicas de Projeto e Mapeamento
tf,(k
Arquiteturas Sistólicas
Variações dessa RNN podem fornecer soluções para outros problemas como inversão de
matrizes, ordenação e programação linear.
Para o projeto de um arranjo sistólico a partir de algoritmos, o projetista deve estar
familiarizado com quatro princípios básicos: computação sistolica, a aplicação, o algoritmo e a
tecnologia. Esforços vêm sendo realizados no sentido de desenvolver algumas técnicas de
desenvolvimento sistemático para automatizar o projeto de arranjos sistólicos. Essas técnicas,
porém, não substituem completamente o projetista. Por outro lado, explorando as características
de arquiteturas sistólicas (modularidade, simplicidade, extensibilidade), essas técnicas vêm
fornecendo com sucesso ferramentas e subsídios para auxiliar o projetista a propor várias
alternativas para um determinado algoritmo. Essas técnicas estão relacionadas à derivação de
uma descrição de alto nível do arranjo sistálico a partir da descrição do algoritmo. Geralmente
essa descrição inclui o tamanho da topologia do arranjo, o processamento a ser realizado por
cada unidade de processamento, a ordem dos dados, as entradas e as saídas do arranjo. Além
59
Arquiteturas Sistólicas
disso, essas técnicas incorporam fatores tecnológicos e a inter-relação do arranjo com e resto do sistema [SED92].
Arranjos sistólicos possuem um custo de implementação menor que outras arquiteturas
devido a possibilidade de replicação de suas células básicas e de seu layout denso e eficiente, facilitando bastante o projeto de circuitos integrados VLSI [FINVA84]. Desse modo, podem ser
criados blocos construtivos que são cuidadosamente projetados e otimizados, sendo que seu
custo de implementação é amortizado com a reprodução em larga escala desses blocos. O projeto
modular de arranjos sistólicos também permite aos projetistas, que desejam uma rápida
prototipação, utilizar dispositivos comerciais em suas implementações como memórias,
microprocessadores de ponto fixo e ponto flutuante e DSPs. Por outro lado esses chips podem
não ser suficientemente adequados ao arranjo em questão [PET95].
Os dispositivos FPGAs parecem ser bem adequados Para a construção de arranjos
sistólicos, em função de sua própria arquitetura [H0A93]. Com essa tecnologia, as vantagens
citadas para VLSI podem ser igualmente aproveitadas e, além disso, é possível projetar
topologias mais flexíveis, explorando sua capacidade de reprograrnação.
60
Projeto da Unidade de Controle
6 Projeto da Unidade de Controle
A unidade de controle, como parte integrante da arquitetura sistólica que está destacada
na FIGURA 6.1, atua como uma extensão da máquina hospedeira e tem a finalidade de gerenciar a
resolução do sistema linear que está sendo executada nos elementos de processamento.
EF EP2 EP,
Át- FIFO * FIFO
Unidade de Controle
I FIFO 2
MÁQUINA HOSPEDEIRA
( HOST)
FIGURA 6.1- DESTAQUE PARA A UNIDADE DE CONTROLE NA ARQUITETURA SISTÓLICA.
Esta unidade, que está com uma estrutura mais detalhada na FIGURA 6.2, é responsável
pelas seguintes tarefas:
1) calcular a matriz F e o vetor g da equação (5.9).
O barramento da máquina hospedeira fornece os elementos das matrizes A, AT, I e do
vetor b na forma de uma operação de escrita nas memórias DualPort de maneira sequencial.
Vale destacar que pode ser realizado apenas um processo de escrita através das mesmas linhas de
baramento para a matriz A e a para a matriz AT, diferindo apenas no endereçamento das duas
memórias. No projeto, a função do barramento da máquina hospedeira foi realizada pelo
simulador da ferramenta de software que forneceu os endereços e os dados para as memórias no
processo de escrita e leitura. O processo empregado para o cálculo está descrito em detalhes nos
tópicos 6.1 e 6.2.
61
Projeto da Unidade de Controle
FIGURA 6.2 - DETALHANIENTO DA UNIDADE DE CONTROLE.
62
Projeto da Unidade de Controle
2) posicionar os elementos da matriz F e do vetor g para carregar os dados
apropriadamente no arranjo sistólico.
Para que os elementos de processamento do arranjo sistólico resolvam o sistema linear é
necessário que a matriz F e o vetor g sigam uma sequência de escrita nas memórias dos mesmos,
determinada no trabalho de [1111,97]. Neste trabalho, essa sequência é ilustrada pela FIGURA 6.3.
ir RI v k
I
PE 2 PE yR(k1
v (k) 1+
I I •--10
I I I ACC ACC ACC
MEM MEM MEM 83 f3,3 f3.? f3.2
SI ft. I f1.,f21
g.
fia fli
P E 3 RI
00
Global Controller and Clock
HOST MACHINE
FIGURA 6.3 - SEQUÊNCIA DE ESCRITA DA MATRIZ F E O VETOR g NAS PIPOS DOS EPS.
3) determinar parâmetros para a condição de parada.
A máquina hospedeira fornece para um contador, presente na unidade de controle, o
número de iterações que serão realizadas. O contador é responsável por interromper o ciclo de
cálculo quando sua contagem atingir o valor desejado. Este valor é uma estimativa da
convergência. Utilizando essa condição de parada corre-se o risco de realizar um número de
iterações superior ao necessário, comprometendo o tempo de processamento.
63
Projeto da Unidade de Controle Uma melhor maneira de interromper o ciclo de cálculo seria inserir no elemento de
processamento um módulo registrador para armazenar o valor da precisão desejada, um módulo
subtrator para calcular o erro cometido em cada iteração, e um módulo comparador para gerar
um sinal de interrupção do processo no caso de precisão atingida. Entretanto, esta solução tem
uma implementação complexa.
4) coletar os resultados calculados pelo arranjo sistólico.
Tendo sido atingida a condição de parada, resta obter a solução do sistema de equações
lineares presentes nos elementos de processamento. Para isto é necessário a execução de mais um
ciclo de cálculo de forma que os resultados sejam enviados a máquina hospedeira.
Uma vez que foi observado através de simulação em Software por [ARA97] que os
valores da matriz de F e do vetor g, para o método de [WAN93], estão na faixa de -1 a 1 adotou-
se a utilização de números inteiros de 17 bits com sinal como forma de representação dos dados.
Com o propósito de representar os valores reais na forma de números inteiros, tanto os
valores da mariz F, como os valores do vetor g foram multiplicados por uma constante m para
que a parte decimal seja desprezada. Reescrevendo-se a equação (5.9) para acomodar tal
transformação tem-se:
m[mv(k +D]= [mF][mv(k)]+ m[mg] (6.1)
OU,
i',(k +1) = É"\V (k)+ mg (6.2)
onde,
mv(k) (6.3)
=mF (6.4)
g = mg (6.5)
64
Projeto da Unidade de Controle
Nesta implementação manteve-se a escolha do valor de m em 32768 (215) como no
trabalho de [ARA97], implicando na utilização de 17 bits para a representação dos dados na
forma de inteiros com sinal.
Tanto o cálculo da matriz t' como o cálculo do vetor g foram implementados numa
arquitetura do tipo Pipeline.
O Pipeline é uma técnica bem conhecida para acelerar a execução de sucessivas
operações idênticas. Ao invés de projetar um único circuito capaz de executar uma operação
única sobre um conjunto de operandos de cada vez, projeta-se um circuito que será particionado
em vários subcircuitos. Estes subcircuitos podem operar de forma independente sobre
consecutivos conjuntos de operandos. Dessa forma as execuções de sucessivas operações se
sobrepõem, e a velocidade na qual os resultados são produzidos aumenta consideravelmente,
mesmo considerando-se o tempo de latência do pipeline.
Para que a aplicação da técnica seja possível, o algoritmo é dividido em várias etapas, e
um circuito apropriado é projetado para cada uma dessas. Os circuitos separados, que são
chamados de estágios do Pipeline, devem possuir independência para operar sobre os diferentes
conjuntos de operandos. Para atingir esse objetivo devem ser acrescentados elementos de
armazenamento (latches) entre os estágios adjacentes, de maneira que enquanto um estágio opera
sobre um conjunto de operandos, o estágio anterior já pode operar sobre o próximo conjunto de
operandos [KOR93].
A FIGURA 6.4 ilustra uma organização geral da técnica de Pipeline, destacando-se a
alternância entre os elementos de memória e os blocos combinacionais. Os elementos de
memória são os responsáveis por reter os dados entre os estágios, de acordo com os ciclos de
clock. Os elementos de lógica combinacional são os responsáveis pelo processamento das
informações contidas nos dados.
65
Reg 2 —1111" e' " 4101Reg n -1-11110' CC n 1 ENTRA.1
Reg 1
00.CLOCX
CC 1 Reg n
Projeto da Unidade de Controle Estágio 1 Estágio n
Reg :Registrador CC : Circuito Cornbinaclonai
FIGURA 6.4 - ORGANIZAÇÃO GERAL PIPELINE.
6.1 Cálculo da Matriz f'
O cálculo da Matriz 1'1 (supondo F. onde n=4) foi implementado seguindo a seqüência
de operações ilustrada na FIGURA 6.5 e realizando operações do tipo:
• multiplicação de matrizes
• soma de matrizes
• multiplicação de matriz por escalar
A FIGURA 6.5 descreve a seqüência de estágios percorrida pelos elementos da matriz A,
desde sua entrada na interface até a sua saída na forma de Ê para os elementos de
processamento; todo o desenvolvimento das equações está descrito no capítulo 5.
No primeiro estágio, ocorre a multiplicação dos valores da matriz A pela sua transposta
AT, resultando dessa multiplicação a matriz W descrita na equação (5.4). No segundo estágio, os
valores dos elementos da matriz W são multiplicados pela constante c resultando dessa
multiplicação a matriz c.W presente na equação (5.10). No terceiro estágio, os elementos da
matriz c.W são somados aos elementos da matriz identidade I., resultando dessa soma a
matriz F descrita na equação (5.10). No quarto estágio, os elementos da matriz F são
multiplicados pelo valor constante m, resultando na matriz denominada de 1'1 descrita pela
equação (6.4) que tem seus valores truncados em 17 bits. Essa operação é realizada pelo
elemento multiplexador, o qual também é responsável por encaminhar os elementos para as
F1FOS dos elementos de processamento da arquitetura sistólica.
66
W (Reg 2)
c.W (Reg 4)
F (Reg 5)
F (Reg 7)
FIFO dos EPs
Projeto da Unidade de Controle
Caminho da Matriz A
AT (RAMDP1) A (RAMDP2)
W (Reg 2) Nffin (Reg 3)
(1)* c Me
E (RAMDP3) c.W (Reg 4) Me
nele eelee EERE EM EnIE leffin
F (Reg 5) (Reg 6)
MIN A F (Reg 7) ME
EM
FIGURA 6.5 - SEQÜÊNCIA DE OPERAÇÕES DA MATRIZ A.
onde: AT: matriz transposta
1: matriz Identidade
c (equação 5.12) : fator de extrapolação (determina a convergência do método).
m : variável que permite a representação de números reais entre -1 e +1 em números inteiros.
W: matriz pesos de conexão da rede neural proposta.
A FIGURA 6.6 descreve a implementação do sistema de pipeline na forma de diagrama de
blocos com a finalidade de realizar a seqüência de operações ilustrada pela FIGURA 6.5.
67
Matriz AT endereços—
at, RAMO F.
en ere
j-11
RMADP2
Matriz_A Ri6.1063
Matriz_l FIGURA 6.6 - DIAGRAMA DE BLOCOS DA IMPLEMENTAÇÃO DA MATRIZ F.
ffl endereço
Reg 6 o e IIII CIRIA
EPs MEM
dos FIFO
ffl DUALPORT O leei(
Reg 3 C oloc2
Rig 4
olook
endereços
Reg
cl ok
Reg 2
dook
Projeto da Unidade de Controle
Na FIGURA 6.6 faz-se uso de três tipos de blocos combinacionais e três tipos de elementos
de memória que serão descritos em maiores detalhes no capítulo 7. Destaca-se os elementos do
tipo RAM Dual-Port, responsáveis por armazenar os valores dos componentes da matriz A, da
matriz transposta de AT, da matriz identidade I e ao final do processamento os elementos da
matriz F.
6.2 Cálculo do vetor g
O cálculo do vetor g (supondo g „„i onde n=4) foi implementado seguindo a seqüência
de operações ilustrada na FIGURA 6.7 e realizando operações do tipo:
• multiplicação matriz por vetor
• multiplicação de vetor por escalar
A FIGURA 6.7 descreve a seqüência de estágios percorrida pelos elementos do vetor b,
desde sua entrada na interface até a sua saída na forma de vetor g para os elementos de
processamento.
68
Projeto da Unidade de Controle
Caminho do Vetor b
AT (RAMDP1)
b (RAMDP4)
Teta (Reg 9) (Reg 3)
c
g (Reg 10)
Teta (Reg 9)
g (Reg 10)
A g (Reg 11)
(Reg 6)
g (Reg 11)
FIFO dos EPs
FIGURA 6.7 - SEQUÊNCIA DE OPERAÇÕES DO VEIOR B.
onde: AT: matriz transposta
I : matriz Identidade
c (equação 5.12) : fator de extrapolação (determina a convergência do método).
: variável que permite a representação de números reais entre -1 e +1 em números inteiros
= vetor de threshold (bias) da rede neural proposta.
No primeiro estágio, ocorre a multiplicação do vetor b pela matriz transposta AT, resultando dessa multiplicação o vetor Teta, descrito na equação (5.5). No segundo estágio, os
69
atid RAMDP1
RANDP4
C —e• Reg 3
doce
10 FIFO dos EPs
MEMÓRIA DUAL-PORT doce
doei(
ÇJJ
o
c
Reg 8 Reo 9
cl
Reg 11
Reg 6
Projeto da Unidade de Controle
valores dos elementos do vetor Teta são multiplicados pelo valor c, resultando dessa
multiplicação o vetor g, descrito na equação (5.11). No terceiro estágio, os elementos do vetor g
são multiplicados pela constante M, resultando no vetor denominado de g, descrito na equação
(6.5), que tem seus valores truncados em 17 bits. Essa operação é realizada pelo elemento
multiplexador, o qual também é responsável por encaminhar os elementos para as PIPOS dos
elementos de processamento da arquitetura sistólica.
Matriz_AT endereços
Vetor _b
FIGURA 6.8 - DIAGRAMA DE BLOCOS DA IMPLEMENTAÇÃO DO VETOR g .
A FIGURA 6.8 descreve a implementação do sistema de pipeline na forma de diagrama de
blocos com a finalidade de realizar a seqüência de operações ilustrada pela FIGURA 6.7.
Na FIGURA 6.8 faz-se uso de três tipos de blocos combinacionais e três tipos de elementos
de memória que serão descritos em maiores detalhes no capítulo 7. Destaca-se os elementos do
tipo RAM Dual-Port, responsáveis por armazenar os valores dos componentes do vetor b, da
matriz transposta AT, da matriz identidade I e ao final do processamento os elementos do vetor
tg •
70
Detalhes de Implementação da Unidade de Controle
7 Detalhes de Implementação da Unidade de Controle
Neste tópico são descritos os estágios que foram utilizados na implementação da unidade
de controle, bem como a ilustração da seqüência em que estes são dispostos para a solução do
problema. Os códigos dos programas em VHDL empregados encontram-se no apêndice A.
7.1 Blocos Combinacionais
Os blocos combinacionais são responsáveis pelo processamento dos dados na arquitetura
do pipeline. Este projeto em particular é composto de 3 estágios:
• Estágio Multiplicador
• Estágio Somador/Subtrator
• Estágio Acumulador
7.1.1 Estágio Multiplicador
O primeiro estágio a ser verificado é o multiplicador, mostrado na FIGURA 23. O corpo da
arquitetura comportamental contém um processo que é sensível as duas entradas, a e b. Cada vez
que uma dessas entradas mudar, o processo calcula o produto das mesmas usando para isso um
longo algoritmo de multiplicação baseado no método comum "papel e lápis" usado para a
aritmética decimal [ASH96].
O módulo multiplicador pode ser entendido através das equações booleanas:
Carry = (Result(index+count) and opl(index) or (Carry_in and (Result(index+count) xor
opl(index)))
(7.1)
Result(index+count) = Result(index+count) xor opl(index) xor Carry_In (7.2)
Onde:
R: bit Resultante da multiplicação.
C : bit de transbordo Carry_Out.
CI : bit de transbordo anterior Carry In.
A FIGURA 7.1 mostra um circuito multiplicador construído a partir de blocos construtivos
de estruturas onde foram implementadas as equações booleanas (7.1) e (7.2).
71
Detalhes de Implementação da Unidade de Controle
MSB ESB
OP1_n 0P2_n OPl_n- 1 0P2_n- 1 OP1_1 0P2_1
OP1_0 OP2_0
Rn R n • 1 Ri RO
FIGURA 7.1 - DIAGRAMA DE BLOCOS DE UM MULTIPLICADOR DE N BITS.
O algoritmo utilizado na FIGURA 7.2 ilustra o funcionamento do estágio:
Primeiro: faz-se uma operação lógica do tipo ou-exclusivo com os dígitos mais
significativos dos operandos para determinar a configuração da variável negative_result para seu
uso posterior no ajuste de sinal do resultado. Se uma das entradas for negativa e a outra positiva,
o resultado será negativo. Se ambas as entradas forem negativas ou ambas forem positivas, o
resultado será positivo.
Segundo: Se quaisquer dos operandos for negativo, (indicado pelo bit de sinal sendo 1'),
o mesmo sofrerá uma operação lógica de negação e de complemento de 1 em todos os seus
dígitos.
Terceiro: todos os dígitos dos operandos serão submetidos aos módulos do tipo
multiplicador. Desta maneira, a multiplicação dos valores é realizada. O resultado é inicializado
em zero. Para cada bit no multiplicador (op2), se o bit for '1', o multiplicando é acrescido ao
resultado. A adição é realizada com uma parte do resultado, e um offset que depende da posição
do bit multiplicador. Finalmente, o resultado será negado se necessário através de
complementação e acréscimo de um e é encaminhado para a saída (R) .
72
Sim
Não
rCARRY -e— CARRY IN and Result Result ...— Result xor CARRY_IN
AJUSTE NO SINAL DO
RESULTADO Não
Detalhes de Implementação da Unidade de Controle
SELEÇÃO PARA
AJUSTE DE SINAL DO
RESULTADO
VERIFICAÇÃO DO SINAL
DOS OPERANDOS
( OP1 OP2
V
negative_resutt OP1 XOR 0122
0P2 4- 0P2+ I
OH 4-• OPI +1
Sim
REALIZAÇÃO DA
OPERAÇÃO
Carry V- Resuft and OP1 or (Cl and Regule xor OPI Result Result xor OP1 xor Cl
FIGURA 7.2 - ALGORITMO DA OPERAÇÃO DE MULTIPLICAÇÃO.
7.1.2 Estágio Somador/Subtrator
O próximo estágio é aquele que soma e subtrai os produtos parciais em pipeline. Pode-se
implementar tanto o somador como o subtrator através de um único módulo que pode ser
73
Detalhes de Implementação da Unidade de Controle
configurado para executar ambas as operações, uma vez que as duas são intimamente
relacionadas.
O módulo somador/subtrador pode ser entendido através das equações booleanas de uma
estrutura do tipo somador completo:
S = OP I xor 0P2 xor Cl
CO = (OP I and 0P2) or (Cl and (OP I xor 0P2))
Onde:
S : bit resultante da Soma.
OP I : bit do primeiro Operando.
0P2 : bit do segundo Operando.
CO : bit de transbordo Carry_Out.
CI : bit de transbordo anterior Carry_ln.
A FIGURA 7.3 mostra um circuito somador/subtrator construído a partir de blocos
construtivos de estruturas somador completo.
MSB LSB
OP1_n OP2_n OP1_n - 1 0P2_n - 1
OP1 _1 0P2_1
OP1_0 0P2_0
Sn S n - 1
S1 so
FIGURA 7.3 - DIAGRAMA DE BLOCOS DE UM SOMADOR/SUBTRATOR DE N BITS.
74
Detalhes de Implementação da Unidade de Controle
O algoritmo utilizado na FIGURA 7.4 ilustra o funcionamento do estágio:
Primeiro: faz-se uma operação lógica do tipo ou-exclusivo com os dígitos mais significativos dos operandos para determinar se possuem o mesmo sinal ou não.
Se os sinais dos operandos forem iguais, será realizada uma operação de adição. Caso contrário será realizada uma operação de subtração. O sinal de carry_out será incumbido nesse primeiro momento de manter essa informação.
Segundo: verifica-se o sinal dos operandos separadamente para determinar se são
números inteiros positivos ou negativos. Se quaisquer dos operandos for negativo o mesmo sofrerá uma operação lógica de
complemento de 1 em todos os seus dígitos. Terceiro: todos os dígitos dos operandos serão submetidos aos módulos do tipo somador
completo, destacando que a entrada de carry-in do bit menos significativo será sensibilizada pela
informação contida no caroi-out no item segundo.
75
SOMA 4— 01'1 xor 0P2 xor Carryjn Carry_Out (0P1 and OP2) or (Cl and (0P1 xor 0P2))
Detalhes de Implementação da Unidade de Controle
INÚCIO
SELEÇÃO DA OPERAÇÃO PARA SOMA
OU SUBTRAÇÃO
VERIFICAÇÃO DO SINAL
DOS OPERANDOS
OP1,0P2
OPER 4-0P1 XOR 0P2
REALIZAÇÃO DA
OPERAÇÃO
FIGURA 7.4 - ALGORITMO DA OPERAÇÃO DE SOMA/SUBTRAÇÃO.
76
Detalhes de Implementação da Unidade de Controle
7.1.3 Estágio Acumulador
Os produtos parciais formados pelo pipeline são acrescidos a uma soma previamente
acumulada através de uma estrutura denominada acumulador. Essa estrutura mista é composta
tanto de bloco combinacional quanto de elementos de memória. Na FIGURA 7.5 está descrita a
arquitetura interna: um módulo somador/subtrator e dois módulos do tipo registrador
intermediário (ver tópico 7.2.2).
IN REG OUT SAiDA 4- s ENTRADA --e. A
/I ENA
IN REG otir CLR /"\, • iÀ
CLEAR
CLOCK
ENABLE
FIGURA 7.5 - DIAGRAMA DE BLOCOS DO MÓDULO ACUMULADOR.
Os resultados fornecidos pela entrada atravessam o módulo somador/subtrator (+) da
estrutura, e então os resultados produzidos pela saída do módulo somador/subtrator são
armazenados no módulo registrador 1. Esse módulo é similar aos registradores do tópico (7.2.2)
e tem uma entrada adicional usada de clr (Clear) para limpar o registrador para zero. Se a
entrada clr for '1' sobre uma subida do clk, o registrador é zerado. Se clr for 'O' na subida do
clock, novos dados são armazenados. No registrador 2, onde os resultados parciais são
armazenados novamente, vale destacar a ligação em disposta na forma de realimentação ao
módulo somador/subtrador Esse módulo apresenta uma entrada adicional de ena (Enable) para
inibir a emissão dos valores dos resultados para a saída. Se a entrada ena for '1' sobre uma subida
do clk, o registrador está em estado de inibição. Se clr for 'O' na subida do clock, novos dados
são emitidos para a saída.
7.2 Elementos de Memória
Os elementos de memória são responsáveis por armazenar os dados entre os estágios da
arquitetura. Este projeto em particular é composto de 3 tipos de elementos:
• Memória Ram do tipo Dual-Port
• Registrador intermediário com clock, clear e enable
77
Detalhes de Implementação da Unidade de Controle
• Registrador de valores constantes e de valores escalares
7.2.1 Memória RAM do tipo Dual-Port
Durante a implementação do projeto foi necessário acessar a memória RAM
simultaneamente para dois propósitos distintos. O primeiro propósito foi um acesso para a
operação de escrita com a finalidade de carregar os dados provenientes do barramento do
processador da máquina hospedeira. e o segundo propósito foi um acesso para a operação d
leitura dos dados já gravados na memória para a entrada na arquitetura pipeline. Essa opc
possibilitou o uso de memórias de menor tamanho uma vez que os dados podiam ser
sobrepostos.
A RAM do tipo Dual-Port (RAMDP) foi implementada como mostra a FIGURA 7.6.
N• A[3:01 SPO[18:01
DI[18:01
DPRA[3:01 DP0[18:01
WR_EN WR_CLK
FIGURA 7.6 - MEMÓRIA RAM DUAL-PORT.
A RAMDP inclui dois pares de barramento de endereço independentes, bem como dois
pares de barramento de saída também independentes. Essa característica permite o acesso a
mesma região de memória, permitindo acessos simultâneos para operações de leitura e de escrita.
Os pinos de entrada da RAMDP são definidos da seguinte maneira:
• DI (Data Input) — determina quais conteúdos serão armazenados na memória RAM, bem
como os dados que aparecerão na porta de saída SPO quando o sinal WR_EN estiver em
nível lógico alto Caso o sinal WR_EN esteja em nível lógico baixo nenhuma operação de
escrita na RAM será permitida.
• WR_EN (Write Enable)— necessário para memórias do tipo assíncronas. Quando esse pino
estiver em nível lógico alto, os dados presentes na porta DI serão escritos no endereço de
78
Detalhes de Implementação da Unidade de Controle
memória selecionado. Quando esse pino estiver em nível lógico baixo, nenhuma operação de
escrita será permitida.
• WR_CLK (Write Enable Clock) — quando esse pino estiver em nível lógico alto, os dados
na porta de entrada DI são armazenados na posição endereçada e imediatamente surgem na
porta de saída DO.
• A (Address) — esse barramento de entrada endereça uma posição na RAMDP. Esse
barramento possui duas funções: I) selecionar a posição de memória cujo conteúdo aparecerá
na porta DO, ou 2) selecionar a posição onde novos dados serão escritos em dois casos 2a)
quando a porta WR_EN estiver em nível lógico alto, ou 2b) quando ocorrer uma transição
para nível lógico alto da porta WR_CLK enquanto a porta WR_EN estiver em nível lógico
alto.
• DPRA (Dual Port Read Address)— esse barramento é usado como uma segunda linha de
endereços. Os dados contidos no endereço especificado por DPRA aparecem na porta de
saída DPO.
Os pinos de saída da RAMDP são definidos da seguinte maneira:
• SPO (Single Port Output) — esse barramento é usado como saída para os dados que
ocorrem no barramento DL
• DPO (Dual Port Output) — esse barramento é usado como saída de dados que residem no
endereço especificado pelo barramento DPRA. O valor de DPO pode mudar
independentemente da transição de sinal WR_CLK.
A existência desses dois barramentos permite a esse tipa de memória que enquanto um
segundo barramento possa extrair um valor enquanto o primeiro barramento está executando
uma operação independente de leitura ou escrita.
7.2.2 Registrador intermediário com clock, olear e enable
Os modelos de registradores intermediários são sintetizados como arranjos de flip-flops
tipo D. Esses registradores são utilizados no projeto com o propósito de estabelecer um
sincronismo entre os vários estágios do pipeline descritos na forma de sistema no capitulo 6 e de
maneira modular no item 7.1. A implementação foi realizada como ilustrado na FIGURA 7.7.
79
Detalhes de hnolementação da Unidade de Controle
N,D IN Q OUT V
CLEAR
CLR
010.ENABLE
CLOCK /\
FIGURA 7.7 - REGISTRADOR INTERMEDIÁRIO COM CLOCK, CLEAR E ENABLE.
Como pode ser visto no apêndice A. as portas de entrada e saída do 1hp-flop foram
implementadas em linguagem VHDL como sendo do tipo array unconstrained
std_ulogic_vector. Essa característica permite usar o mesmo módulo para registradores de
diferentes tamanhos. O tamanho real de cada registrador é determinado pelo tamanho dos sinais
de entrada e saída realmente conectados ao registrador. O corpo da arquitetura comportamental
para o módulo registrador contém um único processo que é sensível as mudanças na porta clock.
O processo utiliza a operação rising_edge fornecida pelo pacote MEE standard-logic para testar
se a mudança é de um estado 'O' para um estado '1'. Caso afirmativo, o processo atualiza sua saída
usando os dados de entrada.
7.2.3 Registrador de valores constantes e de valores escalares
O modelo do registrador de constantes e de valores escalares foi implementado da mesma
maneira que o modelo registrador intermediário. Ambos possuem as mesmas características
construtivas, porém diferem na função que desempenham na arquitetura do sistema.
Enquanto o registrador intermediário tem a função de armazenar os valores parciais
durante o processamento e de estabelecer o sincronismo entre os estágios da arquitetura, o
registrador de valores constantes e de valores escalares tem a função de armazenar os dados de
entrada que farão parte integrante do processamento. No caso do sistema em questão, este será
responsável por armazenar a constante c, presente na equação (6.12) cuja função no
desenvolvimento das equações foi apresentada no caliítulo 6.
80
Análise e Discussão dos Resultados
8 Análise e Discussão dos Resultados
Neste tópico é descrito o procedimento de simulação, são mostrados os valores que foram
usados, bem como os resultados obtidos através da mesma.
8.1 Procedimento Utilizado
A implementação do projeto seguiu uma metodologia avançada para projeto de hardware
que foi o assunto do capitulo 2 visando a implementação em dispositivos FPGAs que foram
descritos no capítulo 3.
A ferramenta de software utilizada foi o Foundation M1 versão 1.5i da Xilinx Inc. Essa
ferramenta permitiu a descrição de entrada do projeto em forma de módulos descritos no capítulo
7 através do uso da linguagem de descrição de hardware VHDL que foi o assunto abordado na
capítulo 4.
8.2 Valores iniciais das Matrizes e dos Vetores
Os cálculos foram realizados a título de ilustração com uma representação de valores
seguindo os esquemas propostos no capítulo 6 através das FIGURAS 6.5 e 6.7. Foi assumido que a
matriz A tem um tamanho de 4x4 e o vetor b 4x1. Os valores adotados estão mostrados na
FIGURA 8.1 e foram escolhidos com base na simulação em software presente no trabalho de
[ARA97]:
A=
2 5 3 8 1 9 3 5 8 3 5 0 5 3 9 6_
b =
5 2
AT =
2 1 8 5 5 9 3 3 3• 3 5 9 8 5 0 6
1=
1 0 0 0 0 1 0 0 0 0 1 0 0001
FIGURA 8.1 - VALORES INICIAIS DAS MATRIZES E DOS VETORES
81
Análise e Discussão dos Resultados
8.3 Valores das Constantes
Os valores adotados para as constantes também foram escolhidos a partir do trabalho de
[ARA97] e estão mostrados na FIGURA 8.2. Os motivos dessa escolha são referenciados nos
capítulos 5 e 6. Há apenas uma observação, uma vez que no processo de escolha de um valor
para a constante c o valor recomendado era de 10-3, mas pelo fato da arquitetura operar com
números inteiros essa constante foi configurada para assumir o valor 1. A opção de alterar esse
parâmetro não implica em perda de generalidade do método e possibilita que a mesma
arquitetura seja utilizada em uma implementação futura utilizando dados em forma de números
com ponto flutuante.
m=32768 (2'5) c =1
FIGURA 8.2 - VALORES ADOTADOS PARA AS CONSTANTES.
8.4 Resultados Obtidos Os resultados em forma de diagrama de tempo do sistema foram obtidos através da
ferramenta de simulação e mostrados a seguir.
A legenda que determina a função de cada sinal no controlador segue abaixo:
ENDERECOS : Endereços de escrita das memórias RAM dual-port.
ENDERECOD : Endereços de leitura da RAMDP3 contendo os elementos da matriz I.
ENDERECOR_AT : Endereços de leitura da RAMDP1 contendo os elementos da matriz AT.
ENDERECOR_B : Endereços de leitura da RAMDP2 contendo os elementos do vetor b.
ENDERECOL A : Endereços de leitura da RAMDP3 contendo os elementos da matriz A.
MATRTZ_AT : Elementos da matriz AT.
MATRTZ_A : Elementos da matriz A.
VETOR_B : Elementos do vetor b.
MATRIZ_I : Elementos da matriz I.
F_CHAPEU : Elementos da matriz É. .
g_CHAPEU : Elementos da matriz g.
REG_ESCALAR : Valor da constante c.
REG_MULT : Valor da constante m.
CLK : Clock
82
Análise e Discussão dos Resultados
WRITE_ENABLE : Sinal que habilita/desabilita a escrita nas memórias.
CLR • Clear, reinicializa o acumulador.
ACCA_ENABLE : Inibe o circuito acumulador durante a multiplicação de matrizes.
ACCB_ENABLE : Inibe o circuito acumulador durante a multiplicação de matriz por vetor.
W_ENABLE : Inibe a saída do acumulador enquanto ocorre a soma dos produtos parciais dos
elementos da multiplicação de matrizes.
TETA_ENABLE : Inibe a saída do acumulador enquanto ocorre a soma dos produtos parciais
dos elementos da multiplicação de matriz por vetor.
83
J.,
I
I
11
o o
g I g g g
0000
00
0000
02
0000
01
0000
08
\/(
0000
05
0000
00
0000
02
0000
05
0000
03
0000
08
8,00
001
0000
00
0000
04
0000
05
0000
02
0000
07
0000
00
0000
01
0000
00
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
01
0327
68
1
1 1
1 1
1 1
1 1
1 1 1
1)1
1 1
1 1
1 1
1 1
1 1
1 1
II Ii ii
1
— — ,d (1) iD — * ri * * 4k (1) * >4 >4 "--- 4 ,d Oi
4P V ---- (1) a) • ""--- (1) —6 ,--- " ; —6 Ti '—'" (> 4 4 E-I • • rij (t) (.) (t) 0.) ID • (1)
ICS a) ICS ICS ICS II:1 vi 0; r2 • O c..)
0 00 c..) c..) 1 I gci 4 Pe. H PI Ri ci
0kl
P4 ti N 1 N 12+ 124 to
H H P4 1-i NI
P4 O M I 1
kil kr] g kil H E-I H E-I CJ CJ O O M
• •
rxi a ,,,2 M NI H H P4
• • • •
N 2 Ni
I rZ CJ
te te te te te te te te te te te te te -,-; --o —o —o
_ _ _ _ _ _ _ _ _ — _ _ — ._, _ a -.2
- - _ r.*
-:
-.: _
_ _
_ _
- -
- - _ _ _ _ _ _ _ _
-I -, ,
-1
i _ ,
_
_
..
.
.
.
_ _ _ _ _ _ _ _ _ _ _
_ _ _ _
. _ _ _ _ _ _ _ _ _ _
• . .
ixi•
a cil KC
NI ri:11
C.) C.) ec
Z
. • • •
rti•
rQ r=
NII
.
.
.
[Li a
NiI
E4 Pil El
-,-i •—i -,-i
vo
60 80
LO 90
5(
o
X
00
0009
X
0000
03
X
00
0009
X
00
0003
00
0005
00
0008
00
0003
o o o o
0000
01
0000
00
0000
0000
0000
0000
0000
0000
000 0
0000
0000
0000
0000
01
0327
68
—
--- 4 (I.) (I.) --- lt ri lt
I . 05( j :: 1 : 9: C 9- : r da )( ) -6, :1; Tf* -6;)
— ge mi ge — Tcs a) Tcs 1 1 1 • — rd —
c IPI:igggeElig; jil H. 1
I N
rei Íc rei çjel ri H c e H
ki PAN RN RN kx 1 2 2 E; E Á' '
At
V) Tcs —
r_i Pi ã
, c
it
vi Tcs
R: ra. ã
c bi
)
G)
2.
c) to rx 1
r 1 1
I it
V) Tcs
2. R m
I
1
I • •
rá i_l
z á 1' ti'4
• • • m. ros' z
g-e"
PO PO PO PO XI PO PO PO • • -ri •rl
lO
—
. . . Á a
Z NI
PI O C.) gC
ril 14 PI
14
. . . Á a
Z NI
t, E-1
1 ízl E-,
-H -H -,-,
— 01
d
O 2
0 00
30
HO
O 0
0
>C.
.-I 0
----
.-4 0
><.
0000
05
0000
09
0000
08
0000
05
0000
00
0000
06
0000
05
0000
00
0000
05
0000
03
0000
09
090
006
0000
0 7
_X
00
0001
X
00
0000
00
000
1
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
01
0327
68
•'-'• •-•'• 4 Q) ••-• it ri it it 4k tll it
4 4 1) •—• it ---• -----. rd — W Q) • •-- Cl U — U U U — U 4 4 E. • • rd (1) o W Cl W • Cl
rd W rd rd rd rd • • I I • •••• rd •''• •''• ''•-.' U) ci cd I24 4 EA • — • • •
0000 O 4 4 • H E; 1-5 1-5 1-5 C..) o i I Ia I Fll r11 C) 12 Fll Fll Fll r21 Fll N N I N a, a, to 0 t:4 t:4 t:4 IX t:4 H H I:4 H oce M ra Z
O t:4 I 1
ki ki ki kl E E E
ã ã ã NI bi ça
• . •
Fll 12
2 M ali E-1
• . •
rII. •-1
Z ai
41
PI PI te PI PI PI PI fil PI CD CD CD PI •.-i •rri -.1 -.-i
a,
e Co
C
o _ r,
—
-
- C — cri
EM
.
.
.
. kl e-1
M ! CICI Ci o f-
ra '-' 2 g 124 a
.
.
.
. kl e-1
PI 1 4 . E-1
I ra E-1
• ri - ri ..-1
I 900000
I
0000
07
I
0327
68
I
1H
o
1
1
I
I
I
I
-.- — 4 ai a) — 4P •--1 4P 4P 4P Q) 4P • X X "--. 4 4 ri 4P V a) a) • — — a) i.) o eci i.) — i.) . Ni
r2 raaj Tia ) vw vw vw i Á 'Oa) a
i i i • — ro — — — ,c — U'à al 1:4 r4 4 E-1 • — • • • 8 8 8 8 8 '1 ''.1 ge; 1 B RI 2 2 r?1
'A 'A 'A 'A .-1 brd' h. .9A .c1-• u)I ei Ni' NI NI NI NI NI rd rd O rd iii rxi
2 2 H 2 H M M El EÃ UI Ui 2 O El NI NI r14 ti ra ti ti
• . rxi a 2 m 1
4 " ,c -, 4' gel gel gel gel gel gel gel XI gi giI -•-I -ri .9-1 ••-I
ri
!is
. . . À a
Ni
z a
RI oq
i rc
CA Z
C.) IA U .:4
r1
. . . us i a z RI
i g4 E
i CA E -ri r1
un
o c o
o
o
I
o
04
X
00
01
00
02
ri
o
0000
06
0000
06
0000
07
0000
01
>< X
c. ,i , .-, -, ,--- ch o ri o o
o
o o o o o o o
0000
01
032 7
68
-- - .0 a) a) — it ri 4P 41 * cu X X — „C „C o — 4t Tf a) a) • — — a) o — ti 75 ti — c--; -O „C E-1 • • ra CD () CD a) a) • a) — — PI I `-' ra (1) ra Cl ra ' rCi
I I I • --'-' ra ''-' "-
E-i • — oo O O O ir • 1-1 d O O O O O H 1 1 PI 1 RI RI a
N RI tc tc I tc 04 04 CA 2
PIC s:C "-I Et IX H ecd á Ri
I I ki pil ni H Erip
Ni tn rd rd 0
• • •
RI i-
2 z RI
0
• • •
rii 1- ai ,4 121
I
— —
LSI — e —
-
- -
_
- -
- -
_ _ _
E -
-
-
- -
-
- -
- -
- -
-
- _ -
-
- -
-
'CP -
-
- -
rxi a rxi a
Á a
[AI to
[AI .cc o rxi Ei
ei ge
1 ri] Ei
-,-1 .9-1 -H
0000
01
I
0327
68
1
1
11
11
o o
00
o o o
IN
._. _ ,....._. r, it.... • . 40 4t Tf • (à) r ( I i E- ; ' - - . -• ' - - -• ri 1:5) ( I ) ( -; i i T) ' - - . -• '-("ia . ) — — ii: P1 i ••—• Tf ell Tf Tf Tf rCi ui ç4I ç41 a E—; '--: "••1:2' '---• '--•- '--•- R O O O O O f:41 FC • I-1 aiç E-I o o o o o 1 ril ril Ci ril ril NI ril NI t
5 t'1 O.ii. ti] 1:4 1:4 1:4 1:4 1:4 1_1 1_4 • 1:4 1_ , .c1 ,z ri c , rA ril ril ril ril 1:4 1:4 O w x i 1
2 2 n E-1 E-1 E-1 x
rA MrA M M g g g NI ol rjj ti
2 2 r4
FiÍzi 1-i ix W ti
•
.[li P1 rz ri, 1 rz o c4
P1 P1 ifi r4r1r1
- _
. . . rx i a Z kl 1 Ce ci o rrn
NI i-1 Ce ern g ui
. . . rx i a Z kl i sn E. 1 NI E-1
-,-1 •,-i
00 YO
00 60
X
00 I
III I
111 I
1 900000
I
o o o
1 00
0007
i
0000
01
1
o o o o o o o o o o o o o o o o o
, - tf, e, - co o o o o. o o o
o
o o o o o o o o o o o ° o o o o o . o o
><
to Lr, , , o , ° o °- oo o o o o
-1o o o 03
2768
1
- - — ,C a) a) — 4P ri 4* 4* 4* (I) 4* • SC SC —
U-- --. 4P — rei • a) a) • — — a) U — --(5 U U — ---U • ,4 ,4 H • • rei Q) U (11 Q) Q) • Q) Írl .----- 40 P1 4 — rei a) rei rei rei rei a 1 1 PI (1) Cl IX IX a H • — • • • a • 4 00000 xe xe •1-1 4 Z O O O O O I 1 PI 1 rzi wO E Írl (AÇA ÍrlÇAÍ.11 NN 1 ba a, al CO I IX W W ç4 ç4 1-1 1-1 W 1-1 4 4 w w NI w w w w tZ tZ O tZ W X I 1 E-I
O E-I E-I E-I E-I O O O O W 1-1 tZ R 2 R 1 ÇA Írl I-1 IX I-1 ÍrlÇAÍ.11 Z Z >£[14 OltZtZU Ciece OÍrl
w a PI 4 w
1 4 O
Mal
C — o
ACC B
_ENA
BLE
.
TET A
_ENA
BLE
..
-r4
G O X
00
X
30 00
LIO
1 900000
!
0 000
07
I
03276
8
1
o o
1 oo
o oo
o o
o o o o o o o o Io
o o
o o o o o o o
o
— — 4 a) a) — 4n ri 4ti.n t a) t • X X — 4 4 o 4t a) a) • — — a) -G — --G --(3 -G ai --6- .
4 4 El • • rd a) o a) a) a) a) À
ga ce ga — od a) rd rd od X od a • • I I I • — rd — — roa — cn Q X X a El • — • • . • a 2 O O O O O oa roa • H O Q ga E; C.) C.) C.) C.) C.) Z
I 1 al I ril Ç4 O a ril [C Ç4 Ç4 [C [C ta ta I ta a a cn Q I X X X X 1:4 H 1-1 1:4 H ct ge ril z [11
[C[C [C [C [C X X X I I O X X El 2 2 2 2 2 ..-„. El E-• E-1 Ui Ui r.72 0 M H [C [C [C [C [C R r•I r14 tn X 11 W E-2)
• . •
LÁ a a) :5 W soal
C4 al ca rl r1 r1 r1
CO
VI
2 3
c — o o o
o o
c — o o o o o
c —
—
o o
c —
ENDE
REC
OS.
( he
x)
ENDE
REC
OD
.( he
x)
ENDE
RECO
R_A
T.
( h
ENDE
RECO
R_B
.( h
e
ENDE
RE
CO
L A
.(he
MATR
IZ A
T.
( de
c)
MATR
I Z A
.( d
ec) #
VETO
R_B
.( d
ee)#
1
MAT
RIZ
I.
( dec
) #
F C
HAP
EU
.(de
e) #
REG
_ESC
ALA
R.(
de
REG
_ MU
LT.(
dee
) #
WR
ITE
_EN
ABL
E..
ACCA
_ENA
BLE
-a
0:1 0:1
eia ela elari -ri • 1-1 • ri
ACCE
_EN
AB
LE..
TETA
_EN
ABLE
..
0:1 0:1 0:1 0:1 0:1 0:1 0:1 0:1 P:i P:i 0:1
_.
_ 2 - 5 -
-4
--4 ......
_ .-... 2 _ _ _ -
-
— 5._, - ...., - - — . -.
?. Hi -I -I
o H
: H
,
r
I
1
o
.a. o
o
o
><
-, o
o o
o
o
.---<
“, o
o
o
mo o o o
00000
7
0000
01
0000
0000
0 00
0000
0000
0002
9163
5 2
1
0 0 0 0 0 0 0 o o 0 o o o o o o o
rm en o •:, , N en o o oo -. o o o o o o o o o
0000
01
0327
68
1
1
1 --
L_
_. -, - - _
2 -I _ i
H -1 -. -J
—1
:I
H .-4
H
1
_ _ _
_
_ _ _ _
I
g_CH
APEU
.(de
c) #
REG
MU
LT.(
dec
) #
MAT
RIZ
I.(
dec
) #
VET
OR
B.(
dec
)#1
ENDE
RECO
R A
T. (
h
MAT
RIZ
_AT.
( dec
)
ENDE
RECO
D.(
hex
)
ENDE
RECO
S.( h
ex)
REG
_ESC
ALAR
.(de
MAT
RIZ
_A.
( dec
) #
ENDE
RECO
L_A
.( h
e
ENDE
RECO
R_B
.(he
WR
ITE_
ENA
BLE
..
c — o
C - o
tn -
-1:4t
ACCB
_ENA
BLE
..
TETA
_EN A
BLE
..
e
e c
1 0
00
°°
03
00 C
e- 09
00
00
00
Ci n
07
00
08
00
0000
06
0000
06
000 0
07
0000
01
0000
0000
0000
0000
000 0
0000
0000
0000
0000
0000
0000
01
0327
68
1
— — ,C O af — i. r4 * i* 4t (1) I@ SS SS — ,C ,C U — 4t — — — rcs O (1) •——(1)U—UUO—U ,C ,C Es • • tf O U O (1) (1) • o NI — — rt4 Pel rt4 -"-- ri:, (I) rt:, tf tf r4 tf
I 1
r4 1-1 Es • — • • • 4 • 000004 4 •I—iZ Z 4E-1 OC)C.JOC) 1 1 ffl 1 NI NI Cf 4 NINI NI NI NI NN 1 bi ai ai U) R ,,4 ,4 ,4 ,4 ,4 , ,, . ,, ,c, ,c, ,.., r.4 NI NI r.4 Ni ,4 O ,,4 m 1 1
Es E-1 E-1 E-i Cf Cf O O 4 ZZ Z ZZ 1 1 NI NI 4 NININININI er4 b) 1:41:4C.J3C)4
• •
4 ffl 4 Z NI
Ni 1 E. 1-1 1:4 r4 1-.1
• •
fil. 4 PEI 4 Z Ni i 4 Cf Cf
ffl ffl ffl ffl ffl ffl ffl ffl ffl PEI PEI pg pci ..-1 ..-1 •r1 ri
C —
•—•
ACC
B_E
NAB
LE .
TETA
_EN
ABL E
.
-ri -ri -ri
•
2
1
•
â
".n."
1 rn
—t1
r_1
—1 --I
ACC
B_E
NABL
E .
çza a fcC
I TETA
_EN
ABLE
.
- •-1 • r-1 • r-1
a
tr. a
c cr. —
— co
r- o o o o o
0000
0000
0000
0000
0000
•
ENDE
REC
OR
_AT
.( h
ENDE
REC
OR B
.( h
e
ENDE
RECO
L_A
.( h
e
MATR
IZ A
.( d
ec)#
VETO
R B
.(de
c)#
1
MATRIZ
I.
( dec
)#
F_C
HAP
EU
.(de
e) #
g_C H
APEU
.( d
ee)#
REG
_ESC
ALA
R.
( de
REG
MUL
T.
( dec
) #
END
EREC
OS
.( h
ex
)
END
EREC
O D.( h
ex
)
MATRIZ
_AT
.( d
ee)
WRI
TE
ENA
BLE
..
ACCA
_EN
ABLE
.
o
13:1 13:1 13:1 13:1 13:1 13:1 13:1 13:1 13:1 13:1 13:1 13:1 COH H -H -H
eig
c — 5
tn
TETA
_EN
ABLE
.
ACC
B_EN
ABLE
.
• ri
rf c .-Ir
E ti
—
3— AC
CB_
ENA
BLE
..
TETA
_EN A
BLE
....
rn
111 —
o o
/
o
11 0
11
0
1
o
0000
06
0000
06,
0000
07
0000
01
0 O 1-1 o,cl• C" O 0 O O 0 0 o o o o o
O tri O o o o o o o o o o o o o o o o
o
o
0327
68
"•••• ••-•• a) (I) •-•-• it Cl it it it (1) it
Z c) --- it --- --- --- V a) 0) • ---- ---- a) (.) --. (.1 (.1 (.1 --- (.1 4 4 E-1 • • V (1) ti (1) a) (1) • a)
I I I • — V — rn n 124 124 A E • — • • • • O O O O O tr: tr • 1-1 4 C) C) C) C) C) 1 1 Pel I NI NI c..) NI NI NI NI NI cl cl ] cl ai ai (c) 124 124 124 124 124 H H 124 H gg PA NI NI NI NI NI 124 124 o 124 Z 1 1
2 2 2 2 2 M M P%i M UI O1 2 ri ,j TI NI NI NI NI N I › r1-1 tn 124 124 C..)
• •
ai ra tr Z NI I NI E-1
} 41 ÍrA Z C-)
• • .
a ra 4 Z al
I 4 8 4
01 01 01 01 01 01 01 01 01 01 01ri -ri r1
rn —
-
-
_
-
-
-
-
-
-
-
-
-
TETA
_EN
ABLE
.
ACC
B_EN
ABLE
.
ENDE
RECO
S.( h
e x)
ENDE
REC
OD
.( he
x)
ENDE
RECO
R_B
.( h
e
ENDE
RECO
L A
.( h
e
MAT
RI Z
_AT
.( dec
)
MAT
RIZ
_A.
(dec
) #
VETO
R_B
.( d
ec)#
1
MAT
RIZ
I.
( dec
) #
F_C
HAPE
U.
( dec
) #
g_CH
APE U
.(de
c) #
REG
_ESC
ALA
R.(
de
REG
_MU
LT.(
dec
) #
a
WRI
TE
_EN
ABL
E..
a
o H o o
Ti
J
o
o.
o o
,
.
, 1
1
r-o
i , o
to o o o o o
to o o o o o
r- o o g
-. o o o o o
-.
o o o o o o o o o o o o o o o o o o o o
o o o o o o o o o o o o o o o o o o o o
I
—
1 — - - _ _ _ „ _ _ _
_. - - _ _ _ _ _ _ _ _
_
_ _ _ _ _ _
_ _ _ _ _ _ 2 _ 5 - :, _
_ _ _ _ _ _ _ _
_ _ _ _ o _ -
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ 0 _ 5 _ ?, -
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _
_ - _ - — g E 5 —
_ _ _ 5 — _
_ _
_ _
__ _ _ _
_
_ _ _ _ ir r _ _ _ _
4 PQ rei PQ PQ PQ 021 rei PQ rei PQ PQ PQ PQ
_ _ _ _
2 - g - : - -, _ - _
-1
o -.
o
J
o
-,
o
o o
o
o o
o_ _ o
o
o o
o
o
o o 0000
01
o
na
o o o o o o o o
o o O o o o o o o o o o o o o o o
- _
__ , __ .. _
_ _ _ _
_ _.
2 - 5 -- : -
_ - _. _ _.
-4 - - _ - - _
a-
—
- - —
n - z - - _ -
21.
-2 -I _ _
n -1 - -, -,
_ -J _I
SC X cl) (1) 4
to
4
O O C.) C.) [4 [4
[4 [4
Z Z [4 [4 4A
TRIZ
_ AT
. ( d
ec )
TET O
R_B
. (de
c) #
1
4ATR
IZ_ A
. (de
c) #
!INDE
RECO
R_B
. (he
L'NDE
RECO
R_A
T. (
h
E:ND
EREC
OL_
A. (
1
1ATR
IZ I
. (de
c) #
,CC
A_EN
A BLE
...
ÍCI Mi Mi ÍCI Mi Mi eci Mi Mi Mi Mi rI H
tn
ACCB
_ ENA
BLE
....
TETA
_ENA
BL
E....
110
01
13
/1
0,1
15
J.
UflS
lin
nS
1 1
9211
5 19
3ns
,194
ns
,195
ns
119(
I I I 1
[III 1
I
1 11
L1
1 11
111
1H
W(
B
END E
REC
OS.
( he x
)
00
09
B
EN
DER
E CO
D. (
he
x)
oo
04
00
05
END E
REC
OR_
AT
.( h
00
B E
NDER
ECO
R_B
.( h
e
oo
OC
00
09
B
END
EREC
O L_A
.( h
e
B
MA T
RIZ
_AT
.( d
ec)
B
MAT
RIZ
_ A.
( dec
) #
B
VETO
R_ B
.( d
ec)4
1
B
MA T
RIZ
_I.
( dec
) #
00
0000
0000
0000
0000
00
B F_C
HAP
EU
. (de
c) #
0000
0000
000 0
0000
0000
B g_
cHA P
Eu.
(de
c) #
4 R
EG_ E
SCAL
AR
. (de
B
REG
_MU
LT. (
dec
) #
•
C
LK
WR
ITE
_ ENA
BL
E
CLR
ACC
A_E
NAB
LE
TETA
_EN A
BLE
..
ACCB
_EN
AB
LE..
-
-
--- - - -
Pli
- -
-
-
-
-
-
1-1 —
-
-
-
- -
et, g r—
ol C r-o CJ
-
^
- _
o
-
-
-
-
-
-
-
-
- -
-
-
-
-
TETA
_EN
AB
LE..
1113
051
17
2l
Sris
1216
ns
,217
ns
Will I I
17
1 71
I
I 1 2
11
B
ENDE
REC
OS.
( hex
)
B
ENDE
RECO
D.(
hex)
X OA
00
00
09
00 DA
B
EN
DE
REC
OR_
AT.
( h
00
B EN
DER
ECO
R_ B
. (he
00
09
00
DA
ENDE
RECO
L_A
.( h
e
B
MA
TRIZ
_AT
.( d
ec)
B
MAT
RIZ
_ A.
( dec
) #
B
VETO
R_B
.(de
c)4
f 1
B
MA
TRIZ
_I.
( dec
) #
00
0000
0009
9002
6869
76
X
B F
_CH
APEU
. (de
c) #
0000
0000
0000
0000
0000
B g
_CH
APE U
. (de
c) It
R R
EG
_ES
CAL
AR. (
de
B
REG
_MU
LT. (
dec
) #
CLK
WR
ITE_
ENA
BL
E
CLR
ACCA
_ EN
ABLE
. 111
1 1111
1111
1 111
11111
11111
11111
11111
11I11
11111
1111
111111
11111
111 1
11111
f1111
11111
MTH
q u1r
i mii
mw
ili
til — M —
I"-
-
_
_ -
-
_ -
-
-
L -
- _
- - - -
-
C,1
- -
-
-
-
_ _ _
e.
1 A . - . - 1--- --1 na — na
—o ..... — —
o= C —I
— —
o — c —
-
_ o — c —
— _ —
o _ c — n —
_ —
c — EN — N _ —
—
— — — — — _
n — — 5 — — —
— —
— —
— !
—
i
I
I
11
I
o o
o o
_ _ _ _ _
—
— —
—11-
------ ----- — — _ — — — — — — — — — _ — — _ _ —
— _ — — — — — — — — _ _ _ _ — _ — _ — _ _ _ — —
• - - - - — 4 (1) (1) 4:k •—I = 4.k 4.k al 4: • SS SS `--' .4 4 C) .--- it --- •---- .--- 'CS .--- • W (1) • ---' `--' (1) C) --- C) C) C) ---' C) 4 4 E • Ti (1) C ) (1) (1) a ) • a) rxi — it: 12:1 ft:C '—' Ti (1) 'CS Ti 'CS r4 Ti 4
i i . ..... Ti ..... ..... ..... ,, --... g CI U) Q r4 r4
1 4 E • '—' • a ir:c
00 000 ir:C ir:CIA
•
IN
H
N
O
N
O cnir: RE. z
CA CACA CACA NI
N I r4 I:4 r4 rd r4 H H r4 H E r: I r: NI NI NI NI NI NI CA r4 r4 O r4 X X i E nnnnnE.E.E.E.oucc1
W H r4 X X X X X Cxl iNICA 4 Ê 4 CA CANICACA > CLII ts rd rd C.) s O
• • •
Czi a g CI ,r, ízl
I i r: C) C) ir:C
P:I P:I P:I P:I P:I P:I P2 P:I P:I • • • •
FT- TT]l-
TTEI
TT1- 1 j
1 In
I
I I
I
I
I.
o
o
.
o o o 0 o o o o .0 o o
o
o
o
0 - o o o oo o o o
CD CD • ---- ---- CD r..) U U U ---- U
000004 4 • 1-1 D D 4E
ri:! ril Cil Cil Cil X X OX X
.--. .--. rd a) CD .—. H 1:1) 4k •
X X '--" .4 rd U
rd rd E • • V a) o a) a) a) • a) ril
V (I) r0 r0 r0 X r0 4 Cil
I 1 1 • -- V ---- ---- -- gg — 0:1 4
rn al X X 4 E • — • • • 4 • 4 0:1
C)C)C)C.)C.) 1 1 0:1 1 UI ril O .-1 Z
kl Cil Cil Cil Cil cl cl 1 cl ai ai Co 0 1 Cil
X X X X X 1-1 H Cd 1-1 4 ÇA Z ril
Q Q Q Q Q E E E E O O 01
01 E
M M MMM
ri:! t 1 1 Ca ril 4 X 14 O
M 4
M H 1:4 C) 41
mir1 . •rI
— C — o
ACCB
_ ENA
BLE.
TETA
_EN
AB
LE...
h‘n
49I1S
4
n 1
V
i rirl
1 ;£ 17
ib l
1 1
1
1
17‘ 1 7
1 1 1
1
1
1
1
11
111
1 1
1
1
1
M
n 15 1
1 1
1
1
i1
1D 115
4b
1
1
111
1
14 1
1n 15
4 4
1 1
1
1
1
1
11
4 1 1 n 1S 1
1
1
1
1
1 I
n 15 1 1 1
,2
1
1
1
115U 11
S 1
1 1
B
ENDE
RECO
S.(
hex)
00
X_
OC
B E
NDE
RECO
D.(
hex )
00
10
00
01
00
B E
N DER
ECOR
_AT.
( h
B
ENDE
RECO
R_B
.(he
00
OC
00
OD
00
B EN
DERE
COL_
A.
( he
MAT
RIZ
_AT.
( dec
)
B
MAT
RIZ
Ad
dec
) #
B
VETO
R_B
.(de
c)#1
B
MA
TRIZ
_I.
( dec
) #
00
0000
0000
0000
000 0
00
B
F_CH
APEU
.( dec
) #
B
g_CH
APEU
.(de
c) #
REG
_EsC
ALAR
.( de
B
REG
_MU
LT.(
dec
) #
-1
i
CLK
i
WRI
TE
_ENA
BLE
i C
LR
i
ACCA
_ENA
BLE
1111
HII
III
H 1
1 III 1
II H
I IH
IIH
II p
il I II
I 111
11 H
IIIH
IrH
1111
111 1
R II H
IIIM
(%1
• e _
TETA
_ENA
BLE
.
-ri -ri
—
o o o o
ENDE
RECO
S.
ENDE
RECO
D.( h
ex)
ENDE
RECO
R_A
T.( h
ENDE
RECO
R_B
.(he
ENDE
RECO
L_A
.( h
e
MA
TRIZ
AT.
( dec
)
MA
TRIZ
_Ad
dec
) #
VETO
R B
.(de
c)#
1
MA
TRIZ
I.
( dec
) #
g_CH
APEU
.(de
c) #
REG
_ESC
ALAR
.( d
e
REG
_MU
LT.(
dec
) #
a a o 1:CI 4 4 1:CI 4
w
ri
ACCB
_EN
ABL E
.
TETA
_ EN
ABLE
.
I I I
1111
I i I I
I I l' 17
115 1 11 I
I I r
Ibb ln Is l i11
11 14 1bb ln Is l
14 167 1n Is l12 168 1n 1s 1
[111
1 12 169 1n 1s 112 17 1J
_0 n51 i I
1112 171 1 7
1111
_1 I
172 1 n Is l
B
ENDE
RECO
S.( h
ex)
B
END E
RECO
D.( h
ex)
013
00
00
X0
5
00
X
_
H
B E
ND
EREC
OR_
AT.
( h -
-i(
X
oo
B
ENDE
RECO
R_B
.(he
00
OD
00
OE
00
B
EN
DER
E CO
L_A
.( h
e
B
MAT
RIZ
_AT.
( dec)
B
MAT
RIZ
_Ad
dec)#
B
VETO
R_B
.(de
c)#
1
B
MAT
RIZ
_I.
( dec
) #
00
0000
0000
0003
7603
20
B F
_CH
APEU
.(de
c) #
lk
B
g_CH
APEU
. (de
c) #
REG
_ESC
ALA
R. (
de
B
REG
_ MU
LT. (
dec
) #
CLK
WR
ITE_
EN
AB
LE
CLR
ACCA
_EN
ABLE
MT1
T1 1
1111
ri
ACCB
_ENA
BLE
. .
TETA
_ ENA
BLE.
.
CM
ACCB
_EN
ABLE
.
TETA
_EN
AB
LE...
•r-I
o
•CP
—
ACCB
_ ENA
BLE
. ..
TETA
_ ENA
BLE
...
co
o
E
ACC
B_EN
ABLE
.
TETA
_ENA
BLE
.
tal
a
REG
_MU
LT.
( dec
) #
g_C
HAP
EU.(
dec
) #
•59.
c 1
o
o o
ENDE
REC
OS.
( hex
)
ENDE
RECO
D.(
hex)
ENDE
RECO
R_B
.(he
MA
TRIZ
_AT.
( dec
)
MAT
RIZ
A.
( dec
) #
VETO
R B
.(de
c)#
1
MAT
RIZ
I.( d
ec) #
ACC
A_EN
ABLE
....
o
pa ai ai -1 •
e — o
uà —
ACC B
_EN
ABLE
.
TETA
_EN
AB
LE...
-ri • rl
o I
o
—
C —!
ENDE
RECO
S.(
hex)
ENDE
RECO
D.(
hex
)
ENDE
RECO
R_A
T.( h
END E
RECO
R_B
.
ENDE
REC O
L_A
.( h
e
MAT
RIZ
_AT.
( dec
)
MAT
RIZ
_Ad
dec
) #
VE
TOR
B.(
dec
)#1
MAT
RIZ
I.(
dec
) #
F_CH
AP
EU
ddec
) #
g_CH
AP
EU
ddec
) #
REG
_MUL
T.(
dec
) #
WR
ITE
ENAB
LE
...
o ACCA
_ENA
BLE
....
o
o ttl
_
1
-
- -
VI - -
_
- -
-
- -
- -
-
-
-
-
-
-
-
-
ACCB
_ENA
BLE
..
TETA
_EN A
BLE
....
Biblio,vrafia
[CHA97] CHAI, SEK M., LÓPEZ-LAGUNAS A., WILLS D. S., JOICERST M. N., and BROOICE M., pp.160-166, Systolic Processing Architectures Using Optoelectronic Interconnects, Montreal, Canada, MPPOI 1997.
[C0E95] COELHO, D.R. The VHDL Handbook, Kluwer Academie Publisher, 1995.
[D0N95] DONLIN, M. CPLD/FPGA devices, tools lure PLD designers into faster, denser logic, Computer Design, p. 81-98, November, 1995.
[DON96a] DONACHY, P. Design and Implementation of a High Levei Image Processing Machine using Reconfigurable Hardware, Ph.D. Thesis, Dept. of Computer Science, The Queen's University of Belfast, September, 1996, WWW page http://www.cs.qub.ac.uk/ToEP.Donachy/thesis/
[DON96b] DONLIN, M. Designers cross over to language-based tools, Computer Design, p. 69-88, January, 1996.
[DON96c] DONLIN, M. Designers moving to HDLy face challenges, reap benefits, Computer Design, p. 69-75, October, 1996.
[D0N98] DONGARRA, JACK J., Performance of Various Computers Using Standard Linear Equations Software, (Linpack Benchmark Report), University of Tennessee Computer Science Technical Report, CS-89-85, 1998.
[DRA87] DRAICE, B. L. et al. SLAPP: A Systolic Linear Algebra Parallel Processor, IEEE Computer, p. 45-49, July, 1987.
[DUN90] DUNCAN, R. A Survey of Parallel Computer Architectures, IEEE Computer, p. 5-16, February, 1990.
[FAW94] FAWCET, B. K. Applications of Reconfigurable Logic, More FPGAs, Edited by Will Moore and Wayne Luk, Abingdon EE&CS Books, Oxford, England, 1994.
[F0R87] FORTES, J. A. B.; WAH, B. W. Systolic Arrays - From Concept to Implementation, IEEE Computer, p. 12-17, July, 1987.
[GAJ83] GAJSKI, D. D. & KUHN, R. H. New VLSI Tools, IEEE Computer, New York, 16(12): 11-14, December 1983.
[GOK91] GOKHALE, M. et al. Building and Using a Highly Parallel Programmable Logic Array, IEEE Computer, p. 81-89, January, 1991.
[GSC95] GSCHWIND, M.; SALAPURA V. A VHDL Design Methodology for FPGA, Lectures Notes in Computer Science, no. 975, p. 208-217, July, 1995.
[GUC95] GUCCIONE, S.; GONZALEZ, M. Classification and Performance of Reconfigurable Architectures, Lectures Notes in Computer Science, no. 975, p. 439-448, July, 1995.
148
Bibliografia
[GUC96] GUCCIONE, S. List of FPGA-based Computing Machines,WWW page http://www.utexas.edut-guccione/HW_Iist.html, 1996
[HAG81] HAGEMAN, L. A., YONG D. M. Applied Iterative Methods, Academic Press, 1981.
[HEL97] HILLESLAND, K. A. A Sistolic array for Solving Simultaneous Linear Equations Using Iterative Methods, Master of Science in Electrical Engineering, School of Electrical Engineering and Computer Science, Washington State University, May, 1997.
[HAR90] HARDING, B. HDLs: a high-powered way to look ai complex design, Computer Design, p. 74-84, March 1, 1990.
[H0A93] HOANG, D. T.; LOPRESTI, D. P. FPGA Implementation of Systolic Sequence Alignment, Lectures Notes in Computer Science, no. 705, p. 183-191, June, 1993.
[HWA84] HWANG, K.; BRIGGS, F. A. Computer Architecture and Parallel Processing, McGraw-Hill, 1984.
[IEEE94] IEEE, Inc., IEEE Standard VHDL Language Reference Manual, June, 1994.
[K0R93] KOREN, I., Computer Arithmetic Algorithms, Prentice-Hall, 1993.
[KUN87] KUNG S.Y., VLSI Array Processors, Prentice Hall, 1987
[KUN82] KUNG, H. T. Why Sistolic Arrays?, IEEE Computer, vol. 15, No. 1, p. 37-46, January, 1982.
[LAW95] LAWRENCE, A. et al. Using Reconfigurable Hardware to Speed up Product Development and Performance, Lectures Notes in Computer Science, no. 975, p. 111-118, July, 1995.
[LIN93] LINDE, A.; NORDSTRÕM, T.; TAVENIKU, M. Using FPGA to Implement a Reconfigurable Highly Parallel Computer, Lectures Notes in Computer Science, no. 705, p. 199-210, June, 1993.
[LEU97] LEUNG, STEVEN S., ASIC System Design with VHDL: A Paradigm, ICluwer Academie Publishers, 1997.
[LIS93] LISPSETT, R.; SCHAEFER, C.; USSERY, C., VHDL: Hardware Descrition and Design, ICluwer Academie Publishers, 1993.
[LYS94a] LYSAGHT, P.; DUNLOP, J. Dynamic Reconfiguration of Field Programmable Gate Arrays, More FPGAs, Edited by Will Moore and Wayne Luk, Abingdon EE&CS Books, Oxford, England, 1994.
149
Bibliografia
[LYS9414 LYSAGHT, P.; DICK, H.P. Implementation of Adaptive Signal Processing Architectures Based on Dynamically Reconfigurable FPGAs, Proceedings of EUSIPCO-94, Edinburgh, Scotland , Vol ifi, pp. 1871-1874
[LYS95] LYSAGHT, P. et al. Prototyping Environment for Dynamically Reconfigurable Logic, Lectures Notes in Computer Science, no. 975, p. 409-418, July, 1995.
[MAR95] MARNANE, W. P.; JORDAN, C. N.; O'REILLY, E J. Compiling Regular Arrays onto FPGAs, Lectures Notes in Computer Science, no. 975, p. 178-187, July, 1995.
[MCC90] McCANNY, J. V.; McWHIRTER, J. G.; KUNG, S. The Use of data Dependence graphs in the Design of Bit-Level Systolic Arrays, IEEE Transactions on Acoustics, Speech and Signal Processing, vol. 38, No. 5, p. 787-793, May, 1990.
[MID96] M1DDELHOEK, P. E A.; RAJAN, S. P. From VHDL to Efficient and First-Time- Right Designs: A Formal Approach, WWW page http://wwwspa.cs.utwente.nl/aid/aid.html
[MUR95] MURGAI, R.; BRAVTOR, R. K.; VICENTELLI, A.S. Logic Synthesis for Field-Programmable Gate Arrays, Kluwer Academie Pub, Hardover, 1995.
[NAV87] NAVARRO, J.J.; LLABERIA, J.M.; VALERO, M. Partitioning: An Essential Step in Mapping Algorithms into Systolic Array Processors, IEEE Computer, p. 77-89, July 1987.
[NAV93] NAVABI, Z. VHDL: Analysis and Modeling of Digital Systems, MeGraw-Hill, 1993.
[0LD95] OLDFIELD, JOHN V., Field-programmable gate arrays: reconfigurable logic for rapid prototyping and implementation of digital systems, John Wiley & Sons, Inc., 1995.
[PER91] PERRY, D. L. VHDL, McGraw-Hill, 1991.
[PET95] PETERSEN, R. J.; HUTCHINGS, B. An Assessment of the Suitability of FPGA- Based Systems for Use in Digital Signal Processing, Lectures Notes in Computer Science, no. 975, p. 293-302, July, 1995.
[R0593] ROSE, J.; GAMAL A.E.; VINCENTELLI, A. S. Architecture of Field- Programmable Gate Arrays, Proceedings of the IEEE, vol. 81, no. 7, p.1013-28, July, 1993.
[5ED92] SEDUICHIN, STANISLAV G. , Design and Analysis of Systolic Algoritluns for the Algebraic Path Problem, Computers and Artificial Intelligence, vol. 11, no. 3, pp. 269-292, 1992.
[5IE82] SIEWIOREK, DANIEL P., SWARZ ROBERT S., The Theory and Practice of Reliable System Design, Digital Press, 1982.
[5T095] STOCKWOOD, J.; LYSAGHT, P. A Simulation Tool for Dynamically Reconfigurable Field Programmable Gate Arrays , ASIC '95, Austin,Texas, Sept. 1995.
150
Bibliografia
[SYN94] SYNOPSYS, Inc., Making the Transition to High-Level Design, 1994.
[TUC92a] TUCK, B. FPGAs race for the gold in product development, Computer Design, p. 88-104, April, 1992.
[TUC92b] TUCK, B. FPGA vendors tunz their attention to tools, Computer Design, p. 75- 84, December, 1992.
[VIN93a] VINCENTELLI, A. S. Some Considerations on Field-Programmable Gate Arrays and their Impact on System Design, Lectures Notes in Computer Science, no. 705, p. 26-34, June, 1993.
[VIN93b] VINCENTELLI, A. S.; GAMAL A.E.; ROSE, J. Synthesis Methods for Field- Programmable Gate Arrays, Proceedings of the IEEE, vol. 81, no. 7, p. 1057-83, July, 1993.
[VCC97] VIRTUAL COMPUTER CORPORATION, H.O.T. User's Guide, Revision 1.0, September, 1997.
[VIR94] VIREDAZ, MARC, Design and Analysis of a Systolic Array for Neural Computation, Ph.D. Thesis no.1264, ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE, Switzerland, 1994
[WAN93] WANG, L;Li. H. Solving Simultatzeous Linear Equations using Recurrent Neural Networks, Information Sciences, 76, p. 89-100, 1993.
[X1L95] X1LINX, Inc., The Programmable Logic Data Book, April, 1995.
[X1L97] XILINX, Inc., XC6200 Field Programmable Gate Arrays, WWW page http://www.xilinx.com,Version 1.8, January, 1997.
151
APÊNDICE A
Programas desenvolvidos em linguagem VHDL
1: 2: MULTIPLICADOR 3: 4: 5: 6: library ieee; use ieee.std_logic_1164.all; 7: 8: entity multiplier is 9: port ( a, b : in std_ulogic_vector(16 downto O);
10: p : out std_ulogic_vector(32 downto O) ); 11: end entity multiplier; 12: 13: 14: 15: architecture behavioral of multiplier is 16: begin 17: 18: behavior : process (a, b) is 19: 20: variable negative_result : boolean; 21: variable opl : std_ulogic_vector(16 downto O); 22: variable op2 : std_ulogic_vector(16 downto O); 23: variable result : std_ulogic_vector(32 downto O); 24: variable carry_in, carry : std_ulogic; 25: 26: begin 27: opl := to_X01(a); 28: op2 := to_X01(b); 29: -- torna ambos operandos positivos, guardando o sinal do resultado 30: negative_result := (op1(16) = '1') xor (op2(16) = '1'); 31: if (op1(16) = 9.') then 32: carry := '1'; 33: for index in O to 16 loop 34: carry_in := carry; 35: carry := carry_in and not opl(index); 36: opl(index) := not opl(index) xor carry_in; 37: end loop; 38: end if; 39: if (op2(16) = '1') then 40: carry := '1'; 41: for index in O to 16 loop 42: carry_in := carry; 43: carry := carry_in and not op2(index); 44: op2(index) := not op2(index) xor carry_in; 45: end loop; 46: end if; 47: -- realiza a multiplicacao longa 48: result := (others => 'O'); 49: for count in O to 16 loop 50: carry := '0'; 51: if (op2(count) = '1') then 52: for index in O to 16 loop 53: carry_in := carry; 54: carry := (result(index+count) and opl(index)) 55: or (carry_in and (result(index+count) xor opl(index))); 56: result(index+count) := result(index+count) xor opl(index) xor carry_in; 57: end loop; 58: result(count+16) := carry; 59: end if; 60: end loop; 61: -- a variavel result contem agora o produto sem o sinal, com o ponto binario
62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122:
-- Atribui a saida com sinal ajustado. if negative_result then
carry := '1'; for index in O to 32 loop
carry_in := carry; carry := carry_in and not result(index); result(index) := not result(index) xor carry_in;
end loop; end if; p <= result;
end process behavior; end architecture behavioral;
SOMADOR
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;
entity acumulador_somador is port ( a, b : in std_u1ogic_vector(32 downto O);
s : out std_ulogic_vector(32 downto O); ovf : out std_ulogic );
end entity acumulador_somador;
architecture behavioral of acumulador_somador is begin
behavior : process (a, b) is
variable carry_in : std_ulogic; variable carry_out : std_ulogic; variable operacao : boolean; variable opl : std ulogic_vector(alrange); variable op2 : std ulogic_vector(birauge); variable soma : std ulogic_vector(alrange); variable somb : std_ulogic_vector(birange);
begin opl:=to_X01(a); op2:=to_X01(b); operacao := (opl (32) = 1 ) xor (op2 (32 ) = ' 1 ' ) ;
if operacao then carry_out := '1';
else carry_out := '0';
end if;
if (op1(32) = '1') then soma := not a;
else soma := a;
end if;
-- ou exclusivo para saber se os
se os sinais dos operandos fore sera realizada uma operacao de se os sinais dos operandos fore sara realizada uma operacao de
se o sinal do primeiro operandc sera realizada uma operacao de se o sinal do primeiro operandc nao sera realizada nenhuma opas
123: if (op2(32) = '1') then -- se o sinal do segundo operando foi 124: somb := not b; -- sara realizada uma operacao de in‘ 125: else -- se o sinal do segundo operando foz 126: somb := b; nao sera realizada nenhuma operacE 127: end if; 128: 129: for index in O to 32 loop 130: carry_in := carry_out; -- do bit anterior 131: s(index) <= soma(index) xor somb(index) xor carry_in; 132: carry_out := (soma(index) and somb(index)) or (carry_in and (soma(index) xor somb(i 133: end loop;
p134: ovf <= carry_out xor carry_in; -- ocorre overflow se carry_out 1= carry_in 135: end process behavior; 136: 137: end architecture behavioral; 138: 139:
140 st REGISTRADORES
141i 142: library ieee; use ieee.sta_logic_1164.a11; 143: 144: entity reg is 145: port ( clk : in sta_ulogic; 146: d : in std_ulogic_vector(32 downto O); 147: q: out std_ulogic_vector(32 downto O) ); 148: end entity reg; 149:
150. 151: architecture behavioral of reg is 152: begin 153: 154: behavior : process (clk) is 155: begin 156: if rising_edge(c1k) then 157: q <= d; 158: end if; 159: end process behavior; 160: 161: end architecture behavioral; 162:
163. 164: REGISTRADOR COM CLEAR 165: 166: library ieee; use ieee.std_logic_1164.all; 167: 168: entity acumulador_reg is 169: port ( clk : in std ulogic; 170: clr in std_ulogic; 171: d : in std_ulogic_vector(32 downto O); 172: q: out std_ulogic_vector(32 downto O) ); 173: end entity acumulador_reg; 174: 175: 176: architecture behavioral of acumulador_reg is 177: begin 178: 179: behavior : process (clk) is 180: 181: 182: begin 183: if rising_edge(c1k) then
184: if To_X01(c1r) = '1' then 185: q <= (others => ' 0 '): 186: else 187: q <= d; 188: end if; 189: end if; 190: end process behavior; 191: 192: end architecture behavioral; 193: 194: 195: REGISTRADOR COM ENABLE 196: 197: 198: library ieee; use ieee.std_logic_1164.all; 199: 200: entity reg is 201: port ( clk : in std_ulogic; 202: ENABLE : in std_ulogic; 203: d : in std_ulogic_vector(32 downto O); 204: q : out std_ulogic_vector(32 downto O) ); 205: end entity reg; 206: 207: 208: 209: architecture behavioral of reg is 210: begin 211: 212: behavior : process (clk,enable) is 213: begin 214: if rising_edge(olk) then 215: if(ENABLE='1') then 216: q <= d; 217: end if; 218: end if; 219: end process behavior; 220: 221: end architecture behavioral; 222: 223: 224: MEMORIA RAM DUAL PORT 225: 226: 227: 228: LogiBLOX DP_RAM Module ominha_ramdp_logiblox" 229: -- Created by LogiBLOX version M1.5.19 230: -- ou Mon Jun 21 08:09:43 1999 231: -- Attributes 232: -- MODTYPE = DP_RAM 233: -- BUS WIDTH = 17 234: -- DEPTH = 16 235: -- STYLE = MAX_SPEED 236: -- USE_RPM = FALSE 237: 238: This is a behaviorial model only and cannot be synthesized. 239: 240: LIBRARY IEEE; 241: USE IEEE.std_logic_1164.ALL; 242: LIBRARY logiblox; 243: USE logiblox.mvlutil.ALL; 244: USE logiblox.mvlarith.ALL;
Conclusões
9 Conclusões
Neste capítulo são descritos os pontos relevantes do trabalho e as observações surgidas
durante a implementação do projeto, assim como uma análise do potencial da arquitetura e
perspectivas para trabalhos futuros.
O trabalho foi desenvolvido tendo como forma de modelagem as equações diferenciais
desenvolvidas no trabalho de [1111,97]. Essas equações deram origem a outras formas de
modelagem visando a implementação nos dispositivos de tecnologia alvo conhecidos como
FPGAs, uma vez conhecidas as equações, essas foram implementadas numa seqüência de
operaçõès, explorando-se as técnicas de Pipeline.
O processo de desenvolvimento do projeto visou a construção de unidades funcionais que
quando unidas ao hardware do elemento de processamento formaram a arquitetura da máquina
paralela sistólica. Esse desenvolvimento foi realizado sobre o eixo do domínio de modelagem
funcional ilustrado pela técnica proposta por [GAJ83] que parte de um alto nível de abstração de
algoritmos e termina na forma de equações Booleanas.
Este ciclo de desenvolvimento, que empregou as metodologias avançadas para projeto de
hardware, demonstrou ser extremamente eficiente, uma vez que foi possível partir de uma
formulação matemática de alto nível proposta por [WAN93] e, a curto prazo, chegar a um
hardware especificado em forma textual (linguagem VHDL).
A linguagem de descrição de hardware VHDL atende muito mais eficientemente do que
os diagramas esquemáticos, a uma série de exigências do projeto de sistemas atuais de hardware,
tais como elevada complexidade e alta velocidade. O uso da linguagem VHDL garante uma
maior robustez de projeto, uma vez que a especificação do hardware é submetida a uma série de
experimentos de validação. Além disso, a linguagem VHDL apoiada pelas ferrramentas da
Xilinx e da Synopsys propiciaram uma infra-estrutura de pesquisa que contribui de maneira
significativa para o desenvolvimento de hardware, bem como para a geração de recursos
humanos numa área atualmente carente no Brasil e de grande valor estratégico, dada a demanda
crescente de informatização da sociedade. A assimilação de novas metodologias avançadas para
144
Conclusões
projeto de hardware são essenciais para a obtenção de sistemas digitais com alto nível de
qualidade e confiabilidade, tornando-se assim o país tecnologicamente competente.
9.1 Sugestões para Desenvolvimento Futuro
Para a continuidade deste trabalho, são sugeridos os seguintes trabalhos:
1. Projeto de uma placa de circuito impresso para interface com o barramento PCI.
Como já foi mencionado, para o arranjo sistólico operar corretamente é necessário uma
máquina nospedeira. A maneira mais eficiente de se conectar o arranjo sistólico à máquina
hospedeira é através de uma placa de circuito impresso PCI [BRI95]. Entretanto, o
desenvolvimento de uma interface para o barramento PCI é um trabalho complexo e lento (talvez
um novo mestrado), pois o LaSD ainda não dispõe de ferramentas apropriadas para esta função.
2. Implementação de um software de comunicação entre o arranjo sistólico e a máquina
hospedeira.
A construção deste software é simples se a placa de circuito impresso para interface com
o barramento PCI estiver pronta. O programa lidará apenas com as operações de entrada e saída
no barramento (leitura e escrita dos registradores).
3. Projeto de um teste de parada de convergência.
O teste de parada de convergência é uma implementação crítica no EP, uma vez que dele
dependerá todo o desempenho do sistema. Se o teste for realizado a cada iteração (como já
sugerido anteriormente), o processamento fica sujeito a um gargalo. O ideal é fazer o teste numa
taxa variável de amostragem de iterações de forma que para cada solução de sistema linear seja
possível a programação deste parâmentro por hardware, levando-se em consideração as
condições do sistema linear em questão. O projeto deste hardware também é complexo, pois
exige grandes mudanças na arquitetura dos EPS.
145
Conclusões
4. Utilização de outras formas de representação dos dados, tais como números em ponto
flutuante.
Uma das limitações do arranjo sistólico projetado é o fato de não ser possível operar com
números em ponto flutuante. A inserção de um hardware aritmético para tal função exige um
novo projeto de mestrado, dadas as dificuldades de implementação do padrão IEEE 754.
146
Bibliografia
10 Referências Bibliográficas
[ARA97] ARAGÃO, ANTONIO C. de O. S., Aplicação da Tecnologia FPGA em Arquiteturas Sistólicas, Tese de Mestrado, Instituto de Ciências Matemáticas e de Computação, Universidade de São Paulo, 1998.
[ASH96] ASHENDEN, PETER J., The Designer's Guide to VHDL, Emorgan Kaufmann Publishers, Inc., 1996.
[ACT95] ACTEL, Corp., FPGA Data Book and Design Guide, 1995.
[ALM94] ALMASI, G. S.; GOTTLIEB, A. Hig,hly Parallel Computing, 2nd Edition, Redwood City, California, 1994.
[ALT96] ALTERA, Corp., Data Book, June, 1996.
[ALT96] ALTERA Inc., Altera Announces the 3.3W FLEX MICA Family, The Altera Advantage News & Views, November, 1996.
[BAL95] BALDWIN, R.; CHUNG M. J. A Formal Approach to Managing Design Processes, IEEE Computer, p. 54-63, February, 1995.
[BAY91] BAYOUMI, M. A. Parallel Algorithms and Architectures for DSP Aplications, Kluwer Academic Publishers, 1991.
[BLI94] BLICICLE, T.; KÕNIG, J.; THIELE, L. A Prototyping Array for Parallel Architectures, More FPGAs, Edited by Will Moore and Wayne Luk, Abingdon EE&CS Books, Oxford, England, 1994.
[BRI95] BRITTON B.; COOK E. Design an FPGA-Based PCI Bus Interface, Electronic Design and Computer Systems, March 6, 1995.
[BR092] BROWN, S. Routing Algoritiuns and Architectures for Field Programmable Gate Arrays, Ph.D. Thesis, Dept. of Electrical Engineering, University of Toronto, February, 1992.
[BRO96a] BROWN, S.; ROSE, J. Architecture of FPGAs and CPLDs: A Tutorial, IEEE Design and Test of Computers, vol. 13, No. 2, pp. 42-57, June 1996.
[BRO9614 BROWN, S. D. Recent Advances in Field-Programmable Gate Arrays, WWW page http://www.eecg.toronto.edu/—brown/papers.html , May, 1996.
[BUR85] BURDEN, R. L.; FAIRES, J. D. Numerical Analysis, Third Edition, Prindle, Weber & Schmidt, Boston, 1985.
[CHA94] CHAN, P. K.; MOURAD, S. Digital Design using Field Programmable Gate Arrays , Prentice Hall, 1994
147
Tese.vhd (5/6)
245: USE logiblox.logiblox.ALL; 246: 247: ENTITY minha_ramdp_logiblox IS 248: PORT( 249: A: IN std logic_vector(3 DOWNTO 0); 250: SPO: OUT std_logic_vector(16 DOWNTO 0); 251: DI: IN std_logic_vector(16 DOWNTO 0); 252: WR_EN: IN std_logic; 253: WR_CLK: IN std_logic; 254: DPO: OUT std_logic_vector(16 DOWNTO 0); 255: DPRA: IN std_logic_vector(3 DOWNTO 0)); 256: END minha_ramdp_logiblox; 257: 258: ARCHITECTURE sim OF minha_ramdp_logiblox IS 259: SIGNAL START_PULSE: std_logic := 260: TYPE mem_data IS ARRAY (15 DOWNTO 0) OF std_logic_vector(16 DOWNTO 0); 261: HEGIN 262: PROCESS 163: VARIAHDE VD: mem_data; 64: VARIARDE first_time: BOOLEAN := TRUE; 65: HEGIN 66: IF (first_time) THEN
267: VD(0) := ( 101, 1 0 1 ,1 0 1 ,'01 , 1 0', 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0', 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 268: VD(1) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,'0', 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 269: VD(2) := ( 1 0 1 ,1 0 1 ,1 0 1 ,'01 , 1 0 1 , 1 0 1 ,'01 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0,1 0 1 ,101 ); 270: VD(3) := ( 1 0 1 , 1 0 1 , 1 0 1 ,'0',1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0,1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0'); 271: VD(4) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 ); 272: VD(5) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 1 1 0 1 ,1 0 1 1 1 0 1 ,1 0 1 , 1 0 1 1 1 0 1 , 1 0 1 ,1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 ); 273: VD(6) := ( 1 0 1 ,1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 ,'0',1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,01 , 1 0); 274: VD(7) := ( 1 0 1 , 4 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,'01 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 275: VD(8) := ( 1 0 1 ,1 0 1 ,1 0 1 ,1 0 1 ,1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 276: VD(9) := ( 1 0 1 ,1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 277: VD(10) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 278: VD(11) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 1 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,'01 , 1 0', 1 0'); 279: VD(12) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 280: VD(13) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 281: VD(14) := ( 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ,1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 , 1 0 1 ); 282: VD(15) := (101, 1 01,101,101,101,101,101,101,101,101,101,101 , 101 , 101 , 101 , 101,101) ; 283: first_time := FALSE; 284: END IF; 285: IF (WR_OLICEVENT AND stdbit2mml(WR_CLK)= 111 AND ntdbit2mv1(WR_CLE'LLAST_VALUE)= 1 0 1 ) 286: AND (WR_EN='1') AND (NOT mvlvec_not01(A)) WIEN 287: VD(mvlvec2int(A)) := stdvec2mv1(DI); 288: END IF; 289: IF (mvlvec_not01(A) OR 290: (stdbit2mv1(WR_CLK) = 'X') 291: OR (WR_CLE'EVENT AND ntdbit2mvI(WR_CLK)=111 AND stdbit2mv1(WR_CLICLAST_VALUE)= 1 0 1 292: AND stdbit2mv1(WR_EN) = 'X' ) 293: ) THEN 294: SPO <= ('X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','(','X'); 295: EDSE 296: SPO <= VD(mvlvec2int(A)); 297: END IF; 298: IF (mvlvec_not01(DPRA)) THEN 299: DPO <= ('X','X','X','X','X','X','X',,'X','X','X','X',,'X','X','X','X'); 300: EDSE 301: DPO <= VD(mvlvec2int(DPRA)); 302: END IF; 303: WAIT ON A, DI, WR_EN, WR_CLK, DPRA, START_PULSE; 304: END PROCESS; ing. END sim;