Práctica 3
ARITMÉTICA BOOLEANA Y LÓGICA SECUENCIAL
Introducción y objetivo de la práctica
De manera general, el objetivo de esta práctica es conocer más a fondo el funcionamiento de algunas arquitecturas computacionales, para esto se realizaron dos proyectos provenientes de Nand2Tetris, en donde, en el proyecto dos (2) se busca el poder construir una unidad aritmética lógica; lo que principalmente se hace es crear las bases operacionales de un equipo, esto se denota en que creamos los sumadores, los incrementadores y finalmente la ALU. Por otro lado, en un nivel más alto de complejidad, nos situamos en el proyecto 3, en este lo que se planea es construir la memoria de un equipo, la cual nos permitirá realizar operaciones lógico-secuenciales, en este caso, se empieza con la construcción de un Flip Flop, seguido de un Bit que hace uso del elemento anterior, en ese mismo sentido, se procede a elaborar un Register el cual funciona con solo Bits; con todo lo previo, pasamos a la construcción de la RAM, que usa los Registers. Es decir, que partimos desde las arquitecturas más “simples” hasta llegar a la RAM, la cual es una de las partes más relevantes e importantes a la hora de definir o crear una arquitectura.
Desarrollo
Proyecto 2
HalfAdder
FullAdder
El FullAdder complementa al HalfAdder ya que también representa la suma de dos bits con la característica de aceptar un bit de acarreo como valor de entrada, retornando la suma y el nuevo bit de acarreo obtenido.
Add16
Esta compuerta realiza la adición binaria entre dos cadenas de 16 bits (suma bit a bit) despreciando el ultimo acarreo.
Inc16
Incrementa en 1 una cadena de 16 bits. Se desprecia el acarreo.
ALU (Complete)
Una unidad lógica aritmética es un circuito electrónico digital combinacional que realiza operaciones aritméticas y bitwise (operación bit a bit) en números binarios enteros . Esta se implementa utilizando un conjunto de puertas lógicas básicas, así como sus variaciones multibit y multivía.
Proyecto 3
BIT
Un registro de un solo bit, al que llamamos Bit, o celda binaria, está diseñado para almacenar un solo bit de información (0 o 1). La interfaz del chip consta de: un pin de entrada que lleva un bit de datos; un pin de carga que habilita la celda para escrituras; un pin de salida que emite el estado actual de la celda.
Para leer el contenido de un registro, simplemente sondeamos su salida. En cuanto a la escritura, este hace uso de flip flop, que ya nos proporciona el proyecto de base.
Register
Nuestro objetivo es construir una RAM, la cuál está compuesta por Register de 16 bits. Se usa el BIT creado anteriormente para que permita 16 entradas y nos retorne 16 salidas.
RAM8
En la RAM8 tenemos 8 registros, cada uno de 16 bits. Si se quiere escribir en la RAM, entonces se inserta el bit load, pero si se quiere leer de la RAM, se introduce 0 en el bit load. El address tiene 3 bits con 8 direcciones diferentes para leer o escribir.
RAM64
La RAM64 consta de 8x RAM8. Tiene 64 direcciones de memoria disponibles con 16 bits de largo.
RAM512
La RAM 512 es una estructura similar a la anterior solo que esta vez se aumentando la escala de la RAM.
Esta emplea una dirección de 9 bits para acceder en cada registro.
RAM4k
La RAM 4K se construye con una estructura semejante a la del chip anterior a diferencia que esta vez se aumenta la RAM en escala.
Ahora emplea una dirección de 12 bits para acceder en cada registro.
RAM16k
La RAM 16K es una memoria con 16384 registros, cada uno de ellos de 16 bits cuenta con bus de direcciones de 14 bits.
Para implementar el chip se utiliza un DMux4Way, 4 ram4k y un Mux4Way16.
PC (Program Counter)
Es un contador que consta de 16 bits, en este contador se utilizan buses de 16 bits, posee 2 bits de control, uno de ellos se encarga de definir la lectura de datos, y por su parte, el otro es uno de reinicio.