Datapath & Controlpath hace referencia a una técnica de programación en Verilog en la que dos módulos independientes -pero interconectados- realizan tareas complejas.
El módulo datapath.v se encarga de realizar las operaciones aritmético-lógicas, intercambio de datos entre registros, etc, mientras que el módulo controlpath.v activa las señales correspondientes para que dichas operaciones se realicen en el orden y momento adecuado.
En el módulo top.v se realizan las interconexiones entre las E/S de ambos módulos, así como con las E/S del exterior.
El módulo datapath contiene los elementos que realizan el procesamiento de los datos, tales como una ALU, registros, multiplexores, buses de datos, etc. Mientras que el módulo controlpath es una máquina de estados que en función de las entradas que recibe del datapath, va cambiando de estado y activando las salidas correspondientes para que el datapath realice las operaciones programadas.
imagen cortesía de Gemini
Vamos a ilustrar esta técnica de programación con un ejemplo de aplicación; veremos cómo hacer un multiplicador mediante el proceso de adicción. Este proceso está basado en la idea fundamental de que multiplicar un número por otro es lo mismo que sumar el primer número tantas veces como indica el segundo, es decir A · n = A+A...+A "n" veces.
El Algoritmo de una multiplicación por adicción es el siguiente:
Entrada: Dos números enteros positivos: el multiplicando (el que sumamos) y el multiplicador (el número de veces que se hace la suma).
Salida: El producto de la multiplicación.
Pasos:
Inicializar una variable para el resultado: Crear una variable, por ejemplo, llamada producto, y asignar el valor inicial de cero. Esta variable almacenará el resultado de la multiplicación.
Verificar el multiplicador: Asumiremos que el multiplicador es distinto de cero y positivo
Realizar la suma repetida: Crear un bucle que sume el primer número tantas veces como indique el segundo número.
Dentro del bucle: En cada iteración del bucle, sumar el valor del multiplicando a la variable producto y descontar 1 hasta que el contador sea 0.
Finalizar el bucle: Una vez que el bucle se haya ejecutado el número de veces indicado por el multiplicador, la variable producto contendrá el resultado de la multiplicación.
Devolver el resultado: El valor almacenado en la variable producto es el resultado de la multiplicación.
Para poner en práctica el algoritmo necesitamos dos registros para almacenar los datos, un contador y un sumador. En el registro A almacenamos el multiplicando y en el registro P se almacena el resultado de las sucesivas sumas. El contador irá decrementado el multiplicador en 1 unidad en cada iteración, cuando sea igual a cero se habilita la señal eqz y se detiene el proceso. Esta parte equivale al datapath.
Diagrama de bloques del datapath
El esquema completo del datapath queda como se muestra en la imagen siguiente.
El resultado lo mostramos en los ledes 8 a 15 de la BASYS 3 y opcionalmente podemos sacar el resultado del contador para tareas de debugging.
En el módulo top del datapath realizamos las conexiones de los registros, el sumador y el contador.
Para no extenderme excesivamente no voy a pegar aquí el código Verilog de los archivos individuales que componen el datapath; están disponibles para descargar al final de la página.
La parte de control o controlpath es una FSM que envía las señales al datapath para que realice las operaciones matemáticas.
El código Verilog de la máquina de estados del controlpath queda como se muestra a continuación. Para codificar dicha FSM he utilizado el método de tres bloques always separados.
En la imagen siguiente podemos ver el esquema general del multiplicador por adicción.
Si no queremos complicarnos en exceso podemos sacar el resultado por los ledes de la BASYS 3 como hemos visto más arriba o también podemos mostrar el resultado en los displays de 7 segmentos.
En el módulo top realizamos las conexiones entre el datapath y el controlpath, así como con las E/S exteriores.
El siguiente vídeo muestra el código Verilog funcionando en la BASYS 3.
Eso es todo por el momento. Espero que os haya gustado.
!Hasta la próxima!
Tema 4. Máquinas de Estado Finito
En YouTube:
DATAPATH AND CONTROLLER DESIGN (PART 1)
Credits: Department of Computer Science & Engineering Indian Institute of Technology Kharagpur
Puedes descargar el código Verilog de este tutorial en el enlace que encontrarás aquí abajo: