Seleção de dispositivos (periféricos) segundo um mapa de endereços definido. Entrada e saída tipo Bit_Vector |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
-- exemplo de
selecao de dispositivos -- mapa: endereco(15 14 13 12) dispositivo(7 6 5 4 3 2 1 0) -- 0 0 0 0 0 0 0 0 0 0 0 1 0000 a 0FFF -- 0 0 0 1 0 0 0 0 0 0 1 0 1000 a 1FFF -- 0 0 1 0 0 0 0 0 0 1 0 0 2000 a 2FFF -- 0 0 1 1 0 0 0 0 1 0 0 0 3000 a 3FFF -- 0 1 - - 0 0 0 1 0 0 0 0 4000 a 7FFF -- 1 0 0 - 0 0 1 0 0 0 0 0 8000 a 9FFF -- 1 0 1 - 0 1 0 0 0 0 0 0 A000 a BFFF -- 1 1 - - 1 0 0 0 0 0 0 0 C000 a FFFF ENTITY endereco_a IS PORT (endereco : IN BIT_VECTOR(15 DOWNTO 0); dispositivo_sel : OUT BIT_VECTOR(7 DOWNTO 0)); END endereco_a; ARCHITECTURE teste OF endereco_a IS BEGIN dispositivo_sel <= "10000000" WHEN endereco(15 DOWNTO 14) = "11" ELSE "01000000" WHEN endereco(15 DOWNTO 13) = "101" ELSE "00100000" WHEN endereco(15 DOWNTO 13) = "100" ELSE "00010000" WHEN endereco(15 DOWNTO 14) = "01" ELSE "00001000" WHEN endereco(15 DOWNTO 12) = "0011" ELSE "00000100" WHEN endereco(15 DOWNTO 12) = "0010" ELSE "00000010" WHEN endereco(15 DOWNTO 12) = "0001" ELSE "00000001"; -- "0000" END teste; -- Resultado da sintese: -- *********************************************** -- Device Utilization for EPF10K70RC240 -- *********************************************** -- Resource Used Avail Utilization -- ----------------------------------------------- -- IOs 24 189 12.70% -- LCs 8 3744 0.21% -- DFFs 0 4096 0.00% -- Memory Bits 0 18432 0.00% -- CARRYs 0 3744 0.00% -- CASCADEs 0 3744 0.00% |
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
-- exemplo de
selecao de dispositivos -- mapa: endereco(15 14 13 12) dispositivo(7 6 5 4 3 2 1 0) -- 0 0 0 0 0 0 0 0 0 0 0 1 0000 a 0FFF -- 0 0 0 1 0 0 0 0 0 0 1 0 1000 a 1FFF -- 0 0 1 0 0 0 0 0 0 1 0 0 2000 a 2FFF -- 0 0 1 1 0 0 0 0 1 0 0 0 3000 a 3FFF -- 0 1 - - 0 0 0 1 0 0 0 0 4000 a 7FFF -- 1 0 0 - 0 0 1 0 0 0 0 0 8000 a 9FFF -- 1 0 1 - 0 1 0 0 0 0 0 0 A000 a BFFF -- 1 1 - - 1 0 0 0 0 0 0 0 C000 a FFFF ENTITY endereco_b IS PORT (endereco : IN INTEGER RANGE 0 TO (2**16)-1; dispositivo_sel : OUT BIT_VECTOR(7 DOWNTO 0)); END endereco_b; ARCHITECTURE teste OF endereco_b IS BEGIN WITH endereco SELECT dispositivo_sel <= "10000000" WHEN 16#C000# TO 16#FFFF#, "01000000" WHEN 16#A000# TO 16#BFFF#, "00100000" WHEN 16#8000# TO 16#9FFF#, "00010000" WHEN 16#4000# TO 16#7FFF#, "00001000" WHEN 16#3000# TO 16#3FFF#, "00000100" WHEN 16#2000# TO 16#2FFF#, "00000010" WHEN 16#1000# TO 16#1FFF#, "00000001" WHEN 16#0000# TO 16#0FFF#; END teste; -- Resultado da sintese: -- *********************************************** -- Device Utilization for EPF10K70RC240 -- *********************************************** -- Resource Used Avail Utilization -- ----------------------------------------------- -- IOs 24 189 12.70% -- LCs 8 3744 0.21% -- DFFs 0 4096 0.00% -- Memory Bits 0 18432 0.00% -- CARRYs 0 3744 0.00% -- CASCADEs 0 3744 0.00% |
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
-- exemplo de
selecao de dispositivos -- mapa: endereco(15 14 13 12) dispositivo(7 6 5 4 3 2 1 0) -- 0 0 0 0 0 0 0 0 0 0 0 1 0000 a 0FFF -- 0 0 0 1 0 0 0 0 0 0 1 0 1000 a 1FFF -- 0 0 1 0 0 0 0 0 0 1 0 0 2000 a 2FFF -- 0 0 1 1 0 0 0 0 1 0 0 0 3000 a 3FFF -- 0 1 - - 0 0 0 1 0 0 0 0 4000 a 7FFF -- 1 0 0 - 0 0 1 0 0 0 0 0 8000 a 9FFF -- 1 0 1 - 0 1 0 0 0 0 0 0 A000 a BFFF -- 1 1 - - 1 0 0 0 0 0 0 0 C000 a FFFF LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_bit.ALL; ENTITY endereco_c IS PORT (endereco : IN UNSIGNED(15 DOWNTO 0); dispositivo_sel : OUT BIT_VECTOR(7 DOWNTO 0)); END endereco_c; ARCHITECTURE teste OF endereco_c IS SIGNAL endereco_inteiro : INTEGER RANGE 0 TO (2**16)-1; BEGIN -- converte tipo signed para tipo inteiro endereco_inteiro <= to_integer(endereco); WITH endereco_inteiro SELECT dispositivo_sel <= "10000000" WHEN 16#C000# TO 16#FFFF#, "01000000" WHEN 16#A000# TO 16#BFFF#, "00100000" WHEN 16#8000# TO 16#9FFF#, "00010000" WHEN 16#4000# TO 16#7FFF#, "00001000" WHEN 16#3000# TO 16#3FFF#, "00000100" WHEN 16#2000# TO 16#2FFF#, "00000010" WHEN 16#1000# TO 16#1FFF#, "00000001" WHEN 16#0000# TO 16#0FFF#; END teste; -- Resultado da sintese: -- *********************************************** -- Device Utilization for EPF10K70RC240 -- *********************************************** -- Resource Used Avail Utilization -- ----------------------------------------------- -- IOs 24 189 12.70% -- LCs 8 3744 0.21% -- DFFs 0 4096 0.00% -- Memory Bits 0 18432 0.00% -- CARRYs 0 3744 0.00% -- CASCADEs 0 3744 0.00% |
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
-- exemplo de
selecao de dispositivos -- mapa: endereco(15 14 13 12) dispositivo(7 6 5 4 3 2 1 0) -- 0 0 0 0 0 0 0 0 0 0 0 1 0000 a 0FFF -- 0 0 0 1 0 0 0 0 0 0 1 0 1000 a 1FFF -- 0 0 1 0 0 0 0 0 0 1 0 0 2000 a 2FFF -- 0 0 1 1 0 0 0 0 1 0 0 0 3000 a 3FFF -- 0 1 - - 0 0 0 1 0 0 0 0 4000 a 7FFF -- 1 0 0 - 0 0 1 0 0 0 0 0 8000 a 9FFF -- 1 0 1 - 0 1 0 0 0 0 0 0 A000 a BFFF -- 1 1 - - 1 0 0 0 0 0 0 0 C000 a FFFF LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; ENTITY endereco_d IS PORT (endereco : IN STD_LOGIC_VECTOR(15 DOWNTO 0); dispositivo_sel : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END endereco_d; ARCHITECTURE teste OF endereco_d IS SIGNAL endereco_inteiro : INTEGER RANGE 0 TO (2**16)-1; SIGNAL endereco_numerico : UNSIGNED(15 DOWNTO 0); BEGIN -- converte o vetor tipo std_logic para tipo unsigned converte_para_numerico: FOR i IN 0 TO 15 GENERATE endereco_numerico(i) <= endereco(i); END GENERATE; -- converte tipo unsigned para tipo inteiro endereco_inteiro <= to_integer(endereco_numerico); WITH endereco_inteiro SELECT dispositivo_sel <= "10000000" WHEN 16#C000# TO 16#FFFF#, "01000000" WHEN 16#A000# TO 16#BFFF#, "00100000" WHEN 16#8000# TO 16#9FFF#, "00010000" WHEN 16#4000# TO 16#7FFF#, "00001000" WHEN 16#3000# TO 16#3FFF#, "00000100" WHEN 16#2000# TO 16#2FFF#, "00000010" WHEN 16#1000# TO 16#1FFF#, "00000001" WHEN 16#0000# TO 16#0FFF#; END teste; -- Resultado da sintese: -- *********************************************** -- Device Utilization for EPF10K70RC240 -- *********************************************** -- Resource Used Avail Utilization -- ----------------------------------------------- -- IOs 24 189 12.70% -- LCs 8 3744 0.21% -- DFFs 0 4096 0.00% -- Memory Bits 0 18432 0.00% -- CARRYs 0 3744 0.00% -- CASCADEs 0 3744 0.00% |