elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  VHDL: Leer array de fichero para la memoria de instrucciones de un procesador??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: VHDL: Leer array de fichero para la memoria de instrucciones de un procesador??  (Leído 3,378 veces)
x7

Desconectado Desconectado

Mensajes: 5


Ver Perfil
VHDL: Leer array de fichero para la memoria de instrucciones de un procesador??
« en: 6 Mayo 2013, 23:41 pm »

Hola, tengo un problema con este código de la memoria de instrucciones de mi procesador MIPS. Lo he estado desarrollando en VHDL con ModelSim y aunque he conseguido que funcione insertando manualmente las operaciones, no consigo que lo lea desde un fichero. ¿Alguien sabe cómo? Mi problema está en asignar a cada instrucción (0,4,8,12,..) su salida (palabra de 32 bits).

Para leer sin fichero de texto:

Código
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4. use ieee.std_logic_textio.all;
  5. use std.textio.all;
  6.  
  7. ENTITY Memoria_Ins IS
  8.    port(address_i : IN std_logic_vector (31 DOWNTO 0);
  9.         d_o : OUT std_logic_vector (31 DOWNTO 0));
  10. END Memoria_Ins;
  11.  
  12. architecture funcional of  Memoria_Ins is
  13. type memoria is array(integer range <>) of std_logic_vector(31 downto 0);
  14. signal instrucciones : memoria(0 to 64):=
  15.   (0=>  "11110000000000110000000000000100",
  16.    4=>  "11110000000001010000000000001000",
  17.    8=>  "11000000101000110011000000000001",
  18.    12=> "00000100000010000000000000000000",
  19.    16=> "00001100000001010000000000001100",
  20.    20=> "10001000000000000000000000011100",
  21.    24=> "00000000000000000000000000000000",
  22.    28=> "11000001010001010001100000000101",
  23.    others=> "11111100000000000000000000000000");
  24.  
  25. begin
  26.  
  27.  d_o<=instrucciones(conv_integer(address_i));
  28.  
  29. end funcional;

Para leer con fichero de texto (intento de process):

Código
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4. use ieee.std_logic_textio.all;
  5. use std.textio.all;
  6.  
  7. ENTITY Memoria_Ins IS
  8.    port(address_i : IN std_logic_vector (31 DOWNTO 0);
  9.         d_o : OUT std_logic_vector (31 DOWNTO 0));
  10. END Memoria_Ins;
  11.  
  12. architecture funcional of  Memoria_Ins is
  13. type memoria is array(integer range <>) of std_logic_vector(31 downto 0);
  14. signal instrucciones : memoria(0 to 64);        
  15.  
  16.      --0 addi r0,r3,4
  17.      --4 addi r0,r5,8
  18.      --8 add r5,r3,r6 --12
  19.      --12 lw r0,0(r8)
  20.      --16 sw r0,12(r5)
  21.  
  22. begin
  23.  
  24.  d_o<=instrucciones(conv_integer(address_i));
  25.  
  26. process
  27.   FILE vector_test : text OPEN read_mode IS "test.txt";
  28.    VARIABLE vector : LINE;
  29.    VARIABLE instrucciones_aux : memoria(0 to 64);
  30.    VARIABLE palabra : std_logic_vector (31 DOWNTO 0);
  31.    VARIABLE instruccion : INTEGER;
  32.  
  33.  BEGIN
  34.     instruccion:=0;
  35.     WHILE NOT endfile(vector_test) LOOP
  36.  
  37.       readline(vector_test,vector); --Guardo la linea en vector
  38.       read(vector,palabra); --Obtengo los 32 bits de la palabra y los guardo en palabra
  39.       Instrucciones_aux:=(instruccion => palabra, others=> "11111100000000000000000000000000"); --Intento recrear el array de instrucciones con sus salidas
  40.       instruccion:= instruccion + 4; --Sumo 4 para el siguiente ciclo
  41.  
  42.       WAIT FOR 20 ns;
  43.      END LOOP;
  44.  
  45.      instrucciones <= instrucciones_aux;
  46.      file_close(vector_test);
  47. END process;
  48.  
  49. end funcional;

El fichero de texto sólo tiene las palabras de 32 bits:

"11110000000000110000000000000100
11110000000001010000000000001000
11000000101000110011000000000001
00000100000010000000000000000000
00001100000001010000000000001100"

Un saludo foreros ;D


En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: VHDL: Leer array de fichero para la memoria de instrucciones de un procesador??
« Respuesta #1 en: 8 Mayo 2013, 16:58 pm »

Yo hice un ensamblador y un intérprete MIPS en C. Puedes echarle un vistazo si quieres:

https://github.com/tanisperez/MIPS-Virtual-Machine

Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer temperatura procesador
Programación Visual Basic
G3r4rD 1 1,762 Último mensaje 29 Julio 2007, 19:13 pm
por ActiveSheet
Procesador para funcionar con memoria de 2200 MHz
Hardware
amt1963 5 4,502 Último mensaje 10 Agosto 2010, 18:56 pm
por amt1963
Leer y manipular fichero.txt en C.
Programación C/C++
tvirus 1 4,605 Último mensaje 8 Diciembre 2010, 23:00 pm
por JuszR
[RESUELTO]codigos de las instrucciones en memoria ¿donde conseguirlas?
Análisis y Diseño de Malware
AlxSpy 3 3,752 Último mensaje 31 Agosto 2011, 05:56 am
por AlxSpy
PROBLEMA EN TRANSFERIR DATOS DE UN FICHERO A UN ARRAY EN C.
Programación C/C++
BJM 1 2,432 Último mensaje 12 Enero 2012, 14:37 pm
por do-while
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines