top of page
linguagem de hardware

CAPÍTULO 1

Conceitos da linguagem de hardware

 

Como vimos anteriormente, podemos configurar os PLDs conforme a necessidade de projeto e os seus respectivos objetivos, mas, como elaboramos essas instruções? Utilizamos a linguagem de hardware para descrever o funcionamento de um circuito, a sua concepção e organização, ou seja, como cada parte ou sistema atua e quando atua, ou seja, são expressões baseadas em textos com estrutura espacial, temporal e comportamental. Uma característica dessa linguagem  é  expressar  a  conectividade do circuito entre uma hierarquia de blocos que estão previamente organizados e classificados.

 

 

PLD e FPGA

 

Como vimos anteriormente, existem vários tipos de PLDs e essa variedade demandou a criação de várias formas de linguagem de hardware para atender cada um desses tipos. Alguns PLDs possuem uma tecnologia chamada ISP (In-System Programmable) que permite que o PLD seja programado mesmo que ele já esteja inserido em um circuito. A linguagem utilizada é denominada JAM e é implementada por meio de uma interface chamada JTAG. Essa linguagem se assemelha com a BASIC. Basicamente a diferença entre um PLD e um FPGA é o método de interligação das células.

Nos PLDs, as estruturas são contínuas, enquanto, que no FPGA as estruturas são de conexões segmentadas.

 

 

vHDL

 

Embora o VHDL signifique Linguagem de Descrição de Hardware com Ênfase em Circuitos Integrados de Altíssima Velocidade (Very High Speed Integrated Circuit Hardware Description Languague). O VHDL não é propriamente uma linguagem de programação, mas é análogo à ela. Sendo executado em um simulador e não tem, portanto, um arquivo executável (do tipo *.exe).

comparativo_-_linguagem_de_programação_g

vantagens da utilização do vHDL

 

» Projeto independente da tecnologia e fabricante.

 

  • ›   O desenvolvimento não é atrelado à tecnologia ou ao fabricante.

 

»  Ferramentas   de    CAD    com    compatibilidades    entre   as    diversas disponibilidades.

  • ›   Facilidade na gestão dos projetos.

  • › Projetos em VHDL requerem poucos desenvolvedores, o que facilitam a estruturação e documentação e são mais simples de serem modificados ou inserir novas implementações.

» Reduz tempo de projeto e custo.

 

»  Ao realizar as simulações no início do projeto, o VHDL permite que não se necessite criar e manter esquemáticos e assim conter erros no desenvolvimento do projeto.

» Reduz “time-to-market”.

 

» Um produto que contém VHDL é lançado ao mercado para vendas em tempo menor, pois, o seu desenvolvimento é muito mais rápido.

ModelSim
Ambientes de desenvolvimento e simulações (modelSim)

 

Um ambiente muito utilizado para desenvolvimento e simulações de projetos em VHDL é o ModelSim© que foi desenvolvido pela Mentor Graphics. O modelSim© é oferecido em duas versões: ModelSim© PE e Questa Sim.

A versão PE é oferecida para entusiastas e estudantes, enquanto que

a Questa Sim é usada para aplicações em grande escala industriais.

O ModelSim© também pode ser utilizado em conjunto com o Matlab/Simulink©.

Neste caso, o Matlab© fornecerá uma ferramenta numérica de simulação, enquanto que

o ModelSim© apresenta ferramentas para verificar a implementação no hardware.

O Modelsim© suporta a utilização de linguagens VHDL e Verilog embora a versão gratuita não permita o uso simultâneo dessas duas linguagens. E, ainda, a versão gratuita tem-se uma limitação na performance de desenvolvimento, ou seja, na quantidade de números de linhas de comandos e instruções no ato do desenvolvimento, e dentre outras limitações.

Uma grande utilidade do VHDL é poder simular a operação de um circuito, a fim de  se identificar o seu correto funcionamento, antes que ele seja levado para a fabricação do protótipo. Essa simulação permite analisar o comportamento de todo o circuito e, inclusive, permite que sejam feitos vários experimentos sem a necessidade de montar e desmontar o circuito inúmeras vezes, no intuito de garantir a sua validade.

O ModelSim© cria um arquivo de teste chamado Testbench (bancada de teste) e o utilizamos para criar a simulações de

teste do experimento do projeto, conforme ilustrado na figura a seguir.

Podemos verificar que as entradas do circuito são criadas pelo clock de 50 MHz e mais um sinal de Reset.

A saída é o led_status (com 10 ns para nível lógico alto e, 10 ns para o nível lógico baixo,

ou seja, período de cada ciclo de 20 ns, o que equivale a frequência de 50 MHz).

 

Conforme o cálculo a seguir.

 

T = 1 / f

 

Onde T é o período de ciclo dado em segundos, e f é a frequência em Hertz.

Então, tem- se para a frequência de 50 MHz:

 

T =      1 / ( 50 x10^6 )

 

