Logo Studenta

Lab2_digital docx

¡Este material tiene más páginas!

Vista previa del material en texto

Lógica​ ​de​ ​​ ​transferencia​ ​entre​ ​registros 
Daniela​ ​Camargo​ ​Vargas 
Facultad​ ​de​ ​Ingeniería 
Programa​ ​de​ ​Ingeniería​ ​Electrónica​ ​extensión​ ​Tunja 
Universidad​ ​Pedagógica​ ​y​ ​Tecnológica​ ​de​ ​Colombia 
Tunja,​ ​Boyacá​ ​-​ ​Colombia 
daniela.camargo01@uptc.edu.co 
José​ ​Luis​ ​Gachagoque​ ​Sánchez 
Facultad​ ​de​ ​Ingeniería 
Programa​ ​de​ ​Ingeniería​ ​Electrónica​ ​extensión​ ​Tunja 
Universidad​ ​Pedagógica​ ​y​ ​Tecnológica​ ​de​ ​Colombia 
Tunja,​ ​Boyacá​ ​-​ ​Colombia 
jose.gachagoque@uptc.edu.co 
​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​Duvan​ ​Felipe​ ​Uribe​ ​Suarez 
Facultad​ ​de​ ​Ingeniería 
Programa​ ​de​ ​Ingeniería​ ​Electrónica​ ​extensión​ ​Tunja 
Universidad​ ​Pedagógica​ ​y​ ​Tecnológica​ ​de​ ​Colombia 
Tunja,​ ​Boyacá​ ​-​ ​Colombia 
Duvan.uribe@uptc.edu.co 
 
 
Abstract​— For the development of the practice 
were taken into account three points of the 
laboratory, the first of them corresponds to the 
multiplication of two binary numbers without sign 
of 5 bits each by successive sums. The second one 
deals with the count of the present ones in a data of 
10 bits and finally, the function of series of Fibonacci 
for a data of 4 bits. These three points developed 
through the transfer logic between registers, making 
two important blocks, first a DataPath that contains 
micro-operations, multiplexors and registers to store 
data and secondly a ControlPath that in this case is 
an FSM that controls the selections of the 
multiplexers and hence the inputs thereto; these two 
blocks are interconnected to comply with an order 
indicated, all described and simulated VHDL to be 
implemented in the development board and FPGA 
CYCLONE​ ​II​ ​to​ ​verify​ ​their​ ​operation. 
 
Resumen​— 
Para el desarrollo de la práctica se tuvieron en 
cuenta tres puntos del laboratorio, el primero de 
ellos corresponde a la multiplicación de dos números 
binarios sin signo de 5 bits cada uno por medio de 
sumas sucesivas. El segundo trata sobre el conteo de 
1s presentes en un dato de 10 bits y por último, la 
función de series de Fibonacci para un dato de 4 
bits. Estos tres puntos desarrollados mediante la 
lógica de transferencia entre registros, realizando 
dos bloques importantes, en primer lugar un 
DataPath que contiene micro-operaciones, 
multiplexores y registros para almacenar datos y en 
segundo lugar un ControlPath que en este caso es 
una FSM que controla las selecciones de los 
multiplexores y por ende las entradas a los mismos; 
estos dos bloques se encuentran interconectados 
para cumplir una orden indicada, todo esto descrito 
y simulado VHDL para luego ser implementado en 
la tarjeta de desarrollo FPGA CYCLONE II y 
verificar​ ​su​ ​funcionamiento. 
 
 
I. INTRODUCCIÓN 
 
 
En el diseño de sistemas digitales se utiliza enfoque 
modular. Los módulos se construyen a partir de 
componentes digitales como registros, decodificadores, 
elementos aritméticos y lógica de control, los diferentes 
módulos están interconectados con los datos y las 
trayectorias de control comunes conforman un sistema 
de​ ​computadora​ ​combinacional. 
 
Si tenemos en cuenta que una computadora digital, 
típicamente tiene muchos registros y se deben diseñar 
trayectorias para transmitir información de un registro a 
otro, la cantidad de conexiones o alambres será excesiva 
si se usan líneas separadas entre registros. Una mejor y 
eficiente manera para transmitir la información entre 
registros y todos los que conforman el sistema es 
utilizando un bus de datos, para esto es de mejor 
aplicación multiplexores tal y como se emplearon en el 
laboratorio y de esta manera evitar exceso de cableado; 
esto es muy común cuando se implementan distintas 
operaciones en donde las entradas al sistema son 
bastantes, por lo que para ello simplemente con una 
selección (multiplexor) se puede utilizar el mismo 
número de switch para varias entradas en caso de que el 
dato​ ​de​ ​entrada​ ​sea​ ​en​ ​binario. 
 
 
 
 
 
 
II. DESARROLLO​ ​DE​ ​LA​ ​PRÁCTICA 
 
La​ ​práctica​ ​de​ ​laboratorio​ ​se​ ​dividió​ ​en​ ​el​ ​diseño​ ​e 
implementación​ ​de​ ​3​ ​fragmentos​ ​principales: 
 
→​Multiplicador​ ​de​ ​sumas​ ​repetitivas 
→​Conteo​ ​de​ ​unos​ ​en​ ​un​ ​dato​ ​binario 
→​Cálculo​ ​de​ ​función​ ​de​ ​Fibonacci 
 
