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?
Tiene dos soluciones, la primera es usar componentes para definir rom
, coloque este código en la declaración de su arquitectura, entre architecture
y 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.
David
use
, de la misma manera que usa cualquier otra entidad declarada en otros archivos.