FPGA, VHDL e Java

FPGA

A tecnologia VLSI abriu as portas para a implementação de circuitos digitais poderosos e de baixo custo. Porém o processo de manufatura desses circuitos perdura meses. Isso resulta em um alto preço a não ser que haja produção em volumes muitos grandes. Na indústria eletrônica é vital que novos produtos alcancem o mercado o mais rápido possível, e para isso reduzir o tempo de desenvolvimento e produção é essencial. Field Programmable Gate Array (FPGA) surgiu como solução para esse problema, porque provê implementação imediata e com baixo custo de prototipação.

Evolução dos Dispositivos Programáveis

Dispositivos programáveis são circuitos de propósito geral que podem ser configurados para uma grande variedade de aplicações. Um dos primeiros tipos de dispositivo programável foram as Programmable Read-Only Memory (PROM). As PROMS consistem de uma matriz de células que pode ser programada somente uma vez. Esse dispositivo é usado para implementar tabelas verdade. Outro dispositivo programável, específico para implementação de circuitos lógicos, é o Programmable Logic Device (PLD). Esse dispositivo é baseado em uma matriz de portas E conectada a uma matriz de portas OU. PLDs possibilitaram um grande avanço na implementação de circuitos lógicos, porém, devido a sua estrutura simples (limitação para lógica seqüencial), só se podia desenvolver pequenos circuitos lógicos. O Mask Programmable Gate Arrays (MPGA) é um outro tipo de dispositivo programável que pode interconectar elementos de acordo com especificações do usuário. A maior vantagem dos MPGAs sobre os PLDs é que eles possuem uma estrutura mais genérica permitindo a implementação de circuitos maiores.

Assim como um MPGA, um FPGA (Field Programmable Gate Array) é um circuito programável composto por um conjunto de células lógicas ou blocos lógicos alocados em forma de uma matriz [6] [7]. Em geral, a funcionalidade destes blocos assim como o seu roteamento, são configuráveis por software.  A organização interna de um FPGA com arquitetura de roteamento baseada em canais horizontais e verticais (exemplo: Xilinx família XC4000).

fpga-1

Blocos Lógicos

As funções lógicas são implementadas no interior dos blocos lógicos. A arquitetura de um bloco lógico pode ser desenvolvida de várias formas e ter vários recursos. Cada fabricante e família de dispositivos pode ter uma arquitetura diferente. Porém, é importante que essa escolha vise a maior versatilidade possível. A Figura 8 apresenta a arquitetura interna de um bloco lógico de um FPGA XC 3000 fabricado pela Xilinx. Em algumas arquiteturas os Blocos Lógicos possuem recursos seqüenciais tais como flipflop ou registradores. No CLB, por exemplo, há dois flip-flops. fpga-2

Roteamento

Roteamento é responsável pela interconexão entre os blocos lógicos. A conexões físicas entre os fios são feitas ora com transistores de passagem controlados por bits de memória (PIP) ora com chaves de interconexão (Switch Matrix). Os recursos de roteamento da série XC4000 da Xilinx possuem: Conexões Globais: formam uma rede de interconexão em linhas e colunas de cinco fios, que se ligam através de chaves de interconexão. Esta rede circunda os blocos lógicos (CLBs) e os blocos de E/S (IOBs); Matrizes de Conexão (Switch Matrix): são chaves de interconexão que permitem o roteamento entre os canais de roteamento (Figura 9). Estas conexões são programáveis na fase de roteamento automático, executada pelo software de projeto do fabricante do FPGA.

Conexões Diretas: são conexões entre CLB´s vizinhos e permitem conectar blocos com menor atraso, pois não utilizam os recursos globais de roteamento. Linhas Longas: são conexões que atravessam todo o circuito sem passar pelas switch matrix e são utilizadas para conectar sinais longos e com restrições de skew entre múltiplos destinos

fpga-3

Células de I/O

As I/O Cells ou I/OBs (I/O Blocks)3 são blocos que se localizam na periferia do FPGA, como mostra a Figura 7, e têm a função de fazer a interface com o mundo externo. Os blocos de E/S podem ter capacidade para usar buffers tristate e flip-flops para os sinais da saída.

Aplicações de FPGAs