El​ ​esquema​ ​general​ ​desarrollado,​ ​se​ ​observa​ ​en​ ​la 
figura​ ​1. 
 
 
Fig.​ ​1​ ​Esquema​ ​general​ ​diseñado​ ​e​ ​implementado​ ​de​ ​la​ ​práctica. 
 
Cada​ ​una​ ​de​ ​las​ ​partes​ ​que​ ​conforman​ ​el​ ​diseño​ ​de​ ​la 
figura​ ​anterior,​ ​se​ ​describe​ ​a​ ​continuación: 
 
A. Multiplicador​ ​de​ ​sumas​ ​repetitivas 
Para​ ​el​ ​diseño​ ​de​ ​la​ ​función​ ​dada​ ​se​ ​utilizó​ ​el​ ​siguiente 
algoritmo,​ ​el​ ​cual​ ​representa​ ​la​ ​manera​ ​​ ​en​ ​que​ ​opera​ ​el 
multiplicador​ ​de​ ​sumas​ ​sucesivas. 
. 
Fig. 2 Algoritmo que describe la multiplicación de sumas 
sucesivas. 
 
La carta ASMD del multiplicador es la dada en 
la​ ​figura​ ​3.​ ​Presenta​ ​4​ ​estados​ ​en​ ​los​ ​que: 
 
❖ Idle: La máquina se encuentra en estado de 
“espera” a la siguiente operación a realizar. Se 
procederá​ ​a​ ​Load​ ​o​ ​Ab​ ​solamente​ ​si​ ​Start​ ​=​ ​0. 
❖ ​Load: Se cargan los datos de entrada a operar, 
y se asigna a la respuesta (R) el valor cero para 
el posterior comienzo de sumar. Se entrará a 
“Load”, si a y b son diferentes de 
cero(condición establecida en las condiciones 
de​ ​la​ ​carta),​ ​de​ ​lo​ ​contrario​ ​se​ ​pasará​ ​a​ ​“ab”. 
❖ ​Ab: Se cargan los datos de entrada a operar, y 
se asigna a la respuesta (R) el valor cero. En 
este caso, la respuesta de la operación, por 
ello,​ ​el​ ​siguiente​ ​estado​ ​es​ ​“Idle”​ ​. 
❖ Op: es en este estado donde se realiza la 
operación de suma. El estado se repetirá sólo si 
N es diferente de cero. De lo contrario, el 
siguiente​ ​estado​ ​es​ ​“Idle”. 
 
 
Fig.​ ​3​ ​Carta​ ​ASMD​ ​de​ ​​ ​multiplicador​ ​de​ ​sumas​ ​sucesivas. 
 
​ ​​Micro-operaciones​ ​y​ ​registros: 
 
Según el diseño realizado, y como se observa en la 
carta, se necesitan 3 registros: A, N y R. Las 
micro-operaciones​ ​con​ ​cada​ ​registro​ ​son​ ​la​ ​siguientes: 
Los​ ​datos​ ​de​ ​entrada​ ​se​ ​designan:​ ​a​ ​y​ ​b 
Registro​ ​A:​​ ​​ ​​ ​-Idle:​ ​A←​ ​A 
 -Load:​ ​A←​ ​a 
 -Ab:​ ​A←​ ​a 
 -Op:​ ​A←​ ​A 
Registro​ ​N:​​ ​​ ​​ ​-Idle:​ ​N←​ ​N 
 -Load:​ ​​ ​N←​ ​b 
 -Ab:​ ​​ ​N←​ ​b 
 -Op:​ ​​ ​N←​ ​N-1 
Registro​ ​R:​​ ​​ ​​ ​-Idle:​ ​R←​ ​R 
 -Load:​ ​R←​ ​’0’ 
 -Ab:​ ​R←​ ​’0’ 
 -Op:​ ​R←​ ​R+A 
​La operación de multiplicación como tal, funciona de la 
siguiente​ ​manera: 
Siendo los datos a(dato 1) y b(dato 2) los números a 
multiplicar,​ ​se​ ​asignan​ ​a: 
A​ ​=​ ​​ ​a​ ​​ ​;​ ​A​ ​es​ ​el​ ​registro​ ​que​ ​guarda​ ​el​ ​dato​ ​1. 
N = b ; N es el registro que guarda el dato 2 en primera 
instancia 
R Es el registro del resultado de la operación que en 
primera​ ​instancia​ ​es​ ​igual​ ​a​ ​‘0’. 
 
Secuencialmente, el dato en R irá cambiando realizando 
la siguiente operación: R=R+A, mientras que a N se le 
restará “1” (N=N-1) , con el fin de llegar a N=’0’; 
Cuando se llegue a N=0 no se harán más sumas, porque 
esto es lo que indicaque el dato 1 se ha sumado tantas 
veces​ ​como​ ​lo​ ​determina​ ​el​ ​valor​ ​del​ ​dato​ ​ingresado​ ​2. 
 
Ejemplo:​ ​La​ ​operación​ ​a​ ​realizar​ ​es​ ​la​ ​siguiente:
 
​ ​​Fig​ ​4.​ ​Operación​ ​ejemplo​ ​a​ ​realizar 
Dato​ ​1:​ ​a=​ ​6​ ​;​ ​​ ​Dato​ ​2:​ ​b=5 
 
En​ ​primera​ ​instancia: 
A=a=6​ ​;​ ​N=b=5​ ​;​ ​R=0 
 
