Você está na página 1de 5

VHDL BSICO

Arquivo VHDL: O arquivo VHDL tem duas partes bem estabelescidas a Entidade e a Arquitetura, podendo existir vrias arquiteturas em um arquivo so. Pode-se usar qualquer processador de texto para escrever uma descrio VHDL. Entidad

Arquitetura

Comentrios: Antes de comear lembre que as descries VHDL so descries feitas em arquivos de texto, e portanto possvel colocar comentrios nestes arquivos para documentar ou funcionamento, ou colocar comentrios gerais. Para isto basta colocar dois traos ( --) e depois escrever o comentrio. O comentrio ser vlido at o final da linha de texto. Se necessrio continuar em outra linha, mais dois traos devem ser colocados. Exemplo -- Este um comentrio se estivesse em um arquivo VHDL.

Entidad: A entidade define o exterior do circuito, e cria os respectivos sinais de entrada e sada. O tipo STD_LOGIC representa um sinal de 1 bit. O tipo STD_LOGIC_VECTOR representa um barramento ou um sinal de vrios bits, (similar a um vetor) estes bits so numerados segundo os limiares fornecidos na criao do sinal. Por exemplo STD_LOGIC_VECTOR(3 DOWNTO 0) define um sinal com 4 bits (bit3, bit2, bit1 e bit 0). Note que quando subndice maior esta esquerda deve-se colocar DOWNTO para indicar que a numero dos bits a partir deste nmero (o 3 no exemplo) descendo at o segundo limiar. (0 no exemplo). No caso de numerar em forma ascendente, por exemplo comeando no ndice 1 e acabando no 5 deve-se usar simplesmente TO, por exemplo STD_LOGIC_VECTOR(1 TO 5). Na definio de cada sinal deve-se indicar se de entrada (IN) ou sada (OUT). Exemplo do Entity:

ENTITY NomeDoCircuito IS PORT( Sinal1 : IN Sinal2 :.OUT Sinal3 : IN Sinal4, Sinal5 : OUT ); END NomeDoCircuito

STD_LOGIC: STD_LOGIC; STD_LOGIC_VECTOR(3 DOWNTO 0); STD_LOGIC_VECTOR(1 TO 5)

Arquitetura: A arquitetura define o interior do circuito. Em outras palvras o funcionamento deste. A descrio do funcionamento pode ser principalemnte comportamental ou seqencial. Se for necessrio definir sinais internos no circuito, estes devem ser definidos antes da palavra BEGIN. Note que os sinais internos no so de tipo entrada ou sada (IN OUT) seno apenas ns que servem para interconetar portas ou subcircuitos internos. Se for necessrio definir uma varivel para uma mquina de estado (que armazena os bits de estado presente e serve para o clculo do estado siguinte), deve ser criado primeiro um novo tipo de varivel com o nome dos estados. Isto feito como a palavra TYPE como mostrado no exemplo. Exemplo de arquitetura: ARCHITECTURE NomeDaArquitetura OF NomeDoCircuito IS SIGNAL SinalInterno1 : STD_LOGIC; SIGNAL SinalInterno2,SinalInterno3 : STD_LOGIC_VECTOR(2 DOWNTO 1); TYPE NovoTipo IS (Estado1, Estado2, Estado3, EstadoFinal); SIGNAL SinalEstado : NovoTipo; BEGIN .<aqui vai a descrio do circuito > . END NomeDaArquitetura; Operadores Lgicos: Palavras que representam funes lgicas (ou portas lgicas): OR, AND, XOR e NOT. Para designar uma equao ou um valor a um sinal, no usado o smbolo = seno o smbolo de atribuio <=. Exemplos: X <= A OR B; significa X=A + B Y <= A OR B OR D; significa Y=A + B +D Z <= B AND C; F <= (A OR B) AND (NOT D); significa Z = A * C significa F = ( A+B )*( D )

G<= 1; significa G = 1 Atribuies condicionais. Quando necessrio designar um valor a um sinal em forma condicional, usase as palvras WHEN e ELSE. Exemplo: X <= 1 WHEN (A=B) ELSE 0; significa X=1 quando A seja igual a B, se A no for igual a B atribui 0. Y <= 1 WHEN (C=1) ELSE 0 WHEN (C=0) AND (D=1) ELSE 1; Significa: se C Um, colocar Um em Y, se C Zero D um colocar Zero em Y, seno colocar Um.

Processamento Seqencial: Pode ser definido dentro da arquitetura blocos de processamento seqencial. Estes blocos chamanse processos e so definidos pela palavra PROCESS. O processo ativado apenas quando um dos sinais listados no inicio muda de estado. Por exemplo PROCESS( A, B) indica que se o sinal A ou o sinal B mudam de estado o processo ser ativado. A estrutura do Processo assim: PROCESS ( sinal1, sinal2, sinal3, . ,SinalUltimo) SIGNAL SinalInternoDoProcesso : STD_LOGIC; SIGNAL OutroSinalInterno : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN <instrues seqenciais dentro do processo> END PROCESS; Instrues seqenciais dentro do processo: so instrues que permitem o funcionamento dentro do processo, dando valores aos sinais segundo a lgica definida pelo projetista. Algumas instrues destas so IF, THEN, ELSE, ELSIF, CASE, WHEN. Instruo de condicional IF: IF o equivalente a dizer se e usado conjuntamente com a palavra THEN, END, e algumas vezes com ELSE e ELSIF. Por exemplo: IF (A=B) THEN <instrues avaliadas quando o sinal A igual ao sinal B> END IF; ----IF (C=1) AND(D=0) THEN <instrues avaliadas quando o sinal C vale Um e o sinal D vale Zero. ELSE <instrues avaliadas se a condio no for verdadeira> END IF; --IF NOT (C=1) THEN <instrues avaliadas quando o sinal C No vale Um ELSIF (D=1) THEN <instrues avaliadas quando a condio anterior no for verdadeira e D vale Um.> ELSE <instrues avaliadas nenhuma condio anterior for verdadeira> END IF;

Instruo seletiva CASE WHEN: Esta instruo avalia um sinal e ativa uma parte do processamento segundo o valor desta. equivalente a ter um seletor multicondicional. Exemplo CASE SinalExaminado IS WHEN valor1 => <instrues avalidas se o SinalExaminado for igual a valor1> WHEN valor2 => <instrues avalidas se o SinalExaminado for igual a valor2> WHEN valor3 => <instrues avalidas se o SinalExaminado for igual a valor3> WHEN OTHERS=> <instrues avalidas se no for igual a nenhum dos outros valores > END CASE; Deteco de borda de subida ou descida de um sinal. Para detectar bordas usa-se uma propriedade chamada EVENT que todos os sinais tm. Esta propriedade indica se o sinal mudou de alguma forma. No exemplo a seguir, a instruo Y<=0 avaliada somente se X mudou de estado (no importa a qual estado) IF ( XEVENT) THEN Y<=0; END IF; No exemplo a seguir a instruo X<=A OR B; avaliada somente quando o sinal C mudou de estado E agora vale Um: IF CEVENT AND C=1 THEN X<=A OR B; END IF; O anterior equivalente a dizer que houve uma transio de borda de subida (veio de algum estado e acabou em 1). Para detectar borda de descida pode-se usar o cdigo a seguir: IF (CLKEVENT) AND (CLK=0) THEN . END IF;

Bibliotecas Normalmente o sintetizador VHDL precisa saber se funes ou outros valores especiais sero usados. Por exemplo alm do tipo STD_LOGIC e STD_LOGIC_VECTOR, existem tambm tipos como BIT, BIT_VECTOR, QSIM_VECTOR, etc. e funes como STD_LOGIC_VECTOR_TO_INTEGER, RISING_EDGE, etc. que podem ser usadas na descrio. Para indicar a biblioteca e o conjunto de funes a utilizadas usam-se as palavras LIBRARY e USE, por exemplo: LIBRARY IEEE; --indica que ser usada a biblioteca IEEE USE IEEE.STD_LOGIC_1164.ALL; --indica que sero usadas todas as funes STD_LOGIC;

Exemplo de uma mquina de estado Moore:

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Moore IS PORT( X, CLK : IN STD_LOGIC; Z: OUT STD_LOGIC); END; ARCHITECTURE Primeira OF Moore IS TYPE Estados IS (K0, K1, K2, K3); SIGNAL Presente, Siguinte : Estados; BEGIN PROCESS (CLK, Presente, X) BEGIN IF CLK'EVENT AND CLK='1' THEN Presente<= Siguinte; END IF; CASE Presente IS WHEN K0 => Z <= '0'; IF X='0' THEN WHEN K1 => Z <= '1'; IF X='0' THEN WHEN K2 => Z <= '1'; IF X='0' THEN WHEN K3 => Z <= '0'; IF X='0' THEN END CASE; END PROCESS; END Primeira;

--seleciona a biblioteca IEEE --usar todas as funes std_logic -- define a entidade --X e CLK sinais de entrada --Z sinal de sada -- fim da entidade --define a arquitetura --define o tipo Estados, como o --conjunto K0, K1, K2 e K3 --define os sinais Presente e -- Siguinte-sendo de tipo Estados. -- comea descrio --define processo sequencial que --sensvel aos sinais CLK, Presente e X --se houver borda de subida no CLK --o valor de Siguinte colocado em Presente --fim do IF --Analise o estado Presente para ver qual --ser o valor de Siguinte Siguinte<=K0; ELSE Siguinte <= K2; END IF; Siguinte <=K0; ELSE Siguinte <= K2; END IF; Siguinte <=K2; ELSE Siguinte <= K3; END IF; Siguinte <=K3; ELSE Siguinte <= K1; END IF; --fim do CASE --fim do PROCESS --fim da arquitetura.