• Implementação de Lógica Randômica – Lógica randômica era usualmente desenvolvida em PLA4 , porém FPGAs atuais podem armazenar o equivalente a vários PLAs e com melhor desempenho elétrico; • Integração de Componentes – Pode-se diminuir a área de uma placa de circuito impresso integrando para dentro de um FPGA vários componentes simples da placa (lógica de cola); • Prototipação – FPGAs foram idealmente desenvolvidos visando aplicações de prototipação. O baixo custo e curto tempo de implementação de aplicações traz grandes vantagens sobre a técnica tradicional. Assim, prototipação pode ser feita rapidamente e sem custos adicionais em caso de mudanças no projeto; • Reconfiguração de Hardware – Devido a sua grande flexibilidade de interconexão, FPGAs são aplicados em sistemas onde o hardware pode ser reconfigurado durante funcionamento. Existe a possibilidade de se fazer atualização de hardware remotamente, sem que seja necessário trocar de placa.

VHDL

VHDL é uma linguagem textual para descrever sistemas digitais. Pode-se, através de um descrição VHDL, descrever o comportamento de um circuito ou componente digital [3] [5]. Uma HDL é uma linguagem que descreve a funcionalidade de um dado circuito. Essa descrição poderá ser verificada em um simulador. A diferença é que esse sistema descrito em HDL poderá ser implementado em hardware em um dispositivo programável FPGA ou outro tipo de ASIC. Para manter o crescimento do desenvolvimento de dispositivos cada vez maiores e mais complexos, os métodos de desenvolvimento e ferramentas para projetos de sistemas digitais também deveriam acompanhar esse crescimento. Para resolver esse problema foi reunido um grupo de especialistas em sistema digitais, incluindo empresas, universidades e órgãos militares. O foco principal era aprimorar o processo de desenvolvimento, aumentar a produtividade do desenvolvedor e diminuir o ciclo de desenvolvimento de sistemas digitais. Os dois maiores avanços resultantes desse trabalho foi a criação das HDLs e de seus sistemas de síntese lógica. Existem dezenas de outras linguagens de descrição de hardware (Verilog, Abel, Handel-C, AHDL, etc.), porém VHDL foi adotada para esse projeto por ser uma linguagem padrão. Com isso, ela é a mais largamente usada e com mais documentação disponível. Além disso, essa linguagem é a que os componentes do grupo mais dominam. A complexidade de sistemas digitais modernos conduz cada vez mais ao uso de altos níveis de abstração durante o projeto. Linguagens de descrição de hardware, como VHDL, têm sido crescentemente empregadas para descrever o comportamento desses sistemas digitais [3]. Essa descrição pode ser puramente comportamental, usada somente para fins de documentação e descrição funcional simulável, ou pode ser sintetizável. Para se chegar a uma descrição sintetizável são necessárias várias etapas de refinamento da descrição. Esses refinamentos visam alterações na descrição de forma a alcançarem o subconjunto de instruções HDL específicas que a ferramenta de síntese suporta.

Entre os aspectos que favorecem o desenvolvimento de hardware usando HDLs podemos citar: • time-to-market – Nos tempos atuais a evolução de tecnologias está acontecendo cada vez mais rápido. Se há dez anos atrás um produto demorava 6 meses para ser desenvolvido, mas permanecia no mercado por 2 anos, hoje um produto não permanece mais de 18 meses, logo o seu desenvolvimento deve levar bem menos tempo. Isso tem forçado o estudo de novas técnicas para diminuir o ciclo de desenvolvimento de sistemas digitais. O processo de síntese lógica automatizada ataca esse problema mecanizando etapas mais abstratas de desenvolvimento. • menor ciclo de desenvolvimento – O ciclo de desenvolvimento pode ser reduzido com o uso de VHDL, devido à eliminação de geração, manutenção de esquemáticos e pela diminuição de erros de desenvolvimento pelo uso de simulação nos ciclos iniciais do projeto; • menor custo de desenvolvimento – Diretamente ligado ao tópico anterior; • aumento de qualidade no desenvolvimento – Essa vantagem é alcançada pelo fato que VHDL facilita o rápido experimento com diferentes arquiteturas e técnicas de implementação, e pela capacidade das ferramentas de síntese otimizarem um projeto tanto para área mínima quanto para velocidade máxima; • evolução da tecnologia – Novos dispositivos surgem com mais capacidade e mais recursos internos; • gerenciamento do projeto – Projetos em VHDL são mais fáceis de serem gerenciados que os projetos baseados em esquemático. Eles facilitam a estruturação de componentes (top-down), facilitam a documentação e são necessárias menos pessoas para desenvolver e verificar, sendo também mais simples modificar o projeto; • VHDL é independente de tecnologia e fabricante, porém sabe-se que na prática não é independente de ferramenta de síntese e de simulação.