De​ ​manera​ ​secuencial: 
(1)​ ​R=R+A=0+6=6;​ ​​ ​​ ​N=N-1=5-1=4 
(2)​ ​R=R+A=6+6=12;​ ​​ ​​ ​N=N-1=5-1=3 
(3)​ ​R=R+A=12+6=18;​ ​​ ​​ ​N=N-1=5-1=2 
(4)​ ​R=R+A=18+6=24;​ ​​ ​​ ​N=N-1=5-1=1 
(5)​ ​R=R+A=24+6=30;​ ​​ ​​ ​N=N-1=5-1=0 
 
Como N=0, no se realizan más sumas, conllevando al 
resultado​ ​final;​ ​para​ ​el​ ​ejemplo,​ ​R=30. 
 
Fig.​ ​5Operación​ ​ejemplo​ ​realizada 
 
Los dos bloques funcionales, corresponden al DataPath 
y ControlPath. En el bloque de DataPath se encuentran 
las microoperaciones, los multiplexores de selección de 
operaciones y los registros. En ControlPath se encuentra 
la máquina de estados correspondiente. La figura 6, 
hace referencia a la interconexión entre estos dos 
elementos. 
 
​ ​Fig.​ ​6​ ​Diagrama​ ​de​ ​bloques​ ​general​ ​del​ ​multiplicador. 
 
Las entradas Comp_N y Comp_A_B que se observan 
en la figura anterior, conciernen a las condiciones vistas 
en​ ​la​ ​carta​ ​ASMD​ ​como​ ​a=0​ ​o​ ​b=0​ ​y​ ​n=0. 
 
El controlPath descrito en VHDL se puede resumir en la 
figura 7, cuya imagen corresponde a la máquina de 
estados.
 
​ ​Fig.​ ​7​ ​Máquina​ ​de​ ​estados​ ​correspondiente​ ​al​ ​ControlPath​ ​de 
multiplicador.. 
 
El DataPath está compuesto principalmente por 3 partes 
como se aprecia en la figura , cuya imagen corresponde 
al​ ​RTL​ ​de​ ​la​ ​descripción​ ​hecha​ ​en​ ​Vhdl. 
​ ​Fig.​ ​8​ ​​ ​Bloques​ ​internos​ ​del​ ​DataPath.. 
 
Siendo Bloque_Mux, el bloque de los multiplexores de 
selección de estado, el bloque_Reg es el bloque que 
contiene los registros y el bloque_sum_comp contiene 
las operaciones anexas (sumas y comparaciones), los 
RTL de cada uno de ellos se muestra a continuación, en 
las​ ​figuras​ ​9,​ ​10,​ ​11​ ​respectivamente. 
 
 
 
Fig. 9 Bloque de multiplexores, correspondiente al DataPath de 
multiplicador. 
 
En la figura anterior, cada bloque de multiplexores 
contiene 10 multiplexores 4 a 1 referentes a cada bit del 
dato (10 bits que es el valor máximo multiplicando dos 
datos cada uno de 5 bits). Esto con el fin de obtener el 
dato en paralelo; A su vez, cada salida de cada bloque 
se​ ​dirige​ ​a​ ​los​ ​registros​ ​A,​ ​N​ ​y​ ​R. 
 
Fig. 10 Bloque de registros, correspondiente al DataPath de 
multiplicador 
 
En la figura anterior se encuentran los 3 registros 
descritos en VHDL: cada uno, es un registro pipo de 10 
bits.
 
Fig 11. Bloque de operaciones, correspondiente al DataPath de 
multiplicador 
 
La figura anterior presenta las comparaciones debidas a 
las condiciones requeridas, la suma (bloque 
denominado Adder) entre el dato que se encuentra en el 
registro R y el registro A, y la resta de N-1 (bloque 
Subtract). 
 
B.​ ​​Conteo​ ​de​ ​unos​ ​en​ ​dato​ ​binario 
 
Para​ ​el​ ​diseño​ ​de​ ​la​ ​función​ ​dada​ ​se​ ​utilizó​ ​el​ ​siguiente 
algoritmo​ ​(figura​ ​12)​ ​,​ ​el​ ​cual​ ​representa​ ​la​ ​manera​ ​que 
se​ ​da​ ​el​ ​proceso​ ​para​ ​encontrar​ ​1s​ ​en​ ​un​ ​dato​ ​binario 
 
​ ​Fig.​ ​12​ ​Algoritmo​ ​que​ ​describe​ ​la​ ​cuenta​ ​de​ ​1s​ ​en​ ​un​ ​dat​ ​binario 
 
La carta ASMD del contador de unos en un 
dato binario está dado en la figura .Presenta 3 
estados​ ​en​ ​los​ ​cuales: 
 
❖ Ready: La máquina se encuentra en estado de 
“espera” a la siguiente operación a realizar. Se 
procederá​ ​a​ ​Assigned​ ​solamente​ ​si​ ​Start​ ​=​ ​0. 
 
❖ Assigned: Se cargan el dato de entrada a 
revisar, y se asigna al conteo (B) el valor cero 
para el posterior comienzo y de inmediato pasa 
al​ ​tercer​ ​estado​ ​Count. 
 
