Escolar Documentos
Profissional Documentos
Cultura Documentos
3er Curso
PRACTICA n 8
Diseo de subsistemas aritmticos. Sntesis sobre dispositivos
FPGA. Sntesis estructural a partir de la descripcin VHDL a
nivel RTL de la estructura. Sntesis a partir de la descripcin
RTL del algoritmo
Objetivos:
Descripcin y sntesis de subsistemas aritmticos mediante VHDL.
Diseo combinacional. Cdigo VHDL a nivel RT para generacin
estructural. Realizacin sobre FPGA. Subsistemas aritmticos
secuenciales. Cdigo VHDL a nivel RT para sntesis del algoritmo de
cmputo e implementacin mediante un procesador dedicado FPGA.
Herramientas CAD:
Quartus II.
Instrumentacin: --.
Material fungible o de laboratorio: --.
Parte 1:
Diseo y sntesis de un multiplicador combinacional para dos nmeros sin signo utilizando
una descripcin VHDL. Uso de la sentencia VHDL generate y sntesis sobre un dispositivo
FPGA utilizando su lgica interna estndar.
1 de 6
3er Curso
3er Curso
Figura 2
a)
Utilizando Quartus II, sintetizar el multiplicador a partir de la descripcin VHDL de la figura
2.
Seleccionar el dispositivo FPGA Cyclone II EP2C35F672C6.
Compilar el diseo. Comprobar que el multiplicador en este caso se ha sintetizado utilizando
exclusivamente la circuitera de propsito general (ALUTs).
Para la compilacin y sntesis, seleccionar el chip FPGA Cyclone II EP2C35F672C6:
Assignments -> Settings: Settings Generador_multipl: Category -> Device: Family
Cyclone II: Target Device Specific Device selected in Available devices list.
Show in Available devices list Fastest. Available devices: EP2C35F672C6.
b)
Simular el multiplicador sintetizado. Construir un fichero de formas de onda,
Generador_multipl.vwf. Comprobar que el multiplicador opera correctamente.
c)
Generar automticamente un testbench, Generador_multipl.vht, para el multiplicador
sintetizado a partir de las seales de prueba aplicadas mediante el fichero de formas de onda.
Analizar el fichero Generador_multipl.vht.
Para generar el testbench:
Con la ventana de formas de onda activa: File -> Export: Seleccionar un nombre para
el fichero. Export.
Parte 2:
Diseo de un multiplicador secuencial (basado en recodificacin). Sntesis sobre un
dispositivo FPGA de un Multiplicador de Booth Modificado para nmeros con signo (en
complemento a 2), utilizando una descripcin VHDL a nivel RT del algoritmo.
Se pretende implementar sobre un dispositivo FPGA un multiplicador de Booth modificado. En
lugar de utilizar una descripcin de tipo estructural basada en la descripcin de una Unidad de
Control y una Ruta de Datos y sus interconexiones, se pretende emplear una descripcin de tipo RT
del Algoritmo de Booth Modificado. El procedimiento requiere una serie de pasos cuyo nmero
depende del nmero de bits de los nmeros a multiplicar. Para la implementacin se pretende
describir mediante VHDL un paso del algoritmo, cuya ejecucin se realizar en un ciclo de reloj. La
ejecucin del paso se repetir tantas veces (tantos ciclos de reloj) como sea necesario hasta finalizar
el proceso de cmputo.
En la figura 3 se muestra una posible descripcin VHDL de un mdulo para la implementacin del
multiplicador. La descripcin de la entidad principal utiliza (a modo de ejemplo) el package de la
figura 4, que contiene algunas sencillas functions.
3 de 6
3er Curso
3er Curso
mult2(2*((m+1)/2)-1) := multiplicador(m-1);
mult2(2*((m+1)/2)) := multiplicador(m-1);
Extensin de 1 bit de signo a la izda. (en su caso)
mult2 := mult2 sll 1;
Aadido un '0' a la dcha.
result_prev <= (others => '0');
resultado <= (others => '0');
paso <= 0;
else
if (paso < max_pasos) then
if (paso = max_pasos-1) then
result_valid <= '1';
end if;
code(2 downto 0) := recodifica(unsigned(mult2(2 downto 0)));
mult2 := mult2 srl 2;
case code is
when "000" => ant_mas := result_prev;
00
resultado <= std_logic_vector(ant_mas);
when "001" => ant_mas := result_prev + (m1 sll 2*paso);
01
resultado <= std_logic_vector(ant_mas);
when "010" => ant_mas := result_prev + ((m1 sll 1) sll 2*paso);
02
resultado <= std_logic_vector(ant_mas);
when "011" => ant_mas := result_prev + ((cm1 sll 1) sll 2*paso);
-02
resultado <= std_logic_vector(ant_mas);
when others => ant_mas := result_prev + (cm1 sll 2*paso);
-01
resultado <= std_logic_vector(ant_mas);
end case;
result_prev <= ant_mas;
paso <= paso+1;
end if;
end if;
end if;
end process;
end algor;
Figura 3
b)
Repetir el apartado anterior modificando el tamao del multiplicado y del multiplicador de
impar (por ej. m=9) al subsiguiente par (por ej. m=10). Comprobar que el nmero de ciclos
requerido para obtener el producto es el esperado. Obtener la mxima frecuencia de
operacin.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package paquete_Alg_Booth_Mod is
function signed_a_signed_ext (aux: signed; ext: integer) return signed;
function twos_complement (aux: signed) return signed;
function recodifica (aux: unsigned) return unsigned;
end paquete_Alg_Booth_Mod;
package body paquete_Alg_Booth_Mod is
function signed_a_signed_ext (aux: signed; ext: integer) return signed is
variable sig_sig : signed (aux'length+ext-1 downto 0);
begin
sig_sig(aux'length+ext-1 downto aux'length) := (others => aux(aux'length-1));
sig_sig(aux'length-1 downto 0) := aux;
return sig_sig;
end signed_a_signed_ext;
function twos_complement (aux: signed) return signed is
variable comp : signed (aux'length+11 downto 0);
variable compl : std_logic := '0';
begin
for j in 0 to aux'length-1 loop
if (compl = '0') then
5 de 6
3er Curso
Figura 4
Parte 3:
Sntesis sobre un dispositivo FPGA de un Multiplicador secuencial para nmeros con
signo, que emplee el procedimiento de cmputo del algoritmo de Booth Modificado, pero
que utilice un solo ciclo para la operacin de multiplicacin completa.
a)
Mustrese una descripcin VHDL a nivel RT del algoritmo con las caractersticas citadas.
Multiplicando y multiplicador deben de tener el mismo nmero de bits. Utilizando Quartus
II, sintetizar el bloque diseado. Para la compilacin y sntesis, seleccinese el chip FPGA
Cyclone II EP2C35F672C6.
b)
Simular el multiplicador sintetizado mediante Quartus II. Utilcese el fichero de formas de
onda Alg_Booth_Mod_un_ciclo.vwf. Verificar que el multiplicador opera correctamente y
que nicamente utiliza un ciclo de reloj para el cmputo. Obtener la mxima frecuencia de
operacin.
6 de 6