Академический Документы
Профессиональный Документы
Культура Документы
O que VHDL?
VHDL ou VHSIC Hardware Description Language uma linguagem desenvolvida pela
DARPA (agncia de pesquisa em projetos de defesa norte-americanos), especificamente para a
descrio de circuitos digitais, originalmente focando circuitos VHSIC ou Very High Speed
Integrated Circuits.
O propsito original do VHDL, como o prprio nome da linguagem diz, era descrever
circuitos digitais, dessa forma servindo como uma fonte de documentao do funcionamento
dos mesmos. Em seguida a idia de simular os circuitos descritos nessa linguagem tornou-se
bastante bvia, com o que os primeiros simuladores surgiram no mercado, seguidos por
ferramentas capazes tambm de sintetizar um circuito digital a partir da descrio fornecida
pela linguagem (com limitaes que iremos estudar aos poucos).
Hoje existem ferramentas no somente capazes de sintetizar o cdigo VHDL, mas
igualmente capazes de sintetizar o mesmo otimizando determinados aspectos, tais como rea
em circuito, consumo de energia, etc.
A sintaxe do VHDL herdada da linguagem ADA (e, por sua vez, do PASCAL). O VHDL
essencialmente uma linguagem com descries de operaes executadas em paralelo (exceto
em blocos especiais onde se pode garantir o sequenciamento das instrues). As duas
principais verses em uso do VHDL so o VHDL87 (padro IEEE 1076-1998) e o VHDL93 (padro
IEEE 1076-1993). Existem verses posteriores do VHDL, sendo a ltima a verso proposta e em
anlise pelo IEEE em 2008. Alm dessas verses, existem diversos padres derivados do VHDL
que podem ser usados em conjunto com a linguagem de forma a expandir suas capacidades
iniciais.
Talvez a alternativa mais conhecida do VHDL seja o Verilog. Ainda assim, interessante
notar que existem diversas outras opes surgindo na atualidade, sendo uma delas a System C.
Alm disso, diversas ferramentas de alto nvel, a exemplo do Matlab e do LabView, j
permitem a converso de alguns recursos para VHDL, o que permitiria a posterior sntese do
mesmos.
Entity: Uma entidade uma lista com especificaes de pinos de entrada e sada ou,
simplesmente, portas, do circuito. De certo modo, a entidade pode ser vista como o
encapsulamento do circuito, i.e., com quais sinais o circuito se comunica com o mundo
exterior, independentemente de sua complexidade interna. Todos os projetos em VHDL
necessitam ao menos de uma entidade (a entidade top-level) e, usualmente, so
constitudos de diversas entidades distintas.
A sintaxe bsica utilizada para descrever as entidades (mais detalhes podem existir
na declarao da entidade que so omitidos aqui para permitir o incio rpido na linguagem):
ENTITY nome IS
PORT (
nome_da_porta: modo_sinal tipo_sinal;
nome_da_porta: modo_sinal tipo_sinal;
....);
END nome;
Onde:
nome: o nome da entidade, podendo ser qualquer nome identificador vlido na
linguagem.
nome_da_porta: a identificao associado ao sinal;
modo_sinal: pode ser de quatro tipos IN, OUT, INOUT ou BUFFER. Os modos IN e
OUT (cuja finalidade bvia) so direcionais, impedindo que o sinal em questo seja
utilizado de outra maneira que no aquela especifica. Isso significa, por exemplo, que
um sinal IN jamais poder ter algum valor atribudo a ele, enquanto um sinal OUT no
poder jamais ser lido em nenhuma operao, visto que s possvel escrever no
mesmo. O modo INOUT bidirecional e o modo BUFFER especifica um sinal de sada
cujo valor presente tambm pode ser usado em operaes que necessitem ler o
mesmo.
tipo_de_sinal: especifica o tipo de dados do sinal em questo.
evidente que neste circuito cada porta lgica est produzindo uma sada, estvel ou
no, independentemente de qualquer outra coisa.
No VHDL a simulao do comportamento paralelo efetuada atravs de um simulador
de eventos discretos, onde feito o agendamento da alterao do valor de sinais de sada
(representando, por exemplo, a sada de uma porta lgica), conforme a lista de sensibilidade
existente para o sinal de sada em questo. A lista de sensibilidade usada para verificar se
uma operao deve ou no deve ser feita com o sinal em questo, ou seja, se ele ir ou no ir
sofrer alguma alterao. Note que o agendamento tambm possui o importante papel de
simular o comportamento real de um sinal fsico, visto que a mudana de um valor no ocorre
instantaneamente (simulando, por exemplo, o atraso introduzido por uma porta lgica).
possvel controlar esse atraso e agendamento, para efeitos de simulao, atravs do uso da
clusula AFTER do VHDL.
IN BIT;
IN BIT;
OUT BIT);
-- Descrio comportamental (
de fazer isso...)
ARCHITECTURE dataflow OF mux IS
SIGNAL select : INTEGER;
BEGIN
select <= 0 WHEN s0 = 0
1 WHEN s0 = 1 AND
2 WHEN s0 = 0 AND
3;
x <= a AFTER 0.5 NS WHEN
b AFTER 0.5 NS WHEN
c AFTER 0.5 NS WHEN
d AFTER 0.5 NS;
END dataflow;
AND s1 = 0 ELSE
s1 = 0 ELSE
s1 = 1 ELSE
select = 0 ELSE
select = 1 ELSE
select = 2 ELSE
PORT( in1 :
IN BIT;
x :
OUT BIT);
END COMPONENT;
COMPONENT orgate
PORT( a, b, c, d : IN bit;
x :
OUT BIT);
END COMPONENT;
SIGNAL s0_inv, s1_inv, x1, x2, x3, x4 : BIT;
BEGIN
U1 : inverter(s0, s0_inv);
U2 : inverter(s1, s1_inv);
U3 : andgate(a, s0_inv, s1_inv, x1);
U4 : andgate(b, s0, s1_inv, x2);
U5 : andgate(c, s0_inv, s1, x3);
U6 : andgate(d, s0, s1, x4);
U7 : orgate(x2 => b, x1 => a, x4 => d, x3 => c, x => x);
END netlist;
A tela inicial tpica que ser aberta (caso no exista nenhum projeto anterior sendo
trabalhado) a tela abaixo. Caso o ambiente abra um projeto automaticamente, possvel
fechar o projeto acessando os menus File
Close Project.
Para iniciarmos um novo projeto, basta simplesmente clicar na opo New Project ou
ir diretamente no menu File
NewProject. Da mesma forma, no menu File temos as opes
de trabalho mais comuns, para abrir projetos, imprimir, salvar, abrir projetos recentes, entre
outras.
Ao iniciar um novo projeto, o ISE ir apresentar uma srie de telas de dilogo, as quais
so apresentadas e discutidas a seguir.
Essa caixa de dilogo permite adicionar um novo arquivo fonte ao projeto, acionando o
boto New Source. Note que o projeto pode ser criado sem nenhum arquivo fonte associado
ao mesmo, mas isso no usual (porm til no caso onde apenas se deseje reaproveitar
arquivos VHD de um projeto antigo).
Pressionando o boto New Source, as seguintes opes sero apresentadas:
Note que existem vrias opes para os arquivos fonte de projetos. No momento,
iremos explorar apenas a criao de mdulos VHDL (VHDL Module). O usurio deve colocar o
nome do arquivo, e pressionar o boto Next.
IMPORTANTE: arquivos fontes VHDL recebem a extenso .VHD. O nome do arquivo, de
acordo com o ambiente ISE e com a norma da linguagem, deve ser IDNTICO ao nome da
ENTIDADE a ser criada. Novamente, uma entidade DEVE ter o mesmo nome de seu arquivo.
Em seguida, pode ser visualizada uma tela de dilogo onde o usurio pode visualizar
um resumo da entidade criada. O boto Finish deve ser acionado para continuar com a criao
do projeto.
A prxima caixa de dilogo apenas exibe o arquivo fonte adicionado ao projeto. Devese pressionar o boto Next.
As cinco reas de trabalho mais utilizadas (fora os menus e atalhos do ambiente) so:
Viso do projeto: nesse menu drop-down, podemos visualizar qual tipo de fontes ou
modelo de trabalho o ambiente est considerando. Trs opes disponveis:
implementao (implementation), behavioral simulation (simulao comportamental)
e post-route simulation. No momento iremos utilizar apenas a opo de
implementao. A simulao ser tratada mais adiante. Mudar essa opo pode
mudar a viso da hierarquia e arquivos, bem como os utilitrios disponveis para uso.
Hierarquia, arquivos e plataforma FPGA alvo: nesse rea do ambiente podemos
visualizar qual a FPGA, quais so os arquivos, e como esses arquivos relacionam-se
entre si. Ao clicar sobre um arquivo .vhd, pode-se abrir a tela de edio do mesmo, a
fim de trabalhar com o cdigo em questo.
NOTA: um arquivo que seja componente de outra entidade maior aparece vinculado mesma.
Ou seja, para ser acessado, voc deve clicar no sinal + a esquerda do nome da entidade maior,
onde ser possvel visualizar os subcomponentes hierarquicamente inferiores e utilizados pela
mesma.
Declarao da entidade
Declarao da arquitetura
library ieee;
use ieee.std_logic_1164.all;
entity OR_GATE is
port(
X:
in std_logic;
Y:
in std_logic;
F2:
out std_logic
);
end OR_GATE;
architecture behv of OR_GATE is
begin
F2 <= X or Y;
end behv;
Vamos iniciar a criao de uma nova entidade. Lembrando que a entidade descreve
como o circuito deve se conectar ao mundo exterior, podemos criar um circuito com as
seguintes entradas e sadas.
Figura: entidade.
Declaraes de bibliotecas
automaticamente inseridas pelo
ambiente ISE
Declarao da entidade
A,B,C: in std_logic;
Y: out std_logic);
end ckt_top;
architecture Behavioral of ckt_top is
begin
end Behavioral;
Comentrios de uma linha em VHDL podem ser inseridos usando o sinal -- a frente do
mesmo.
Notar que as portas/pinos declarados correspondem exatamente ao prottipo
pretendido, sendo os sinais A, B e C sinais de mesmo tipo e mesmo sentido, e o sinal Y
do mesmo tipo mas com sentido de sada.
Apesar do termo em VHDL ser PORTA, na prtica a idia associada a entidade a de
um PINO de um circuito integrado. Mas efetivamente, portas em VHDL so sinais
direcionais.
Sinais de mesmo tipo e sentido podem ser declarados individualmente, em vrias
linhas, ou podem ser simplesmente separados por vrgulas.
Cada linha declarando as portas/pinos da entidade deve ser terminada por ponto-evrgula, com exceo da ltima a qual fecha a declarao port e deve ser terminada
com ); .
Inicialmente, iremos trabalhar com dois modos de pinos/portas das entidades:
IN: representa o ingresso de um sinal na entidade. Um sinal/porta com modo
de operao IN s pode ser lido, jamais escrito.
OUT: representa a sada de uma informao de sinal da entidade. Um sinal
com modo OUT jamais pode ser lido, apenas escrito.
Quanto aos tipos de dados, existem dois tipos bsicos, fundamentais ao incio do
trabalho em VHDL, que devemos destacar:
bit: um tipo de dados nativo do VHDL, o qual permite representar a
informao de um nico bit. No recomendado o seu uso.
std_logic 1 : um tipo de dados pertencente a biblioteca
IEEE_STD_LOGIC_1164, a qual oferece o uso de um tipo binrio mais prximo
da realidade do que o tipo bit original do VHDL. Seu uso recomendado e a
biblioteca inclusa por default nas novas entidades criadas a partir do ISE.
Como estamos introduzindo apenas tipos binrios simples, importante destacar que
os valores representativos do 0 e do 1 so, respectivamente, 0 e 1 ou seja, o nmero 0 e o
nmero 1 dentro de aspas simples, ou apstrofos. Iremos ver em seguida que sequncias de
bits, por sua vez, so representadas dentro de aspas duplas. Exemplificando:
Vlidos:
1
0
1010
01010
Invlidos:
1
1010
Para que seja possvel realizar e descrever esse circuito dentro da arquitetura,
devemos introduzir os primeiros operadores em VHDL.
Operador
Sintaxe
Exemplo
Y <= a xor b;
Y <= (a and b) xor c;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ckt_top is
port(
A,B,C: in std_logic;
Y: out std_logic);
end ckt_top;
architecture imp of ckt_top is
begin
y <= (a and b) xor (not(a) and c);
end imp;
*
HDL Compilation
*
=========================================================================
Compiling vhdl file "E:/aulas/TESTE/ckt_top.vhd" in Library work.
Entity <ckt_top> compiled.
Entity <ckt_top> (Architecture <imp>) compiled.
Process "Check Syntax" completed successfully
Note que o erro acima foi gerado apenas pela retirada dos parnteses na clusula de
atribuio (ou seja, o cdigo ficou y <= a and b xor not(a) and c;) e note mais ainda que a
mensagem de erro indica a falta de um ponto-e-vrgula o que, de fato, no o problema no
cdigo.
AVISO IMPORTANTE: o cdigo ter sua sintaxe correta NO significa afirmar que ser
sintetizvel e NO significa dizer que o circuito ir funcionar da forma esperada. A sntese
pode apresentar problemas, assim como o circuito deve ser testado a fim de verificar sua
operao.
Sntese do circuito
Uma vez que a sintaxe do circuito esteja correta, pode-se proceder sntese do
mesmo, simplesmente clicando (duas vezes) diretamente sobre a opo Synthesize, conforme
mostra a figura abaixo (novamente, ao clicar com o boto direito, tambm pode-se selecionar
a opo Run ou ReRun).
Caso seja possvel a sntese do circuito e no exista nenhum erro residual de sintaxe,
uma sada tpica ao processo (mensagens geradas no console) seria:
IMPORTANTE: sempre salve os arquivos do projeto, a fim de se certificar que a sntese est
ocorrendo com as ltimas alteraes efetuadas!!!
Reading design: ckt_top.prj
=========================================================================
*
HDL Compilation
*
=========================================================================
Compiling vhdl file "E:/aulas/TESTE/ckt_top.vhd" in Library work.
Architecture imp of Entity ckt_top is up to date.
=========================================================================
*
Design Hierarchy Analysis
*
=========================================================================
Analyzing hierarchy for entity <ckt_top> in library <work> (architecture <imp>).
=========================================================================
*
HDL Analysis
*
=========================================================================
Analyzing Entity <ckt_top> in library <work> (Architecture <imp>).
Entity <ckt_top> analyzed. Unit <ckt_top> generated.
=========================================================================
*
HDL Synthesis
*
=========================================================================
Performing bidirectional port resolution...
Synthesizing Unit <ckt_top>.
Related source file is "E:/aulas/TESTE/ckt_top.vhd".
Found 1-bit xor2 for signal <Y>.
Unit <ckt_top> synthesized.
=========================================================================
HDL Synthesis Report
Macro Statistics
# Xors
1-bit xor2
: 1
: 1
=========================================================================
=========================================================================
*
Advanced HDL Synthesis
*
=========================================================================
=========================================================================
Advanced HDL Synthesis Report
Macro Statistics
# Xors
1-bit xor2
: 1
: 1
=========================================================================
=========================================================================
*
Low Level Synthesis
*
=========================================================================
Optimizing unit <ckt_top> ...
Mapping all equations...
Building and optimizing final netlist ...
Found area constraint ratio of 100 (+ 5) on block ckt_top, actual ratio is 0.
=========================================================================
Process "Synthesis" completed successfully
Uma sntese com problemas pode exigir diversas intervenes no cdigo VHDL. Muito
embora o relatrio acima tenha vrias informaes teis, ainda no vamos explorar ele por
completo, mas apenas destacar a mensagem final, a qual indica uma sntese efetuada com
sucesso.
Mapeando as portas nos pinos fsicos da FPGA
O prximo passo considerando a implementao fsica do circuito definir como as
portas/pinos da entidade mais abrangente do projeto a entidade TOP ir se relacionar com
os pinos fsicos da FPGA. Note que muitas das entidades compreendidas num projeto podem
ter todos os seus sinais trafegando internamente ao circuito da FPGA, e apenas alguns dos
sinais efetivamente serem ligados ao mundo externo. Para isso, contudo, necessrio
indicar qual porta ir se conectar a qual pino. Muito embora exista o utilitrio PlanAhead do
ISE, por diversas razes por vezes mais simples editar diretamente o arquivo de restries de
projeto e esse ser o mtodo usado rotineiramente.
Ainda assim, o processo muito simples. Conforme mostra a figura abaixo, existem
diversos tipos de restries de projeto (User Constraints) que podem ser aplicadas ao mesmo.
Para a questo de pinos, pura e simplesmente, devemos considerar a opo aonde consta
FloorPlan Area/IO/Logic (PlanAhead). Clicando duas vezes sobre a opo ou com o boto
direito e opo Run/ReRun, o utilitrio PlanAhead ser acionado.
Caso surja a caixa de dilogo abaixo, o usurio deve apenas concordar com a criao
de um novo arquivo UCF.
A tela inicial (pode surgir uma caixa de dilogo intermediria que pode ser desprezada)
do PlanAhead na criao de um novo arquivo UCS ser a vista na figura abaixo:
Essa a viso do dispositivo (que tem sua finalidade), mas inicialmente estamos
interessados apenas nos pinos que devem ser usados, para tanto, devemos selecionar a viso
Package, conforme destacado na figura acima. Abaixo, temos a viso do PlanAhead com a
opo Package selecionada.
Essa viso oferece justamente uma viso rpida dos pinos da FPGA (e dos pinos
especificamente da FPGA selecionada na criao do projeto). A seo destacada na figura
acima a rvore de seleo onde pode-se ter acesso aos pinos disponveis da entidade top e
que devero ser mapeados FPGA fsica. Ao abrir a caixa, os sinais sero exibidos e ao clicar
sobre um dos sinais, sero exibidas as opes de trabalho com o mesmo. A figura abaixo
mostra essa situao.
Note que nas opes associadas ao sinal, existe uma caixa de texto Site. Nesse local
pode ser entrado manualmente qual o pino que se deseje utilizar. No caso deste projeto, faz
sentido selecionar trs chaves (dip switches) para os sinais de entrada (essas chaves mecnicas
esto sujeitas ao efeito de bouncing, e no existe circuito de debounce prvio, que, caso
necessrio, dever ser feito na prpria FPGA em VHDL) e um LED para sada.
Dispositivo
SW0
SW1
SW2
LD0
Pino
F12
G12
H14
K12
Funo
Dip-switch
Dip-switch
Dip-switch
LED
Dispositivo
SW0
SW1
SW2
LD0
Pino
L13
L14
H18
F12
Kit Spartan 3E
A figura abaixo apresenta a insero das informaes. Note que a localizao para cada
sinal deve ser confirmada, clicando sobre o boto Aply.
Aps ingressar os pinos para cada um dos sinais desejados e configurar os mesmos, o
arquivo dever ser salvo (vide figura acima) e o utilitrio PlanAhead poder ser encerrado. O
resultado desse processo a adio ao projeto de um arquivo com o nome do projeto e com a
extenso UCF. De fato, esse arquivo um arquivo texto e seu contedo exibido abaixo:
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET
"A"
"A"
"A"
"B"
"B"
"B"
"C"
"C"
"C"
"Y"
"Y"
"Y"
LOC = L13;
IOSTANDARD
PULLUP;
LOC = L14;
IOSTANDARD
PULLUP;
LOC = H18;
IOSTANDARD
PULLUP;
LOC = F12;
IOSTANDARD
DRIVE = 8;
= LVTTL;
= LVTTL;
= LVTTL;
= LVTTL;
ser apagados e apenas deve ser renomeado o sinal. Pegando o arquivo original j com as
entradas desnecessrias eliminadas, teramos (para a Spartan3E):
#####################################################
### SPARTAN-3E STARTER KIT BOARD CONSTRAINTS FILE
#####################################################
# ==== Discrete LEDs (LED) ====
# These are shared connections with the FX2 connector
NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
# ==== Slide Switches (SW) ====
NET "SW<0>" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ;
NET "SW<1>" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP ;
NET "SW<2>" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP ;
(SW) ====
IOSTANDARD = LVTTL | PULLUP ;
IOSTANDARD = LVTTL | PULLUP ;
IOSTANDARD = LVTTL | PULLUP ;
O arquivo deve ser SALVO, somente com a extenso UCF (cuidado para no gerar um
arquivo ucf.txt no bloco de notas ou wordpad, salve o arquivo com o nome completo, entre
aspas, na forma entidade.ucf). O arquivo tambm deve ter o nome da entidade que se
deseja mapear os pinos, usualmente a entidade top.
AVISO: caso o arquivo esteja sendo editado/criado via Notepad ou WordPad ou Vi, o usurio
deve adicionar o arquivo UCF ao projeto, indo no menu do ISE ProjectAdd Source,
selecionando e adicionando o mesmo ao projeto, sob pena de o arquivo em questo ser
desconsiderado. De fato, na verso atual do ISE, TODOS os arquivos devem ser sempre
adicionados aos projetos (sejam UCFs ou VHDs).
Em alguns casos a sntese pode transcorrer sem maiores problemas, porm o processo
de implementao gere erros ou avisos. Isso usualmente pode ser contornado via opes de
projeto dependentes especificamente da Xilinx. E usualmente refletem decises de projeto
que no so as mais adequadas. Uma implementao adequada gera um resultado no console
conforme o abaixo (reduzido em tamanho):
Command Line: E:\Xilinx\11.1\ISE\bin\nt\unwrapped\ngdbuild.exe -ise TESTE.ise
-intstyle ise -dd _ngo -nt timestamp -i -p xc3s500e-fg320-5 ckt_top.ngc
ckt_top.ngd
Reading NGO file "E:/aulas/TESTE/ckt_top.ngc" ...
Reading in constraint information from 'ckt_top.ucf'...
Gathering constraint information from source properties...
Done.
Resolving constraint associations...
Checking Constraint Associations...
Done...
Checking Partitions ...
Checking expanded design ...
1.00
Mapping completed.
See MAP report file "ckt_top_map.mrp" for details.
Process "Map" completed successfully
4 out of 232
1%
3
3
3 out of 3
100%
1
1
1 out of 1
100%
Number of Slices
Number of SLICEMs
1 out of 4656
0 out of 2328
1%
0%
Starting Placer
Starting Router
Uma nova caixa de dilogo pode surgir, pedindo aprovao para criao de um novo
projeto no Impact, com o que o usurio deve concordar.
Figura: Dilogo.
Sobre a tela que surgir (vide mensagem e figura abaixo), o aluno dever clicar com o
boto direito e selecionar a opo indicada na figura Initialize Chain. Isso far a deteco da
placa e, se no ocorrer nenhum erro, o Impact ir exibir uma nova mensagem de dilogo,
perguntando se deve continuar e associar os arquivos de configurao a resposta dever ser
positiva.
Ao selecionar a opo Yes, diversas caixas de dilogo iro surgir, questionando sobre
os arquivos de configurao que devem ser associados a cada um dos dispositivos detectados
note que o Impact detecta apenas os dispositivos Xilinx. Note que a cada dilogo, o ambiente
ir destacar com a cor verde qual o dispositivo a ser configurado. No nosso caso, queremos
configurar apenas a FPGA e para os demais dispositivos detectados, bypassar (Bypass) a
configurao, conforme mostra a figura abaixo. O arquivo a ser selecionado para a
configurao ser o arquivo com o nome da entidade/projeto com a extenso bit.
Uma janela apresentando um relatrio final (figura abaixo) deve surgir, e o aluno
dever clicar apenas na opo Ok.
Caso a programao seja bem sucedida, a FPGA passa a apresentar o novo hardware
configurado o qual pode ser testado fisicamente e a mensagem de sucesso abaixo ser
visvel.
NOTA: o processo acima destacado aplicvel diretamente ao ISE WebPack 11.1. Mas destacase que, alm da documentao do software, as mudanas observadas a cada verso no so
to significativas e o processo permanece relativamente estvel entre elas. Para verses
distintas, favor referir a devida documentao.
C
Y
D
A,B,C,D,E: in std_logic;
Y: out std_logic);
end ckt2;
architecture imp of ckt2 is
begin
y <= ((a and b) xor (not(a) and c)) and ((c and d) and (d nor e));
end imp;
A
T1
B
T2
T3
T4
C
Y
T6
D
T5
T7
E
Refletindo as relaes lgicas intermedirias visveis a cada uma das trilhas ressaltadas,
temos, ento:
Note que o cdigo acima, associado com a viso do hardware de correo muito
mais fcil e permite a criao de circuitos de tamanho arbitrariamente grande. Porm iremos
ver outro recurso para conectar entidades distintas que ir tornar esse mecanismos ainda mais
flexvel, permitindo a descrio de um esquemtico arbitrrio de um circuito digital.
Uma observao de EXTREMA importncia deriva do fato que o cdigo acima no tem
ORDEM de interpretao ou execuo. Execuo no se aplica, pois o cdigo no ser
executado de fato, ser gerado um circuito fsico a partir da representao do cdigo.
Todos os princpios aplicveis a um circuito fsico digital tambm se aplicam, portanto, ao
cdigo. Dessa forma, no existe (nesse nvel de cdigo) precedncia de um comando sobre o
outro TODOS as atribuies esto ocorrendo ao mesmo tempo, independentemente ou
concorrentemente umas com as outras. Por essa razo, afirma-se que o cdigo no nvel de
encapsulamento do arquitetura um cdigo PARALELO ou CONCORRENTE. De fato,
exatamente o mesmo resultado ou seja, o mesmo circuito obtido na forma:
architecture imp of ckt2 is
signal T1, T2, T3, T4, T5, T6, T7: std_logic;
begin
Y <= T4 and T5;
T4 <= T1 xor T3;
T1 <= a and b;
T3 <= T2 and c;
T5 <= T6 and T7;
T6 <= c and d;
T7 <= d nor e;
T2 <= not a;
end imp;
ou em qualquer outra ordem de escrita. Ou seja, a ordem dos comandos em VHDL, no nvel
direto da arquitetura no altera o resultado fsico obtido. Isso necessrio para representar
efetivamente o comportamento de um circuito lgico combinacional, onde, efetivamente,
uma porta no apresenta relao de precedncia sobre as demais, sendo que todas operam
em conjunto.
abs
access
disconnect label
downto
library
package
port
sll*
sra*
after
alias
all
and
architecture
array
assert
attribute
begin
block
body
buffer
bus
case
component
configuration
constant
else
elsif
end
entity
exit
file
for
function
generate
generic
group*
guarded
if
impure*
in
inertial*
inout
is
linkage
literal*
loop
map
mod
nand
new
next
nor
not
null
of
on
open
or
others
out
postponed*
procedure
process
pure*
range
record
register
reject*
rem
report*
return
rol*
ror*
select
severity
signal
shared*
sla*
srl*
subtype
then
to
transport
type
unaffected*
units
until
use
variable
wait
when
while
with
xnor*
xor
Resumo
Estrutura
Comentrios
Entidades
Identificadores
Modos
portas
de
Sintaxe
-- Comentrio
entity nome_da_entidade is
port(
nome1,nome2: modo tipo;
nome3: modo tipo);
end nome_da_entidade;
Qualquer nome iniciado por
letra ou por underline e que
no
seja
uma
palavra
reservada da linguagem
IN ou OUT
Tipos de dados
std_logic
bit
Atribuio
simples
de
sinais
Operadores
lgicos
Declarao de
novos sinais
Exemplo
-- Isso um comentrio de uma linha
entity ckt_top is
port(
A,B,C: in std_logic;
Y: out std_logic);
end ckt_top;
Vlido: um_nome
Invlido: 3nome
port(
A,B,C: in std_logic;
Y: out std_logic);
Valor para um nico bit:
0 ou 1
Valor para uma sequncia de bits
00011
Y <= a xor b;