❖ Count : es en este estado donde se realiza el 
conteo de unos del dato binario. En este estado 
se estará preguntando por el dato de entrada: si 
es 0, los 10 bits el siguiente estado será Ready, 
pero si el dato de entrada es diferente de 0, 
pasa a preguntar por el bit más significativo, en 
el cual si es un 1 lógico irá a la suma de B, y si 
no solo reiniciará el estado corriendo el dato A 
una​ ​posición​ ​hacia​ ​la​ ​derecha. 
 
Fig​ ​​ ​13.​ ​​ ​esquema​ ​de​ ​la​ ​carta​ ​ASMD​ ​realizada. 
​ ​​Micro-operaciones​ ​y​ ​registros: 
 
Según el diseño realizado, y como se observa en la carta 
ASMD (figura 13), se necesitan 2 registros: A y B. Las 
micro-operaciones​ ​con​ ​cada​ ​registro​ ​son​ ​la​ ​siguientes: 
 
Registro​ ​A: ​ ​-Ready:​ ​A←​ ​A 
 -Assigned:​ ​A←​ ​dat_a 
 -Count:​ ​A←​ ​sr​ ​A 
 
Registro​ ​B: ​ ​-Ready:​ ​B←​ ​B 
 -Assigned:​ ​B←​ ​0 
 -Count:​ ​B←​ ​B+1 
 
El funcionamiento del sistema es el siguiente: 
inicialmente los registros estarán parados con el dato 
interior de salida o con cero si es la primera vuelta o si 
el sistema se resetea. Allí se encontrará esperando un 
dato de entrada start para iniciar el proceso y luego de 
esto los valores de los registros A y B se asignan al dato 
de entrada y a 0 con el fin de analizar el dato y reiniciar 
la cuenta respectivamente. Luego de la asignación pasa 
al estado donde hace la cuenta de 1s lógicos que hay en 
el​ ​dato​ ​de​ ​la​ ​siguiente​ ​manera: 
 
El dato asignado al registro A será comparado con 0, en 
el cual si es afirmativo, el registro B mantiene el dato 0 
del estado anterior y se reinicia el proceso. De no ser 
así, se pasa a otro comparador donde solo se observa el 
dato menos significativo, y en caso de ser uno se 
sumará a B una unidad, de lo contrario vuelve a 
reiniciar el estado donde se encontraba. El dato A se 
desplaza un bit a la derecha y se asigna 0 al bit más 
significativo, de tal forma que pasen todos los datos del 
dato A y el registro solo quede cargado con 0 y allí 
reinicia​ ​el​ ​proceso​ ​para​ ​una​ ​cuenta​ ​nueva. 
 
 
Los dos bloques funcionales, corresponden al DataPath 
y ControlPath. En el bloque de DataPath se encuentran 
las microoperaciones, los multiplexores de selección de 
operaciones y los registros. En ControlPath se encuentra 
la máquina de estados correspondiente. La figura, hace 
referencia​ ​a​ ​la​ ​interconexión​ ​entre​ ​estos​ ​dos​ ​elementos. 
 
 
​ ​Fig.​ ​14​ ​Diagrama​ ​de​ ​bloques​ ​general​ ​del​ ​contador​ ​de​ ​1s. 
 
 
El controlPath descrito en VHDL se puede resumir en la 
figura 15, cuya imagen corresponde a la máquina de 
estados. 
 
 
Fig. 15 Máquina de estados correspondiente al ControlPath de 
contador​ ​de​ ​1s 
El DataPath está compuesto principalmente por 3 partes 
como se aprecia en la figura 16 , cuya imagen 
corresponde​ ​al​ ​RTL​ ​de​ ​la​ ​descripción​ ​hecha​ ​en​ ​Vhdl. 
 
 
Fig.​ ​16​ ​Bloques​ ​internos​ ​de​ ​DataPath​ ​de​ ​contador​ ​de​ ​1s 
 
Siendo Bloque_Mux, el bloque de los multiplexores de 
selección de estado, el bloque_Reg es el bloque que 
contiene los registros y el bloque UP contiene las 
operaciones anexas (sumas y comparaciones); los RTL 
de cada uno de ellos se muestra a continuación, en las 
figuras​ ​17,​ ​18​​y​ ​19​ ​respectivamente 
 
.
 
Fig.​ ​17​ ​Bloque​ ​multiplexores​ ​del​ ​DataPath​ ​de​ ​contador​ ​de​ ​1s 
 
En la figura anterior, cada bloque de multiplexores 
contiene 10 multiplexores 4 a 1 referentes a cada bit del 
dato(dato de entrada 10 bits). Esto con el fin de obtener 
el dato en paralelo; A su vez, cada salida de cada bloque 
se​ ​dirige​ ​a​ ​los​ ​registros​ ​A,​ ​B​ ​y​ ​al​ ​enable​ ​del​ ​registro​ ​B. 
 
Este enable consta de un solo 1 bit que está controlado 
por el estado de la máquina de estado, cuyo 
funcionamiento principal es tomar en cuenta si sumar a 
B o mantener el dato según el bit menos significativo 
del​ ​registro​ ​A. 
 
 
Fig.​ ​18​ ​Bloque​ ​multiplexores​ ​del​ ​DataPath​ ​de​ ​contador​ ​de​ ​1s 
 
En la figura anterior se encuentran los 2 registros 
descritos en VHDL: cada uno, es un registro pipo de 10 
bits.
 
Fig.​ ​19​ ​Sumador​ ​y​ ​comparador​ ​​ ​del​ ​DataPath​ ​de​ ​contador​ ​de​ ​1s 
 