T = 20 x 10^-9 = 20 ns

 

A fim de  facilitar a  visualização  da simulação do código  “pisca_led.vhd”,  alteramos a frequência de pisca para um período de 10 ms. Isso foi feito alterando o valor da comparação do sinal “led_delay” para 500000:

Exemplo_de_testbench_de_um_código_vHdl_p

Feito isso, podemos iniciar no ModelSim©.

ModelSim, tela inicial.jpg

Iniciemos em “File”, depois “New” e, por fim, em “Project”. Na janela que aparecerá,

colocamos os dados do projeto.

(1)

Após ter preenchido tudo conforme indicado e corretamente, clique em “Ok”, e crie um novo projeto.

 

(2)

 

Na próxima janela é onde se adiciona itens ao projeto. Se você já possuir arquivos  com extensão “*.vhd” do Testbench e do módulo “pisca_led”, pode-se clicar em “Add Existing File” (Adicionar arquivo existente) e selecione os arquivos ao projeto. Em caso contrário, o ModelSim© permite utilizar um editor para isso.

Por fim, clique em “Create New File” (Criar novo arquivo), copie todo o conteúdo para o novo arquivo. A tela ficará assim:

(3)

Por fim, compilaremos todos os arquivos. Vá em “Compile”, depois “Compile All”. Se

não ocorrer nenhum erro, o resultado será:

 

# Compile of pisca_led.vhd was successful.

 

# Compile of testbench_pisca_led.vhd was successful. # 2 compiles, 0 failed with no errors.

Pronto, podemos iniciar a simulação! Vá em “Simulate” e, depois, em “Start Simulation”. E veremos:

(4)

 

Se a tela não surgir, vá em “View” e depois em “Wave”.

Escolha o Testbench e vá em “Ok”. Veremos a tela:

(5)

Podemos reparar alguns dados nessa imagem como:

 

» Objects: são os sinais disponíveis dentro da instância marcada.

 

» Instâncias: são as instâncias disponíveis.

 

» Tempo de simulação: detalha o tempo de cada passo da simulação.

 

» Wave: é o analisador de ondas, que podemos checar os sinais em vários instantes de tempo.

Recomenda-se que antes de propriamente iniciar a simulação, sejam escolhidos os sinais que serão analisados.

Inicialmente escolha a instância “testbench_pisca_led” em “Instance Viewer”. Feito isso, os sinais “clk”, “rs” e “led_status” ficarão disponíveis em “Objects”. Selecione e os arraste para a janela “Wave”. Após isso, selecione a instância “pisca_led1” e arraste o sinal “led_delay” também para a janela “Wave”.

Agora na janela “Wave”, precisamos configurar o sinal de “reset” que atualmente exibe o estado “unknown” (desconhecido). Clique com o botão direito do mouse sobre o sinal “rs”. No próximo menu, clique em “Force”, e configure o “value” para “0” e vá em “Ok”.

(7)

Agora, alteramos o tempo do passo da simulação para 10 ms. Feito isso, clique em “Play”. Dependendo da configuração do computador e das limitações da versão, o processo pode levar um tempo.

Agora altere o sinal de “rs” para 1 e rode 10 ms novamente. Agora, novamente 10 ms. Feito esse processo, teremos simulado 30 ms sendo que nos primeiros 20 ms foram utilizados para resetar o módulo “pisca_led” e os seguintes 10ms o led alterou seu status para 1. Com o processo concluído, observaremos o resultado na janela “Wave”. Selecione o sinal “led_status” e clique no botão para procurar o nível de borá e, assim, veremos o evento de alteração do status do led.

(8)

Por fim, podemos identificar o correto funcionamento de nosso projeto hipotético. A cada pulso de “clock”, o contador “led_delay” foi incrementado até atingir o valor de 500000 (equivalente a 10ms) o valor do “led_status” alterou-se.

Desta forma, podemos imaginar que o uso dessa ferramenta é de grande utilidade tanto em questão de tempo, retrabalho e resultado.

 

A versão para estudantes e entusiastas pode ser baixada em: <https://www. mentor.com/company/higher_ed/modelsim-student-edition>, para que você possa iniciar os seus projetos, igual ao exemplo citado anteriormente.

Enquanto, que a versão Questa Sim pode ser adquirida em <https://www. buyaltera.com/PartDetail?partId=2021454>.

 

Para iniciar nos ambiente de desenvolvimento do ModelSim©, acesse: <https:// www.youtube.com/watch?v=Z8whdGa7RtY> e <https://www.youtube.com/ watch?v=6M79Mb7OnM0>.

Para também conhecer a ferramenta Matlab© com o ModelSim©, acesse:

<https://www.youtube.com/watch?v=qOJx83aH_2g> e <https://www.youtube. com/watch?v=XDRkA3eQ-RQ>.

Modelsim, telas.jpg
componentes, vHDL

Componentes de formação do vHDL

 

