Sei sulla pagina 1di 11

BLOQUETEMTICO1

TTULODELAACTIVIDAD:Diseojerrquico,modelado,simulacinyrealizacin
hardwarededivisoresaritmticos.
CDIGO:
BT1_AI3

FECHA:
NOMBRE: APELLIDOS:

MODALIDAD: EntregableIndividual TIPO: NoPresencial DURACIN:


13horas
ymedia

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

La figura 1 muestra el diagrama de bloques correspondiente a una arquitectura de un divisor


aritmticoparanmeroscodificadosenbinarionaturalcon4bits.Estaarquitecturasehacreadoa
partir del algoritmo que se utiliza para la realizacin manual de divisiones y, por ello, no debera
resultarledifcilentendersufuncionamiento.

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:

Se multiplica el divisor por 2


n1
, aadiendo n1 ceros a su derecha, y se compara con el
dividendo,demodoque:

o Sieldividendoesmayoroigualqueeldivisormultiplicadopor2
n1
,elbitdepeson1
del cociente valdr 1 y la diferencia entre ambos se convierte en el resto del
dividendoparaelsiguientepasodeladivisin.

o Si el dividendo es menor que el divisor multiplicado por 2


n1
, el bit de peso n1 del
cocientevaldr0yeldividendosemantieneparaelsiguientepasodeladivisin.
ActividadBT1_AI3:Divisoresaritmticos


4

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.

Por tanto, se obtiene que el resultado de dividir 13 (1101


b
) entre 2 (0010
b
) es 6 (0110
b
) y el resto
vale1(0001
b
).

El sistema de la figura 1 ejecuta, exactamente, el algoritmo que se acaba de describir. El mdulo


reg_in almacena en dos registros el valor del divisor y el dividendo cuando la entrada start se
activa;adems,elregistrodeldividendoalmacenaelvalordelrestodeldividendoquesecalculaen
cada paso en el que se obtiene un 1 (en el mdulo operadores) para el cociente de la divisin. El
mdulo barrelshifter calcula el producto del divisor por las potencias de dos que van desde 2
n1

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

c) En los modelos para sntesis el modelo VHDL de la interfaz de un sistema digital es


precedidoporclusulasdevisibilidad.Expliqueporqu.

Ejercicio2.2.ModeladodelainterfazdeSistemasDigitales

Cree un proyecto ModelSim, de nombre Proy_BT1_AI3, para la realizacin de los ejercicios de la


segundaytercerapartedeestaactividady,acontinuacin,editeycompileelmodelodelainterfaz
detodoslosmdulosdelcircuitodivisordelafigura1.Asigneacadaunoelnombrequeapareceen
dichafigura,salvoalregistrodedesplazamiento,alquedebedenominarreg_despyalbarrelshifter
alquedebellamarbarrel_shifter;paranombrarlospuertosdeentradaysalidautilicetambinlos
nombresdelafigura1,salvoenelcasodeaquellosquecarecendel:astospngaleselnombre
queprefiera.Observequeenlafigura1noserepresentan,porsimplicidad,lassealesdereloj(clk)
yresetasncrono(aRst_n).

ActividadBT1_AI3:Divisoresaritmticos


6
Ejercicio2.3.Modeladodelfuncionamientodesistemascombinacionales

Contestelassiguientescuestiones:

a) Describa el mecanismo de ejecucin de un proceso VHDL con lista de sensibilidad durante


unasimulacin.

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.

c) Explique qu es una sentencia concurrente, enumere aquellas que conozca y describa su


mecanismodeejecucinduranteunasimulacin.

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?

b) Describa la estructura de un proceso para el modelado del funcionamiento de un sistema


secuencialsncronosimple(unsistemaconarquitecturadeMooreyenelquelasalidaesla
memoriadeestado).

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.

c) Explique detalladamente cmo se realiza la conversin de los valores de tipo entero a


std_logic_vector.

Potrebbero piacerti anche