La figura anterior presenta las comparaciones debidas a 
las​ ​condiciones​ ​requeridas. 
 
 
 
 
 
B. Cálculo​ ​de​ ​función​ ​de​ ​Fibonacci 
 
Para obtener el resultado de la función de Fibonacci 
para un dato de 4 bits sin signo se tuvo en cuenta la 
siguiente​ ​expresión​ ​matemática: 
 
 
 
​ ​​Fig.​ ​20​ ​Función​ ​de​ ​Fibonacci 
El algoritmo empleado en el diseño para obtener el 
resultado de dicha función es el que se muestra a 
continuación: 
 
a​ ​←​ ​0 
b​ ​←​ ​1 
 
for​​ ​k​ ​(0​ ​​to​​ ​n-1)​ ​​do 
 
b​ ​←​ ​b​ ​+​ ​a 
a​ ​←​ ​b 
n​ ​←​ ​n​ ​-1 
 
z​ ​=​ ​b 
 
Entradas​ ​para​ ​la​ ​transferencia​ ​lógica​ ​entre​ ​registros 
·​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​clk​ ​=​ ​señal​ ​de​ ​reloj 
·​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​rst​ ​=​ ​reset​ ​del​ ​programa 
·​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​d_i​ ​=​ ​dato​ ​de​ ​entrada 
·​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​start​ ​=​ ​inicio​ ​de​ ​cálculo​ ​del​ ​valor​ ​de​ ​entrada​ ​de 
acuerdo​ ​a​ ​la​ ​función​ ​de​ ​Fibonacci 
 
Salida​ ​del​ ​cálculo​ ​del​ ​valor​ ​de​ ​función​ ​de​ ​Fibonacci 
·​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​Rb​ ​=​ ​registro​ ​b 
 
La carta AMSD del algoritmo anterior fue diseñada 
mediante el método Moore que se presenta en la figura 
21. 
 
Fig.​ ​21​ ​Carta 
ASMD​ ​correspondiente​ ​a​ ​función​ ​de​ ​FIbonacci. 
 
De​ ​lo​ ​anterior​ ​cabe​ ​resaltar​ ​que: 
❖ ​ ​​ ​​ra​ ​=​ ​registro​ ​a 
❖ ​ ​​ ​​rb​ ​=​ ​registro​ ​b 
❖ ​ ​​ ​​n​ ​=​ ​registro​ ​n 
❖ ​ ​​ ​​d_i​ ​=​ ​dato​ ​de​ ​entrada 
❖ ​ ​​ ​​start​ ​=​ ​inicio​ ​para​ ​cálculo​ ​de​ ​la​ ​función​ ​en​ ​la 
máquina​ ​de​ ​estado​ ​finito 
❖ ​ ​​ ​​idle​ ​=​ ​primer​ ​estado​ ​de​ ​espera 
❖ ​ ​​ ​​assig​ ​=​ ​segundo​ ​estado​ ​de​ ​cuando​ ​el​ ​dato​ ​de 
entrada​ ​es​ ​‘0’ 
❖ ​ ​​ ​​compa​ ​=​ ​tercer​ ​estado​ ​de​ ​cuando​ ​el​ ​dato​ ​de 
entrada​ ​es​ ​‘1’ 
❖ ​ ​​ ​​adder​ ​=​ ​cuarto​ ​estado​ ​cuando​ ​el​ ​dato​ ​de 
entrada​ ​es​ ​mayor​ ​que​ ​‘1’ 
❖ ​ ​​ ​​T​ ​=​ ​True​ ​(verdadero) 
❖ ​ ​​ ​​F​ ​=​ ​False​ ​(falso) 
 
Tabla​ ​I​ ​Datos​ ​en​ ​registros​ ​de​ ​acuerdo​ ​a​ ​entrada 
Registro​ ​a Registro​ ​b Registro​ ​n 
0 0 15 
0 1 14 
1 1 13 
1 2 12 
2 3 11 
3 5 10 
5 8 9 
8 13 8 
13 21 7 
21 34 6 
34 55 5 
55 89 4 
89 144 3 
144 233 2 
233 377 1 
377 610 0 
 
Para la tabla I se tuvo en cuenta la carta AMSD 
mostrada anteriormente: para el caso en que la entrada 
fuese de “1111” en binario que corresponde a 15 en 
decimal. 
 
A​ ​continuación​ ​se​ ​​ ​muestran​ ​las​ ​micro-operaciones​ ​de 
cada​ ​uno​ ​de​ ​los​ ​registros​ ​en​ ​los​ ​respectivos​ ​estados​ ​en 
que​ ​se​ ​encuentren. 
 
Operaciones​ ​del​ ​registro​ ​​a​​ ​en​ ​los​ ​estados 
ra​ ​←​ ​ra​ ​(estado​ ​idle) 
ra​ ​←​ ​0​ ​(estado​ ​assig) 
ra​ ​←​ ​0​ ​(estado​ ​compa) 
ra​ ​←​ ​rb​ ​(estado​ ​adder) 
 
Operaciones​ ​del​ ​registro​ ​​b​​ ​en​ ​los​ ​estados 
rb←​ ​rb​ ​(estado​ ​idle) 
rb​ ​←​ ​0(estado​ ​assig) 
rb​ ​←​ ​1​ ​(estado​ ​compa) 
rb​ ​←​ ​rb​ ​+​ ​ra​ ​(estado​ ​adder) 
 
