Autor Tema: Máquina digital simple  (Leído 10733 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Máquina digital simple
« en: 21 de Mayo de 2006, 20:30:54 »
Esta semana estamos por entregar una pequeña máquina digital (de 4 bits), faltan las pruebas finales, grabarla en la tarjeta (tenemos una Spartan-3 Starter Kit Board), y crear el reporte. Comento porque tengo la intención de poner todo lo que hicimos por aquí, una vez concluido me pondré a tratar algo con lo de VGA (por eso es que he andado de "metiche" en los otros posts :P).

saludos,
José Jorge (Geo).
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Máquina digital simple
« Respuesta #1 en: 21 de Mayo de 2006, 23:13:47 »
Hola Geo, todo aporte es bienvenido, desde ya muchas gracias en nombre de todos.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Máquina digital simple
« Respuesta #2 en: 24 de Mayo de 2006, 02:25:50 »
Hoy la entregamos ya programada en la tarjeta, y el profesor nos comentó si no teníamos problemas en que usara el proyecto para posiblemente elaborar algún artículo (más que nada desde el punto de vista didáctico) :). Todavía nos falta hacer el reporte, pero por lo pronto pongo una captura de una de las pruebas.

De lo que se puede observar, dato_entrada (el dato de entrada a la memoria cuando esté en modo de escritura) no se usa (sólo se está observando cómo corre el "programa", la memoria ya está programada).
El montón de ctrl_X son las señales de control (si, ya sé, se pueden meter en un vector, de hecho, la señal auxiliar en el código es un std_logic_vector :P).
Lo demás, son las salidas de cada uno de los registros, visualizados para ir observando el comportamiento, en lo que presentamos el único que interesa es el acumulador (salida_AC), que es donde se observa el resultado de las distintas operaciones.

La primera instrucción del programa es borrar el acumulador (bueno, allí se ve que también se puso a 0 por el reset :P); luego, cargar un 4 al acumulador; posteriormente sumar al acumulador el dato ubicado en la posición 13 de la memoria (que es un 5), por lo que se observa un 9 en el acumulador ( 4 + 5 :P); a continuación complementa el contenido del acumulador( 9=1001 -> 0110=6); y así va... Esas instrucciones las va obteniendo de la memoria (16x4).

A ver si lo siguiente que pongo es el diagrama a bloques, y alguna breve explicación de qué es esto :P.

Por cierto, ¿alguien conoce algún programa para hacer diagramas a bloques? (Cajitas con flechas, comentarios al lado, texto, etc.)

Saludos,
José Jorge (Geo).
« Última modificación: 24 de Mayo de 2006, 02:32:32 por Geo »
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Máquina digital simple
« Respuesta #3 en: 10 de Septiembre de 2006, 19:11:35 »
¡Fiuuu, cuánto tiempo :P! Bueno, no puedo quedar mal así que aquí empiezo :P.

Diseño de una máquina digital con VHDL
Resumen.

Una computadora digital en VHDL es un dispositivo de uso general que puede ejecutar diversas operaciones y, además, que se le puede instruir en cuanto a las operaciones específicas que debe efectuar. El usuario de una computadora puede controlar el proceso por medio de un programa. Un programa es un conjunto de instrucciones que especifica las operaciones, operandos y la secuencia en que ocurrirá el procesamiento. La tarea de procesamiento se puede alterar especificando un programa nuevo con instrucciones diferentes o bien especificando las mismas instrucciones con datos distintos. Los códigos de instrucciones, junto con los datos, se almacenan en la memoria. El control lee cada instrucción de la memoria y la coloca en un registro de control. Después, el control interpreta la instrucción y procede a ejecutarla emitiendo una secuencia de microoperaciones. Toda computadora tiene un conjunto de instrucciones propio y único. La capacidad de almacenar y ejecutar instrucciones es la propiedad más importante de la computadora de uso general.

Estas son las instrucciones que puede realizar la máquina digital que aquí se describe, la arquitectura es de acumulador (todos los resultados de las operaciones quedan en el acumulador):
  • CLRA
    Limpia el acumulador (lo pone a 0).
  • LDI OPRD
    Carga el dato OPRD al acumulador.
  • LDA ADRS
    Carga al acumulador el dato ubicado en la posición ADRS de la memoria.
  • CMA
    Complementa el dato en el acumulador.
  • ADI ADRS
    Suma al acumulador el dato ubicado en la posición ADRS de la memoria.
  • ADI OPRD
    Suma al acumulador el dato OPRD.
  • SUBA ADRS
    Resta al acumulador el dato ubicado en la posición ADRS de la memoria.
  • SUBA OPRD
    Resta al acumulador el dato OPRD.

