Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TTULODELAACTIVIDAD:Diseojerrquico,modelado,simulacinyrealizacin
hardwarededivisoresaritmticos.
CDIGO:
BT1_AI3
FECHA:
NOMBRE: APELLIDOS:
CALENDARIO:
Primera,segundaytercera
Semana.
REQUISITOS:
CRITERIODE
XITO:
COMENTARIOSEINCIDENCIAS:
TIEMPODEDICADO: minutos
AUTOEVALUACIN:
[entre0y10puntos]
Noprocede
ActividadBT1_AI3:Divisoresaritmticos
2
Introduccin
Estaactividadestdivididaen3partes:
Enlaprimerapartesedescribeunaarquitecturaparalarealizacindeundivisoraritmtico
denmerosde4bits.SulecturadeberealizarseenlaactividadAI3NP1.
Enlasegundapartedeberealizarunaseriedeejerciciospararepasarlosconceptosbsicos
de modelado y simulacin VHDL adquiridos en la asignatura de Diseo Digital 1. Estos
ejerciciosdebencompletarseenlasactividadesAI3NP1,AI3NP2yAI3P1.
En la tercera parte deber aplicar los nuevos conocimientos adquiridos sobre el lenguaje
VHDL en la realizacin de una serie de ejercicios que deben completarse a lo largo de las
actividadesAI3NP3yAI3P2.
Tras la realizacin de esta actividad deber entregar un fichero comprimido, por medio de la
plataforma moodle, y este mismo documento con la resolucin de todos los ejercicios en papel
queseleplantean.
ActividadBT1_AI3:Divisoresaritmticos
3
PARTEI. Introduccin:Arquitecturadeundivisoraritmtico
DIVISOR
DIVNDO
CARGA SELEC
4
4
4
4
DESPLAZA
BARREL
SHIFTER
2
4
4
7
AB
A B
A
B
A
B
REGISTRO
DESPLAZAMIENTO
CABE
START START
FIN_OP
CONTROL
COCIENTE
RESTO
ENA_DESP
REG_IN OPERADORES
S
S
4
FIN_OP
DIVISOR
OVERFLOW
OVERFLOW
4
Figura1.Arquitecturadeundivisor
Elcocientedeladivisindeunnmerodenbits(eldividendo)entreotro(eldivisor),tambinden
bits, es, en general, otro nmero de n bits; por ejemplo, en la divisin de dos nmeros de cuatro
bits el valor del cociente puede variar entre 0 (cuando el divisor es mayor que el dividendo) y 15
(cuandoeldividendoes15yeldivisor1).Elrestodeladivisinestambinunnmerodenbitsen
elcasodeladivisindedosnmerosdecuatrobits,puedevariarentre0(cuandoeldividendoes
mltiplodeldivisor)y14(cuandosedivide14entre15).
Losnbitsdelcocientesepuedenobtener,unoauno,empezandoporeldemayorpeso(eldepeso
n1),delasiguientemanera:
o Sieldividendoesmayoroigualqueeldivisormultiplicadopor2
n1
,elbitdepeson1
del cociente valdr 1 y la diferencia entre ambos se convierte en el resto del
dividendoparaelsiguientepasodeladivisin.
Esteprocedimientosereitera,reduciendoelpesodelapotenciaporlaquesemultiplicael
divisor,parairobteniendoelrestodelosbitsdelcociente(hastaelbitdepeso0).
Elrestodeladivisineselrestodedividendoquequedatraslaobtencindelbitdemenor
pesodelcociente.
Porejemplo:paradividir13(1101
b
)entre2(0010
b
),serealizaranlassiguientesoperaciones:
1. Paralaobtencindelbitdepeso3delcociente:
a. Secomparaeldividendo(1101
b
)coneldivisormultiplicadopor2
3
(0010000
b
)
b. Como es menor, el bit de peso 3 del cociente es 0 y se mantiene el valor del
dividendoparalaobtencindelbitdepeso2delcociente
2. Paralaobtencindelbitdepeso2:
a. Secomparaeldividendo(1101
b
)coneldivisormultiplicadopor2
2
(001000
b
)
b. Comoesmayor,elbitdepeso2delcocientees1yseobtieneelrestodeldividendo
(1101
b
1000
b
=0101
b
)paralaobtencindelbitdepeso1delcociente
3. Paralaobtencindelbitdepeso1:
a. Secomparaelrestodeldividendo(0101
b
)coneldivisormultiplicadopor2
1
(00100
b
)
b. Comoesmayor,elbitdepeso1delcocientees1yseobtieneelrestodeldividendo
(0101
b
0100
b
=0001
b
)paralaobtencindelbitdepeso1delcociente
4. Paralaobtencindelbitdepeso0:
a. Secomparaelrestodeldividendo(0001
b
)coneldivisor(0010
b
)
b. Comoesmenor,elbitdepeso0delcocientees0ysemantieneeldividendo(0001
b
)
queeselrestodeladivisin.
hasta 2
0
. El mdulo operadores compara el dividendo (o el resto del dividendo) y el divisor
(multiplicado por las diferentes potencias de 2) y calcula, adems, la diferencia entre ambos:
durante el transcurso de una divisin genera un bit del cociente en cada ciclo de reloj, bit que es
almacenadoenunregistrodedesplazamientoyesevaluadoporelmdulodecontrolparadecidir
sielregistrodedividendodebeactualizarseonoconelrestodeldividendo.Elmdulodecontrol
genera la secuencia de seales necesarias para la actualizacin de los registros y la correcta
operacindelbarrelshifter,ysealaademsladivisinporceroactivandolasalidadeoverflow.
ActividadBT1_AI3:Divisoresaritmticos
5
PARTEII. Repaso:PrincipiosdelmodeladoVHDLdeSistemasDigitales
En esta parte de la prctica se realizan ejercicios para repasar los conceptos bsicos de modelado
VHDL, de realizacin de testbenches y para recordar el manejo del entorno de simulacin
ModelSim. Su realizacin est imputada a las actividades AI3NP1, AI3NP2 y AI3P1, por lo que
debenhabersecompletadotraslasegundasesinpresencialdelaasignatura.
Ejercicio2.1.ModeladodelainterfazdeSistemasDigitales
Contestelassiguientescuestiones:
a) Cmo se llama la unidad de diseo VHDL en la que se modela la interfaz de los sistemas
digitales?
b) Enumere las caractersticas que hay que describir para modelar unaentrada o salida de un
sistemadigitalenVHDL
Ejercicio2.2.ModeladodelainterfazdeSistemasDigitales
ActividadBT1_AI3:Divisoresaritmticos
6
Ejercicio2.3.Modeladodelfuncionamientodesistemascombinacionales
Contestelassiguientescuestiones:
b) Describa las condiciones que debe cumplir el cdigo de un proceso VHDL con lista de
sensibilidad para que pueda modelar correctamente el funcionamiento de un sistema
combinacional.
Ejercicio2.4.Modeladodelfuncionamientodesistemascombinacionales
Editeycompile,enelmismoficheroenelqueseencuentreelmodelodesuinterfaz,elmodelode
funcionamiento de los mdulos barrelshifter y operadores. En el primer caso utilice un proceso
conlistadesensibilidadyenelsegundosentenciasconcurrentes.
ActividadBT1_AI3:Divisoresaritmticos
7
Ejercicio2.5.Modeladodelfuncionamientodesistemassecuenciales
Contestelassiguientescuestiones:
a) Aquentradasdebesersensibleunprocesoquemodelaelfuncionamientodeunsistema
secuencialsncrono?Aculesno?
Ejercicio2.6.Modeladodelfuncionamientodesistemassecuenciales
Editeycompile,enelmismoficheroenelqueseencuentreelmodelodesuinterfaz,elmodelode
funcionamientodelosmdulosreg_inyreg_desp,teniendoencuentaque:
Ambos mdulos tienen una entrada de inicializacin asncrona activa a nivel bajo que
inicializalosregistrosa0.
En el mdulo reg_in los registros capturan el valor del divisor y el dividendo cuando la
entradacargavale1ylaentradaselecvale0;cuandocargavale1yselecvale1,elregistro
deldividendocapturaelvalorpresenteenlaterceraentradadedatos(laqueenlafigura1
est conectada a la salida del mdulo operadores), mientras que el registro del divisor
permanece,enestecaso,invariable.
Reg_despcapturaunnuevobitydesplazasucontenidocuandosuentradaena_despesta
nivelalto.
ActividadBT1_AI3:Divisoresaritmticos
8
Ejercicio2.7.TestbenchesVHDL
ExpliquequesuntestbenchVHDLydescribalaestructuradelcdigoquelocompone
Ejercicio 2.8. Realice y compile testbenches para cada uno de los siguientes mdulos: reg_in,
barrel_shifter, operadores y reg_desp. Ejecute las correspondientes simulaciones para verificar el
correctofuncionamientodelosmdulos.
Ejercicio2.9.ModeladodeautmatasenVHDL
Disee y modele en VHDL un autmata para el mdulo de control de la figura 1, de modo que
funcionetalycomosedescribeacontinuacin:
Cuandoelcircuitoestpreparadoparadividir,siseactivalaentradastartseordenalacarga
deldivisoryeldividendo(cargaa1yseleca0)enlosregistrosdelmduloreg_in;sistartse
activaeneltranscursodeladivisin,elcircuitodecontrolignoradichaactivacin.
Lasalidadesplazadelmdulodecontroltomalosvalores3,2,1y0enloscuatrociclosde
reloj que suceden a la activacin de start. Durante estos cuatro ciclos, la salida ena_desp
permaneceactivaencualquierotrocicloderelojestdesactivada.
Duranteeltranscursodeladivisin(mientrasena_dispestactiva),silaentradacabeesta
nivel alto es decir, cuando el bit para el cociente (la salida del comparador) vale 1 se
ordena,activandolassalidasselecycarga,lacargadelrestodeldividendoenelregistrodel
dividendoenelmduloreg_in
Una vez transcurridos los cuatro ciclos de reloj para el clculo del cociente y el resto de la
divisin, se activa la salida fin_op (salida que no se desactivar hasta que se ordene una
nuevadivisin);sieldivisoresceroseactivatambinlasalidaoverflow.
ActividadBT1_AI3:Divisoresaritmticos
9
Ejercicio2.10.ModeladoestructuralVHDL
Realiceycompileelmodelodelaarquitecturadelcircuitodelafigura1medianteunadescripcin
estructuralVHDLempleandosentenciasdeemplazamientodirectodemodelos.
Ejercicio2.11.ModeladoestructuralVHDL
Realiceycompileunmodeloalternativodelaarquitecturadelcircuitodelafigura1medianteuna
descripcin pseudoestructural VHDL empleando procesos conectados dentro de un cuerpo de
arquitectura.
Ejercicio2.12.TestbenchesVHDL
Realice un testbench que permita verificar el funcionamiento del divisor. Debe probar todas las
posiblescombinacionesquepuedandarseenlosdatosdeentrada.
PARTEIII. EjerciciosavanzadosdeVHDL
Enestaparterealizarejerciciosenlosquedeberemplearalgunosdeloselementosdellenguaje
VHDLestudiadosenestecurso(genricos,sentenciasassert,retardos,etctera).Surealizacinest
imputadaalasactividadesAI3P1yAI3NP3,porloquedebenhaberserealizadoantesdelatercera
sesin presencial de la asignatura. Cuando finalice estos ejercicios deber realizar un fichero
comprimido, con nombre AI3_ejer.zip, que incluya todos los modelos y testbenches realizados en
laspartesIIyIII.Esteficherodebeserentregadoutilizandolaplataformamoodle.
Ejercicio3.1.Realiceunmodeloparametrizabledelarutadedatosdeldivisordelafigura1.Eltop
de la jerarqua de la ruta de datos debe ser un modelo estructural realizado con componentes
declaradosenunpaquete
1
.
Ejercicio3.2.Construyaelmodelodeundivisorde4bitsparametrizandoelmodelorealizadoenel
ejercicio anterior y conectndolo al mdulo de control realizado en el ejercicio 2.9 de la primera
partedeestaprctica.
Ejercicio 3.3. Realice un testbench para verificar el funcionamiento del divisor realizado en el
ejercicioanterior.Eltestbenchdebeverificartodaslasposiblescombinacionesdedatosdeentrada
y debe incluir cdigo que reporte el resultado de cada operacin en la consola del simulador y
advertirdelaocurrenciadeerroresenlosresultadosdelasimulacin
2
.
1
Para alguno de los modelos le ser de utilidad disponer de la funcin calc_log que vio en uno de los ejemplos de la
BT1_P3. Defina la funcin en un paquete VHDL y utilcela cuando la necesite.
2
Para reportar el resultado de cada operacin en la consola le sern de utilidad las funciones to_string y fprint,
contenidas en el paquete std_iopak que est en la librera std_developerskit, disponible en el entorno ModelSim. Puede
ver una descripcin de estas funciones y ejemplos de su utilizacin en el documento: STD_DevelopersKit Users
Manual de Mentor Graphics (http://www-g.eng.cam.ac.uk/mentor/mti/docs/sdk_um.pdf). Puede utilizar la funcin fprint
(to TEXT file) enviando los resultados a la salida estndar (ventana de transcript) en lugar de a un fichero; para ello
introduzca OUTPUT como primer argumento de la funcin.
ActividadBT1_AI3:Divisoresaritmticos
10
Ejercicio3.4.Modeladodealtonivel
Elsiguientecdigocorrespondeaunmodelodealtoniveldeundivisorde4bits:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity div_func_4bits is
port(clk: in std_logic;
nRst: in std_logic;
start: in std_logic;
dividendo: in std_logic_vector(3 downto 0);
divisor: in std_logic_vector(3 downto 0);
cociente: buffer std_logic_vector(3 downto 0);
resto: buffer std_logic_vector(3 downto 0);
overflow: buffer std_logic;
fin_op: buffer std_logic);
end entity;
architecture no_syn of div_func_4bits is
begin
process
variable v_cociente: integer;
variable v_resto: integer;
variable v_overflow: std_logic;
begin
wait until clk'event and clk = '1' and start = '1';
fin_op <= '0';
if divisor /= 0 then
v_cociente := conv_integer(dividendo)/conv_integer(divisor);
v_resto := conv_integer(dividendo) - (conv_integer(divisor)*v_cociente);
v_overflow := '0';
else
v_overflow:= '1';
end if;
for i in 0 to 3 loop
wait until clk'event and clk = '1';
end loop;
cociente <= "0000"+ v_cociente after 10 ns;
resto <= "0000"+ v_resto after 10 ns;
overflow <= v_overflow after 5 ns;
fin_op <= '1' after 5 ns;
end process;
end no_syn;
Edite,compileysimuleestemodeloempleando,porejemplo,eltestbenchrealizadoenelejercicio
3.3ycontestealascuestionesqueseleformulanacontinuacin:
a) Elmodeloignoralafuncindeunaentradadelcircuitodivisor.Dequentradasetrata?
ActividadBT1_AI3:Divisoresaritmticos
11
b) Cuntos ciclos de reloj tarda en realizarse una divisin? Explique cmo modificara el
modeloparaqueladivisinserealiceen2ciclosdereloj.