Sunteți pe pagina 1din 5

Prctica 1

UPC
Juan Pedro Garca Serrano
Divisin de Ingenieras Campus Irapuato Salamanca
Universidad de Guanajuato
juan_pgs@outlook.com

Abstract En este documento se presenta la arquitectura


bsica de un procesador de primer nivel. Este sistema permite,
mediante una ROM programable, desarrollar una aplicacin que
se adecue al proceso deseado.

I. INTRODUCCION
El microprocesador (o simplemente procesador) es el circuito
integrado central y ms complejo de un sistema informtico; a
modo de ilustracin, se le suele llamar por analoga el
cerebro de un computador.
Es el encargado de ejecutar los programas, desde el sistema
operativo hasta las aplicaciones de usuario; slo ejecuta
instrucciones programadas en lenguaje de bajo nivel,
realizando operaciones aritmticas y lgicas simples, tales
como sumar, restar, multiplicar, dividir, las lgicas binarias y
accesos a memoria.

Cdigo de operacin, que representa la accin que el


procesador debe ejecutar;

Cdigo operando, que define los parmetros de la


accin. El cdigo operando depende a su vez de la
operacin. Puede tratarse tanto de informacin como
de una direccin de memoria.

II. DESARROLLO
El objetivo de este trabajo es desarrollar un programa en la
ROM para un contador de 10 dgitos con habilitador de conteo
y otra entrada que controle el control ascendente o
descendente.

Figura 1. Microprocesador

Una instruccin es una operacin elemental que el procesador


puede cumplir.. Las instrucciones se almacenan en la memoria
principal, esperando ser tratadas por el procesador. Las
instrucciones poseen dos campos:

Figura 2. Mquina de estado de contador.

Como se puede observar, este contador debe de contener dos


evaluadores, uno para la habilitacin y otro para ascender o
descender lo que hace que los estados se dupliquen. Esto se
debe a que solamente se puede comparar un bit por ciclo de
reloj.
Esto provoca que el conteo se realice en 2 ciclos de reloj, muy
rpido para la aplicacin fsica; por lo tanto se opt por hacer
el cambio de reloj cada segundo, lo que provoca agregar una
base de tiempo al sistema, como se muestra en la figura 3.
Figura 6. Contador con habilitador activado y cuenta
descendente.

IV. CONCLUSIN

Figura 3. Bloque del contador de 1 segundo.

Se puede observar que el bloque tiene de entrada un To que es


un tercer evaluador en el sistema, por lo que los estados totales
son 30.

El desarrollo de este trabajo permiti aterrizar las ideas y


definiciones que se tenan acerca de los procesadores. A pesar
de que es un procesador bsico comparado al de una
computadora, este procesador se puede aplicar para muchos
procesos ya que sus recursos son suficientes.
Por otro lado queda claro que es posible ampliar estos recursos
para adaptarlo a aplicaciones especficas, como se hizo con la
base de tiempo de un segundo y el bloque decodificador de 7
segmentos.

El cdigo se muestra en el anexo de la prctica.

III. RESULTADOS
A continuacin se muestran los resultados del cdigo
implementado en la tarjeta.

Figura 4. Contador con habilitador desactivado

.
Figura 5. Contador con habilitador activado y cuenta
ascendente.

V. ANEXO 1 CODIGO DE LA ROM

--Estado S0
when "00000000" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00000000" & "0000000000000000";
when "00000001" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00000001" & "0000000000000000";
when "00000010" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00011011" & "0000000000000000";
-- Estado S1
when "00000011" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00000011" & "0000000000000001";
when "00000100" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00000100" & "0000000000000001";
when "00000101" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00000000" & "0000000000000001";
-- Estado S2
when "00000110" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00000110" & "0000000000000010";
when "00000111" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00000111" & "0000000000000010";
when "00001000" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00000011" & "0000000000000010";
-- Estado S3
when "00001001" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00001001" & "0000000000000011";
when "00001010" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00001010" & "0000000000000011";
when "00001011" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00000110" & "0000000000000011";
-- Estado S4
when "00001100" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00001100" & "0000000000000100";
when "00001101" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00001101" & "0000000000000100";
when "00001110" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00001001" & "0000000000000100";
-- Estado S5
when "00001111" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00001111" & "0000000000000101";
when "00010000" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00010000" & "0000000000000101";
when "00010001" =>

-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00001100" & "0000000000000101";
-- Estado S6
when "00010010" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00010010" & "0000000000000110";
when "00010011" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00010011" & "0000000000000110";
when "00010100" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00001111" & "0000000000000110";
-- Estado S7
when "00010101" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00010101" & "0000000000000111";
when "00010110" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00010110" & "0000000000000111";
when "00010111" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00010010" & "0000000000000111";
-- Estado S8
when "00011000" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00011000" & "0000000000001000";
when "00011001" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00011001" & "0000000000001000";
when "00011010" =>
-EVL
OPC
CJN
NXT
DAT
R <= "0001" & "00" & "1010" & "00010101" & "0000000000001000";
-- Estado S9
when "00011011" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1111" & "00" & "1010" & "00011011" & "0000000000001001";
when "00011100" =>
-EVL
OPC
CJN
NXT
DAT
R <= "1010" & "00" & "1010" & "00011100" & "0000000000001001";
when "00011101" =>
-EVL
OPC
CBN
NXT
DAT
R <= "0001" & "00" & "1101" & "00011000" & "0000000000001001";
when others
=>
-EVL
OPC
UPC
R
<=
"0000"
&
"00"
&

NXT
"0000"

&

DAT
"00000000"

&

"0000000000000000";

S-ar putea să vă placă și