Operaciones​ ​del​ ​registro​ ​​n​​ ​en​ ​los​ ​estados 
n​ ​←​ ​n​ ​(estado​ ​idle) 
n​ ​←​ ​d_i​ ​(estado​ ​assig) 
n​ ​←​ ​n-1(estado​ ​compa) 
n​ ​←​ ​n-1(estado​ ​adder) 
 
 
Fig.​ ​22​ ​Bloque​ ​interno​ ​de​ ​DataPath​ ​función​ ​de​ ​Fibonacci 
 
El diagrama de bloques de la figura 22 muestra el 
DataPath compuesto principalmente por tres grupos. El 
primero corresponde a la parte de las 
micro-operaciones, el segundo al bloque de 
multiplexores controlando las entradas de cada uno de 
ellos mediante líneas de selección a partir de la FSM y 
por último el bloque de registros en este caso los 
registros​ ​​a,​ ​b​ ​​y​​ ​n. 
 
 
Fig. 23 Sumadores correspondientes al bloque del DAtaPath funcion 
de​ ​fibonacci. 
 
De la figura anterior se puede observar que en las 
micro-operaciones se realiza una suma entre los 
registros a y b, en donde la suma respectiva depende 
del valor almacenado en los dos registros. El valor de 
esta salida ingresará a uno de los multiplexores del 
siguiente bloque, y la suma está relacionada con el valor 
del dato de entrada, almacenado en el registro n que 
cada vez decrementará su valor en -1 hasta que el 
conteo sea 0, obteniendo el resultado final de la función 
en​ ​registro​ ​b. 
 
 
Fig.​ ​24​ ​​ ​Bloque​ ​de​ ​multiplexores​ ​​ ​del​ ​DataPath​ ​función​ ​de​ ​fibonacci. 
 
Los​ ​bloques​ ​de​ ​la​ ​figura​ ​anterior​ ​corresponden​ ​a​ ​los​ ​tres 
multiplexores​ ​en​ ​donde​ ​cada​ ​salida​ ​del​ ​multiplexor 
corresponde​ ​a​ ​la​ ​entrada​ ​de​ ​un​ ​registro​ ​del​ ​siguiente 
bloque,​ ​por​ ​lo​ ​que​ ​se​ ​tiene​ ​tres​ ​multiplexores​ ​para​ ​los​ ​3 
registros;​ ​cada​ ​una​ ​de​ ​las​ ​entradas​ ​de​ ​los​ ​multiplexores, 
corresponden​ ​a​ ​los​ ​estados​ ​diseñados​ ​en​ ​el​ ​ControlPath 
que​ ​dependen​ ​de​ ​los​ ​datos​ ​almacenados​ ​en​ ​los​ ​registros 
y​ ​de​ ​las​ ​micro-operaciones. 
 
 
Fig.​ ​25​ ​​ ​Bloque​ ​de​ ​registros​ ​​ ​del​ ​DataPath​ ​función​ ​de​ ​fibonacci. 
 
La figura 25 muestra los tres registros empleados 
para obtener el resultado de la función de Fibonacci, en 
donde el primer registro de arriba hacia abajo 
corresponde al registro n, el segundo al registro b y el 
tercero al registro a. Como ya se indicó anteriormente, 
los valores almacenados en los registros, dependen de 
las micro-operaciones, de las entradas y líneas de 
selección de los multiplexores y de las salida mismas de 
los registros. Cabe resaltar que el número de bits del 
registro n es de 4 bits que corresponde al dato de 
entrada, el registro a es de 10 bits ya que este registro 
puede tomar datos almacenados del registro b y el 
registro b es de 10 bits ya que su valor de salida en el 
mayor​ ​de​ ​los​ ​casos​ ​es​ ​de​ ​610​ ​en​ ​decimal. 
 
 
Fig. 26 Máquina de estados correspondiente al ControlPath de 
contador​ ​de​ ​1s 
 
La figura 26 corresponde a la máquina de estados 
finitos para controlar las líneas de selección de los 
multiplexores y por ende la entradas de los mismos que 
se​ ​encuentran​ ​dentro​ ​del​ ​DataPath. 
 
Fig. 27. Diagrama de bloques de la interconexión del ControlPath y 
DataPath 
 
Para la interconexión del ControlPath con el 
DataPath se tuvo en cuenta que mediante la salida de la 
máquina de estados finitos se controlarían las líneas de 
selección del bloque de multiplexores, en dondela 
transición de estados dentro de la FSM depende del 
valor almacenado en el registro n verificando si el valor 
era 0, 1 o ninguno de estos. Si el valor de salida era 0 es 
porque el dato de entrada (d_i) era 0, si el valor del 
registro es 1, es porque el dato de entrada es 1 o sino 
porque el dato de entrada era mayor que 1, pero en 
conteo del dato de entrada llega hasta 1 hasta que ya no 
se realizan más operaciones entre registros obteniendo 
el​ ​dato​ ​final​ ​de​ ​salida​ ​correspondiente​ ​al​ ​registro​ ​b. 
 
 
 
Fig.​ ​28.​ ​Simulación​ ​de​ ​la​ ​función​ ​de​ ​Fibonacci​ ​en​ ​Quartus​ ​II 
 