Bueno, ahora sigue la tabla de las señales de control y el diagrama a bloques, pero los pondré luego porque ahorita no tengo Office en la computadora porque acabo de reinstalar TODO (estoy usando AbiWord en lo que consigo Word u OpenOffice y no se ven las imágenes del reporte :P). Después de eso pondré el código de cada unidad/registro. Nos vemos :D.

Saludos,
JJ (Geo).
« Última modificación: 10 de Septiembre de 2006, 19:20:40 por Geo »
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado lous

  • PIC10
  • *
  • Mensajes: 5
Re: Máquina digital simple
« Respuesta #4 en: 11 de Septiembre de 2006, 07:54:47 »
 :-/ Codigo Codigo, Yo quiero ver el codigo

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Máquina digital simple
« Respuesta #5 en: 15 de Septiembre de 2006, 02:10:17 »
Este es el diagrama a bloques :D.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Máquina digital simple
« Respuesta #6 en: 15 de Septiembre de 2006, 02:14:51 »
Código del registro de datos (DR)

Código: VHDL
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.STD_LOGIC_ARITH.ALL;
  4. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5.  
  6. entity RegDR is
  7.     Port ( RST : in std_logic;
  8.            Clk : in std_logic;
  9.            LDDR : in std_logic;
  10.            DR_in : in std_logic_vector(3 downto 0);
  11.            DR_out : out std_logic_vector(3 downto 0));
  12. end RegDR;
  13.  
  14. architecture Behavioral of RegDR is
  15.  
  16.         signal DRLD: std_logic_vector(3 downto 0);
  17.  
  18. begin
  19.  
  20.         process(Clk)
  21.           begin
  22.              if clk'event and clk='1' then
  23.                 if RST='1' then
  24.                DRLD <= (others =>'0');
  25.                 elsif LDDR = '1' then
  26.                   DRLD <= DR_in;
  27.                 end if;
  28.              end if;
  29.         end process;
  30.  
  31.         DR_out <= DRLD;
  32.  
  33. end Behavioral;

Registro de direcciones (AR)
Código: VHDL
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.STD_LOGIC_ARITH.ALL;
  4. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5.  
  6. entity RegAR is
  7.     Port ( RST : in std_logic;
  8.            Clk : in std_logic;
  9.            LDAR : in std_logic;
  10.            AR_in : in std_logic_vector(3 downto 0);
  11.            AR_out : out std_logic_vector(3 downto 0));
  12. end RegAR;
  13.  
  14. architecture Behavioral of RegAR is
  15.  
  16.         signal ARLD: std_logic_vector(3 downto 0);
  17.  
  18. begin
  19.        
  20.         process(Clk)
  21.              begin
  22.              if clk'event and clk='1' then
  23.                    if RST='1' then
  24.                    ARLD <= (others =>'0');
  25.                    elsif LDAR = '1' then
  26.                      ARLD <= AR_in;
  27.                    end if;
  28.                 end if;
  29.         end process;
  30.  
  31.         AR_out <= ARLD;
  32.  
  33. end Behavioral;
Como puede observarse, son exactamente iguales. Esta fué una primera implementación con muchas cosas que pueden mejorarse (jeje, así pueden meterle mano quien se anime a programarla), yo lo hice con un sólo registro instanciándolo las veces que fuera necesario :).

Saludos,
JJ (Geo).
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Máquina digital simple
« Respuesta #7 en: 20 de Septiembre de 2006, 18:24:16 »
Registro de instrucciones:
Código: VHDL
  1. library IEEE;
  2.            use IEEE.STD_LOGIC_1164.ALL;
  3.        use IEEE.STD_LOGIC_ARITH.ALL;
  4.        use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5.  
  6.        entity RegIR is
  7.            Port ( RST : in std_logic;
  8.                   Clk : in std_logic;
  9.                   LDIR : in std_logic;
  10.                   IR_in : in std_logic_vector(3 downto 0);
  11.                   IR_out : out std_logic_vector(3 downto 0));
  12.        end RegIR;
  13.  
  14.        architecture Behavioral of RegIR is
  15.  
  16.         signal IRLD: std_logic_vector(3 downto 0);
  17.  
  18.        begin
  19.  
  20.           process(Clk)
  21.          begin
  22.             if clk'event and clk='1' then
  23.                if RST='1' then
  24.                       IRLD <= (others =>'0');
  25.                elsif LDIR = '1' then
  26.                   IRLD <= IR_in;
  27.                end if;
  28.             end if;
  29.           end process;
  30.  
  31.         IR_out <= IRLD;
  32.  
  33.        end Behavioral;

