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