Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Un Método Simple para Pasar de Un Algoritmo A Un Modelo en VHDL
Un Método Simple para Pasar de Un Algoritmo A Un Modelo en VHDL
ón
i ia
Un método simple para pasar de
estigac
Des
un algoritmo a un modelo en VHDL
arrollo
Inv
Ciencia
Todo modelo en La mayoría de textos sobre VHDL (VHSIC La Figura 1 muestra las entradas y salidas necesa-
Hardware Description Language) como: [ 1 ],[ 2 ],[ 3 ] y rias para un multiplicador. Las entradas "in1" e "in2"
VHDL se divide en
[ 4 ]presentan una forma de diseño pensando en el son los operandos, cada uno de 8 bits. La entrada
dos partes: la HW (Hardware) que se desea construir. Sin embar- "reset" de un bit para inicializar los registros recién se
primera es la go, muchas veces la solución de un problema es plan- enciende el sistema. La entrada "inicio" de un bit, es
Entidad y la teada por medio de un algoritmo y no es evidente el para indicar que hay una nueva operación y la entra-
segunda es la HW que permite ejecutar ese algoritmo. Trabajos da "clk" de un bit, es para sincronizar los registros.
Arquitectura. anteriores [ 5 ] presentan cómo desarrollar un HW a La salida "out1" de 16 bits contiene el resultado de
partir de un algoritmo, mediante un trabajo algo dis- la multiplicación y la salida "fin" de un bit, es para
pendioso y que puede ser necesario repetirlo varias indicar que la multiplicación terminó.
veces con el fin de optimizar.
El tipo de dato que se utiliza es el STD_LOGIC
El presente artículo presenta una metodología ya que, entre muchas otras características, sus libre-
mucho más simple y segura para escribir modelos rías tienen definidas operaciones tanto aritméticas
directamente en VHDL a partir de un algoritmo. Se como lógicas. Para usar este tipo de dato es necesa-
incluye además una breve descripción de VHDL, rio incluir las siguientes librerías:
para el lector que no este muy familiarizado.
1
Investigador del grupo LAMIC, library ieee;
Laboratorio de Automática Tomando como ejemplo un multiplicador se in- use ieee.std_logic_1164.all;
Microelectrónica e inteligencia
troducirá en el capítulo 2 los componentes de VHDL
computacional, Universidad Distri-
tal Francisco José de Caldas. y posteriormente se realizarán varia implementacio- use ieee.std_logic_arith.all;
nes: una combinacional, en el capítulo 3, la cual es use ieee.std_logic_unsigned.all;
Artículo recibido en Septiembre 10 de 2002
Aceptado el 13 de Noviembre 2002 muy sencilla pero genera un circuito muy grande; en
84 Vol. 7 No.2
No.2
Ingeniería
Las asignaciones Cuando se requiere más de un bit se utiliza el similar al proceso que se utiliza convencionalmente
sólo permiten con números decimales, como se muestra la Figura
STD_LOGIC_VECTOR (n-1 DOWNTO 0) 2, solo que en binario únicamente se necesita saber
modelar circuitos
combinacionales. la tabla del cero y del uno.
Donde n es el número de bits que se requieren. La
entidad quedaría de la siguiente forma: El primer paso es mirar el bit menos significativo
de MN, si es uno se suma MR a PP, de lo contrario
entity MULT is
PP queda igual. Luego se desplaza MR a la izquierda
port( y MN a la derecha para ver el siguiente bit y se repite
CLK,RESET : in std_logic; el ciclo hasta que MN sea cero.
IN1,IN2 : in std_logic_vector(7 downto 0);
INICIO : in std_logic; MR 0011
OUT1 : out std_logic_vector(15 downto 0); MN x 1101 PP MR MN
0011
FIN : out std_logic); 00000
00000000
+
00000011 1101
jar el sistema. Esta descripción puede ser de tres ti- MR 3 00001111 00011000 0001
pos: asignación, estructural o funcional. MN x 13
00100111
+
00110000 0000
9
+ 30
III. ASIGNACIÓN
39
OUT1<=IN1*IN2;
Figura 3. Diagrama de Flujo de Mutliplicación
Sin embargo, la salida no es inmediata; puede to-
mar hasta 75 ns (en el dispositivo seleccionado) por Este diagrama de flujo se podría pasar directamen-
eso la señal fin se define con 75 ns después de la te a VHDL y quedaría de la siguiente forma:
señal de inicio. No obstante, la sentencia after no es
fácilmente implementable y por lo tanto muchos architecture ALG of MULT is
sintetizadores la ignoran. begin
process
Esta síntesis combinacional del multiplicador ge- variable --define las siguientes variables
nera un circuito muy grande, requiere 216 LCs y 95 MN,MR,PP : std_logic_vector (15 downto 0);
expansores; en algunos casos es preferible realizar begin
otra implementación menos costosas. loop -- espera señal de inicio
MR:="00000000" & in1;
MN:= "00000000" & in2;
IV. ALGORITMO PP:="0000000000000000";
Una posible implementación consiste en desarro- exit when (inicio='1');
llar los pasos de la multiplicación secuencialmente, end loop;
Vol. 7 No.2
No.2 85
Ingeniería
while (MN/="0000000000000000") loop R1<=R1<<1
if (MN(0)='1') then R2<=R1+R2
PP:=PP+MR;
equivalen al circuito de la Figura 4.
end if;
MR:=MR(14 downto 0)&'0'; Usualmente en una sentencia RTL se toman los
MN:= '0'&MN(15 downto 1); datos de los registros, se operan en un circuito com-
end loop; binacional y el resultado es almacenado en otro re-
out1<=PP; gistro cuando llegue el pulso de reloj.
end process;
end ALG;
D. Máquina de Estados Algorítmica (ASM)
A. Algunos comentarios de la sintaxis de VHDL En diseños más complicados, la carga de un regis-
Cuando in1 se asigna a MR es necesario concatenar tro no se realiza en todos los ciclos de reloj sino de-
ceros a la izquierda para completar el número de bits. pendiendo de ciertas circunstancias. Un diagrama
ASM [ 7 ] permite modelar fácilmente en qué mo-
La sentencia EXIT sale del ciclo LOOP - END mento se deben ejecutar las sentencias RTL. En la
LOOP cuando se cumple la condición, es decir cuan- Figura 5 se presenta el ASM del diagrama de flujo de
do llega la señal de inicio. la multiplicación del algoritmo seleccionado.
El símbolo "/=" es "diferente de" S1
MN<=in1
Para desplazar usualmente se utiliza el símbolo MR<=in2
concatenar "&", cuando es a la izquierda se toman PP<=0
El segundo problema y más grave aún es que en nin- El ASM y el diagrama de flujo son muy similares
gún momento se ha utilizado la señal de clk y por lo pero tienen las siguientes diferencias:
tanto el sintetizador intentará realizar un circuito
asincrónico que realice el algoritmo, lo cual es bastante Cada rectángulo del ASM representa un estado
complejo y generalmente no lo pueden sintetizar. cuyo nombre se encuentra al lado.
Al escribir un código en VHDL tenemos que ser Las ecuaciones que hay dentro de cada rectángu-
consientes que estamos modelando HW y no SW. lo del ASM son sentencias RTL. En cambio, en
En caso que el circuito que se desea describir es muy el algoritmo puede ser cualquier operación. En
complejo para ser implementado combinacionalmen- este caso cada ecuación del algoritmo se puede
te, es mejor usar sentencias RTL. hacer en una sentencia RTL, pero hay situacio-
nes en que es conveniente separar la ecuación en
varias sentencias RTL, por ejemplo a=b+c+d:
C. Descripción de RTL
t1<=b+c y a<=t1+d.
Vol. 7 No.2
No.2 87
Ingeniería
No nos detendremos en la explicación del ante- if (reset='1') then
rior código ya que es la estructura convencional que estado_actual<=S1;
está debidamente explicada en los libros menciona- MN<="0000000000000000";
MR<="0000000000000000";
dos anteriormente y concentraremos nuestra PP<="0000000000000000";
antención más adelante en otra forma de síntesis. Out1<="0000000000000000";
fin<='0';
elsif (clk'event and clk='1') then
case estado_actual is
when S1 =>
MN<="00000000"&in1;
MR<="00000000"&in2;
PP<="0000000000000000";
fin<='0';
if (inicio='0') then
estado_actual<=S1;
else
estado_actual<=S2;
end if;
when S2 =>
if (MN="0000000000000000") then
estado_actual<=S5;
else
if (MN(0)='0') then
estado_actual<=S4;
Figura 9 Simulación de la implementación estructural else
estado_actual<=S3;
Aunque el código generado es mucho más exten- end if;
so, ocupa mucho menos espacio que la versión end if;
when S3 =>
combinacional. Esta implementación ocupa 87 LCs PP<=PP+MR;
y 30 expansores, que es tan solo el 40% del circuito estado_actual<=S4;
combinacional. En la simulación de la Figura 9 se when S4 =>
observan los pasos para realizar la multiplicación, tal MN<='0' & MN(15 downto 1);
como se describió en el ASM. Si desea una copia del MR<=MR(14 downto 0) & '0';
código en VHDL puede escribir al autor. estado_actual<=S2;
when S5 =>
Para modelos sencillos como el anterior, el proce- out1<=PP;
estado_actual<=S1;
so de diseño es aceptable, pero para circuitos más
fin<='1';
complejos es preferible una metodología de diseño end case;
más sencilla. end if;
end process;
end ASM;;
VI. DISEÑO FUNCIONAL Y METODO-
LOGÍA PROPUESTA El código generado es análogo al ASM de la Figu-
ra 5. Lo primero es definir las variables internas, en
En este artículo proponemos una metodología inter- este caso son MR, MN y PP, y los estados de la FSM
media entre escribir directamente el algoritmo y des- que van desde S1 hasta S5.
cribir estructuralmente el circuito. La metodología
consiste en describir directamente el ASM en VHDL Luego dentro del proceso se define una sentencia
IF- THEN en la que detecta dos cosas: la primera, si
El comportamiento sincrónico del ASM permite llega una señal de RESET y la segunda si llega un
ser modelado dentro de una estructura sincrónica flanco positivo de reloj.
de VHDL en la que cada asignación se convierte en
una sentencia RTL, la cual es descrita dentro de la process (reset, clk)
estructura de una FSM en VHDL y que se detalla begin
más adelante cuando se explique el código que se if (reset='1') then
...
muestra a continuación.
elsif (clk'event and clk='1') then
En el diseño ...
architecture ASM of MULT is
funcional se pasa -- definición de señales internas end if;
directamente del signal MN, MR,PP: std_logic_vector(15 downto 0); end process;
ASM al VHDL, type estados is (S1,S2,S3,S4,S5);
simplificando el signal estado_actual : estados;
begin Cuando llega la señal de RESET, coloca en cero
proceso de process (reset, clk) todos los registros. Cuando el que llega es el flanco
diseño. begin de reloj, ejecuta el ASM, que tiene la misma estruc-
88 Vol. 7 No.2
No.2
Ingeniería
Los diseños tura de una FSM la cual es modelada con una estruc- VII. CONCLUSIONES
secuenciales tura CASE.
En la Tabla II se presenta un cuadro comparativo
generalmente case ESTADO_ACTUAL is entre las diferentes metodologías de diseño. La me-
ahorran when S1 => todología de Asignación se diferencia de las otras
recursos aunque ... dos en que solo permite diseños combinacionales
pueden ser más when S5 => en los cuales está definido el operador, generando
...
demorados un circuito combinacional, que debe hacer todas las
end case;
que los operaciones al tiempo y por lo tanto no se pueden
combinacionales. compartir recursos, lo cual implica que el diseño va
Por ejemplo, en el estado S1 debe hacer las siguien-
a ser más rápido pero va a costar más.
tes sentencias RTL,
TABLA II. COMPARACIÓN ENTRE DISEÑOS
MN<=in1 Diseño Costo Vel. Casos
MR<=in2 Asignación Muy Sencillo Elevado Rápido Simples
PP<=0 Estructural Complicado Bajo Medio Complejos
Funcional Sencillo Bajo Medio Complejos
if (inicio='0') then
estado_actual<=S1;
else
Gerardo Muñoz
Universidad Distrital FJC. Facultad Ingeniería, Grupo LAMIC
estado_actual<=S2; gmunoz@udistrital.edu.co
end if;
Vol. 7 No.2
No.2 89
Ingeniería