Contador de programa
Código: VHDL
  1. library IEEE;
  2.        use IEEE.STD_LOGIC_1164.ALL;
  3.        use IEEE.STD_LOGIC_ARITH.ALL;
  4.        use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5.  
  6.        entity RegPC is
  7.            Port ( RST : in std_logic;
  8.               Clk : in std_logic;
  9.               INCPC : in std_logic;
  10.                   PC_out : out std_logic_vector(3 downto 0));
  11.        end RegPC;
  12.  
  13.        architecture Behavioral of RegPC is
  14.  
  15.         signal Conta: std_logic_vector(3 downto 0);
  16.  
  17.        begin
  18.  
  19.           process(Clk)
  20.              begin
  21.             if clk'event and clk='1' then
  22.                if RST='1' then
  23.                       Conta <= (others =>'0');
  24.                elsif     INCPC='1' then
  25.                   Conta <= Conta + 1;
  26.                end if;
  27.             end if;
  28.           end process;
  29.  
  30.         PC_out <= Conta;
  31.        
  32.        end Behavioral;
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Máquina digital simple
« Respuesta #8 en: 20 de Septiembre de 2006, 18:26:01 »
Acumulador
Código: VHDL
  1. library IEEE;
  2.          use IEEE.STD_LOGIC_1164.ALL;
  3.          use IEEE.STD_LOGIC_ARITH.ALL;
  4.          use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5.  
  6.          entity RegAC is
  7.               Port ( RST : in std_logic;
  8.                  CLRA : in std_logic;
  9.                      Clk : in std_logic;
  10.                      LDAC : in std_logic;
  11.                      AC_in : in std_logic_vector(3 downto 0);
  12.                      AC_out : out std_logic_vector(3 downto 0));
  13.           end RegAC;
  14.  
  15.           architecture Behavioral of RegAC is
  16.  
  17.         signal ACLD: std_logic_vector(3 downto 0);
  18.  
  19.            begin
  20.  
  21.               process(Clk)
  22.              begin
  23.                  if clk'event and clk='1' then
  24.                     if RST='1' or CLRA='1' then
  25.                            ACLD <= (others =>'0');
  26.                     elsif LDAC = '1' then
  27.                        ACLD <= AC_in;
  28.                     end if;
  29.                  end if;
  30.               end process;
  31.  
  32.         AC_out <= ACLD;
  33.  
  34.             end Behavioral;
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Máquina digital simple
« Respuesta #9 en: 20 de Septiembre de 2006, 18:28:46 »
ALU

Código: VHDL
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.STD_LOGIC_ARITH.ALL;
  4. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5.  
  6. entity ALU4 is
  7.     Port ( A : in std_logic_vector(3 downto 0);
  8.            B : in std_logic_vector(3 downto 0);
  9.            S0 : in std_logic ;
  10.               S1 : in std_logic ;
  11.            S2: in std_logic ;
  12.            G : out std_logic_vector(3 downto 0));          
  13. end ALU4;
  14.  
  15. architecture Behavioral of ALU4 is
  16.  
  17. begin
  18.  
  19.         process(A, B, S0, S1, S2)
  20.            begin
  21.               if S2='0' and S1='0' and S0='1' then
  22.                  G <= A + B;
  23.               elsif S2='0' and S1='1' and S0='0' then
  24.                  G <= A - B;
  25.               else
  26.                  G <= not A;
  27.               end if;
  28.         end process;
  29.  
  30. end Behavioral;

Falta la unidad de control y la instanciación de componentes (hecha en código VHDL, no en esquemático).
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado lous

  • PIC10
  • *
  • Mensajes: 5
Re: Máquina digital simple
« Respuesta #10 en: 29 de Septiembre de 2006, 02:13:21 »
GRACIAS :-/

Desconectado flightcontroller

  • PIC10
  • *
  • Mensajes: 21
Re: Máquina digital simple
« Respuesta #11 en: 26 de Octubre de 2006, 19:03:19 »
Q tal!,
tengo en mi poder el uso de una tarjeta de desarrollo Sparten-3e, me parece que es la misma que la del compañero Geo y este foro es buena opción para hecharla a andar y empezar con pequeños proyectillos,
..estamos en contacto compañeros..

Saludos.


 

anything