Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> VHDL

Como usar o tipo de VHDL mais comum:std_logic


O tipo mais comum usado em VHDL é o std_logic . Pense nesse tipo como um único bit, a informação digital transportada por um único fio físico. O std_logic nos dá um controle mais refinado sobre os recursos em nosso design do que o integer type, que temos usado nos tutoriais anteriores.

Normalmente, queremos que um fio em uma interface digital tenha o valor '1' ou '0' . Esses dois valores são os únicos valores que um bit, um dígito binário, pode ter. Mas, na realidade, um sinal digital físico pode estar em vários estados, que o std_logic type faz um bom trabalho emulando. Portanto, é o tipo mais usado em VHDL.

Esta postagem do blog faz parte da série de tutoriais básicos de VHDL.

O std_logic type pode ter os seguintes valores:
'1' Lógica 1
'0' Lógica 0
'Z' Alta impedância
'W' Sinal fraco, não sei se 0 ou 1
'L' 0 fraco, suspenso
'H' Fraco 1, pullup
'-' Não importa
'U' Não inicializado
'X' Desconhecido, vários drivers

Isso pode parecer muitos estados diferentes para um tipo que deve modelar um único valor binário. Não se preocupe, não usaremos todos esses tipos nesta série de tutoriais. Usaremos '1' e '0' é claro. E também veremos 'U' e 'X' , o que nos ajudará a identificar erros em nosso design. Os outros valores são recursos VHDL avançados que podem ser usados ​​para coisas como modelagem de comunicação com, por exemplo, I 2 dispositivos C, ou para criar barramentos de três estados.

Se vários processos estão tentando escrever valores diferentes em um sinal, dizemos que ele tem vários drivers . Se um std_logic signal tiver vários drivers, não será um erro de compilação ou de tempo de execução, pelo menos não no simulador. Isso porque std_logic é um tipo resolvido , o que significa que seu valor será determinado por uma função de resolução.

O valor de um std_logic sinal com dois drivers será determinado com base nesta tabela de resolução:
U X 0 1 Z W L H
U X X 1 1 1 1 1 X 1
U X 0 X 0 0 0 0 X 0
U U U U U U U U U U
U X X X X X X X X X
U X 0 1 Z W L H X Z
U X 0 1 W W W W X W
U X 0 1 L W L W X L
U X 0 1 H W W H X H
U X X X X X X X X

Exercício


Neste tutorial em vídeo, aprenderemos como usar declarar e mostrar std_logic sinais em uma forma de onda:



O código final que criamos neste tutorial:
library ieee;
use ieee.std_logic_1164.all;

entity T10_StdLogicTb is
end entity;

architecture sim of T10_StdLogicTb is

    signal Signal1 : std_logic := '0';
    signal Signal2 : std_logic;
    signal Signal3 : std_logic;

begin

    process is
    begin

        wait for 10 ns;
        Signal1 <= not Signal1;

    end process;

    -- Driver A
    process is
    begin

        Signal2 <= 'Z';
        Signal3 <= '0';
        wait;

    end process;

    -- Driver B
    process(Signal1) is
    begin

        if Signal1 = '0' then
            Signal2 <= 'Z';
            Signal3 <= 'Z';
        else
            Signal2 <= '1';
            Signal3 <= '1';
        end if;

    end process;


end architecture;

A janela de forma de onda no ModelSim depois que pressionamos executar e ampliamos a linha do tempo:


A forma de onda com o cursor posicionado na outra parte do ciclo de sinal repetido:




Análise


O exercício demonstrou como a função de resolução do VHDL funciona com o std_logic modelo. Ao trabalhar com lógica digital, geralmente é mais prático estudar a linha do tempo em uma forma de onda em vez de usar impressões. Portanto, usamos a forma de onda ModelSim para verificar os valores do sinal neste exercício.

O primeiro processo e Signal1 é usado apenas para alterar o valor que o terceiro processo está direcionando em Signal2 e Signal3 .

O segundo processo, Driver A, tentará conduzir um 'Z' para Signal2 , e um '0' para Signal3 constantemente.

O terceiro processo, Motorista B, alternará entre dirigir '1' e 'Z' em ambos Signal2 e Signal3 .

Vemos nas capturas de tela da forma de onda que Signal1 está mudando entre '0' e '1' , porque há apenas um processo tentando conduzir este sinal. Também podemos ver que os vários sinais de driver são resolvidos de acordo com a tabela de resolução postada nos comentários do código VHDL:
Sinal Motorista A Motorista B Resultado
Sinal2 'Z' 'Z' 'Z'
Sinal2 'Z' '1' '1'
Sinal3 '0' 'Z' '0'
Sinal3 '0' '1' 'X'


Retirada


Ir para o próximo tutorial »

VHDL

  1. Os gargalos mais comuns do fluxo de trabalho de impressão 3D - e como corrigi-los
  2. Os problemas mais comuns do sistema de refrigeração de automóveis
  3. Como aproveitar ao máximo seus dados
  4. Como criar uma lista vinculada em VHDL
  5. Como usar um procedimento em um processo em VHDL
  6. Como usar uma função impura em VHDL
  7. Como usar uma função em VHDL
  8. Como usar com segurança um guincho de motor no local de trabalho
  9. As causas mais comuns de acidentes com guindastes (e como evitá-los)
  10. As aplicações mais comuns de um286