La imagen de la figura 28 muestra una simulación 
de la función de Fibonacci utilizando la herramienta de 
Quartus II University Program VWF en donde el dato 
de entrada corresponde al número 5, obteniendo a la 
salida el número correspondiente de la serie que es 5 
almacenado​ ​en​ ​el​ ​registro​ ​b. 
 
→ Para la visualización de los resultados 
correspondientes a los 3 puntos de laboratorio, se utilizó 
un multiplexor para elegir el punto a presentar como se 
observa​ ​en​ ​la​ ​figura​ ​1,​ ​en​ ​donde: 
 
TABLA​ ​II.​ ​SELECCIÓN​ ​DE​ ​PUNTOS​ ​DE​ ​LABORATORIO​ ​A 
PRESENTAR 
Selección Salida 
00 Multiplicación​ ​de​ ​dos​ ​datos 
01 Conteo​ ​de​ ​1s​ ​que​ ​hay​ ​en​ ​un​ ​dato​ ​de​ ​10​ ​bits 
10 Función​ ​de​ ​Fibonacci 
11 ‘0’ 
 
Luego una carta ASMD para la secuencia del 
desarrollo, un DataPath que contendrá registros, 
micro-operaciones entre registros y multiplexores, un 
ControlPath que controlará algunas enables de registros, 
líneas de selección de multiplexores y algunos otros 
componentes que hacen parte del ControlPath, para 
obtener​ ​la​ ​salida​ ​deseada. 
 
Conversión binaria a BCD y decodificación a 7 
segmentos 
 
Teniendo cada dato de salida correspondiente a 
cada una de las operaciones realizadas, el número 
se pasó a su representación BCD donde para su 
descripción fue necesario conocer el algoritmo XS3 
que​ ​se​ ​requiere​ ​para​ ​llevar​ ​a​ ​cabo​ ​la​ ​conversión: 
 
El algoritmo consiste en desplazar bit a bit e ir 
comparando con 4 los 3 vectores de cuatro bits que 
representan las unidades, decenas, centenas y 
unidades de mil. En el proceso de comparación, si 
alguno de estos vectores es mayor o igual a 4 se le 
suman 3 para así llevar los bits al siguiente vector, 
y si no, se deja igual y se sigue desplazando. El 
proceso se repite hasta que el último bit se desplace 
y​ ​ese​ ​a​ ​su​ ​vez​ ​se​ ​descarta. 
 
Ya bien teniendo la conversión de binario a bcd se 
procede a definir el bloque de los decodificadores 
de bcd a 7 segmentos para representar las unidades, 
decenas,​ ​centenas​ ​y​ ​unidades​ ​de​ ​mil. 
 
III. ANÁLISIS​ ​DE​ ​RESULTADOS 
 
En primer lugar, es de resaltar que las operaciones 
aritméticas como la multiplicación y la división no se 
listan dentro de las operaciones aritméticas básicas, ya 
que la única forma en que estas pueden llevarse a cabo 
mediante circuitos combinacionales, en la mayoría de 
los computadores, la operación se ejecuta mediante 
secuencia de micro-operaciones de suma y 
desplazamiento para el caso de multiplicación y de resta 
y​ ​desplazamiento​ ​para​ ​la​ ​división. 
 
 Todo lo anterior es implementado como se 
realizó en este laboratorio, mediante registros que 
almacenan información de acuerdo con una condición 
dada específicamente; las micro-operaciones lógicas 
especifican operaciones en una cadena de bits 
almacenados​ ​en​ ​dichos​ ​registros. 
 
 En el diseño de los ejercicios propuestos, se 
comprendió la forma simbólica mediante un operador 
de sustitución ← que denota una transferencia de un 
dato contenido en un registro que pasará a otro, 
teniendo en cuenta que el registro fuente almacenado en 
el​ ​primer​ ​registro​ ​no​ ​cambia​ ​durante​ ​la​ ​transferencia. 
 
 Es importante tener claro que en un circuito 
digital principalmente cuando tiene que ver con lógica 
de transferencia entre registros, las micro-operaciones 
aritméticas básicas son la suma, la resta, incremento, 
decremento y corrimiento. Por lo que como ya se dijo 
anteriormente, la multiplicación y la división no son 
consideradas básicas por lo que son una composición de 
las​ ​nombradas​ ​primeramente. 
 
La lógica de transferencia entre registros facilita de 
manera significativa el diseño de sistemas digitales, ya 
que entre sus características se tiene el poseer memoria. 
Al poder guardar los datos, se consigue realizar 
operaciones que dependen de resultados de acciones 
previas. Con cada punto de la práctica se pudo observar 
cómo se simplifica el diseño debido a la separación por 
bloques​ ​de​ ​cada​ ​uno​ ​de​ ​los​ ​entes​ ​del​ ​sistema. 
 
Diseñar el algoritmo general, es básicamente lo más 
importante, puesto que es la base de todo el diseño. Al 
obtener ya el algoritmo, se procede a elaborar la carta 
ASMD, la cual también tiene gran importancia porque 
es allí donde se observan las condiciones, estados y 
flujo del algoritmo de una manera más entendible.Como 
se pudo observar, cada carta descritas anteriormente 
tiene su propio flujo, que depende exclusivamente del 
sistema​ ​a​ ​implementar. 
 
Las micro-operaciones entre registros, se apreciaron 
claramente en la simulaciones hechas. A manera de 
ejemplo, se encuentra la simulación respectiva al 
multiplicador​ ​(figura​ ​29),​ ​en​ ​la​ ​que: 
 
