Xburst-FPGA Interface/es

From Qi-Hardware
Jump to: navigation, search

NOTE, SAKC has been renamed SIE. So, some places SIE is referred to as SAKC.


Contents

[edit] Interfaz entre el procesador y la FPGA

La siguiente figura muestra una arquitectura típica para la comunicación entre un procesador (o CPU) y periféricos externos. En esta arquitectura el procesador actúa como maestro, y sólo el tiene el control de los buses de direcciones y de control.

Arquitectura típica de un computador.


Cada periférico posee un rango de direcciones único (no se comparte con otro) y será utilizado para el intercambio de información con la CPU; esta asignación recibe el nombre de mapeo de memoria. El mapa de memoria proporciona información sobre el rango de memoria asignado a cada periférico, y el decodificador de direcciones se encarga de su implementación física. Cada periférico posee una señal que le indica que el procesador ha iniciado una comunicación con el, esta señal recibe el nombre de Chip Select (CS); El decodificador de direcciones está encargado de activar estas señales de acuerdo al mapa de memoria previamente definido.

[edit] Comunicación Procesador-Periférico

Cuando el procesador necesite un servicio de un determinado periférico, debe colocar en el bus de direcciones una dirección que haya sido asignada al periférico, esto hará que el decodificador de direcciones active su señal de habilitación. En ese momento el periférico seleccionado establece la comunicación con el procesador, si este realiza una operación de lectura, activará la señal nRD y el periférico tomará el control del bus de datos, únicamente el periférico seleccionado debe tomar el control del bus, los demás deben mantener el estado de alta impedancia lo que equivale a que su bus de datos está desconectado, de aquí la importancia de que las direcciones asignadas a los periféricos sean únicos, ya que de no ser así dos periféricos podrían tomar el control del bus, originando un corto circuito que puede ocasionar daños físicos a la plataforma. Si el procesador realiza una operación de escritura activará la señal nRW, colocará en el bus de datos la información a transmitir y el periférico seleccionado la leerá.


[edit] Comunicación Periférico-Procesador

Como se mencionó anteriormente, únicamente el procesador tiene control sobre los buses de direcciones y control, por lo que cuando un periférico necesita comunicarse con el procesador debe utilizar una de 2 opciones:

1. Polling Modificando uno de sus registros internos, de tal forma que cuando el procesador lea el contenido de este registro, se de cuenta de los cambios; Este método requiere que el procesador realice la consulta de forma periódica, y es utilizada frecuentemente en operaciones con el puerto serial.


2. Interrupciones Utilizando una señal llamada Solicitud de Interrupción (IRQ). El procesador tiene una señal IRQ o de Interrupción que cuando es activada hace que el flujo de ejecución del procesador se altere, saltando a una posición de memoria predeterminada que se conoce con el nombre de vector de Interrupción, en esta posición de memoria se debe hacer un llamado a la rutina de Atención de la Interrupción (ISR).

El procesador solo posee una señal IRQ, por lo que para atender a todos los periféricos es necesario que un periférico externo controle las señales de Interrupción generadas por ellos. Este periférico "especial" recibe el nombre de Controlador de Interrupciones Programable (PIC)) y está encargado de realizar las siguientes tareas:

  • Habilitar global e individualmente las Interrupciones.
  • Definir niveles de prioridad a las interrupciones.
  • Proporcionar una interfaz con el procesador.


Cuando un periférico necesita ser atendido por el procesador, activa su señal IRQx, esta es procesada por el PIC, el cual determina si eleva esta solicitud al procesador. Si la señal es dirigida al procesador, este consulta el estado del PIC para determinar la fuente de la interrupción y de esta forma determinar la rutina de atención. Una vez finalizada esta ISR el procesador debe indicarle este estado al PIC.

De nuevo es el procesador el que inicia las comunicaciones hacia los periféricos, y solo tenemos la señal IRQ para forzar un cambio en el flujo de ejecución del programa que haga que se atienda a un determinado periférico.

[edit] Controlador de Memoria Externa EMC

