Dispositivos Lógicos Programáveis: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
 
(56 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 19: Linha 19:
ENTITY and_gate IS  
ENTITY and_gate IS  
   PORT(
   PORT(
A, B :  IN BIT;
A, B :  IN   BIT;
S :  OUT  BIT);
S   :  OUT  BIT);
END and_gate;
  END and_gate;
ARCHITECTURE ckr OF and_gate IS  
ARCHITECTURE ckt OF and_gate IS  
   BEGIN  
   BEGIN  
     S <= A AND B;
     S <= A AND B;
Linha 35: Linha 35:
ENTITY logic_circuit IS  
ENTITY logic_circuit IS  
   PORT(
   PORT(
A, B, C :  IN BIT;
A, B, C :  IN   BIT;
S :  OUT  BIT);
S       :  OUT  BIT);
END logic_circuit;
  END logic_circuit;
ARCHITECTURE ckr OF logic_circuit IS  
ARCHITECTURE ckt OF logic_circuit IS  
   SIGNAL m :BIT;
   SIGNAL m :BIT;
   BEGIN  
   BEGIN  
     m <= A AND B;
     m <= A AND B;
     S <= m OR C;
     S <= m OR C;
   END ckt;
   END ckt;
</syntaxhighlight>
</syntaxhighlight>
Linha 58: Linha 58:
PORT(p :IN BIT_VECTOR(7 DOWNTO 0);
PORT(p :IN BIT_VECTOR(7 DOWNTO 0);
</syntaxhighlight>
</syntaxhighlight>
;Tipos de dados em VHDL:
{| border=1
|-
| '''Tipo de dados''' || '''Declaração''' || '''Valores possíveis''' || '''uso'''
|-
| BIT || y: OUT BIT; || '0', '1' || y <= '0'
|-
| BIT_VECTOR || bcd: OUT BIT_VECTOR (3 DOWNTO 0); || '0101', '1001', '0000' || bcd <= '0000';
|-
| STD_LOGIC || y: OUT STD_LOGIC; || '0', '1', 'x', 'z' || y <= 'z'
|-
| STD_LOGIC_VECTOR || dbus: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); || '0z1x' || dbus <= 'zzzz';
|-
| INTEGER || SIGNAL z:INTERGER_RANGE 0 TO 31; || 0,1,2,...,31 || z <= 31;
|-
|}
Tipos de dados:
* '0' -> Logico 0
* '1' -> Logico 1
* 'z' -> Alta Impedância
* 'x' -> Desconhecido


===Circuitos lógicos construídos a partir da tabela verdade===
===Circuitos lógicos construídos a partir da tabela verdade===
Linha 73: Linha 96:
   SIGNAL in_bits: BIT_VECTOR (1 DOWNTO 0);
   SIGNAL in_bits: BIT_VECTOR (1 DOWNTO 0);
   BEGIN
   BEGIN
     in_bits <= a & b;
     in_bits <= a & b; --concatena bits
     WITH in_bits SELECT
     WITH in_bits SELECT
S <= '0' WHEN "00",
S <= '0' WHEN "00",
Linha 108: Linha 131:


;IF/THEN/ELSEIF/THEN/ELSE: Permite construir IFs aninhados.
;IF/THEN/ELSEIF/THEN/ELSE: Permite construir IFs aninhados.
;CASE: Estrutura que permite percorrer uma lista de possíveis valores a serem avaliados<ref name="TOCCI">TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.</ref> <sup>(p. 159)</sup>.
<syntaxhighlight lang="vhdl">
ENTITY caso IS
PORT(
  p,q,r: IN BIT;
  s: OUT BIT);
END caso;
ARCHITECTURE copia OF caso IS
  SIGNAL status: BIT_VECTOR (2 DOWNTO 0);
  BEGIN
    status <= p & q & r;  --concatena bits
    PROCESS (status)
      BEGIN
        CASE status IS
  WHEN "100"  => s <= '0';
  WHEN "101"  => s <= '0';
  WHEN "110"  => s <= '0';
  WHEN OTHERS => s <= '1';
        END CASE;
      END PROCESS;
  END copia;
</syntaxhighlight>
===Flip-Flops e Latchs em VHDL===
O Quartus possui blocos primitivos de biblioteca para '''flip-flops''' e '''latchs''' <ref name="TOCCI">TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.</ref> <sup>(p. 230-235)</sup>.
Estes componentes possuem as portas de entrada e saída com identificação padrão em bloco primitivo, conforme a tabela:
{| border=1
|-
| '''Função da porta''' || '''Identificação'''
|-
| Clock || clk
|-
| Preset assíncrono || prn
|-
| Clear assíncrono || clr
|-
| Entradas J, K, S, R, D || j, k, r, s, d
|- 
| Saída Q || q
|-
|}
'''Flip-flops''' e '''latchs''' também podem ser implementados em VHDL, como segue:
;Latch D em VHDL:
<syntaxhighlight lang="vhdl">
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
ENTITY latchD IS
      PORT
      (
        D :  IN  STD_LOGIC;
        Clock :  IN  STD_LOGIC;
        Qlatch :  OUT  STD_LOGIC
      );
END latchD;
ARCHITECTURE bdf_type OF latchD IS
BEGIN
  PROCESS(Clock,D)
  BEGIN
    IF (Clock = '1') THEN
Qlatch <= D;
    END IF;
  END PROCESS;
END bdf_type;
</syntaxhighlight>
;Flip-flop D em VHDL:
<syntaxhighlight lang="vhdl">
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
ENTITY flipflopD IS
      PORT
      (
        D :  IN  STD_LOGIC;
        Clock :  IN  STD_LOGIC;
        Qff :  OUT  STD_LOGIC
      );
END flipflopD;
ARCHITECTURE bdf_type OF flipflopD IS
BEGIN
  PROCESS(Clock)
  BEGIN
    IF (RISING_EDGE(Clock)) THEN
      Qff <= D;
    END IF;
  END PROCESS;
END bdf_type;
</syntaxhighlight>
===Somador em VHDL===
Um '''somador''' pode ser facilmente implementado em VHDL, no qual o número de bits dos operandos pode ser atribuído na declaração das variáveis de entrada e saída <ref name="TOCCI">TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.</ref> <sup>(p. 294)</sup>.
<syntaxhighlight lang="vhdl">
ENTITY somador IS
PORT (a :IN  INTEGER RANGE 0 TO 255; -- primeira parcela (8 bits)
      b :IN  INTEGER RANGE 0 TO 255; -- segunda parcela (8 bits)
      s :OUT INTEGER RANGE 0 TO 511  -- soma (9 bits)
);
END somador;
ARCHITECTURE soma OF somador IS
BEGIN
      s <= a + b; -- operaçao soma
END soma;
</syntaxhighlight>
;Exemplo de simulação: Realizada no Simulation Waveform do Quartus
[[Arquivo:somadorQuatus.png|600px]]
===Contador em VHDL===
;Método de transição de estados: Baseia-se em tabelas que relacionam o estado ATUAL/PRÓXIMO estado <ref name="TOCCI">TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.</ref> <sup>(p. 350-351)</sup>.
<syntaxhighlight lang="vhdl">
ENTITY contador IS
PORT (clock :IN  BIT;
      q    :OUT BIT_VECTOR (2 DOWNTO 0)
);
END contador;
ARCHITECTURE conta5 OF contador IS
BEGIN
PROCESS (clock)
VARIABLE conta: BIT_VECTOR (2 DOWNTO 0);
BEGIN
  IF (clock = '1' AND clock'EVENT) THEN
  CASE conta IS
  WHEN "000"  => conta := "001";
  WHEN "001"  => conta := "010";
  WHEN "010"  => conta := "011";
  WHEN "011"  => conta := "100";
  WHEN "100"  => conta := "000";
  WHEN OTHERS => conta := "000";
      END CASE;
  END IF;
q <= conta;
END PROCESS;
END conta5;
</syntaxhighlight>
;Método de descrição comportamental: Baseia-se na descrição do comportamento que se aproxima da linguagem natural. Por exemplo, quando ocorrer uma transição no clock a saída é aumentada de 1. <ref name="TOCCI">TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.</ref> <sup>(p. 353-354)</sup>.
<syntaxhighlight lang="vhdl">
LIBRARY IEEE;
use ieee.std_logic_1164.all;
ENTITY contador IS
PORT (clock :IN  BIT;
      q    :OUT INTEGER RANGE 0 TO 15);
END ENTITY;
ARCHITECTURE contaN OF contador IS
BEGIN
PROCESS (clock)
CONSTANT N : NATURAL := 10;
VARIABLE conta: INTEGER range 0 to N := 0;
BEGIN
  IF (clock = '1' AND clock'EVENT) THEN
  IF conta = N THEN
conta := 0;
ELSE
conta := conta + 1;
END IF;
  END IF;
q <= conta;
END PROCESS;
END ARCHITECTURE;
</syntaxhighlight>
;Contadores com recursos completos: Um contador pode contar com recursos completos, como ''clear'', ''load'', ''carry''. Ver <ref name="TOCCI">TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.</ref> <sup>(p. 357)</sup>.
==Máquina de Estados Finita==
Uma '''máquina de estados finita''' é um modelo matemático usado para representar programas de computadores ou circuitos lógicos.
No projeto de '''circuitos lógicos''' uma '''máquina de estados''' sequencia um conjunto de '''estados''' predeterminados controlados por um '''''clock''''' e outros '''sinais de entrada'''  <ref name="TOCCI">TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.</ref> <sup>(p. 367)</sup>.
Há duas variação para as '''máquinas de estado''' no projeto de circuitos lógicos:
*'''Modelo Mealy''': A saída também é controlada por sinais de entrada adicionais;
*'''Modelo Moore''': A saída é função apenas do estado atual.
A saída de um circuito que seque o '''modelo Moore''' é '''síncrona''', ao passo que no '''modelo Mealy''' podem também mudar '''assincronamente'''.
Uma '''máquina de estados''' pode ser representada por um '''diagrama de transição de estados'''.
Em termos de hardware uma máquina de estados pode ser construída com um bloco formado por '''circuitos combinacionais''', que recebem as '''entradas''' e a informação do '''estado atual''' do sistema e fornecem as '''saídas''' e o '''próximo estado''' do sistema. E, um bloco formado por '''circuitos sequenciais''' que armazenam os '''estados''', implementados por '''flip-flops tipo D'''.
[[Arquivo:ModeloMaquinaEstados.png]]
A abordagem de '''máquina de estados''' para modelar '''circuitos lógicos''' é vantajosa em sistemas cujas tarefas se constituem de uma lista bem estruturada, não muito longa, de '''estados''' que possam ser devidamente nomeados e especificados <ref name="PEDRONI">PEDRONI, V. A. Eletrôica Digital Moderna e VHDL: Princípios Digitais, Eletrônica Digital, Projeto Digital, Microeletrônica e VHDL, Rio de Janeiro: Elsevier, 2010.</ref> <sup>(p. 350)</sup>
===Projeto de Máquinas de Estado===
'''
Passos para o '''projeto de circuitos lógicos''' com '''máquinas de estados''' <ref name="PEDRONI"/><sup>(p. 351)</sup>:
#Desenhar o '''diagrama de transição de estados'''.
#Com base no diagrama, construir a '''tabela verdade''' para as '''saídas''' e '''próximos estados''', substituindo o nome dos estados pelo '''código binário''' correspondente, incluindo as entradas.
#Determinar as '''expressões booleanas''' para as '''saídas''' e '''próximos estados'''.
#Construir o '''circuito lógico''' correspondente.
==Projeto de Circuitos Lógicos com VHDL==
;[http://200.17.101.9:8080/rid=1RGR4YLC8-1H5VVQN-3G2/ProjetoVHDL.cmap Etapas do Projeto de Circuitos Lógicos com VHDL]: Link com Mapa Conceitual ilustrando os passos de um Projeto de Circuitos Lógicos com VHDL.


==Dispositivos Lógicos Programáveis==
==Dispositivos Lógicos Programáveis==
Linha 126: Linha 354:
Software para desenvolvimento de circuitos lógicos digitais.
Software para desenvolvimento de circuitos lógicos digitais.


;Circuito de uma porta E constuida no  Quartus II: Block Diagram/Schematic File
===Instalação do Quartus II Web Edition no Linux===
 
#Acessar [https://www.altera.com/downloads/download-center.html Download Center Altera]:
#*[http://dl.altera.com/static/quick_start_guide/quick_start_guide_13.0sp1_en.pdf Quick Start Guide]
#Selecionar '''Quartus Prime software Lite edition''' - FREE, no license file required
#Selecionar versão '''13.osp1''': '''Quartus II Web Edition'''
#*Versão compatível com MAX7000S
#Selecionar o DOWNLOAD do arquivo:
#*Quartus-web-13.0.1.232-linux.tar
#*Link: http://download.altera.com/akdlm/software/acdsinst/13.0sp1/232/ib_tar/Quartus-web-13.0.1.232-linux.tar
#Descompactar o arquivo.
#Executar 0 script
./setup.sh
 
===Teste e possíveis erros===
 
;Testar o Quartus:
/opt/altera/13.0sp1/quartus/bin/quartus &
;Testar o ModelSim:
/opt/altera/13.0sp1/modelsim_ase/bin/vsim &
 
;Possível '''ERRO 1''':
/opt/altera/13.0sp1/modelsim_ae/bin/vsim
** Fatal: Read failure in vlm process (0,0)
Falha de segmentação (imagem do núcleo gravada)
:Isto ocorre porque várias ferramentas usadas pelo Quartus são 32 bits, para solucionar:
:*Obtenha os arquivos abaixo e os armazene em uma pasta do Quartus com o nome '''lib32'''.
libfreetype.so
libfreetype.so.6
libfreetype.so.6.10.2
::Estes arquivos podem ser obtidos através da biblioteca '''freetype2'''.
:Definir uma variável em /etc/bash.bashrc:
export LD_LIBRARY_PATH=/opt/altera/13.0sp1/lib32
:Instalar suporte para compactação '''bzip2''' utilizado pelo Quartus 32 bits:
sudo apt-get install bzip2:i386
 
;Possível '''ERRO 2''':
$ vsim
Error: cannot find "/opt/altera/13.0sp1/modelsim_ase/bin/../linux_rh60/vsim"
:;Solução: edite o arquivo vco na linha 206, diretório /opt/altera/13.0sp1/modelsim_ase/
*)                vco="linux_rh60" ;;
:para
  *)                vco="linux" ;;
 
===Exemplo de utilização do Quartus II===
 
;Circuito de uma porta E constuída no  Quartus II: Block Diagram/Schematic File
[[Arquivo:portaE.jpg]]
[[Arquivo:portaE.jpg]]



Edição atual tal como às 00h56min de 25 de maio de 2018

Dispositivos Lógicos Programáveis

Linguagem VHDL

A linguagem VHDL (Very high speed integraded circuits (VHSIC) Hardware Description Language) permite descrever na forma de uma linguagem textual circuitos lógicos.

A linguagem VHDL pode ser utilizada para programar Dispositivos Lógicos Programáveis.

Linguagem VHDL x Linguagem de Programação
Uma linguagem de descrição de hardware descreve a configuração de hardware de um circuito, ao passo que uma linguagem de programação descreve uma sequência de instruções a serem executadas por um computador para realizar um tarefa.
A execução de um programa em um computador segue uma ordem sequencial, por exemplo, caso o programa precise analisar o estado de quatro entradas, ele deve analisar uma entrada de de cada vez, a passo que um circuito lógico considera a atuação das entradas em paralelo [1] (p. 85).

Sintaxe VHDL

O formato de uma descrição de hardware envolve dois elementos fundamentais [1] (p. 88):

  • Definição das entradas e saídas (bloco ENTITY);
  • Definição de como as saídas respondem as entradas (bloco ARCHITECTURE).

Exemplo de uma porta AND:

ENTITY and_gate IS 
  PORT(
	A, B :  IN   BIT;
	S    :  OUT  BIT);
  END and_gate;
ARCHITECTURE ckt OF and_gate IS 
  BEGIN 
    S <= A AND B;
  END ckt;
Sinais intermediários
São nós internos de um circuito lógico. São utilizados no VHDL para definir entradas e saídas de um bloco de circuito [1] (p. 90).

Exemplo de um circuito lógico dado pela expressão lógica:

S = AB + C 
ENTITY logic_circuit IS 
  PORT(
	A, B, C :  IN   BIT;
	S       :  OUT  BIT);
  END logic_circuit;
ARCHITECTURE ckt OF logic_circuit IS 
  SIGNAL m :BIT;
  BEGIN 
    m <= A AND B;
    S <= m OR  C;
  END ckt;

Dados em VHDL

Dados numéricos representados em binário, hexadecimal e decimal [1] (p. 148):

B"11001" --Binário
X"19"    --Hexadecimal
25       --Decimal
Vetores de bits
Exemplo porta p definida como uma entrada de 8 bits:
PORT(p :IN BIT_VECTOR(7 DOWNTO 0);
Tipos de dados em VHDL
Tipo de dados Declaração Valores possíveis uso
BIT y: OUT BIT; '0', '1' y <= '0'
BIT_VECTOR bcd: OUT BIT_VECTOR (3 DOWNTO 0); '0101', '1001', '0000' bcd <= '0000';
STD_LOGIC y: OUT STD_LOGIC; '0', '1', 'x', 'z' y <= 'z'
STD_LOGIC_VECTOR dbus: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); '0z1x' dbus <= 'zzzz';
INTEGER SIGNAL z:INTERGER_RANGE 0 TO 31; 0,1,2,...,31 z <= 31;

Tipos de dados:

  • '0' -> Logico 0
  • '1' -> Logico 1
  • 'z' -> Alta Impedância
  • 'x' -> Desconhecido

Circuitos lógicos construídos a partir da tabela verdade

Uma tabela verdade permite expressar o funcionamento de um circuito lógico combinacional.

Exemplo de uma porta AND descrita como tabela verdade em VHDL [1] (p. 152):

ENTITY and IS
PORT(
  a,b: IN BIT;
  s: OUT BIT);
END and;
ARCHITECTURE tabelaVerdade OF and IS
  SIGNAL in_bits: BIT_VECTOR (1 DOWNTO 0);
  BEGIN
    in_bits <= a & b;  --concatena bits
    WITH in_bits SELECT
	 S <= '0' WHEN "00",
	      '0' WHEN "01",
	      '0' WHEN "10",
	      '1' WHEN "11";
  END tabelaVerdade;

Estruturas de Controle em VHDL

A linguagem VHDL possui estruturas de controle de decisão que são interpretadas de forma sequencial, como numa linguagem de programação.

IF/THEN/ELSE
Exemplo de uso de IF/THEN/ELSE para comparar uma entrada inteira de 4 bits[1] (p. 157):
ENTITY teste IS
PORT(
  valor_digital: IN INTEGER RANGE 0 TO 15; --entrada de 4 bits
  z: OUT BIT);
END teste;
ARCHITECTURE desisao OF teste IS
  BEGIN
    PROCESS (valor_digital)
      BEGIN
        IF (valor_digital > 6) THEN
          z <= '1';
        ELSE
          z <= '0';
        END IF;
      END PROCESS;
  END desisao;
IF/THEN/ELSEIF/THEN/ELSE
Permite construir IFs aninhados.
CASE
Estrutura que permite percorrer uma lista de possíveis valores a serem avaliados[1] (p. 159).
ENTITY caso IS
PORT(
  p,q,r: IN BIT;
  s: OUT BIT);
END caso;
ARCHITECTURE copia OF caso IS
  SIGNAL status: BIT_VECTOR (2 DOWNTO 0);
  BEGIN
    status <= p & q & r;  --concatena bits
    PROCESS (status)
      BEGIN
        CASE status IS
	  WHEN "100"  => s <= '0';
	  WHEN "101"  => s <= '0';
	  WHEN "110"  => s <= '0';
	  WHEN OTHERS => s <= '1';
        END CASE;
      END PROCESS;
  END copia;

Flip-Flops e Latchs em VHDL

O Quartus possui blocos primitivos de biblioteca para flip-flops e latchs [1] (p. 230-235).

Estes componentes possuem as portas de entrada e saída com identificação padrão em bloco primitivo, conforme a tabela:

Função da porta Identificação
Clock clk
Preset assíncrono prn
Clear assíncrono clr
Entradas J, K, S, R, D j, k, r, s, d
Saída Q q

Flip-flops e latchs também podem ser implementados em VHDL, como segue:

Latch D em VHDL
LIBRARY ieee;
USE ieee.std_logic_1164.all; 
LIBRARY work;
ENTITY latchD IS 
       PORT
       (
         D :  IN  STD_LOGIC;
         Clock :  IN  STD_LOGIC;
         Qlatch :  OUT  STD_LOGIC
       );
END latchD;
ARCHITECTURE bdf_type OF latchD IS 
BEGIN 
  PROCESS(Clock,D)
  BEGIN
    IF (Clock = '1') THEN
	Qlatch <= D;
    END IF;
  END PROCESS;
END bdf_type;
Flip-flop D em VHDL
LIBRARY ieee;
USE ieee.std_logic_1164.all; 
LIBRARY work;
ENTITY flipflopD IS 
       PORT
       (
         D :  IN  STD_LOGIC;
         Clock :  IN  STD_LOGIC;
         Qff :  OUT  STD_LOGIC
       );
END flipflopD;
ARCHITECTURE bdf_type OF flipflopD IS 
BEGIN 
  PROCESS(Clock)
  BEGIN
    IF (RISING_EDGE(Clock)) THEN
       Qff <= D;
    END IF;
  END PROCESS;
END bdf_type;

Somador em VHDL

Um somador pode ser facilmente implementado em VHDL, no qual o número de bits dos operandos pode ser atribuído na declaração das variáveis de entrada e saída [1] (p. 294).

ENTITY somador IS
PORT (a :IN  INTEGER RANGE 0 TO 255; -- primeira parcela (8 bits)
      b :IN  INTEGER RANGE 0 TO 255; -- segunda parcela (8 bits)
      s :OUT INTEGER RANGE 0 TO 511  -- soma (9 bits)
);
END somador;
ARCHITECTURE soma OF somador IS
BEGIN
      s <= a + b; -- operaçao soma
END soma;
Exemplo de simulação
Realizada no Simulation Waveform do Quartus

Contador em VHDL

Método de transição de estados
Baseia-se em tabelas que relacionam o estado ATUAL/PRÓXIMO estado [1] (p. 350-351).
ENTITY contador IS
PORT (clock :IN  BIT;
      q     :OUT BIT_VECTOR (2 DOWNTO 0) 
);
END contador;
ARCHITECTURE conta5 OF contador IS
BEGIN
 PROCESS (clock)
 VARIABLE conta: BIT_VECTOR (2 DOWNTO 0);
 BEGIN
   IF (clock = '1' AND clock'EVENT) THEN
	   CASE conta IS
		  WHEN "000"  => conta := "001";
		  WHEN "001"  => conta := "010";
		  WHEN "010"  => conta := "011";
		  WHEN "011"  => conta := "100";
		  WHEN "100"  => conta := "000";
		  WHEN OTHERS => conta := "000";
      END CASE;
   END IF;
	q <= conta;
 END PROCESS;
END conta5;
Método de descrição comportamental
Baseia-se na descrição do comportamento que se aproxima da linguagem natural. Por exemplo, quando ocorrer uma transição no clock a saída é aumentada de 1. [1] (p. 353-354).
LIBRARY IEEE;
use ieee.std_logic_1164.all;
ENTITY contador IS
PORT (clock :IN  BIT;
      q     :OUT INTEGER RANGE 0 TO 15);
END ENTITY;

ARCHITECTURE contaN OF contador IS
BEGIN
 PROCESS (clock)
 CONSTANT N : NATURAL := 10;
 VARIABLE conta: INTEGER range 0 to N := 0;
 BEGIN
   IF (clock = '1' AND clock'EVENT) THEN
	   IF conta = N THEN
			conta := 0;
		ELSE 
		 conta := conta + 1;
		END IF;
   END IF;
	q <= conta;
 END PROCESS;
END ARCHITECTURE;
Contadores com recursos completos
Um contador pode contar com recursos completos, como clear, load, carry. Ver [1] (p. 357).

Máquina de Estados Finita

Uma máquina de estados finita é um modelo matemático usado para representar programas de computadores ou circuitos lógicos.

No projeto de circuitos lógicos uma máquina de estados sequencia um conjunto de estados predeterminados controlados por um clock e outros sinais de entrada [1] (p. 367).

Há duas variação para as máquinas de estado no projeto de circuitos lógicos:

  • Modelo Mealy: A saída também é controlada por sinais de entrada adicionais;
  • Modelo Moore: A saída é função apenas do estado atual.

A saída de um circuito que seque o modelo Moore é síncrona, ao passo que no modelo Mealy podem também mudar assincronamente.

Uma máquina de estados pode ser representada por um diagrama de transição de estados.

Em termos de hardware uma máquina de estados pode ser construída com um bloco formado por circuitos combinacionais, que recebem as entradas e a informação do estado atual do sistema e fornecem as saídas e o próximo estado do sistema. E, um bloco formado por circuitos sequenciais que armazenam os estados, implementados por flip-flops tipo D.

A abordagem de máquina de estados para modelar circuitos lógicos é vantajosa em sistemas cujas tarefas se constituem de uma lista bem estruturada, não muito longa, de estados que possam ser devidamente nomeados e especificados [2] (p. 350)

Projeto de Máquinas de Estado

Passos para o projeto de circuitos lógicos com máquinas de estados [2](p. 351):

  1. Desenhar o diagrama de transição de estados.
  2. Com base no diagrama, construir a tabela verdade para as saídas e próximos estados, substituindo o nome dos estados pelo código binário correspondente, incluindo as entradas.
  3. Determinar as expressões booleanas para as saídas e próximos estados.
  4. Construir o circuito lógico correspondente.

Projeto de Circuitos Lógicos com VHDL

Etapas do Projeto de Circuitos Lógicos com VHDL
Link com Mapa Conceitual ilustrando os passos de um Projeto de Circuitos Lógicos com VHDL.

Dispositivos Lógicos Programáveis

Um Dispositivo Lógico Programável (PLD) pode ser configurado eletronicamente para formar um circuito lógico. Normalmente são construídos como uma matriz de comutação com chaves que podem ser programadas [1] (p. 143).

A programação de um PLD utiliza software de desenvolvimento, com o qual o programador define como o dispositivo deve ser programado.

A descrição de um circuito lógico em um software de desenvolvimento pode ser realizada de diferentes maneiras, incluindo:

  • Captura Esquemática;
  • Expressão Lógica;
  • Tabela Verdade;
  • Linguagem VHDL.

O QUARTUS II é um software de desenvolvimento da Altera, com o qual é possível descrever um diagrama lógico como uma arquivo de descrição de bloco (.bdf) ou utilizando a linguagem VDHL (.vhd).

Quartus II

Software para desenvolvimento de circuitos lógicos digitais.

Instalação do Quartus II Web Edition no Linux

  1. Acessar Download Center Altera:
  2. Selecionar Quartus Prime software Lite edition - FREE, no license file required
  3. Selecionar versão 13.osp1: Quartus II Web Edition
    • Versão compatível com MAX7000S
  4. Selecionar o DOWNLOAD do arquivo:
  5. Descompactar o arquivo.
  6. Executar 0 script
./setup.sh

Teste e possíveis erros

Testar o Quartus
/opt/altera/13.0sp1/quartus/bin/quartus &
Testar o ModelSim
/opt/altera/13.0sp1/modelsim_ase/bin/vsim &
Possível ERRO 1
/opt/altera/13.0sp1/modelsim_ae/bin/vsim
** Fatal: Read failure in vlm process (0,0)
Falha de segmentação (imagem do núcleo gravada)
Isto ocorre porque várias ferramentas usadas pelo Quartus são 32 bits, para solucionar:
  • Obtenha os arquivos abaixo e os armazene em uma pasta do Quartus com o nome lib32.
libfreetype.so
libfreetype.so.6
libfreetype.so.6.10.2
Estes arquivos podem ser obtidos através da biblioteca freetype2.
Definir uma variável em /etc/bash.bashrc:
export LD_LIBRARY_PATH=/opt/altera/13.0sp1/lib32
Instalar suporte para compactação bzip2 utilizado pelo Quartus 32 bits:
sudo apt-get install bzip2:i386
Possível ERRO 2
$ vsim 
Error: cannot find "/opt/altera/13.0sp1/modelsim_ase/bin/../linux_rh60/vsim" 
Solução
edite o arquivo vco na linha 206, diretório /opt/altera/13.0sp1/modelsim_ase/
*)                vco="linux_rh60" ;;
para
 *)                vco="linux" ;;

Exemplo de utilização do Quartus II

Circuito de uma porta E constuída no Quartus II
Block Diagram/Schematic File

VHDL de uma porta E gerada pelo Quartus II
-- PROGRAM		"Quartus II 32-bit"
-- VERSION		"Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Full Version"
-- CREATED		"Fri May 12 15:17:16 2017"
LIBRARY ieee;
USE ieee.std_logic_1164.all; 
LIBRARY work;
ENTITY portaE IS 
  PORT(
	A :  IN  STD_LOGIC;
	B :  IN  STD_LOGIC;
	S :  OUT  STD_LOGIC);
END portaE;
ARCHITECTURE bdf_type OF portaE IS 
  BEGIN 
    S <= A AND B;
  END bdf_type;

Referências

  1. 1,00 1,01 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 1,10 1,11 1,12 1,13 TOCCI, R.J.; WIDMER, N.S.; MOSS, G.L. Sistemas Digitais: princípios e aplicações, São Paulo: Pearson, 2011.
  2. 2,0 2,1 PEDRONI, V. A. Eletrôica Digital Moderna e VHDL: Princípios Digitais, Eletrônica Digital, Projeto Digital, Microeletrônica e VHDL, Rio de Janeiro: Elsevier, 2010.

--Evandro.cantu (discussão) 14h03min de 12 de maio de 2017 (BRT)