OpenCores
URL https://opencores.org/ocsvn/phr/phr/trunk

Subversion Repositories phr

[/] [phr/] [trunk/] [doc/] [informe-tesis/] [phd-thesis-template-master/] [Chapter2/] [chapter2.tex] - Rev 253

Go to most recent revision | Compare with Previous | Blame | View Log

%*****************************************************************************************
%*********************************** Second Chapter **************************************
%*****************************************************************************************
 
\chapter{Fundamentos Básicos}
\label{chap:fundamentos}
 
\ifpdf
    \graphicspath{{Chapter2/Figs/Raster/}{Chapter2/Figs/PDF/}{Chapter2/Figs/}}
\else
    \graphicspath{{Chapter2/Figs/Vector/}{Chapter2/Figs/}}
\fi
 
%La \emph{electrónica} ha revolucionado del siglo XX y sigue siendo un impacto en el siglo XXI. El nacimiento y subsecuente crecimiento de la industria de la computación, la creación del teléfono móvil y la \emph{digitalización} de los servicios de televisión y radio son ejemplos de grandes logros tecnológicos que la electrónica ha ofrecido. En las décadas de 1970 y 1980, los sistemas electrónicos se encontraban compuestos de componentes estándares como microprocesadores y varios circuitos integrados (\textsl{Integrated Circuits}, ICs), todo esto sobre una placa de circuitos impresos (\textsl{Print Circuit Boards}, PCBs. Como el nivel de integración creció, el proceso de fabricación de los PCBs se convirtió cada vez más complejo. Esto se debió al incremento de transistores y pines de entrada/salida que implicó el uso de placas multi-capas, logrando desarrollar placas con hasta 20 capas. Así, la probabilidad de conexiones de componentes en forma incorrecta aumentó, particularmente la posibilidad de diseñar con éxitos y probar un sistema en forma funcional antes de ingresar a un proceso de producción. 
 
\section{Dispositivos Lógicos Programables}
\label{sec:fund-pld}
 
Los \emph{Dispositivos Lógicos Programables} (PLDs) fueron introducidos a medidos de 1970s. La idea era construir circuitos lógicos combinacionales que fueran \emph{programables}. Contrariamente a los microprocesadores, los cuales pueden \emph{correr} un programa sobre un hardware \emph{fijo}, la programabilidad de los PLDs hace referencia a niveles de \emph{hardware}. En otras palabras, un PLD es un chip de \emph{propósitos generales} cuyo \emph{hardware} puede ser reconfigurado dependiendo de especificaciones particulares del programador.
 
EL primer PLD se llamaba PAL (\textsl{Programmable Array Logic}). Estos dispositivos disponían solo de compuertas lógicas (no tenían flip-flop), por lo que solo permitía la implementación de circuitos \emph{combinacionales}. Para salvar este problema, Los \emph{\textsl{registered}} PLDs  fueron lanzados pocos después, los cuales incluían un flip-flop por cada salida del circuito. Con esta versión de los PAL, se podría implementar funciones \emph{secuenciales} simples.
 
En el comienzo de 1980s, se agregaba más circuitos lógicos adicionales a la salida  de los PLD. Este circuito de salida se lo identificaba como celda, llamado también \emph{Microcelda}, que contenía (además de flip-flop) compuertas lógicas y multiplexores. Por otra parte, la celda era reprogramable, permitiendo varios modos de operación. Además, se podía proveer una señal de retorno (\textsl{feedback}) desde la salida del circuito a la lógico principal de la PAL, lo que le daba mayor flexibilidad a estos dispositivos reprogramables. Esta nueva estructura era llamada \emph{\textsl{generic PAL}} o GAL. Una arquitectura de dispositivo similar fue conocido como PALCE (\textsl{PAL CMOS Electrically erasable/programmable}).
 
Todos estos chips (PAL, \textsl{registered} PLD, y GAL/PALCE) son ahora categorizados como SPLDs (\textsl{Simple} PLDs). Los dispositivos  GAL/PALCE son los únicos fabricados aún en una encapsulado independiente.
 
Luego, varios dispositivos GAL fueron fabricados en un solo chip, usando un esquema de direccionamiento más sofisticado, mayor tecnología en su fabricación, y varias características adicionales (como soporte JTAG e interfaces para varios estándares lógicos). Esta nueva propuesta se la conoció como CPLD (\textsl{Complex} PLD). Los CPLDs son actualmente muy populares debido a su alta densidad, funcionalidad, y bajo costo.
 
Finalmente, a mediados de 1980s, las FPGA (\textsl{Field Programmable Gate Array}) fueron introducidos al mercado de los IC. Las FPGAs diferían de los CPLDs en su arquitectura. tecnología, recursos internos, y costo. Estos dispositivos tenían como principal objetivo su implementación en diseños de gran requerimientos en recursos de hardware como así también un alto rendimiento. 
 
Un pequeño resumen de los diferentes dispositivos PLDs se puede observar en la Tabla \ref{tab:evo-plds}.
 
\begin{table}[h]
  \centering
  \begin{tabular}[h]{|c|ll|}
    \hline
    \multirow{5}{*}{PLDs} & \multirow{3}{*}{Sample PLD (SPLD)} & \multicolumn{1}{|l|}{PAL} \\
                          &                                    & \multicolumn{1}{|l|}{Registered PAL} \\
                          &                                    & \multicolumn{1}{|l|}{GAL} \\ \cline{2-3}
                          & Complex PLD (CPLD)                 &                           \\ \cline{2-3}
                          & FPGA                               &                           \\ 
    \hline
  \end{tabular}
  \caption{Evolución de los PLDs.}
  \label{tab:evo-plds}
\end{table}
 
Por último, todos los PLDs (\textsl{simple} o \textsl{complex}) son no volátiles. Estos puede ser OTP (\textsl{One-Time Programmable}), en la que pequeños fusibles electrónicos son usados para la reprogramación, de igual forma que las EEPROM o memorias Flash. Las FPGAs, por otra lado, son en su mayoría volátiles. Para estas últimas se deben usar dispositivos externos para cargar las conexiones. 
 
%Actualmente los dispositivos más utilizados son los CPLDs y FPGAs. De estas dos tecnología, se optó por trabajar con las FPGAs pues, como bien se dijo antes, cuentan con mayor recursos de \textsl{hardware} que los CPLDs. Lo que permitirá dar un mayor margen a los desarrollos digitales que se quieran implementar. Se detallará con mayor profundidad la tecnología y estructura de las FPGAs.
 
\section{SPLDs}
\label{sec:fund-pld-spld}
 
Como se mencionó anteriormente, los dispositivos  PAL, PLA y GAL se clasifican como los \textsl{Simple} PLD (SPLDs). Una descripción de las arquitecturas de cada uno de estos dispositivos se presenta a continuación.
 
\subsection{PALs}
\label{sec:fund-pld-spld-pal}
 
Los \textsl{Programmable Array Logic} (PAL) son introducidos por Monolithic Memories Inc. a mediados de 1970. Su arquitectura básica se ilustra en la Figura \ref{fig:pal-arch}, donde se representa con un pequeño círculo las conexiones programables. Como puede verse, el  circuito esta compuesto de un arreglo de compuertas AND \emph{programables}, seguido por un arreglo \emph{fijo} de compuertas OR.
 
La implementación de la Figura \ref{fig:pal-arch} se basa en que cualquier función combinacional puede ser representada como una Suma de Productos (SOP); es decir, si $a_1$, $a_2$, $\cdots$, $a_N$ son las entradas lógicas, entonces cualquier salida combinacional $x$ puede ser compuesta como
\begin{equation}
  \label{eq:sop}
  x = m_1 + m_2 + \cdots + m_M \text{ ,}
\end{equation}
donde $m_i = f_1\left(a_1,a_2,\cdots,a_N\right)$ son los términos mínimos de la función $x$. Por ejemplo
\begin{equation}
  \label{eq:sop-2}
  x = a_1\bar{a}_2 + a_2a_3\bar{a}_4 + \bar{a}_1\bar{a}_2a_3a_4\bar{a}_5
\end{equation}
 
Por lo tanto, el producto (términos mínimos) puede ser obtenido por medio de las compuertas AND, cuya salidas están conectadas a una compuerta OR para calcular su suma.
 
\begin{figure}
  \centering
  \includegraphics[width=0.5\textwidth]{PAL}
  \caption{Arquitectura básica de una PAL.}
  \label{fig:pal-arch}
\end{figure}
 
La principal limitación de esta arquitectura es el hecho de que solo permite la implementación de funciones combinacionales solamente. Para solucionar este problema, las \textsl{registered} PALs fueron lanzadas a fines de la década de 1970s. Estas incluían un flip-flop en cada salida (luego de la compuerta OR en la Figura \ref{fig:pal-arch}), de esta manera permitió la implementación de funciones secuenciales (aunque muy simples).
 
La primeras tecnologías empleadas en la fabricación de los dispositivos PALs fue bipolar, con una tensión de alimentación de 5V y un consumo de corriente al rededor de 200mA. La máxima frecuencia rondaba los 100Mhz, y las celdas programables eran de PROM (\textsl{fuse links}) o EPROM (con un tiemp de borrado de 20min. UV).
 
\subsection{PLAs}
\label{sec:fund-pld-spld-pla}
 
Los PLA (\textsl{Programmable Logic Array}) fueron introducidos a mediados de 1970s (por Signetics Inc.). La arquitectura básica de un PLA se ilustra simbólicamente en la Figura \ref{fig:pla-arch}. Si comparamos esta arquitectura con la Figura \ref{fig:pal-arch}, se observa que la única diferencia fundamental entre estos es que mientras una PAL tiene compuertas AND programables y otras compuertas OR fijas, en el caso de las PLA \emph{ambas} (las compuertas AND y OR) son programables. De esta manera se logra una ventaja en la flexibilidad del diseño. Sin embargo, se presentan elevados tiempos de retardos en los nodos de conexión internos que reducen la velocidad de funcionamiento del circuito.
 
\begin{figure}
  \centering
  \includegraphics[width=0.5\textwidth]{PLA}
  \caption{Arquitectura básica de una PLA.}
  \label{fig:pla-arch}
\end{figure}
 
La tecnología que se empleó en la fabricación de las PLAs fue la misma que en el caso de las PALs. Aunque las PLAs se encuentran obsoletas actualmente, estos han reaparecido como parte de las arquitecturas de las primeras familias de los CPLDs de baja potencia, como por ejemplo la familia de los \emph{CoolRunner} (de Xilinx Inc.).
 
\subsection{GALs}
\label{sec:fund-pld-spld-gal}
 
La arquitectura de las GAL (\textsl{Generic} PAL) fueron introducidas por Lattice Inc. en los comienzos de 1980s. Este contenía varias mejoras sobre los primeros dispositivos PALs:
\begin{enumerate}
\item Se construyeron sealidas más sofisticadas de las celdas (\emph{Macrocell}), las que incluían, además de flip-flop, varias compuertas y multiplexores.
\item Las Macrocell eran programables, permitiendo varios modos de operación.
\item Una señal de ``retorno'' desde la salida a la Marocell al arreglo reprogramable se incluyó, confiriendo al circuito mayor versatilidad.
\item Se utilizaron EEPROM en lugar de la PROM o EPROM.
\end{enumerate}
Como se mencionó, la GAL es el único SPLD que todavía es fabricado en un encapsulado estándar. Además, éste también sirvió como parte en la construcción de la mayoría de los CPLDs.
 
La Figura \ref{fig:gal-arch} muestra un ejemplo de un dispositivo GAL, el GAL16V8. Este circuito cuenta con 16 entradas y 8 salidas, en un \textsl{package} de 20 pines. En cada salida hay una Macrocell (luego de la compuerta OR), que contiene, además del flip-flop, compuertas lógicas y multiplexores. Las interconexiones programables son representadas por pequeños círculos. Una señal de realimentación desde la Macrocell al arreglo programable puede también ser observado. Notar que esta arquitectura se asemeja directamente a la de la PAL (Figura \ref{fig:pal-arch}), excepto por la presencia de una macrocell en cada salida y la señal de realimentación.
 
\begin{figure}
  \centering
  \includegraphics[width=0.9\textwidth]{GAL}
  \caption{Dispositivo GAL 16V8.}
  \label{fig:gal-arch}
\end{figure}
 
Actualmente los dispositivos GALs usan tecnología CMOS, alimentados a 3.3V, tecnología EEPROM o Flash, y alcanzan frecuencias máximas que rondan los 250Mhz. Varias compañías fabrican estos dispositivos (Lattice, Atmel, Texas Instruments, etc.).
 
\section{CPLDs}
\label{sec:fund-pld-cpld}
 
La estructura fundamental en la arquitectura de los CPLDs se ilustra en la Figura \ref{fig:cpld-arch}. Como se puede ver, este consiste en varios PLDs (en general del tipo GAL) con una matriz de \textsl{switches} programables usadas para conectarlos todos juntos a al bloque de entrada y salida. Además, los CPLDs contiene normalmente otras características, como soporte JTAG e interfaz a otros estándares lógicos (1.8V, 2.5V, 5V, etc.).
 
\begin{figure}
  \centering
  \includegraphics[width=0.4\textwidth]{CPLD}
  \caption{Arquitectura básica de un CPLD.}
  \label{fig:cpld-arch}
\end{figure}
 
Son varias las compañías que fabrican CPLDs, entre las más reconocidas tenemos Xilinx, Altera, Lattice, Atmel, Cypress, etc. En las Tablas \ref{tab:char-cpld-xilinx} y \ref{tab:char-cpld-altera} se disponen de las características de dos CPLDs, Xilinx y Altera. Como puede verse, más ade 500 Macrocells y más de 10000 compuertas pueden encontrarse en estos dispositivos. 
 
\begin{table}%[h]
  \centering
  {\footnotesize
    \begin{tabular}[c]{|m{0.2\textwidth}|m{0.2\textwidth}|m{0.2\textwidth}|m{0.2\textwidth}|}%{|l|l|l|l|}
      \hline
      Familia & \textbf{XC9500 (XVm, XL)} & \textbf{CoolRunner XPLA3} & \textbf{CoolRunner II} \\ 
      \hline
      Macrocell & 36 -- 288 & 32 -- 512 & 32 -- 512 \\
      \hline
      \textsl{System gates} & 800 -- 6,400 & 750 -- 12,000 & 750 -- 12,000 \\
      \hline    
      Pines I/O & 34 --192 & 36 -- 260 & 33 -- 270 \\
      \hline
      Frec. máxima interna & 222 Mhz & 213 Mhz & 350 Mhz \\
      \hline
      \multirow{2}{*}{\textsl{Building Block}} & GAL 54V18 (XV, XL) & Bloques PLA & Bloques PLA \\
      & GAL 36V18 (--) & & \\
      \hline
      Voltaje & 2.5 V (XV), 3.3 V (XL), 5 V & 3.3 V & 1.8 V \\
      \hline
      Interconexiones & Flash & EEPROM & \\
      \hline
      Tecnología & 0.35 $\mu$ CMOS & 0.35 $\mu$ CMOS & 0.18 $\mu$ CMOS \\
      \hline
      Corriente estática & 11 -- 500 mA & < 0.1 mA & 22 $\mu$A -- 1 mA \\
      \hline
    \end{tabular}
  } % END \footnotesize{} segmentation
  \caption{Características de los CPLDs de Xilinx.}
  \label{tab:char-cpld-xilinx}
\end{table}
 
\begin{table}%[h]
  \centering
  {\footnotesize
    \begin{tabular}[c]{|m{0.2\textwidth}|m{0.2\textwidth}|m{0.2\textwidth}|m{0.2\textwidth}|}%{|l|l|l|l|}
      \hline
      Familia & \textbf{MAX7000 (B, AE, S)} & \textbf{MAX3000 (A)} & \textbf{MAX II (G)} \\ 
      \hline
      \multirow{2}{*}{Macrocell /} & 32 -- 512 macrocells & 32 -- 512 macrocells & 192 -- 1,700 macrocells \\
      LUTs & & & 240 -- 2,210 LUTs \\
      \hline
      \textsl{System gates} & 600 -- 10,000 & 600 -- 10,000 & \\
      \hline    
      Pines I/O & 32 --512 & 34 -- 208 & 80 -- 272 \\
      \hline
      Frec. máxima interna & 303 Mhz & 227 Mhz & 304 Mhz \\
      \hline
      Voltaje & 2.5 V (B), 3.3 V (AE), 5 V (S) & 3.3 V & 1.8 V (G), 2.5 V, 3.3 V \\
      \hline
      Interconexiones & EEPROM & EEPROM & Flash + SRAM \\
      \hline
      \multirow{2}{*}{Tecnología} & 0.22 $\mu$ CMOS EEPROM & 0.3 $\mu$ & 0.18 $\mu$ \\
      & 4 capas de metal (7000 B) & 4 capas de metal & 6 capas de metal \\
      \hline
      Corriente estática & 9 -- 450 mA & 9 -- 150 mA & 2 --50 mA \\
      \hline
    \end{tabular}
  } % END \footnotesize{} segmentation
  \caption{Características de los CPLDs de Altera.}
  \label{tab:char-cpld-altera}
\end{table}
 
\section{FPGAs}
\label{sec:fund-pld-fpga}
 
Las FPGAs fueron introducidas al mercado por la empresa Xilinx Inc. a mediados de 1980s. Estos dispositivos se diferencian de los CPLDs en su arquitectura, tecnología de almacenamiento, funcionalidades integradas, y costo, y además están orientadas a la implementación de altos rendimientos y grandes tamaños en lo que se refiere a recursos de hardware.
 
La arquitectura básica de una FPGA se ilustra en la Figura \ref{fig:fpga-arch}. Esta consiste de una matriz de \emph{CLBs} (\textsl{Configurable Logic Blocks}), interconectados por un arreglo de matrices de conmutadores (\emph{\textsl{Switch Matrix}}). Para caracterizar con más detalle estos dispositivo se debe recurrir a la información de los fabricantes, donde además se puede disponer de un interfaz JTAG a diversos niveles lógicos, otra funcionalidad como memorias SRAM, multiplicadores de clock (PLL o DLL), interfaz PCI, etc. Algunos chips también incluyen bloques dedicados como multiplicadores, DPSs, y microprocesadores.
 
\begin{figure}
  \centering
  \includegraphics[width=0.4\textwidth]{fpga_arch}
  \caption{Arquitectura básica de una FPGA.}
  \label{fig:fpga-arch}
\end{figure}
 
Las FPGAs puede ser muy sofisticadas. La fabricación de chips con una tecnología CMOS de 90 nm., con nueve capas ed cobre y mas de 1000 pines de I/O, se encuentran actualmente disponible en el mercado. Algunos ejemplos de los empaquetados (\textsl{package}) de las FPGAs son ilustrados en la Figura \ref{fig:pkg-fpga}, en los cuales se puede apreciar uno de los \textsl{package} más pequeños (Fig. \ref{fig:pgk-fpga-vq100}) con 100 pines, un \textsl{package} de tamaño mediano (Fig. \ref{fig:pgk-fpga-csg324}) de 324 pines, y uno de los grandes \textsl{package} con 1156 pines (Fig. \ref{fig:pgk-fpga-ffg1156}.
 
\begin{figure}
  \centering
  \subfloat[\footnotesize{\textsl{Package} VQ100}]{\label{fig:pgk-fpga-vq100}\includegraphics[width=0.25\textwidth]{pkg100}}
  \qquad
  \subfloat[\footnotesize{\textsl{Package} CSG324}]{\label{fig:pgk-fpga-csg324}\includegraphics[width=0.25\textwidth]{pkg356}}
 \qquad
  \subfloat[\footnotesize{\textsl{Package} FFG1156}]{\label{fig:pgk-fpga-ffg1156}\includegraphics[width=0.25\textwidth]{pkg1156}}
  \caption{Diferentes \textsl{package} de las FPGAs comerciales.}
  \label{fig:pkg-fpga}
\end{figure}
 
Varias compañías fabrican FPGAs, como Xilinx., Actel, Altera, QuickLogic, Atmel, etc. Ejemplo de dos fabricantes (Xilinx y Actel) se disponen en las Tablas \ref{tab:char-fpga-xilinx} y \ref{tab:char-fpga-actel}. Como puede verse, estos dispositivos pueden contener miles de flip-flops y varios millones de compuertas lógicas.
 
\begin{table}%[h]
  \centering
  {\footnotesize
    \begin{tabular}[c]{|m{0.1\textwidth}|m{0.1\textwidth}|m{0.1\textwidth}|m{0.1\textwidth}|m{0.1\textwidth}|m{0.1\textwidth}|m{0.1\textwidth}|m{0.1\textwidth}|}
      \hline
      Familia & \textbf{Virtex II Pro} & \textbf{Virtex II} & \textbf{Virtex E} & \textbf{Virtex} & \textbf{Spartan 3} & \textbf{Spartan IIE} & \textbf{Spartan II} \\
      \hline
      CLBs & 352 -- 11.024 & 64 -- 11.648 & 384 -- 16.224 & 384 -- 6.144 & 192 -- 8.320 & 384 -- 3.456 & 96 -- 1.176 \\
      \hline
      Celdas Lógicas & 3.168 -- 125.136 & 576 -- 104.882 & 1.728 -- 73.008 & 1.728 -- 27.648 & 1.728 -- 74.880 & 1.728 -- 15.552 & 432 -- 5.292 \\
      \hline    
      \textsl{System gates} &  & 40k -- 8M & 72k -- 4M &  58k -- 1.1M & 50k -- 5M &  23k -- 600k & 15k -- 200k \\
      \hline
      Pines de I/O & 204 -- 1200 & 88 -- 1108 & 176 -- 804 & 180 -- 512 &  124 -- 784 & 182 -- 514 & 86 -- 284 \\
      \hline
      Flip-flops & 2.816 -- 88.192 & 512 -- 93.184 & 1.392 -- 64.896 & 1.392 -- 24.576 & 1.536 -- 66.560 & 1.536 -- 13.824 & 384 -- 4.704 \\
      \hline
      Frec. máxima interna & 547 MHz &  420 MHz &  240 MHz & 200 MHz &  326 MHz & 200 MHz & 200 MHz \\
      \hline
      Voltaje & 1.5 V & 1.5 V & 1.8 V & 2.5 V & 1.2 V & 1.8 V & 2.5 V \\
      \hline
      Inter\-conexiones & SRAM &  SRAM &  SRAM &  SRAM &  SRAM &  SRAM &  SRAM \\
      \hline
      \multirow{3}{*}{Tecnología} & 0.13 $\mu$m & .15 $\mu$m & 0.18 $\mu$m & 0.22 $\mu$m & 0.09 $\mu$m & & \\
      & 9 capas de cobre & 8 capas de metal & 6 capas de metal & 5 capas de metal & 8 capas de metal & & \\
      & CMOS & CMOS & CMOS & CMOS &CMOS & & \\
      \hline
      SRAM bits (Bloques de RAM) & 216k -- 8M & 72k -- 3M & 64k -- 832k & 32k -- 128k & 72k -- 1.8M & 32k -- 288k & 16k -- 56k \\
      \hline
    \end{tabular}
  } % END \footnotesize{} segmentation
  \caption{Características de FPGAs fabricadas por Xilinx.}
  \label{tab:char-fpga-xilinx}
\end{table}
 
\begin{table}%[h]
  \centering
  {\footnotesize
    \begin{tabular}[c]{|m{0.13\textwidth}|m{0.13\textwidth}|m{0.13\textwidth}|m{0.13\textwidth}|m{0.13\textwidth}|m{0.13\textwidth}|}
      \hline
      Familia & \textbf{Accelerator} & \textbf{ProASIC} & \textbf{MX} & \textbf{SX} & \textbf{eX} \\ 
      \hline
      Módulos lógicos & 2.016 -- 32.256 & 5.376 -- 56.320 & 295 -- 2.438 & 768 -- 6.036 & 192 -- 768 \\
      \hline
      \textsl{System gates} & 125k -- 2M & 75k -- 1M & 3k -- 54k & 12k -- 108k & 3k -- 12k \\
      \hline
      Pines de I/O & 168 -- 684 & 204 -- 712 &  57 -- 202 &  130 -- 360 & 84 -- 132 \\
      \hline
      Flip-flops & 1.344 -- 21.504 & 5.376 -- 26.880 & 147 -- 1.822 & 512 -- 4.024 & 128 -- 512 \\
      \hline
      Frec. máxima interna & 500 MHz &  250 MHz &  250 MHz & 350 MHz &  350 MHz \\
      \hline
      Voltaje & 1.5 V & 2.5 V, 3.3 V & 3.3 V, 5 V & 2.5 V, 3.3 V, 5 V & 2.5 V, 3.3 V, 5 V \\
      \hline
      Inter\-conexiones & \textsl{Antifuse} &  \textsl{Flash} &  \textsl{Antifuse} & \textsl{Antifuse} & \textsl{Antifuse}\\
      \hline
      \multirow{3}{*}{Tecnología} & 0.15 $\mu$m & .22 $\mu$m & 0.45 $\mu$m & 0.22 $\mu$m & 0.22 $\mu$m \\
      & 7 capas de metal & 4 capas de metal & 3 capas de metal &  &  \\
      & CMOS & CMOS & CMOS & CMOS &CMOS \\
      \hline
      SRAM bits & 29 k -- 339 k & 14 k -- 198 k & 2.56 k & n.a. & n.a. \\
      \hline
    \end{tabular}
  } % END \footnotesize{} segmentation
  \caption{Características de FPGAs fabricadas por Actel.}
  \label{tab:char-fpga-actel}
\end{table}
 
Nótese que todas las FPGAs de Xilinx usan SRAM para almacenar las interconexiones, por lo que son reprogramables, pero volátiles (es así que requieren de una ROM externa). en cambio, las FPGAs de Actel son no-volátiles (estos usan fusibles electrónicos), pero no son reprogramables (excepto una familia, la cual usa memoria \textsl{Flash}). Ya que cada enfoque tiene sus propias ventajas y desventajas, la aplicación real dictará cual arquitectura de chip es la apropiada.
 
\nomenclature[z-pal]{PAL}{\textsl{Programmable Array Logic}}         % first letter Z is for Acronyms 
\nomenclature[z-ff]{FF}{flip-flop, circuito que tiene dos estados estables y puede ser usado para almacenar información}
\nomenclature[z-palce]{PALCE}{\textsl{PAL CMOS Electrically erasable/programmable}}
\nomenclature[z-cpld]{CPLD}{\textsl{Complex Programmable Logic Device}}
\nomenclature[z-fpga]{FPGA}{\textsl{Field Programmable Gate Array}}
\nomenclature[z-eeprom]{EEPROM}{\textsl{Electrically Erasable Programmable Read-Only Memory}}
\nomenclature[z-clb]{CLB}{\textsl{Configurable Logic Block}}
\nomenclature[z-sram]{SRAM}{\textsl{Static-RAM}}
\nomenclature[z-pll]{PLL}{\textsl{Phase-Locked Loop}}
\nomenclature[z-dll]{DLL}{\textsl{Delay-Locked Loop}}
\nomenclature[z-pci]{PCI}{\textsl{Peripheral Component Interconnect}}
\nomenclature[z-dsp]{DSP}{\textsl{Digital Signal Processor}}
 
 
\section{Lenguajes Descriptivos de \textsl{Hardware}}
\label{sec:fund-hdl}
 
La forma tradicional de diseñar circuitos digitales es dibujar diagramas lógicos que contengan compuertas (SSI) y funciones lógicos (MSI). Sin embargo, a fines de 1980s y comienzo de 1990s este proceso de diseño presentaba limitaciones como así algunos problemas. \emph{¿Como se puede dibujar diagramas esquemáticos que contienen cientos de miles o millones de compuertas?} Con la disponibilidad de los dispositivos lógicos programables para reemplazar sistemas donde se utilizaban integrados como los TTL, un nuevo enfoque para el diseño digital fue necesario. Las herramientas asistidas por computadoras son esenciales para diseñar circuitos digitales en la actualidad. Es claro que en las últimas décadas los ingenieros digitales de hoy diseñan sistemas digitales mediante la utilización de \textsl{software}! Esto es un importante cambio de paradigma del tradicional método empleado para el diseño de sistemas digitales. 
 
Actualmente los diseñadores digitales usan \emph{Lenguajes Descriptivos de \textsl{Hardware}} (HDLs) para diseñar sistemas digitales. Los lenguajes más utilizados son \emph{VHDL} y \emph{Verilog}. Ambos lenguajes descriptivos permiten al usuario diseñar sistemas digitales mediante la escritura de código que describen el comportamiento de un circuito digital. Este código puede ser utilizado tanto para \emph{simular} la operación del circuito y \emph{sintetizar} también implementarse dicho circuito en un CPLD, una FPGA o en un circuito integrado de aplicaciones específica (ASCI).
 
\subsection{VHDL}
\label{sec:fund-hdl-vhdl}
 
El lenguaje VHDL surgió como parte de un programa norteamericano denominado \textsl{Very High Speed Integrated Circuits} (VHSIC), a comienzos de 1980. En el desarrollo de la ejecución de este programa surgió la necesidad de contar con un lenguaje que permita describir la estructura y funciones para los circuitos integrados (ICs). Es así que el VHSIC \textsl{Hardware Description Language} (VHDL) fue desarrollado. Luego la IEEE adoptaría como un lennguaje estándar en los Estados Unidos.
 
VHDL fue diseñado para cubrir necesidades el proceso de diseño. Primero, este lenguaje permite la descripción de la estructura de un diseño, de esta forma se puede descomponer en sub-diseños, y a la vez como estos sub-diseños se interconectan entre sí. Segundo, VHDL permite la especificación de la función de los diseños usando las formas del lenguaje de programación similares a otros lenguajes familiares. Tercero, permite a un diseño ser simulado antes de ser fabricado, por lo que los diseñadores puede rápidamente compara alternativas y probar correciones sin el retardo y espera de los prototipos en \textsl{hardware}.
 
\subsection{Verilog}
\label{sec:fund-hdl-verilog}
 
Verilog esta basado en el lenguaje de programación C en la estructura de la sintaxis pero la manera en la que se comporta es diferentes pues es un lenguaje descriptivo. 
 
\nomenclature[z-ssi]{SSI}{\textsl{Small Scale Integration}}         % first letter Z is for Acronyms 
\nomenclature[z-msi]{MSI}{\textsl{Medium Scale Integration}}         % first letter Z is for Acronyms 
 
\section{Diseño de sistemas digitales}
\label{sec:fund-sist-digitales}
 
\section{Influencia de la Programabilidad}
\label{sec:infl-program}
 
En muchos textos la ley de Moore es usada para destacar la evolución de la tecnología de silicio en la industria de los dispositivos semiconductores. Poro hay otro interesante punto de vista particularmente para los dispositivos PLDs, la \emph{onda de Makimoto} que fue publicada por primera vez en Enero de 1991 por la revista \textsl{Electronics Weekly}. Este concepto se basa en la observación de Tsugio Makimoto quién notó que la tecnología se desplazaba entre la \emph{estandarización} y la \emph{personalización} (véase la Figura \ref{fig:makimoto-wave}). En el comienzo de la década de 1960s, un número de componentes estándares fueron desarrollados, llamados series lógicas 7400 (por Texas Instruments). Dispositivos que servían para crear diversas aplicaciones digitales. Entrada la década de 1970s, la época de los dispositivos personalizados (LSI, siglas en inglés de \textsl{Low-Scape Integration}) comenzó a desarrollarse donde los chips eran creados para aplicaciones específicas como ser una calculadora. El chip fue incrementando su nivel de integración y así fue que nació el termino integración a media escala (MSI, siglas en inglés de \textsl{Medium-Scale Integration}). La evolución de los microprocesadores en la década de 1970s llevó a la estandarización de chips que fueran usados para un amplio rango de aplicaciones. Es entonces que en 1980s nació el ASIC (\textsl{Application-Specific Integrated Circuit}) donde el diseñador podría superar la limitación de la secuencialidad de los microprocesadores, quienes poseían varias limitaciones en aplicaciones en DSP (\textsl{Digital Signal Processing}) donde se requería un mayor nivel de cálculos. La aparición de la FPGA como un dispositivo con la capacidad de proporcionar recursos lógicos necesarios para conectar varios componentes entre sí llevo a que se conviertan en dispositivos populares. 
 
\begin{figure}
  \centering
  \includegraphics[width=0.8\textwidth]{makimoto-wave}
  \caption{Onda de Makimoto.}
  \label{fig:makimoto-wave}
\end{figure}
 
Se podría considerar la existencia de dos épocas de la \emph{programabilidad} donde la \emph{primera} época ocurre con la aparición del microprocesador en la década de 1970s, donde los programadores desarrollan soluciones programables basados sobre estos \textsl{hardware} fijos. El gran reto en esta época fue en entorno de \textsl{software}; los desarrolladores trabajaban con lenguajes \textsl{assembly} e incluso cuando los compiladores y ensambladores surgieron para el lenguaje C, pues se obtenían mejores rendimientos con la codificación manual. Se comenzaron a obtener librerías que proporcionaban funciones básicas, permitiendo al diseñador concentrarse en la programación de la aplicación. Estas funciones actualmente son fácilmente accedidas desde los compiladores y ensambladores comerciales/libres. Actualmente hay una gran demanda de lenguajes de programación de alto-nivel como C y Java. Tal es así la abstracción del lenguaje que incluso entornos de desarrollos de alto nivel como UML están siendo implementados. 
 
La \emph{segunda} época de la programabilidad se encuentra marcada por las FPGAs. En la Figura \ref{fig:makimoto-wave}, Makimoto indica que el campo de la programabilidad se estandariza para su fabricación y la personalización del diseño se encuentra en la capa de aplicación de un desarrollo con las tecnologías mencionadas. Esto puede ser considerado como lo que ofrece la programabilidad de \textsl{hardware} en el dominio del \textsl{software} donde el \textsl{hardware} permanece fijo. Esto es un reto fundamental como la mayoría de las herramientas de programación de computadora que trabajan sobre el principio de una plataforma de \textsl{hardware} fijo, lo que permite realizar optimizaciones ya que hay una orientación clara sobre la manera de mejorar el rendimiento de una representación algorítmica. Con las FPGAs, el usuario tiene plena libertad para definir la arquitectura que mejor se adapte a la aplicación. Sin embargo, esto presenta un problema en el que cada solución debe ser \emph{hecha a mano} y todos los diseñadores de \textsl{hardware} conocen los problemas en el diseño y verificación. 
 
Algunas de las tendencias en las dos épocas tienen similitudes. En los primeros días, el modo esquemático (\textsl{schematic capture}) fue usado para diseñar los primeros circuitos que era sinónimo con el nivel \textsl{assembly} en programación. Los lenguajes de descripción de \textsl{hardware} como el VHDL y Verilog emergieron ya que podrían ser utilizados para producir un nivel de abstracción más alto con el objetivo de contar con una herramienta basada en C como son SystemC y CataultC de Mentor Graphics como un entorno único de programación. Inicialmente como con los lenguajes de programación de \textsl{software}, había una desconfianza en la calidad de los resultados que producía el código con este nuevo enfoque. Sin embargo, con el fin de mejorar los costos de desarrollo, las herramientas de síntesis que eran equivalentes a la evolución de los compiladores de \textsl{software} eficientes para los lenguaje de alto-nivel, y también la evolución de las funciones de librería, estableció un alto grado de confianza que posteriormente llevó al uso de los lenguajes descriptivos de \textsl{hardware} (HDLs) sean comnues para la implementación en FPGA. En efecto, el surgimiento de los IP-cores refleja la evolución de librerías como son funciones programables de entradas/salidas para el flujo del \textsl{software} donde funciones comunes fueron reutilizadas donde los desarrolladores confiaban en la calidad de los resultados que producían estas librerías, especialmente en lo que las presiones para producir más código en el mismo lapso de tiempo crecieron con la evolución tecnológica. Los primeros IP-cores surgieron a partir de funciones de librerías básicas en el procesamiento de señales complejas y funciones de comunicación la mayoría de estos suministrados por los proveedores de FPGA y diversos repositorios web de IP-cores.
 
% Aquí se podría poner algo sobre el paper "The Role of the Laboratory in Undergraduate Engineering Education".
 
 
%\begin{landscape}
 
% \section*{Subplots}
% I can cite Wall-E (see Fig.~\ref{fig:WallE}) and Minions in despicable me (Fig.~\ref{fig:Minnion}) or I can cite the whole figure as Fig.~\ref{fig:animations}
 
% \begin{figure}
%   \centering
%   \subfloat[A Tom and Jerry]{\label{fig:TomJerry}\includegraphics[width=0.3\textwidth]{TomandJerry}}                
%   \subfloat[A Wall-E]{\label{fig:WallE}\includegraphics[width=0.3\textwidth]{WallE}}
%   \subfloat[A Minion]{\label{fig:Minnion}\includegraphics[width=0.3\textwidth]{minion}}
%   \caption{Best Animations}
%   \label{fig:animations}
% \end{figure}
 
 
% \end{landscape}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.