Implementación de la arquitectura Zetta – PASO 1


Para la implementación de nuestra arquitectura tengo una restricción: La FPGA de la que dispongo es un chip Cyclone II 2C20 de Altera que viene en la tarjeta de desarrollo DE1 ensamblada por Terasic sin embargo el procedimiento puede ser aplicado a otras tarjetas de desarrollo y chips FPGAs incluso (como las de Xilinx o Actel).

Adicionalmente aclaro que usaré el siguiente software:

Metodología de diseño TOP-DOWN

Como lo que estamos diseñando es un sistema, debemos definir claramente 3 cosas: Entradas, Salidas y Comportamiento. Las entradas y salidas las ingresaremos en forma grafica en Altium Designer.

Empezamos creando un proyecto de FPGA en Altium Designer (Menu New + Project + FPGA Project ) y añadimos un nuevo diagrama de bloques para empezar a ingresar nuestro diseño de sistema.

En la imagen puede verse como queda mi diseño de nivel superior del sistema general en un diagrama de bloques en Altium Designer.

zetta1

El sistema es un bloque (hasta ahora una caja negra) cuyas entradas son las señales clk, reset, y data_rd  y sus salidas son las señales address, data_wr, wr, y rd.

Con esto lo que estoy haciendo es dotando a mi sistema de un bus de comunicación con el mundo exterior, de esta manera el procesador podrá interactuar con otros dispositivos (memorias, LEDs, Registros, UARTs, etc) cuando el programa que este ejecutando use las instrucciones SW y LW.

Explicación de las señales

clk Señal de reloj cuyo flanco de subida es la base de tiempo del sistema.
reset Señal que lleva al sistema a un estado inicial conocido.
address[31..0] Dirección en el bus que se quiere acceder ya sea para escritura o lectura. Observe que la dirección posible es de 32 bits.
data_wr[31..0] El procesador pone en estas líneas el dato que quiere comunicar al dispositivo en la dirección seleccionada. Observe que dato es de 32 bits.
data_rd[31..0] El procesador recibe por estas líneas el dato que el dispositivo seleccionado por la dirección le quiere comunicar. Observe que dato es de 32 bits.
wr Se pone en 1 cuando el procesador quiere comunicar  algo (escribir en el bus).
rd Se pone en 1 cuando el procesador quiere recibir algo. (leer del bus)

Ya que se han explicado las señales, vamos a ver como el procesador puede usar el bus.

Transacción de Lectura (El procesador lee del bus)

  1. El procesador asigna una dirección del dispositivo que quiere leer.
  2. El procesador asigna rd = 1 y wr = 0   (si leer, no escribir)
  3. La señal clk realiza un cambio de 0 a 1 (flanco de subida)

La transacción se considera completa.

Transacción de Escritura (El procesador escribe del bus)

  1. El procesador asigna una dirección del dispositivo que quiere escribir.
  2. El procesador asigna el dato que quiere escribir en data_wr
  3. El procesador asigna rd = 0 y wr = 1   (no leer, si escribir)
  4. La señal clk realiza un cambio de 0 a 1(flanco de subida)

La transacción se considera completa.

Bus inactivo (sin transacción)

  1. El procesador asigna rd = 0 y wr = 0  (no leer, no escribir)
  2. La señal clk realiza un cambio de 0 a 1(flanco de subida)

El bus no realiza ninguna transacción ni de lectura ni de escritura en este ciclo de reloj.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s