As desvantagens de se usar VHDL apontam, basicamente, para o aprendizado de uma metodologia nova e complexa. Citamos desvantagens tais como: • Mudança de cultura; • Aprendizado e treinamento; • Escolha de uma ferramenta de desenvolvimento; • Circuito é menos otimizado que esquemático; • Ferramentas de síntese ineficientes.

Descrição Estrutural

Um sistema digital pode ser descrito como um módulo com entradas e saídas, onde o valor das saídas é uma função dos valores de entrada. A Figura 11 (a) ilustra esse conceito, onde o módulo F possui duas entradas A e B e uma saída Y. Em VHDL o módulo F é chamado de entidade e as entradas e saídas são chamadas de portas. Um modo de descrever a função de um módulo é descrever a função de seus sub-módulos e suas conexões. Cada sub-módulo é uma instância de uma entidade, e as conexões que os conectam são chamados de sinais. A Figura 11 (b) mostra como a entidade F pode ser formada por instâncias das entidades G, H e I. Este tipo de descrição é chamada de descrição estrutural.

Descrição Comportamental

Em muitos casos não é necessário descrever a estrutura interna de um componente, uma descrição que tenha o mesmo resultado funcional é o suficiente. Esse tipo de descrição é chamada de descrição funcional ou comportamental. Para ilustrar essa idéia, suponha que a função da entidade F seja um ou exclusivo. A descrição comportamental de F poderia ser uma função como Y = A . B + A . B .

Exemplo de Descrição VHDL

Nesta Seção, descreveremos um simples exemplo de um contador de dois bits. Logo abaixo está a descrição da entidade. A entidade especifica a interface externa do componente, incluindo os pinos de entrada e saída. Esse trecho de programa especifica uma entidade com uma entrada e duas saídas do tipo bit que assume valores 0 ou 1. A função que um componente executa é especificada na arquitetura do componente. O trecho de programa abaixo especifica uma arquitetura comportamental para a entidade cont2. Dentro da arquitetura é definido um processo. Um processo é um bloco que é executado em paralelo com outros processos da mesma arquitetura. Os comandos dentro de um processo são executados seqüencialmente. O processo count_up é executado uma vez a cada mudança de valor no sinal de clock. O sinal clock é o ativador do processo count_up. A variável count_value, que é inicializada com zero, contém o valor da contagem. Uma versão estrutural que executa a mesma função que a especificada na arquitetura comportamental pode ser vista logo abaixo. Cont2 é composto por dois flip-flops e por um inversor. Nesta arquitetura dois componentes e três sinais internos são declarados. Cada componente é então instanciado e as portas desses componentes são interligados. Por exemplo, bit_0 é uma instancia do

Especificação de VHDL

Como esse trabalho não tem a pretensão de ser um manual de VHDL, e sim situar o leitor no assunto, não descreveremos detalhes da estrutura da linguagem VHDL. Como em outras linguagens, existem regras que devem ser seguidas pelo programador para se gerar um programa válido.

Java

Java é uma linguagem de programação utilizada principalmente para o desenvolvimento de aplicações que rodem em ambientes distribuídos, como por exemplo a Internet, apesar de possibilitar aos programadores o desenvolvimento de aplicações que rodem em computadores isolados.

Máquina Virtual Java

Máquina hipotética (software) responsável em interpretar e executar o bytecode gerado pelo compilador da linguagem Java. A Máquina Virtual Java [17] [25] é dependente da plataforma, devido à necessidade de interpretar o bytecode e gerar instruções para a máquina real executar.

Java Communications API (CommAPI)

Pacote de comunicação em Java desenvolvido pela Sun MicroSystems que permite o desenvolvimento de aplicações com suporte a porta de comunicação serial RS-232C e portas paralelas padrão IEEE 1284.

Java Server Pages – JSP

Tecnologia desenvolvida com o objetivo de facilitar o desenvolvimento de aplicações Web dinâmicas, escritas em Java. Java Server Pages (link [36]) consiste basicamente na construção de páginas Web utilizando HTML para a definição da interface, e juntamente com o HTML existe a inclusão de linhas de código Java, responsáveis em definir a parte dinâmica da aplicação. O código Java é identificado através de indicadores especiais de bloco.

Compilador Just-in-time – JIT

A máquina virtual Java vem acompanhada opcionalmente de um compilador especial denominado just-in-time compiler [17] [25] responsável pela compilação dinâmica dos bytecodes em códigos executáveis. Utilizado como alternativa para trechos de programas onde o interpretador Java deve executar muitas vezes, pois sabe-se que a execução de um código executável binário é muito mais rápida do que a sua execução através da interpretação. Exemplo: bloco de código dentro de um laço.




2 Comments

  1. débora Responder

Deixar Comentário