abs
access
after
alias
all
and
architecture
array
assert
attribute
begin
block
body
buffer
bus
case
component
configuration
constant
disconnect
downto
else
elsif
end
entity
exit
file
for
function
generate
generic
group
guarded
if
impure
in
inertial
inout
is
label
library
linkage
literal
loop
map
mod
nand
new
next
nor
not
null
of
on
open
or
others
out
package
port
postponed
procedure
process
pure
range
record
register
reject
rem
report
return
rol
select
severity
signal
shared
sla
sll
sra
srl
subtype
then
to
transport
type
unaffected
units
until
use
variable
wait
when
while
with
xnor
xor
Operadores
Operador
Operação
**
abs
not
exponenciação
valor absoluto
negação
inteiro/virgula flutuante
•
multiplicação
inteiro/virgula flutuante
mesmo que o esquerdo
mesmo que o operando
físico
inteiro/virgula flutuante
mesmo que o esquerdo
inteiro/virgula flutuante
físico
mesmo que o direito
inteiro/virgula flutuante
mesmo que o esquerdo
mesmo que o operando
físico
inteiro/virgula flutuante
mesmo que o esquerdo
físico
mesmo que o esquerdo
/
divisão
operando esquerdo
operando direito
tipo do resultado
inteiro
mesmo que esquerdo
numérico
mesmo que operando
bit/boolean ou array 1-D
de bit/boolean
mesmo que operando
inteiro universal
mod
módulo
inteiro
mesmo que o esquerdo mesmo que o operando
rem
resto
inteiro
mesmo que o esquerdo mesmo que o operando
comentários para ISE Xilinx – divisão só para o operando direito igual a 2n
Operadores
Operador
Operação
+
-
identidade
negação
+
&
adição
subtracção
concatenação
operando esquerdo
numérico
numérico
array 1-D
array 1-D
tipo elemento do
operando direito
sll
srl
sla
sra
rol
srl
shift-left lógico
array 1-D/bit/boolean
shift-right/lógico
shift-left/aritmético
shift-right/aritmético
rotar esquerdo
rotar direito
-
operando direito
tipo do resultado
numérico
numérico
mesmo que operando
mesmo que operando
mesmo que esquerdo
mesmo que esquerdo
mesmo que esquerdo
tipo elemento do
operando esquerdo
mesmo que operando
mesmo que operando
mesmo que operando
array 1-D
mesmo que direito
inteiro
-
mesmo que esquerdo
-
mesmo que esquerdo
Operadores
Operador
=
/=
<
Operação
operando esquerdo
<=
>
>=
comparar/ igual
qualquer excepto ficheiro
comparar/ não igual
menor que
escalar ou array 1-D do
qualquer tipo discreto
menor ou igual que
maior que
maior ou igual que
-
and
AND lógico
or
nand
nor
xor
xnor
OR lógico
AND lógico
OR lógico
XOR lógico
XOR lógico
array 1_D do qualquer tipo
discreto / bit / boolean
-
max
Prioridade
min
operando direito
mesmo que o esquerdo
mesmo que o esquerdo
-
tipo do resultado
boolean
boolean
-
mesmo que o esquerdo mesmo que o operando
-
o tipo numérico = inteiro ou com virgula flutuante ou físico;
o tipo físico
= unidades físicas (ex. ns, ms, ohm, Kohm, etc.).
Comentários: os tipos físicos não são suportados por Xilinx ISE.
tipos
escalares
access
com vírgula
flutuante
discretos
ficheiros
físicos
compósitos
estrutura
(record)
array
tempo
inteiros
unconstrained
enumerações
severity_level
bit_vector
caracteres
boolean
bit
string
constrained
&
/
‘
:
()
;
*
<
+
=
,
>
|
=>
**
:=
/=
>=
<=
<>
atribuição para
variáveis
.
atribuição para
sinais
reais:
inteiros:
55
12
55.45
169
2#10101001#
16#A9#
8#251#
Os caracteres em VHDL são escritos entre plicas ‘’:
‘F’
‘q’
‘’’
‘‘
‘,’
1.5E+12
12.0e-03
Representam sequências de caracteres e são escritas entre aspas:
“Esta e uma linha”
& “comprida.”
“0!1Z&%@*”
“”
“Linha “”1”” e”
- representam sequências de bits;
- começam com um caracter (B, b, O, o, X, x) que representa a base.;
- escrevem-se entre aspas;
- podem incluir ‘_’.
B“0010”
b“1111_1111”
x”0a”
=
O“123”
o“123”
b”0000_1010”
X”ABCDE”

o”12”
x”12ab”
Um objecto é um item nomeado que pertence a um determinado tipo.
- precisam de ser declaradas antes de poderem ser utilizadas.
A declaração introduz o nome do objecto, define o seu tipo e pode especificar o
valor inicial.
constant a : string := "Linha ""1"" e"
& "comprida." ;
constant numero_de_bits : integer := 4;
constant dados : std_logic_vector(11 downto 0) := b"0000_1111_1010";
variable var1 : bit;
variable var2 : std_logic := '1';
assume o valor inicial por defeito
que depende do tipo da variável
As declarações de variáveis e constantes aparecem normalmente
na parte declarativa de processos:
architecture Behavioral of reg4 is
begin
process (d0, d1, d2, d3, en, clk) is
variable sd0, sd1, sd2, sd3 : bit;
begin
if en = '1' and clk = '1' then
sd0 := d0;
sd1 := d1;
sd2 := d2;
sd3 := d3;
end if;
s0 <= sd0;
s1 <= sd1;
s2 <= sd2;
s3 <= sd3;
end process;
end Behavioral;
A atribuição de um valor à
variável (:=) substitui
imediatamente o valor anterior
desta variável !!!
A atribuição de um valor a um
sinal (<=) funciona de maneira
diferente !!!
entity var_sig is
port (clk, reset: in std_logic;
output : out std_logic);
end entity var_sig;
architecture behav of var_sig is
begin
process (clk)
variable temp_var : std_logic;
begin
temp_var := '1';
if (temp_var = '1') then
output <= temp_var;
else
output <= '0';
end if;
temp_var := '0';
end process;
end behav;
entity var_sig is
port (clk, reset: in std_logic;
output : out std_logic);
end entity var_sig;
architecture behav of var_sig is
signal temp_sig : std_logic;
begin
test: process (clk)
begin
temp_sig <= '1';
if (temp_sig = '1') then
output <= temp_sig;
else
output <= '0';
end if;
temp_sig <= '0';
end process test;
end behav;
signal sig : std_logic_vector(1 downto 0);
signal sig_sig, var_sig : std_logic;
begin
process(clk48,rst)
variable var :
begin
std_logic_vector(1 downto 0);
if rst= '0' then
var_sig <= '0';
var := (others=> '0');
elsif rising_edge(clk48) then
var_sig <= '1'; var := var + 1;
if var = "01" then var := "00"; var_sig <= '0';
else null;
end if;
end if;
var := "00";
end process;
process(clk48,rst)
begin
sig_sig = ‘1’
if rst= '0' then
sig_sig <= '0';
sig <= (others=> '0');
elsif rising_edge(clk48) then
sig_sig <= '1';
sig <= sig + 1;
if sig = "01" then sig <= "00"; sig_sig <= '0';
else null;
end if;
end if;
sig <= "00";
end process;
var_sig = ‘0’
tipos
escalares
access
com virgula
flutuante
discretos
ficheiros
físicos
compósitos
estrutura
(record)
array
tempo
inteiros
unconstrained
enumerações
severity_level
bit_vector
caracteres
boolean
bit
string
constrained
Download

VHDL2