El problema que encontré al tratar de compilar en primera instancia este código para el codificador de prioridad, es que usa la función conv_std_logic_vector. La cual, en la libreria IEEE.numeric_std no está definida.
Esto es un problema y de acuerdo a lo leido en los siguientes links
link1, link2, y link3, el uso de esta función se implementa al incluir a std_arith, la cual no es un estándar del IEEE, y que solo fue un "invento" de synopsys. Aunque cabe señalar los siguiente:
Muchos colaboradores de los hilos de los foros consultados, argumentan que nunca han tenido algún problema de compatibilidad al hacer uso de std_arith, y que esto se puede implementar, al pasarle el respectivo parámetro al "compilador" del VHDL.
Pero siguiendo estándares, la implementación del codificador se puede realizar de la siguiente manera:
library IEEE; use IEEE.std_logic_1164.all; -- Para std_logic use IEEE.numeric_std.all; -- Para unsigned entity v74x148b is port( EI_L: in std_logic; I_L : in std_logic_vector(7 downto 0); A_L : out std_logic_vector(2 downto 0); EO_L, GS_L : out std_logic ); end v74x148b; architecture arq1 of v74x148b is signal EI: std_logic; signal I : std_logic_vector(7 downto 0); signal A : std_logic_vector(2 downto 0); signal EO,GS:std_logic; begin codif: process (EI_L, I_L, EI, EO, GS,I,A) variable j: integer range 7 downto 0; begin EI <= not EI_L; I <= not I_L; EO<= '1'; GS<= '0'; A<= "000"; if(EI) = '0' then EO <= '0'; else for j in 7 downto 0 loop if I(j) = '1' then GS<= '1'; EO<= '0'; A<= std_logic_vector(to_unsigned(j,A 'length)); exit; end if; end loop; end if; A_L <= not A; GS_L <= not GS; EO_L <= not EO; end process; end arq1;
El testbench usado para la prueba de este código es el que se muestra a continuación:
library IEEE; use IEEE.std_logic_1164.all; -- Para std_logic use IEEE.numeric_std.all; -- Para signed, unsigned entity v74x148b_tb is end v74x148b_tb; architecture Testbench of v74x148b_tb is -- Component Declaration for the Unit Under Test (UUT) component v74x148b port( EI_L: in std_logic; I_L : in std_logic_vector(7 downto 0); A_L : out std_logic_vector(2 downto 0); EO_L, GS_L : out std_logic ); end component; signal EI_L: std_logic; signal I_L : std_logic_vector(7 downto 0); signal A_L : std_logic_vector(2 downto 0); signal EO_L,GS_L:std_logic; begin uut: v74x148b port map ( EI_L => EI_L, I_L => I_L, A_L => A_L, EO_L => EO_L, GS_L => GS_L); stim_proc: process begin I_L <= "11111111"; EI_L <= '1'; wait for 10 ns; I_L <= "00000000"; EI_L <= '1'; wait for 10 ns; I_L <= "11111111"; EI_L <= '0'; wait for 10 ns; I_L <= "10000000"; EI_L <= '0'; wait for 10 ns; I_L <= "11000000"; EI_L <= '0'; wait for 10 ns; I_L <= "11100000"; EI_L <= '0'; wait for 10 ns; I_L <= "11110000"; EI_L <= '0'; wait for 10 ns; I_L <= "11111000"; EI_L <= '0'; wait for 10 ns; I_L <= "11111100"; EI_L <= '0'; wait for 10 ns; I_L <= "11111110"; EI_L <= '0'; wait for 10 ns; end process; end Testbench;
Y la salida de la señales son las siguientes:
SSSSSS
Se señala que se utilizó la herramienta UMHDL v2.00 de Pablo Garrido de la Universidad Miguel Hernández, de Elche, en su versión para sistema operativo Linux
La siguiente dirección es la indicada por el software, en la sección de acerca de..
http://labatc.umh.es:50005/pgarrido/