Verilog Práctico

Capítulo 18. Sumadores

19 de enero de 2023

En el siguiente capítulo veremos cómo describir sumadores. 

A priori puede parecer un tema sencillo ¿Quién necesita hacer sumadores cuando Verilog incorpora operadores matemáticos? 

Sigue leyendo y además de implementar sumadores, aprenderás dos características muy importantes de Verilog: cómo instanciar módulos y diseño jerárquico.

Cuando se diseña un sumador se hace de manera incremental, partiendo de un circuito básico que reutilizaremos para describir otros sumadores más complejos.


El circuito sumador básico es el semisumador. 

Para describir el circuito del semisumador utilizamos asignaciones contínuas. 

2. Sumador completo


Un sumador completo es aquel circuito que tiene en cuenta el acarreo previo generador por el módulo anterior.


El circuito que representa un sumador completo está formado por dos semisumadores y una puerta OR.

Para describir el sumador completo, instanciamos dos semisumadores -que ya tenemos del ejemplo anterior- más una puerta OR para calcular el acarreo final. 

Conectando tres pulsadores en las entradas D8, D9 y D10 de la Alhambra II podemos verificar el funcionamiento del circuito. Las salidas las mostraremos en los ledes 0 (suma) y 1 (c_out). 

3. Sumador completo de 3 bits


El sumador completo es el circuito básico elemental para implementar sumadores de mayor tamaño. En la imagen se muestra un sumador de 3 bits (que tiene en cuenta el acarreo previo) hecho con tres sumadores completos. 


Este tipo de sumadores recibe el nombre de Ripple Carry Adder porque es capaz de generar el acarreo de dos números y pasarlo al siguiente sumador. 

Para diseñar el sumador de 3 bits, instanciamos tres sumadores completos. 

Esta forma de describir circuitos en Verilog, donde los módulos superiores se implementan con submódulos más sencillos, se llama Diseño Jerárquico. En la cima de la jerarquía se encuentra el módulo principal o Top Module que incluye a todos los demás. 

Recuerda poner en la misma carpeta los archivos .v de los módulos inferiores.

El archivo PCF queda como sigue: 

Conectando unos switches en las entradas D8 a D13 podemos comprobar el funcionamiento del circuito. 

El resultado de la suma se muestra en los ledes 0, 1, 2 y 3. 

4. Sumador completo de 3 bits y display de 7 segmentos


Vamos a darle una vuelta de tuerca al diseño del sumador anterior; en lugar de utilizar los ledes de la Alhambra II para mostrar el resultado, conectaremos un display de 7 segmetos.


La idea es sumar dos números a y b de 3 bits y pasar el resultado de la suma a un decodificador de binario a hexadecimal y mostrar el resultado en un display de 7 segmentos. Al ser a y b de 3 bits, el máximo valor de la suma es 7 + 7 = 14, si lo codificamos en hexadecimal sólo necesitamos un display, simplificando así el diseño del circuito. 

La imagen siguiente muestra el esquema del circuito.

Como en los ejemplos anteriores, nos ayudamos de un dip switch para introducir el valor de los sumandos a y b. El acarreo lo introducimos con el SW1.

Para no sobrecargar los pines de la FPGA, alimentamos los ledes del display mediante un ULN2803.

El código Verilog queda como sigue:


Módulo top.

Decodificador binario a hexadecimal. 

Archivo .pcf 

Subimos el código a la Alhambra. Con el dip-switch introducimos diferentes valores para los números a y b. En el display de 7 segmentos veremos el resultado de la suma.

La imagen siguiente muestra el resultado de sumar los números a = 3'b111 y b = 3'b010.

Descargas

Aquí abajo puedes descargar el código Verilog de los ejemplos anteriores.