DISEÑO E IMPLEMENTACIÓN DE
CIRCUITOS COMBINACIONALES
Autores: Daniel Eduardo López Rodríguez, David
Alejandro Suarez Varón
Laboratorio de Electrónica Digital 1
Departamento de Ingeniería Electrónica y de Telecomunicaciones
Universidad de Antioquia
práctica anterior, la cual se define a partir de la
siguiente tabla de verdad:
Resumen
En la presente práctica de laboratorio se desarrolla
a b c salida
la implementación de circuitos combinacionales mediante el 0 0 0 0
uso del software Quartus de Intel y una FPGA. El 1 0 0 1
procedimiento se estructura en dos etapas: la primera se 0 1 0 1
orienta a la familiarización con la herramienta de diseño y a
la descripción elemental de funciones lógicas; la segunda
1 1 0 1
contempla la implementación de un circuito de mayor 0 0 1 1
complejidad, el cual incorpora una unidad aritmético-lógica 1 0 1 0
(ALU) y multiplexores. La interacción del usuario con el 0 1 1 1
circuito se lleva a cabo a través de interruptores (switches) y
un botón de presión (push button), mientras que los
1 1 1 0
resultados se presentan en los displays de siete segmentos Tabla 1 Tabla de verdad de la función.
integrados en la tarjeta FPGA.
Esta implementación se realizó mediante tres
enfoques: estructural, comportamental y por flujo
Introducción de datos, cada uno con el propósito de comprender
la sintaxis del lenguaje SystemVerilog, la cual varía
El desarrollo de circuitos combinacionales de acuerdo con el método utilizado. Para la
constituye un paso fundamental en el diseño de sistemas implementación en la FPGA, se definió un arreglo
digitales. En la presente práctica de laboratorio se emplea el de switches como entradas del circuito y un arreglo
software Quartus Prime de Intel para la descripción y de LEDs para visualizar las salidas de la función en
programación de circuitos en una FPGA, aplicando tres todos los casos.
métodos de modelado: descripción comportamental, ' ' '
descripción por flujo de datos y descripción estructural. F ( a ,b , c ) =a c+ b c + a c
Cada uno de estos enfoques permite representar el
funcionamiento del circuito de distintas maneras, variando el Para el desarrollo mediante el enfoque estructural,
nivel de abstracción, el detalle y el control sobre la se definieron módulos individuales para cada una de
implementación. Asimismo, se lleva a cabo la integración de las compuertas lógicas (NOT, AND y OR), los cuales
una unidad aritmético-lógica (ALU) en conjunto con fueron posteriormente instanciados en un módulo
multiplexores, conformando un sistema que responde a las principal, donde se asignaron los parámetros
entradas físicas de la tarjeta, tales como switches y push necesarios para realizar el cálculo de la función y
buttons. Finalmente, los resultados obtenidos se visualizan observar los resultados. Adicionalmente, se diseñó un
en los displays de siete segmentos, lo que permite verificar módulo testbench con el fin de simular y verificar el
el correcto funcionamiento del circuito y reforzar el comportamiento de la salida de la función. Las
entendimiento de los principios de diseño digital sobre entradas del circuito se asignaron a los switches 1, 2 y
plataformas FPGA. 3 de la tarjeta, mientras que la salida del circuito se
visualizó a través del LED 0.
Procedimiento experimental
y resultados
En una primera etapa de la práctica se desarrolla la
implementación del circuito combinacional
correspondiente a la función asignada al grupo en la
1
presentaba un error en el mintermino 6: al realizar
la suma, se producía un acarreo (carry) como
resultado de la operación aritmética. Para corregir
esta situación, se definió un condicional que
asignaba el valor del acarreo a la salida,
asegurando la correspondencia con los resultados
obtenidos en los métodos anteriores. La
configuración de entradas y salidas se mantuvo sin
modificaciones, utilizando los switches 1, 2 y 3
como entradas y el LED 0 como salida.
Fig. 1 Simulación estructural.
De manera similar al enfoque estructural, la
descripción por flujo de datos se diferencia en que
únicamente es necesario un módulo para desarrollar la
implementación de la función. En este método, el
circuito se representa mediante operadores lógicos tales Fig. 3 Simulación comportamental.
como &&, ~ y |, que corresponden a las compuertas
AND, NOT y OR, respectivamente. Inicialmente, se Para concluir la primera parte de la
implementan las operaciones AND y posteriormente se práctica, se integraron las tres formas de
combinan en la salida utilizando operaciones OR. Al descripción del circuito en un solo módulo. El
igual que en el enfoque anterior, se define un módulo objetivo de esta integración fue comprobar que,
testbench para la simulación y verificación del mediante cualquiera de los enfoques, se obtiene el
funcionamiento del circuito. Las entradas se asignan mismo resultado. Para ello, se instanció cada una
nuevamente a los switches 1, 2 y 3, y la salida se de las implementaciones en un módulo principal
visualiza a través del LED 0. (main) y se utilizó una compuerta AND para
combinar sus salidas, permitiendo así verificar la
coincidencia de los resultados. Asimismo, se
desarrolló un módulo testbench para simular y
validar el funcionamiento del sistema. Al igual que
en las implementaciones anteriores, las entradas se
asignaron a los switches 1, 2 y 3, mientras que la
salida se visualizó a través del LED 0.
Fig. 2 Simulación flujo de datos.
El enfoque comportamental presenta diferencias
significativas respecto a los dos métodos anteriores, ya
que en este se definen las funciones utilizando
operadores aritméticos tales como *, + y ~,
correspondientes a la multiplicación lógica (AND), la
suma lógica (OR) y la negación (NOT),
respectivamente. En este caso, se incorporó un paso
adicional debido a que la función implementada
2
Con esta configuración, las entradas A y B permiten
valores desde 0 hasta 15 (en decimal). El push button
permite alternar el valor de control entre 0 y 1. En
cuanto a las salidas, se utilizaron los displays 0 y 1:
el primero muestra el resultado de la ALU o el
multiplicador (bits menos significativos), y el
segunda muestra los bits más significativos del
multiplicador.
Para verificar el correcto funcionamiento del sistema,
se desarrolló un módulo testbench, en el cual se
Fig. 4 Simulación módulo main. instanció únicamente el módulo principal,
permitiendo así la comparación y validación de los
En la segunda parte de la práctica se implementó una resultados obtenidos.
unidad aritmético-lógica (ALU) y un multiplicador,
cada uno operando con entradas de 4 bits. En el caso de Para una mejor comprensión de la distribución de
la ALU, se incorporó un selector que permite alternar conexiones en la FPGA, se proporciona la siguiente
entre las operaciones XNOR, NAND, suma y resta. imagen:
Posteriormente, las salidas de estos módulos se
conectaron a multiplexores 2:1, los cuales, de acuerdo
con una señal de control, determinan la salida que se
envía al módulo decodificador encargado de mostrar los
resultados en dos displays de siete segmentos
configurados en formato hexadecimal.
Tanto la ALU como el multiplicador se definieron en
módulos independientes del módulo principal (main).
En particular, en la ALU se interroga el parámetro SEL,
que determina la operación a realizar; una vez
seleccionada, el resultado se asigna a la salida
correspondiente. Para el caso específico de la suma, se
asignó un LED (el LED 4) para indicar la presencia de
un acarreo (carry). En la operación de resta, si se
cumple la condición A<BA < BA<B, la salida se define
como 0000.
Fig. 5 Distribucion fisca FPGA.
Una lógica similar se aplica en el diseño de los
multiplexores: uno para alternar entre la salida de la
ALU y los cuatro bits menos significativos del
multiplicador, y otro para seleccionar entre la palabra
0000 o los cuatro bits más significativos del
multiplicador. En ambos casos, el control se realiza
mediante un push button, configurado como activo alto
en las FPGAs utilizadas en la práctica, en el primer caso
la salida era la entregada por la ALU o los cuatro bits
menos significativos entregados por el multiplicador y
en el otro alternaba entre “0000” o los cuatro bits más
significativos del multiplicador.
Respecto a las entradas, se utilizó la totalidad de los
switches disponibles en la tarjeta FPGA, distribuidos de la
siguiente manera:
Switches 0 y 1: determinan la operación
seleccionada para la ALU (valor de SEL).
Switches 2 a 5: representan la entrada A (4 bits).
Switches 6 a 9: representan la entrada B (4 bits).
3
Fig. 6 Algunos de los resultados simulados.
4
luego procesados por la ALU según la
operación seleccionada.
Este análisis manual permite comprender cómo cada
entrada y parámetro de control influye en la ejecución de
las operaciones en la FPGA. Asimismo, proporciona una
forma de verificar la correspondencia entre la
funcionalidad esperada del sistema y el comportamiento
real del hardware.
Además, se puede notar que esta estructura física y lógica
favorece la modularidad y el control preciso sobre cada
componente, permitiendo una fácil adaptación y
extensión del diseño a futuras
implementaciones o mejoras.
Conclusiones
En la primera parte se observa que existen
distintas formas de implementar un circuito
combinacional. Es importante destacar que,
dependiendo del diseño del circuito, una forma de
implementación puede ser más eficiente que otra.
Por ejemplo, la descripción estructural resulta muy
útil cuando se trabaja con circuitos de gran tamaño,
ya que permite crear módulos y simplemente
Fig. 7 Algunos resultados en la FPGA. instanciarlos cuando sea necesario, facilitando así la
organización y el mantenimiento del diseño. Por
otro lado, el flujo de datos agiliza el desarrollo
cuando se trata de circuitos más pequeños o de
lógica sencilla, ya que permite describir
Los resultados obtenidos de la FPGA pueden analizarse directamente las relaciones entre las señales de
manualmente de la siguiente manera, con el objetivo de facilitar entrada y salida. En cuanto a la forma
la comprensión tanto de la distribución física realizada como comportamental, ofrece una gran flexibilidad para
del funcionamiento general del sistema: describir comportamientos más complejos, aunque
En primer lugar, se verifica si el push button está presionado o requiere mayor cuidado, ya que existe el riesgo de
no, ya que este control determina el comportamiento del que el software genere salidas que, si bien son
circuito. A continuación, se analiza el valor de los switches que válidas a nivel de simulación, no sean las deseadas
representan un número binario de dos dígitos, S, el cual para el funcionamiento físico real del circuito.
selecciona la operación que la ALU debe ejecutar. Una vez
determinada la operación de la ALU, se procede a evaluar los En el desarrollo de la segunda parte, se
valores de las entradas A y B, ambos de 4 bits, que representan aprecia que es posible implementar múltiples
los operandos para la operación aritmético-lógica. funciones según los objetivos específicos del
Este proceso se lleva a cabo en los siguientes pasos: diseño. En lugar de limitarse a un multiplicador, se
1. Verificación del estado del push button: Si el push puede incorporar una unidad aritmético-lógica
button está activado, se procede con la ejecución de (ALU) más completa, capaz de realizar una gama
las operaciones según el valor de los switches. mucho más amplia de operaciones. Además,
2. *Selección de operación de la ALU: Los switches 0 y siempre existe la posibilidad de agregar nuevas
1 determinan la operación a realizar por la ALU a funciones a medida que se necesiten, lo cual
través del parámetro SEL. Dependiendo de este valor, proporciona una gran flexibilidad al sistema. Esta
la ALU llevará a cabo operaciones como XNOR, versatilidad se facilita al combinar las tres formas
NAND, suma o resta. de descripción de hardware. En este caso, se
3. Análisis de las entradas A y B: Los valores de las observa que los módulos de la ALU, el
entradas A (definidas por los switches 2 a 5) y B multiplicador y los multiplexores (Mux) se
(definidas por los switches 6 a 9) se convierten a sus describen de manera estructural, mientras que,
representaciones binarias de 4 bits. Estos valores son dentro de estos módulos, se utilizan descripciones
comportamentales para operaciones como la suma y
5
la resta, y descripciones basadas en flujo de datos para
implementar compuertas lógicas como XNOR y NAND.
Esta metodología permite aprovechar las ventajas
de cada estilo de modelado, optimizando tanto el
rendimiento como la claridad del diseño. Además, facilita
la reutilización de componentes y mejora el proceso de
verificación, ya que cada módulo puede ser probado de
forma individual antes de integrarlo en el sistema
completo. De este modo, el diseñador logra construir
circuitos más robustos, eficientes y escalables.
Blibliografia
1. S. Brown, Z. Vranesic, Fundamentals of Digital Logic
with Verilog Design, 2nd ed. New York, NY, USA: McGraw-
Hill, 2005.
2. M. B. Perkowski, A. S. W. Wong, and L. S. M. Alexander,
"Design and simulation of digital systems using
SystemVerilog," IEEE Trans. on VLSI Systems, vol. 16, no. 4,
pp. 555-563, Apr. 2008.
Intel, Quartus Prime Software Handbook, Intel
Corporation, 2020. [Online]. Available:
https://www.intel.com/content/www/us/en/software/pro
grammable/quartus-prime/overview.html. [Accessed: Apr.
28, 2025].
4. Xilinx, FPGA Design Flow, Xilinx, 2021. [Online].
Available:
https://www.xilinx.com/support/documentation-
navigation/design-hubs.html. [Accessed: Apr. 28, 2025].
5. J. Wakerly, Digital Design: Principles and Practices, 4th
ed. Upper Saddle River, NJ, USA: Pearson Prentice Hall,
2005.