Um projeto VHDL é composto por 4 blocos, conforme a figura a seguir indica.

Modelsim, simulação.jpg
pacotes e entidades
Pacotes e entidades

 

Nos pacotes, que também são chamados de bibliotecas, como o próprio nome diz,

são pacotes de elementos e informações. Os mais usados são:

» IEEE.std_logic_arith: Pacote de funções aritméticas.

 

» IEEE.std_logic_signed: Pacote de funções aritméticas com sinal.

 

» IEEE.std_logic_unsigned: Pacote de funções aritméticas sem sinal.

 

» IEEE.std_logic_1164: Pacote padrão de funções lógicas básicas.

 

Para utilizar esses pacotes, usa-se os seguintes comandos:

 

LIBRARY <NOME_DO_PACOTE> e/ou USE <NOME_DO_PACOTE>.all.

 

Como regra geral, use o “.all” ao usar um pacote para que todos os elementos desse pacote sejam acrescentados.

Com relação à Entity, ou Entidade, ela pode ser dividida em duas partes:

tipos de portas (pinos) e

tipos de sinais, o que trataremos a seguir.

A entidade é basicamente uma representação forma de uma porta lógica e de até um sistema lógico completo.

Ao se declarar uma entidade, se declara um conjunto de entradas e saídas.

entidades.jpg

Nessas figuras, identificamos que os pinos

de entradas são I0, I1 e I2 enquanto que os

de saída são S0 e S1.

 

Por regra, a declaração de uma entidade deve conter três cláusulas como ENTITY, PORT e END.

» ENTITY: essa cláusula indica que se tratará de uma declaração de uma entidade.

» PORT: essa cláusula lista as entradas e saídas da entidade.

 

» END: essa cláusula indica o término da declaração de uma entidade.

portas e sinais
Portas e tipos de sinais

 

Como vimos, existem as portas de entradas e saídas mas existem outras, como veremos todas:

 

»  IN: Porta de entrada.

 

»  OUT: Porta de saída.

 

» INOUT: Porta de entrada e saída.

 

» BUFFER: Porta de saída que pode ser realimentada internamente.

 

Os tipos de sinais mais comuns são:

 

» Bit: assume valor 0 ou 1.

   X:in bit.

 

» Bit_vector: vetor de bits.

   X:in bit_vector(7 downto 0) ou

   X:in bit_ vector(0 to 7).

» Std_logic: é parte do pacote std_logic_1164

   e provê modelamento mais realístico dos sinais dentro de um sistema digital.

   X:in std_logic.

» Std_logic_vector: é um conjunto de variáveis e sinais do std_logic.

   X:in std_logic_vector(7 downto 0) ou

   X:in std_logic_vector(0 to 7).

 

» Boolean: assume valores verdadeiro (True) ou falso (False).

 

» Real: assume valores reais.

 

É comum que as portas de entrada sejam declaradas antes das portas de saídas e que cada interface seja seguida de “ponto e vírgula” (;). E, ao final da definição de uma porta, também é necessário o ponto e vírgula.

arquitetura
Arquiteturas

Trata-se do funcionamento do circuito, de como se dá o comportamento da entidade, do funcionamento interno e sua relação com entradas, saídas e sinais. A arquitetura é formada por declarações e comandos que são:

 

» Declarações: sinais, constantes, variáveis, componentes, subprogramas.

» Comandos: blocos, atribuições à sinais, chamadas à subprogramas, instanciação de componentes e processos.

A arquitetura abrange desde apenas um processo quanto

a processos concorrentes que ocorrem de forma simultânea e mais complexa.

arquitetura simples. 1 ou 2 processos.jp

Existem três formas de se descrever uma arquitetura:

 

» Descrição estrutural: nessa descrição, todos os componentes e as interconexões (onde ocorrem as atribuições de sinais) são feitos por meio do mapeamento de entradas e saídas de componentes. É como se fosse uma lista de ligações entre componentes pré-definidos.

» Component: é a descrição de um componente.

 

» Port Map: é o mapeamento do componente em um sistema maior.

 

» Comentários: são feitos colocando “--” na frente dos mesmos. Desta forma a linha não é interpretada como uma instrução.

modelo estrutural.jpg

» Descrição por Fluxo de Dados: Também conhecido como “Data Flow”, nesse tipo os valores de saída são atribuídos diretamente utilizando-se expressões lógicas. Aqui, as expressões são concorrentes, ou seja, simultâneas.

circuito somador.jpg

tipo  

WORKING-STORAGE SECTION

» Descrição comportamental: nesta descrição, utiliza-se um comando fundamental chamado “PROCESS” que opcionalmente é precedido de um “Label”, ou rótulo” e depois de uma lista de sensibilidade que por sua vez indica quais são as variáveis e sinais.

declaração de PROCESS.jpg

© 2019 - 2024 by FMK. Updated Oct 2024.  Proudly created with Wix.com

bottom of page