El procesador JZ4725 posee un periférico encargado de controlar memorias externas, este controlador permite manejar memorias estáticas, NOR, NAND y SDRAM. SIE utiliza la señal CS2 que pertenece al segundo banco de memoria estática y se activa (activo bajo) cuando se accede a una dirección en el rango 0x1400|0000 a 0x17FF|FFFF. la siguiente Figura muestra los ciclos de lectura y escritura para este procesador.

Ciclos de Lectura y Escritura de una memoria estática para el procesador JZ4725.

El procesador JZ4725 no proporciona las señales nRD y nWR, por lo que se deben utilizar las señales nRDWR y nWE1. Para poder utilizar el banco 2 del EMC es necesario configurar el registro SMCR2 (Static Memory Controller Register 2) para que refleje el Hardware conectado, en el caso de SIE, es necesario configurar la interfaz como una memoria estática de 8 bits (0xFFF7700)

Descripción del registro SMCR2

Adicionalmente el EMC permite configurar ciclos de Setup (TAS), Wait (TAW) y Hold (TAH), estos parámetros insertan ciclos de reloj durante el proceso de lectura lo que permite adaptar de forma óptima cualquier tipo de memoria con tiempos de acceso diferentes (Ver Figura inmediatamente anterior).

Aquí pueden encontrar un ejemplo en espacio de usuario que permite configuarar el EMC para la plataforma SIE, este ejemplo será explicado detalladamente en otra sección.

[edit] Arquitectura básica de la Interfaz con el Procesador

En la siguiente figura podemos observar el diagrama de bloques de la arquitectura básica implementada en la FPGA de SIE. Esta arquitectura debe conservarse para permitir la comunicación entre el procesador y los periféricos implementados en la FPGA.

Arquitectura básica de la interfaz con el procesador implementada en la FPGA.

En esta figura podemos observar la misma arquitectura presentada anteriormente con las siguiente smodificaciones:

  • Las señales del procesador Address Data nCS2 we0_n no se encuentran en fase con la señal de reloj de la FPGA, por lo que deben ser sincronizadas con este; el módulo SYNC se encarga de esta tarea.
  • No se pueden implementar buses tri-estado en el interior de la FPGA, los buffers tr-estados sólo se pueden utilizar en los pines de la FPGA, por esta razón, los periféricos deben tener dos buses de datos uno de entrada (Color Naranja) y otro de salida (color verde).
  • Se debe proporcionar un circuito a la salida de los buses de los periféricos que permita el paso de la información del periférico seleccionado. En la figura se representa este elemento como un Multiplexor.
  • Debido a que la FPGA es mucho más rápida que el procesador, es necesario generar un pulso con la duración de un ciclo de reloj de la FPGA para la señal de escritura we0_n. Esto se hace para evitar que se realice más de una operación de escritura. Esta tarea es realizada por el módulo Write Pulse Generator, en la figura puede verse el diagrama de tiempos que representa su funcionamiento.
  • Un buffer tri-estado debe controlar el acceso al bus de Datos, este buffer debe presentar un estado de alta impedancia cuando no se selecciona ningún periférico oc uando se realiza una operación de escritura y debe permitir el paso de información desde el periférico seleccionado en las operaciones de lectura.

[edit] Circuito Equivalente en una operación de Lectura

FPGA's equivalent circuit - Processor Read -

Cuando el procesador realiza una operación de lectura coloca la señal nCS2 en un nivel lógico bajo, la señal RDWR_n en alto, con lo que la función (~RDWR_n | nCS2) toma un valor de 0 activando el buffer tri-estado, con lo que el bus de datos de salida del periférico seleccionado es conectado al bus de datos del procesador. La figura Inmediatamente anterior muestra las señales y bloques involucrados en esta operación.

[edit] Circuito Equivalente en una operación de escritura

FPGA's equivalent circuit - Processor Write -

Cuando el procesador realiza una escritura a un determinado periférico el buffer tri-estado y los periféricos que no están seleccionados se encuentran en alta impedancia ((~RDWR_n (1) | nCS2 (0)) = 1) y desactivados respectivamente, con lo que el circuito resultante es el que se muestra en la Figura inmediatamente anterior.

[edit] Implementación de la interfaz en la FPGA utilizando verilog

Aquí pueden encontrar un ejemplo de la implementación de esta interfaz en verilog.

Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export