Usar un testbench en Orcad para probar una ROM

Hola colegas, tengo una dudas en cuanto a a la creación de testbench en vhdl, en particular uno que prueba una memoria ROM. Lo que intento hacer es rellenar los espacios en la ROM (32 espacios de 14 bits) a partir de un archivo de texto en donde están dichos valores. Ahora, en lo que he tenido problemas es en mandar la la signal que contiene los valores en el testbench a la signal de la entidad que describe la rom. A continuación les pongo el código y describo en donde tengo problemas.
Código:
-- Test bench shell
-- Created by OrCAD Express Simulate

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all; 
use std.textio.all;

entity test_schematic1 is end test_schematic1;

architecture testbench of test_schematic1 is

-- Declaration of the component under test
component schematic1
  port (
     ini_eprom : in std_logic_vector(13 downto 0);--IDEALMENTE ESTE PUERTO NO QUISIERA ---QUE EXISTIERA, SOLO LO PUSE PORQ NO SE ENCONTRÉ COMO LIGAR LA LA SIGNAL EN ESTE
--TESTBENCH QUE CONTIENE LOS VALORES DEL ARCHIVO DE TEXTO CON LA SIGNAL QUE SE ---ENCUENTRA EN LA ENTIDAD 
     salida : out std_logic_vector(13 downto 0);
     q1 : in std_logic;
     q2 : in std_logic
      );
end component;

signal   ini_eprom : std_logic_vector(13 downto 0);
signal   salida : std_logic_vector(13 downto 0);
signal   q1 : std_logic;
signal   q2 : std_logic;
type eprom_type is array (0 to 31) of std_logic_vector(13 downto 0);--AQUI DECLARO EL ------TIPO DE VARIABLE QUE REPRESENTA LA ROM  
signal tmp_eprom: eprom_type;--ESTA ES LA SIGNAL QUE CONTIENE LOS VALORES DEL --------ARCHIVO DE TEXTO EN EL TESTBENCH
begin

-- Place stimulus and analysis statements here 
process
BEGIN       
  Q1<='0';WAIT FOR 20 ns;
  Q1<='1';WAIT FOR 20 ns;  
end process; 
 
process 
BEGIN 
  WAIT FOR 5ns;      
  Q2<='0';WAIT FOR 20 ns;
  Q2<='1';WAIT FOR 20 ns;  
end process;        

process    
 file arch:text;
 variable ptr:line;
 VARIABLE DIRECCION:INTEGER:=0;
 variable vecg:std_logic_vector(13 downto 0);
 begin
  file_open(arch,"C:\Program Files\OrCAD\EPROM\INICIALIZACION_EPROM.txt",read_mode);
  while not(endfile(arch)) loop
  readline(arch,ptr);
  read(ptr,vecg);
  tmp_eprom(DIRECCION)<=vecg;--EFECTIVAMENTE SE GUARDAN TODOS LOS VALORES DEL ----ARCHIVO DE TEXTO EN LA VARIABLE tmp_eprom
  ini_eprom<=vecg;--ESTO NO SIRVE  
  DIRECCION:=DIRECCION+1;
  end loop;
  file_close(arch);
  wait;
end process; 


dut :  schematic1  port map (
     ini_eprom => ini_eprom,
     salida => salida,
     q1 => q1,
     q2 => q2
      );

end testbench;

La pregunta principal es... se puede asociar una signal del testbench (en este caso tmp_eprom) con una signal en la entidad. En este caso la signal en la entidad tambien se llama tmp_eprom, pero no actua como la signal del testbench ya que sus valores son indefinidos. Espero haberme explicado bien... gracias.
 
Pensalo un poco mas, hay cosas muy basicas que no hiciste

1 Una memorias sin lineas de direccion?
2 Salida son las lineas de datos?

Y el array de memoria tiene que estar dentro de la memoria, no en el testbench.
el testbench es una herramienta virtual, lo unico real es el componente bajo prueba, toda la funcionalidad tiene que estar incluida en el.

Y en respuesta a tu pregunta, en principio y salvo raras excepciones, la manera de ligar un testbench a una entidad es a traves de sus puertos.
 
Última edición:
Pensalo un poco mas, hay cosas muy basicas que no hiciste

1 Una memorias sin lineas de direccion?
2 Salida son las lineas de datos?

Y el array de memoria tiene que estar dentro de la memoria, no en el testbench.
el testbench es una herramienta virtual, lo unico real es el componente bajo prueba, toda la funcionalidad tiene que estar incluida en el.

Y en respuesta a tu pregunta, en principio y salvo raras excepciones, la manera de ligar un testbench a una entidad es a traves de sus puertos.

Lo que pasa es que quiero saber si es posible inicializar el contenido de la ROM el cual esta en una signal de tipo matriz, sin la necesidad de hacerle puertos de direccion y datos, es decir, quisiera que al inicio de la simulación la ROM ya contara en su interior con todos los valores que pongo en el archivo de texto y no meterle esos valores en plena simulación. Se puede?. Y gracias por tu pronta respuesta.
 
Si, se puede y la manera de hacerlo es incluir el mecanismo de inicializacion dentro de la memoria, y no fuera. Pero no entiendo por que hacer una memoria sin puertos... me suena a una memoria autista.
 
Si, se puede y la manera de hacerlo es incluir el mecanismo de inicializacion dentro de la memoria, y no fuera. Pero no entiendo por que hacer una memoria sin puertos... me suena a una memoria autista.

jejeje, bueno en realidad va a contar con 3 puertos: q2->que será un reloj y la rom será sensible a el; addr[4:0]->será la dirección que lea ya que se supone que en el curso de la simulación no va a ser escrita porque ya contendrá los valores dentro; y salida[13:0]->el cual arrojará el dato de la dirección que se le ponga al puerto addr.

Lo que pasa es que yo tomo por supuesto que no es necesario que le coloque un puerto de entrada de datos y otro de lectura/escritura porque se supone que solo va a leer valores que ya van a estar dentro de ella... a lo mejor estoy muyyyy mal pero ese era mi pensar y quisiera que me sacaran de mi ignorancia :D
 
En principio yo le pondria

Direcciones
Datos solo de salida
reloj
al menos un CS para ayudar con la decodificacion
y un pin OE que habilite lqs salidas de datos o las ponga en tri state
 
Atrás
Arriba