VHDL Básico: Parte 1 - Entidade

entidade
Este post faz parte da série VHDL Básico. Leia também os outros posts da série:

Vou fazer uma série bem didática sobre VHDL para transmitir um pouco de conhecimento àqueles que pretendem ingressar no mundo de lógica digital.

 

VHDL ou (Very High Speed Integrated Circuits) Hardware Description Language é uma linguagem utilizada para descrever hardware. Ela foi concebida pelo departamento de defesa dos Estados Unidos (DARPA) na década de 80 para a documentação dos circuitos vendidos às forças áreas americanas. Desde então muita água correu, em 1987 ela foi padronizada pela IEEE como uma linguagem de descrição de hardware, o fato de ser padronizada e de domínio público ampliou e muito a sua utilização. A sua sintaxe é altamente tipada e lembra ADA e Pascal mas as semelhanças param por ai.

 

A descrição de um circuito difere completamente de um software e muitas pessoas quando saem de uma linguagem de software e vem para linguagens de descrição de hardware encontram muitas dificuldades. Sempre mantenha em mente que você está descrevendo hardware e não escrevendo um algoritmo que um processador vai executar sequencialmente. VHDL é utilizando tanto para concepção de circuitos ASIC (por exemplo um i7 da Intel), quanto para desenvolvimento em FPGA. O resultado de uma "compilação" de um vhdl não é um executável mas sim uma netlist com todos os fios, conexões, componentes combinacionais e sequências de um hardware.

 

ENTITY

 

Entity é uma keyword do VHDL que representa uma entidade, uma entidade em VHDL representa a interface do seu circuito com o mundo externo, a sintaxe é bastante simples.

 

 

  •  std_logic representa um bit que pode assumir os seguintes valores:
    • 'U': Não inicializada;

    • 'X': Desconhecido;

    • '0': Zero;

    • '1': Um;

    • 'Z': Alta impedância;

    • 'W': Sinal fraco;

    • 'L': Sinal fraco que provavelmente vai para '0';

    • 'H': Sinal fraco que provavelmente vai para '1';

    • '-': Não importa.

A maioria destes valores é utilizado somente para simulação, para simplificar o entendimento vamos supor que ele só é 0 ou 1.

  • std_logic_vector representa um vetor de bits ou um barramento.
    • (7 downto 0) representa um barramento de 8 bits onde o bit mais significativo (da esquerda) é o sétimo e o menos significativo é o zero;
    • Caso fosse declarado como std_logic_vector(0 to 7) o bit mais significativo (da esquerda) seria o zero e o menos significativo o sétimo.

 

É possível a utilização de outros sinais como interface de entidade mas não é recomendado, o recomendado é sempre utilizar std_logic ou std_logic_vector para manter a compatibilidade.

Esta declaração de entidade modelou o circuito abaixo, para simplificar não coloquei 8 setas para o DATA_IN e o DATA_OUT.

 

entidade
Circuito CPU

 

Para utilizarmos nosso circuito CPU no nosso projeto precisamos instanciá-lo! Cada instância do circuito é como se colocássemos outro circuito exatamente igual no nosso projeto, não confunda com orientação a objeto de software! Se instanciarmos 100 CPUs vamos ter 100 hardwares de CPUs rodando em paralelo e completamente independente. Para instanciar o nosso circuito vamos fazer da seguinte forma:

 

 

instancia_cpu é o nome da instância, entity work.cpu é como achamos o nosso cpu na biblioteca "work" que é a biblioteca padrão das ferramentas de desenvolvimento de hardware. O port map é a correspondência entrada/saída do circuito com fios existentes no projeto, para este projeto temos que ter declarado os fios de sysclk, reset_n, start_reg, entrada_simulacao, saida_simulacao e finish. Para fazer conexões em VHDL utilizamos a keyword signal, no exemplo acima precisaríamos dos seguintes signals conectados a nossa CPU:

 

 

Podemos por exemplo instânciar duas CPUs e conectar uma a outra! Vamos manter o clock e o reset comum às duas e jogar a saída de uma na entrada de outra com os sinais de controle:

 

 

 E foi isto que aconteceu (clique na figura para amplia-la):

 

entidade

 

 

Os projetos de hardware são hierárquicos, ou seja, temos um arquivo .vhd que é o topo de hierarquia e instância o restante do design. O arquivo topo de hierarquia é responsável por fazer a conexão com o mundo externo (pinos de I/O), os arquivos instanciados dentro do topo de hierarquia se conectam por fios.

O próximo tópico será a arquitetura, que é a funcionalidade da caixa preta "CPU" descrita neste artigo.

 

Outros artigos da série

VHDL Básico: Parte 2 - Arquitetura >>
Este post faz da série VHDL Básico. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

10
Deixe um comentário

avatar
 
9 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
Matheus QuickCesar JuniorAndré CastelanMatheus OleiroChrystian Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Matheus Quick
Visitante
Matheus Quick

Bom artigo.

Chrystian
Visitante
Chrystian

Cade o OPEN na parte de "std_logic representa um bit que pode assumir os seguintes valores"

trackback

[…] VHDL Básico: Parte 1 - Entidade [9]; […]

Cesar Junior
Visitante
Cesar Junior

Bom artigo! Na espera do próximo tópico

trackback

[…] [12] VHDL Básico: Parte 1 – Entidade […]

trackback

[…] Primeira parte de uma série de arti­gos sobre VHDL do André Caste­lan.VHDL Básico: Parte 1 — Entidade […]

trackback

[...] VHDL Básico Parte 1 [...]

trackback

[...] vermos o que é a entidade em VHDL na Parte 1, vamos ver o que é a [...]

Matheus Oleiro
Visitante
Matheus Oleiro

Legal, gostei!
To esperando a parte 2 já...
Uma duvida que sempre tenho é a organização dos arquivos (top, testbench, srcs), quem instacia quem e qual entity devo chamar na simulação. Acho que seria legal uma abordagem dessa organização.
Um abraço!

André Castelan
Visitante

Valeu Matheus!

normalmente eu organizo assim (cada -- representa uma pasta)

--Projeto

----SYN

Arquivos de sintese do projeto, pasta do projeto na ferramenta de CAD

----RTL

------top.vhd

------processador

--------processador.vhd

--------sim

----------tb_processador.vhd

Sendo que cada entidade na pasta RTL necessariamente precisa de uma simulação dentro da pasta sim, o top.vhd que é o topo de hierarquia fica na raiz da pasta RTL junto com as constantes globais do projeto.

Abraço!