Uso de la megafunción ROM en código VHDL

He creado una megafunción de ROM utilizando el administrador de complementos MegaWizard. Esto creó un nuevo archivo al que llamé rom.vhd.

Mi código:

library ieee;
use ieee.std_logic_1164.all;

entity first is
port(
PC: in STD_LOGIC_VECTOR(7 downto 0);
data : out STD_LOGIC_VECTOR(7 downto 0);
clock : in STD_LOGIC
);
end first;

architecture behavioral of first is
begin 

rom_inst : rom PORT MAP (PC, clock, data);  

end behavioral;

Recibo el error: Error (10482): error de VHDL al principio.vhd (15): se usa el objeto "rom" pero no se declara

¿Cómo puedo solucionar este problema para que VHDL reconozca que tengo una ROM en mi archivo externo llamado ROM.vhd?

Es probable que lo necesite use, de la misma manera que usa cualquier otra entidad declarada en otros archivos.

Respuestas (1)

Tiene dos soluciones, la primera es usar componentes para definir rom, coloque este código en la declaración de su arquitectura, entre architecturey begin.

component rom is
port (
    PC: in STD_LOGIC_VECTOR(7 downto 0);
    data : out STD_LOGIC_VECTOR(7 downto 0);
    clock : in STD_LOGIC
);

La segunda solución usa la sintaxis VHDL-93 en su lugar. Simplemente reemplace su instanciación con:

rom_inst : entity work.rom PORT MAP (PC, clock, data);

Prefiero esta sintaxis, pero los componentes son más flexibles. Necesita componentes al instanciar un bloque de Verilog, un núcleo de IP o una lista de conexiones. Los componentes también se pueden enlazar de forma diferente a través de bloques de configuración.

Me acabo de dar cuenta de que usaste una megafunción. La segunda técnica solo funciona con archivos vhdl que están en su proyecto.