Diseñar e implementar e implementar un microprocesador microprocesador de 8 bits bits con memoria y visualización en leds utilizando VHDL.
1. Formul Formulaci ación ón del proble problema ma
En la prác prácti tica ca de la micr microe oele lect ctró róni nica ca en la univ univer ersi sida dad d fran franci cisc sco o de paul paula a Santander Santander es importante importante que el estudiante este bien familiarizado familiarizado con el Lenguaje Lenguaje de Descripción de hardware VHDL( hardware description language), y a través del semestre se adquieren herramientas para no solo manejar el sistema y las tarjetas de adquisición adquisición de datos sino también también para realizar algunas algunas aplicaciones aplicaciones mas complejas que requieran de la capacidad del estudiante de crear procesos que incluyan el uso de la unidad Aritmetico-Logica ALU, registros, maquinas de estado y sistemas RTL, entre otros sistemas que se simulan en el ámbito del laboratorio, laboratorio, pero la mejor manera manera de poner en práctica dichos dichos conocimientos conocimientos es realizando una aplicación que requiera reunir estos componentes en un único proceso o sistema. El uso de los microprocesadores esta en este momento focalizado en casi todos los ámbitos de la vida que cuente o requiera realizar realizar operaciones ya sean lógicas, matemát matemáticas icas,, desplaza desplazamie mientos ntos como como los proceso procesos s de lavadora lavadoras, s, secador secadoras, as, microondas o cualquier tipo de electrodoméstico que haga uso de secuencias programas de control y más complejas como las millones de operaciones que debe realizar realizar un sistema sistema de alto rendimient rendimiento, o, celulare celulares, s, palm y por supuest supuesto o computadoras. Pero para los estudiantes de microelectrónica es importante conocer el uso y aplicac aplicación ión de los micropro microproces cesador adores es pero es mas importan importante te implem implementa entarr un sistema básico como es un microprocesador de 8 bits en Lenguaje de Descripción de hardwa hardware re VHDL( hardware hacien endo do uso uso de los los hardware description description language) language), haci conocimientos adquiridos durante el semestre en el manejo y la implementación de diferentes aplicaciones aplicaciones como lo son registros universales, universales, banco de registros registros o memo memoria ria,, regis registro tros s desp desplaz lazado adores res,, regis registro tro sumad sumador or y resta restador dor regis registro tro de oper operac acio ione nes s lógi lógica cas s y otro otros s comp compon onen ente tes s que que no solo solo sirv sirven en para para que que el estudiante desarrolle habilidades y destrezas en el uso de esta herramienta de software sino también para que se prepare un camino que tenga como objetivo el desarrollo desarrollo y puesta en práctica de un microprocesador microprocesador de 8 bits que realice como mínimo cuatro o cinco de las operaciones básicas de un microprocesador y que use como interfaz interfaz una tarjeta de adquisición adquisición de datos y periféricos periféricos de entrada y salida.
2. Ju Just stif ific icac ació ión n Los microprocesadores pueden ser de uso o propósito general, es decir, que perm permite iten n ser ser manip manipula ulados dos para para reali realiza zarr cualqu cualquier ier tarea tarea dentro dentro del del rango rango de operación del microprocesador microprocesador o de las cantidad de instrucciones y capacidad de de ejecución del sistema y de propósito especifico o aplicaciones especificas que son llamados también sistemas embebidos que son los que se realizan para una tarea única y determinada por el programador estos últimos además de que pueden ser basta bastante nte comp comple lejos jos gener generalm alment ente e se carac caracter teriza izan n por por tener tener un gran gran valor valor comercial; comercial; pero para para conocer conocer mas a fondo no solo la capacidad capacidad sino también también la cantidad de instrucciones de un microprocesador es importante partir desde la esencia o el inicio del sistema y que mejor forma de realizar esta labor si no es diseñ diseñand ando o un sistem sistema a que que cumpl cumpla a con con los requer requerim imien ientos tos mínim mínimos os para para un microprocesador que son ALU registros, contador, unidad central de proceso. El desarrollo de este sistema también permite al estudiante introducirse en el mundo de los programadores y desarrolladores de sistemas complejos como son los microprocesadores ya que estos realizan funciones que se puede simular en menor escala con un sistema de VHDL.
3. Objetivo general y específicos
Objetivo general Diseño e implementación un microprocesador de 8 bits tipo Von Neuman, cuya estructura responde a la realización de operaciones lógicas y matemáticas.
Objetivos específicos • Orientación, organización y documentación de el proyecto. • Establecimiento de un set de instrucciones para el microprocesador. • Diseño e implementación, utilizando la herramienta de xilinx ISE Foundation, cada uno de los módulos de la estructura. (Diseño Comportamental con VHDL) • Implementación del Top Level asociando los módulos desarrollados durante las prácticas. • Programar una aplicación sencilla en el microprocesador desarrollado durante el semestre. • Obtener las conclusiones a que diera lugar el trabajo.
4. Marco referencial
Antecedentes -
Simulación de un procesador de 8 bits con Lenguaje de Descripción de Hardware VHDL mediante metodologías de diseño descendente
Descripción: Este documento presenta una visión del diseño descendente de un sistema digital, usando el lenguaje VHDL (VHSIC Hardware Description Lenguage). Se examinan las diferentes etapas de diseño descendente, el cual parte de unos requerimientos específicos de alto nivel que deben ser cumplidos por el sistema para conseguir un óptimo desempeño. El sistema diseñado es un procesador de ocho bits.
Presentado por: Luis Eduardo Abad Quintero
Marco teórico y conceptual Si se requiere tener una estructura fundamental común, los microprocesadores cuentan con un ciclo de desarrollo general, este ciclo muestra los avances de la ingeniería para maximizar la posibilidad de realizar un sistema efectivo y confiable Cada ciclo de desarrollo se identifica mediante un bloque con una actividad dominante y el resultado primario de cada fase se presenta en la salida del bloque, cada resultado debe estar representado por documentación que describa el sistema en esa etapa en la figura1. Se muestra el ciclo de desarrollo de cualquiers sistema embebido
Partes que fueron realizadas por los programadores
Esta se realizo usando los programas ise fundation de xilinx y la fpga
Figura 1. Ciclos de desarrollo de un sistema
En la figura 1., se presentan las fases que ocurren por separado o en paralelo pero solo una a la vez y en secuencia , a continuación se presentan la descripción de las fases que son necesarias para este procedimiento.
Análisis de requerimientos Este análisis presenta un examen a detalle de las necesidades del usuario final, es decir, el problema por resolver. En esta etapa interviene todos aquellos que necesitan del sistema y lo que quieren que hagan y esto ultimo son el punto de inicio del sistema para la posible reactivación para las demás etapas.
Especificaciones Se basan en los requerimientos funciones, operaciones y la interacción con el usuario. Estas se definen y se simulan para probarlo directamente.
Arquitectura del sistema Esto hace referencia a las especificaciones de software y hadware, es este caso especialmente software; en esta etapa se define que tipo se va a utilizar y cada elemento se describe por separado.
Diseño de hardware Durante este paso se definen las funciones y la interfaz de entrada y salida: las primeras en forma general y la segunda de manera específica. Esta fase incluye el nombre de señales, funciones, y características así como diagramas de bloques del sistema.
Implementación del hardware En esta etapa se eligen los dispositivos que van a integrar el sistema, también se llevan a cabo un análisis de tiempo así como diagramas esquemáticos y diagramas de tiempo. Todo esto permite la construcción de un prototipo.
Pruebas de hardware Esta etapa consiste en realizar pruebas individuales a los dispositivos para determinar sus especificaciones y el tiempo que precisan a fin de ejecutar un proceso.
Diseño de software Se diseña la ejecución del flujo de datos y se implementan las funciones y procedimientos de cada módulo para que interactúen. Lo anterior permite jerarquerizar el funcionamiento de los módulos que componen al sistema.
Implementación del software Consiste en definir los algoritmos a detalle y las estructuras de datos que se van a desarrollar; además, el software se diseña de modo que pueda corren en otras aplicaciones. Todos los errores detectados se corrigen en este momento.
Pruebas de software Los módulos programados en la eta de implementación del software se prueban de forma individual mediante la simulación.
Factores que se deben considerar para el diseño de un sistema embebido Como puede advertirse en el diseño de sistemas embebidos hay que considerar diferentes factores: - Las dimensiones de la memoria de acceso rápido RAM, esta debe ser suficiente para soportar las variables globales y locales. - Es deseable que tenga velocidad para ejecutar el software en tiempo real - El tamaño de los datos de 8, 16, 32 bits, deben coincidir con los datos que se van a procesar - Las operaciones numéricas y lógicas.
GEN TIME
E N T R A D A
D A T O S
UNIDAD DE CONTROL
REGIS
MAR
SALIDA DE DATOS
Figura 2. Diagrama debloques
Diseño de un microprocesador en VHDL
Figura 3. Entidad del microprocesador Como se pudo apreciar antes, los sistemas embebidos tienen una infinidad de aplicaciones, estos dispositivos realizan, operaciones y controlan otros dispositivos para lo cual reciben información y dan ordenes a fin de que los elementos trabajen. El diseño de los microprocesadores se facilita gracias a la diversidad de herramientas que hay en la actualidad, el VHDL es una herramienta muy poderosa debido a su flexibilidad y a la capacidad de simulación en tiempo real del sistema. Como se puede observar de todo las fases del diseño del sistema de microprocesadores solo se centra el diseño en el software.
El diagrama de bloques del procesador que se diseño se muestra en la figura 2. Cabe mencionar que entre sus principales características se encuentra Bus de direcciones de 8 bits, bus de datos de 5 bits,1 linea de interrupción. El micropocesador que se diseño consta de 6 bloques.
A continuación se muestran las funciones y bloques de un tipo de microprocesador y se muestra paso a paso los componentes que utilizamos en el micro-procesador
• • •
Contador de programas (PC) Registro general Unidad de control
• • • • •
Registro MAR Memoria Divisor de frecuencia ALU (Unidad Aritmética y Lógica) Unidad de Control
Figura4. Microprocesador con lineas de conexión entre fuentes
En general este microprocesador realiza cada una de las funciones de la ALU, que son generadas atraves del bus de direcciones que permite la puesta en marcha del contador que sirve para generar los datos de direcciones para reorganizar los datos de memoria y que estos salgan al dato b, para que con el dato a y la instrucción de operación se realice para finalmente mostrar los resultados en los leds.
CONTADOR DE PROGRAMAS Un contador de programa (PC) es un registro de 3 bits que contiene la dirección del siguiente registro donde se encuentra la dirección de la instrucción que se buscará en la memoria para su ejecución. El contador de programa genera direcciones diferentes, es decir, 16 direcciones únicas, a las cuales el micro-procesador debe habilitar cada una de ellas. El bus de direcciones es unidireccional y sólo permite salidas del micro-procesador hacia los diferentes dispositivos.Cada vez que se ejecuta una instrucción, el contador se incrementa.
Figura 5. Entidad contador de programas El contador de programa se inicializa cuando el “bus_uc” entrega la palabra de control que permite que los datos del contador se generen.
REGISTRO MAR El registro permite que las direcciones generadas por el contador de programa salgan con el objeto de leer o escribir un dato, según el valor de la señal R/W. Además de que validad a la memoria para que realice dicha operación
Figura 6. Entidad registro MAR
Cuando sin importar que datos se quiera obtener de la memoria ram el mar permite direccionar este dato calor siempre y cuando este disponible en la memoria
ALU(Unidad Aritmética y Lógica) La unidad aritmética y lógica es una función multioperacional digital de lógica combinacional. Puede realizar un conjunto de operaciones aritmética básicas y otro de operaciones lógicas. En este componente también utilizamos banderas como :
Acarreo (C): este bit (bit 0)del registro de códigos de condición se coloca en “1” si después de la ejecución de ciertas instrucciones hay un acarreo del bit mas
significativo de la operación que se esta ejecutando; de otra manera se coloca en “0”.
Sobreflujo(V): este bit(bit 3) del registro de códigos de condición se pone en “1” cuando un sobreflujo en complemento a 2 resulta de una operación aritmética; se coloca en “0” si el sobreflujo no ocurre en ese tiempo.
Cero(Z): este bit (bit 2) del registro de códigos de condición se coloca en “1” si el resultado de la operación lógica o aritmética es cero.
Negativo(N): este bit (bit 1) del registro de códigos de condición se coloca en “1” si el bit 4 del resultado de una operación lógica o aritmética es igual a “1”, de lo contrario se coloca en “0”.
Figura 7. Entidad ALU La ALU como se decia anteriormente realiza operaciones aritmeticologicas basicas sumar, resta, and, y or en secuencia segunel dato que provenga del bus de direcciones.
UNIDAD DE CONTROL La unidad de control (CU) sincroniza cada una de las acciones realizadas por el micro-procesador; asimismo, determina en que tiempo, hacia donde se mandan los datos o de donde vienen, decodifica y revisa que se ejecute.
Figura 8. Entidad unidad de control
MEMORIA La memoria mem, es la que registra los datos con el cual se va a realizar la operación en la alu, además esta muestra el dato después de que se habilita en el registro mar.
Figura 9. Entidad memoria
DIVISOR DE FRECUENCIA Es uno de los bloques mas importantes ya que este es el que genera los tiempos de ejecución y va directo a la unidad de control. El divisor de frecuencia permite generar tiempos de 1 segundo y también permite que los datos de contador de programa se generen de forma adecuada.
Figura 10. Entidad registro divisor de frecuencia
Ver en anexo programa en VHDL INSTRUCCION BITDIR DESCRIPCION A+B A-B AND OR OPERACION A+B A-B AND OR M OP
b RTDO
ADD SUBB AANDB AORB
CARGA DATOS EN A
CARGA SUMA CARGA RESTA CARGA AND CARGA OR CARGA DATO EN B MUESTRA RESULTADO
DIR 000 001 010 111 DIRECCIONAMIENTO 10100 10001 10110 10010 X1XXXX
TABLA1. INSTRUCCIONES
ASIGNACION DE PINES E6 C5 C6 C7 C8 C9 A3 A4 A5 B7 B8
ENTRADAS
SALIDAS
4 7 6 9 8 11 10 13 12 15 14 17 16 19 18 21 20 VCC 22 TIERRA 24 TABLA3. ASIGANCION DE PINES
ASIGNACION PINES D6 E7 D7 D8 D10 B4 B5 B6 3 1
6. DISEÑO METODOLÓGICO DEFINITIVO 6.3
ESQUEMA TEMÁTICO DE LOS ALCANCES TÉCNICOS
6.3.1 ACTIVIDADES Y METODOLOGÍA Para cumplir con los objetivos propuestos se llevó a cabo las siguientes actividades y metodologías:
Se recolectó la información necesaria respecto al diseño e implementación del microporcesador. •
Actividad: la información que se requería para la metodología de diseño y arquitectura se obtuvo a través de las clases y de los laboratorios. con base al diseño e implementación de una interfaz grafica, de acuerdo a los sistemas de control y automatización.
•
Metodología: Se fueron implementado una a una las fuentes que se hacen necesarias para organizar y redireccionar los elementos del microporcesador.
Se diseñó una interfaz gráfica óptima y sencilla, para el desarrollo de l micro porecesador. •
Actividad: Se diseñó una interfaz grafica que es de fácil manejo
•
Metodología: Se desarrolló atraves del la información adquirida por los libros y el profesor y el uso de la aquitectura Von Newman
•
cumpliendo con todos los requisitos planteados, y se hicieron exposiciones y foros en internet para promulgar los beneficios.
5. Cronograma
ACTIVIDAD
Diseño y simulación ALU Diseño y simulación contador
SEMANA
1 2 3 4 5 6 7 8 9 10 11 12
Diseño y simulación mem y mar. Diseño y simulación contador Diseño y simulación divisor de frec. Diseño y simulación unidad de control Unificación del las fuentes pruebas Entrega de proyecto final
Tabla 3. Cronograma de actividades .
Bibliografía
•
MAXINE, David, El arte de programar sistemas digitales
webgrafia •
http://pci.unalmzl.edu.co/Tesis/luiseduardoabad.pdf
•
http://www.iberchip.net/IX/Articles/POST-123.pdf
•
↑ «The Intel 4004: A testimonial from Federico Faggin, its designer, on the first microprocessor's thirtieth birthday». Faggin's own 4004 website.
•
↑ «Lista Top500 de noviembre de 2002». Top500.
•
↑ «Molibdenita, ¿adiós al silicio?». MuyComputer.com.
•
↑ http://www.profesorbot.com/curiosidad/nobel-de-fisica-grafeno/
•
↑ «Core 2 Extreme: 3,66 GHz And FSB 1333 - Review Tom's Hardware : THG Tuning Test: Core 2 Extreme vs. Athlon 64 FX-62»
•
ANEXOS
TODOTODITO -library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity MEM is port (clk_mar: in std_logic; --RD: in STD_LOGIC; WR: in STD_LOGIC; ADDR: in STD_LOGIC_VECTOR(7 downto 0); DIN: in STD_LOGIC_VECTOR(7 downto 0); DOUT: out STD_LOGIC_VECTOR(7 downto 0)); end MEM; architecture Behavioral of MEM is signal flash : STD_LOGIC_VECTOR(7 downto 0); --signal addr_m: std_logic_vector (7 downto 0); begin
process ( clk_mar, WR, ADDR, DIN) begin if clk_mar'event and clk_mar='1' then if (WR = '1') then flash <= DIN; end if; if (WR = '0') then case ADDR is when "00000000" => DOUT <= "00000010"; -when "00000001" => DOUT <= "00000011"; -when "00000010" => DOUT <= "00000001"; -when "00000011" => DOUT <= "11010101"; -when "00000100" => DOUT <= "00000001"; -when "00000101" => DOUT <= "00000010"; when "00000110" => DOUT <= "00000010"; -when "00000111" => DOUT <= "00000010"; ---when "00001000" => DOUT <= "00000000"; ---when "00001001" => DOUT <= "00000000"; --
--
--when "00001010" => DOUT <= "00000000"; -when others => DOUT <= "11111111"; end case; end if; end if; end process; end Behavioral;
DIVISOR_RELOJ Company: -- Engineer: --- Create Date: 17:59:32 07/1/2011 -- Design Name: -- Module Name: divisor_reloj - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: --- Dependencies: --- Revision: -- Revision 0.01 - File Created -- Additional Comments: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity div_clk is port( clk_div:in std_logic; reloj:out std_logic); end div_clk; architecture Behavioral of div_clk is signal aux:integer range 0 to 45000000 ; begin process(clk_div,aux) begin if clk_div'event and clk_div='1' then aux<=aux+1; if aux=45000000 then reloj<='1'; aux<=0; else reloj<='0'; end if; end if; end process; end Behavioral;
UNIDAD_CONTROL library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity U_CONTROL is
port(
inst : in STD_LOGIC_VECTOR (2 downto 0);--dato de entrada y es un vector de operacion rst_uc: in std_logic; -- reset datin: in std_logic_vector (3 downto 0); -- dato de entrada para operacion clk_uc : in STD_LOGIC; -- reloj del divisor en: in std_logic; --no operando dato_uc: out std_logic_vector ( 7 downto 0); -- resultado operacion y es una senal bus_uc: out std_logic_vector (4 downto 0); --vector de interrupciones y es una senal load_uc : out STD_LOGIC_VECTOR (2 downto 0)); -- senal de salida
end U_CONTROL; architecture Behavioral of U_CONTROL is type estado is (ini,load_ins, add,subb,aandb,aorb); signal presente,futuro: estado; signal sal_dat: std_logic_vector ( 7 downto 0); begin process (rst_uc,inst, clk_uc) begin if rst_uc='1' then futuro<=ini; else case presente is when ini=> load_uc<="000"; bus_uc<="10000"; sal_dat<="00000000";
case inst is when "000" => futuro <=add; when "001"=> futuro <=subb; when "010"=> futuro <=aandb; when "011"=> futuro <=aorb; when others => futuro <=ini; end case; when add=> bus_uc<="10100"; load_uc<="000"; futuro <= ini; sal_dat<="0000"&datin;
when subb => bus_uc<="10001"; load_uc<="001"; futuro <= ini; sal_dat<="0000"&datin; when aandb => bus_uc<="10110"; load_uc<="010"; futuro <= ini; sal_dat<="0000"&datin; when aorb => bus_uc<="10010"; load_uc<="011"; futuro <= ini; sal_dat<="0000"&datin;
when others => futuro <=ini;
end case; end if;
end process; process (clk_uc,presente) begin if clk_uc'event and clk_uc='1' then presente<=futuro; dato_uc<=sal_dat;
end if; end process;
end Behavioral;
CONTADOR library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity contador is port ( clk_c, en_c, e_cc: in std_logic; load_c: in std_logic_vector (2 downto 0); sal_c : OUT std_logic_vector (2 downto 0); en_ptc: in std_logic; det_c: in std_logic); end contador; architecture Behavioral of contador is signal cont :std_logic_vector(2 downto 0); begin process (clk_c,en_c,e_cc, load_c,en_ptc ) begin if clk_c='1' and clk_c'event and en_ptc='0' then -- enable palabra control if e_cc='1' then -- control if en_c='1' then -- eneable para contar cont<=load_c; elsif en_c='0' then cont <= cont + 1; elsif det_c='1' then cont<=cont; elsif cont="111" then cont<="000"; end if; end if; end if;
if en_ptc='1' then cont <= (others => '0'); end if; sal_c<=cont; end process; end behavioral;
ALU library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ALU8 is port( --clk: in std_logic; a,b: in std_logic_vector(7 downto 0); MC: in std_logic_vector(2 downto 0); -- selector de operacion oper: out std_logic_vector(7 downto 0); rcc: inout std_logic_vector(3 downto 0)); --- indica si h ay sobreflujo, bandera cero, signo y acarreo end ALU8; architecture Behavioral of ALU8 is signal c1: std_logic_vector (5 downto 0); SIGNAL OP: std_logic_vector (7 downto 0); begin process (MC, a,b ) variable cout: std_logic; begin case MC is when "000"=> OP <= (a + b); c1(0)<=(a(1) and b(1)) or ((a(0)and b(0)) and (a(1) xor b(1))); c1(1)<=(a(2) and b(2)) or (c1(0) and (a(2)xor b(2))); c1(2)<=(a(3) and b(3)) or (c1(1) and (a(3)xor b(3))); c1(3)<=(a(4) and b(4)) or (c1(2) and (a(4)xor b(4))); c1(4)<=(a(5) and b(5)) or (c1(3) and (a(5)xor b(5))); c1(5)<=(a(6) and b(6)) or (c1(4) and (a(6)xor b(6))); cout:=(a(7) and b(7)) or (c1(5) and (a(7)xor b(7))); when "001" => OP <= (a - b); if (a>=b) then cout:='1'; c1(0)<='1'; else cout:='0'; c1(0)<='0'; end if; when "100" => OP <= (a and b); cout:='0'; c1(0)<='0'; when "011"=> OP <= (a or b); cout:='0'; c1(0)<='0'; when "010"=> OP <= (not a); cout:='0'; c1(0)<='0'; when "101"=> OP <= (a xor b); cout:='0'; c1(0)<='0'; when "110"=> OP <= (a or "11111111"); cout:='0'; c1(0)<='0'; when others => null; end case; oper<= OP; rcc(3)<= cout xor c1(5); -- sobrefujo rcc(2)<= not (OP(7) or OP(6) or OP(5) or OP(4) or OP(3) or OP(2) or OP(1) or OP(0));-- cero rcc(1)<= OP(7);-- signo rcc(0)<= cout; --acarreo end process; end Behavioral;
MAR
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity MAR is port( CLK_MAR: in STD_LOGIC; EN: in STD_LOGIC; DATA: in STD_LOGIC_VECTOR(2 downto 0); ADDR: out STD_LOGIC_VECTOR(7 downto 0)); end MAR; architecture Behavioral of MAR is begin process(CLK_MAR, EN, DATA) begin if (CLK_MAR'EVENT and CLK_MAR = '1') then if (EN = '0') then ADDR <= "00000"&DATA; end if; end if; end process; end Behavioral;
MEM entity MEM is port (clk_mar: in std_logic; WR: in STD_LOGIC; ADDR: in STD_LOGIC_VECTOR(7 downto 0); DIN: in STD_LOGIC_VECTOR(7 downto 0); DOUT: out STD_LOGIC_VECTOR(7 downto 0)); end MEM; architecture Behavioral of MEM is signal flash : STD_LOGIC_VECTOR(7 downto 0); begin process ( clk_mar, WR, ADDR, DIN) begin if clk_mar'event and clk_mar='1' then if (WR = '1') then flash <= DIN; end if; if (WR = '0') then case ADDR is when "00000000" => DOUT <= "00000010"; -- lda when "00000001" => DOUT <= "00000011"; -- 226 when "00000010" => DOUT <= "00000001"; -- suma when "00000011" => DOUT <= "11010101"; -- 5 when "00000100" => DOUT <= "00000001"; -- bnz when "00000101" => DOUT <= "00000010"; -- 2 when "00000110" => DOUT <= "00000010"; -- lda when "00000111" => DOUT <= "00000010"; -- 10 when others => DOUT <= "11111111"; end case; end if; end if; end process; end Behavioral;
DISEÑAR E IMPLEMENTAR E IMPLEMENTAR UN MICROPROCESADOR DE 8 BITS CON MEMORIA Y VISUALIZACIÓN EN LEDS UTILIZANDO VHDL.
ANDRES MAURICIO QUINTERO COD: 0160839 KELLY JOHANA RODRIGUEZ CADAVID COD:0160706 CAROLINA PAEZ VALDEZ COD:0160749 DANIEL MAURICIO CONTRERAS ORTIZ COD: 0160555
PRESENTADO A ING. JOSE ARMANDO BECERRA
Universidad francisco de Paula Santander Facultad de ingenierías Departamento de electricidad y electrónica Ingeniería electrónica 2011