Los datos indicados por las flechas, son los datos que se 
multiplican por efecto del start (Start da inicio a la 
operación). Los datos encerrados en un círculo 
relacionados de igual forma al color de la flecha, son el 
resultado de cada operación. Entre las cosas más 
considerables a resaltar en la imagen, es cómo de 
acuerdo al algoritmo realizado y su carta ASMD, que se 
aprecia en la figura 3, el registro R va mostrando la 
operación hecha sucesivamente (sumas) en cada flanco 
de reloj hasta que en este caso, N=0. Los pequeños 
recuadros encerrados en el rectángulo verde, 
corresponden a los valores de las sumas secuenciales 
llevadas​ ​en​ ​cada​ ​flanco​ ​de​ ​reloj. 
 
 
Fig. 29. Simulación de multiplicador de sumas sucesivas en Quartus 
II 
 
Las descripciones en VHDL de los registros, se hicieron 
de acuerdo a registros PIPO, para que el dato ingrese y 
salga de forma inmediata. Se hizo de esta manera para 
hacer más sencillo el diseño del sistema, la 
implementación en la tarjeta de desarrollo FPGA y 
sobre todo, rapidez en las micro-operaciones y por 
ende,​ ​resultados. 
 
Los multiplexores, sumadores, comparadores, 
decodificadores y demás, son dispositivos anexos que 
demanda el diseño. Esta lógica combinacional, hace 
parte de las micro-operaciones que se realizan entre 
registros y que por ello, también de ella depende el 
funcionamiento de las mismas. En la práctica no fueron 
tantas las necesarias, pero sí, es clave tener una 
descripción clara y precisa de éstos.. Al momento de 
describir en VHDL todo en cuanto a los bloques del 
sistema, es recomendable hacer un bosquejodel mismo, 
para​ ​mayor​ ​comodidad​ ​y​ ​seguridad​ ​en​ ​el​ ​proceso. 
 
 
 
IV. CONCLUSIONES 
 
★ La lógica de transferencia entre registros, al 
gozar de ese carácter de ‘tener memoria’ por 
sus registros, facilita significativamente el 
diseño de diversos sistemas digitales. 
Comparado con sistemas combinacionales, que 
darían tablas muy extensas y tal vez no 
eficaces, el diseño secuencial es vital a la hora 
de la elaboración e implementación de los 
diversos​ ​sistemas. 
 
★ Con la realización de esta práctica de 
laboratorio se aprendió a implementar 
funciones y operaciones matemáticas mediante 
el uso de registros, en el que todas de las 
operaciones realizadas en la práctica, tenían 
que almacenar información a medida que 
transcurría el tiempo y en donde las entradas 
de los registros estaban relacionadas entre sí 
con los demás registros de diseño para cumplir 
una​ ​determinada​ ​función. 
 
★ Para llevar a cabo un correcto funcionamiento 
de un diseño de transferencia lógica entre 
registros en importante tener en cuenta algunas 
pautas como lo son el algoritmo de la 
operación que se quiere implementar 
identificando entradas y salidas al sistema, 
luego una carta ASMD para la secuencia del 
desarrollo, un DataPath que contendrá 
registros, micro-operaciones entre registros y 
multiplexores, un ControlPath que controlará 
algunas enables de registros, líneas de 
selección de multiplexores y algunos otros 
componentes que hacen parte del ControlPath, 
para​ ​obtener​ ​la​ ​salida​ ​deseada. 
 
★ La notación simbólica que se utilizan para 
describir las transferencias de 
microoperaciones entre registros se llama 
lenguaje de transferencias de registros. El 
termino “transferencia de registro” implica la 
disponibilidad de circuitos lógicos de hardware 
que puedan efectuar una microoperacion 
definida y transferir el resultado de la 
operación al mismo o a otro registro. El 
conocer de manera oportuna el lenguaje, hace 
que como diseñador se pueda entender 
cualquier sistema a realizar, modificar o leer 
eficientemente. 
 
★ Los computadores y cualquier unidad de 
control, aritmética o lógica, utiliza la 
transferencia entre registros, debido a que 
permiten guardar información temporalmente 
para facilitar la manipulación de los datos. De 
allí, parte también la importancia a la hora de 
entender y manejar de la mejor manera el uso 
de registros y dispositivos anexos en pro de su 
correcta​ ​utilización. 
 
★ La lógica entre registros es ampliamente usada 
en medios computacionales, convertidores 
digital analógico y analógico digital, sistemas 
que necesiten retardos de propagación de 
datos, protocolos de comunicación, 
secuenciadores (luces y anuncios 
publicitarios), sistemas de transmisión de datos 
y en general, operaciones que se realicen 
secuencialmente. 
 
V. INFOGRAFÌA 
 
→ Documento de la Universidad Nacional de 
ingeniería, facultad de electrotecnia y computación: 
“Registros”. Disponible en: 
https://electrouni.files.wordpress.com/2010/08/registros
.pdf 
 
→ Video de internet: “Modelsim Tutorial”. Disponible 
en:​ ​​https://youtu.be/Z8whdGa7RtY 
 
→ Documento sobre VHDL: “VHDL Test Tutorial”. 
Disponible en: 
https://moodle.epfl.ch/pluginfile.php/1772382/mod_res
ource/content/3/vhdl_testbench_tutorial.pdf

Otros materiales

Materiales relacionados