Las colas son similares a los arrays dinámicos. Básicamente son arrays con un principio y un final, y que tienen funciones para poder “crecer” o “decrecer” tanto por el principio como por el final.
La sintaxis de la declaración de cola es igual a la de un array pero se indica el tamaño con el signo dólar ($),que indica el último elemento
Opcionalmente se puede poner un máximo para ese tamaño, en la forma [$:max_tamaño]
Ejemplos de declaraciones
1 2 3 4 |
int cola_a[$]; string nombres[$] = {"Manolo"}; reg [7:0] fifo_bytes[$] = { 2, 3, 7 }; int cola_b[$:255]; // Máximo tamaño 256 |
Ejemplos de operaciones
1 2 3 4 5 |
cola_a = { cola_a, 6 }; // añadido el 6 al final cola_b = {5, cola_b}; // añadido el 5 al principio fifo_bytes = fifo_bytes[1:$]; // eliminado primer elemento fifo_bytes = fifo_bytes[0:$-1]; // borrado último elemento fifo_bytes= {}; //borrado de todos los elementos |
Métodos predefinidos
Función | Parámetros | Resultado |
size() | – | Devuelve tamaño |
insert() | índice y elemento | Inserta elemento en la posición indicada |
delete() | índice | Borra elemento de la posición indicada . Si no se indica índice, borra toda la cola |
pop_front() | – | Devuelve y elimina el primer elemento: e = Q.pop_front() // equivalente a e = Q[0]; Q = Q[1,$]; |
pop_back() | – | Devuelve y elimina último elemento: e = Q.pop_back() //equivalente a e = Q[$]; Q = Q[0,$-1]; |
push_front() | elemento | Inserta elemento al principio Q.push_front(e)// equivalente a Q = {e,Q}; |
push_back() | elemento | Inserta elemento al final Q.push_back(e) //equivalente a Q = {Q,e}; |

Aplicaciones
Con las colas se soluciona la creación de FIFOs y LIFOs para simulación. No es necesario crear punteros, detección de cuando se llena o vacía la cola, etc. Todo lo integra ya el lenguaje.
El tamaño máximo de cola puede ser muy interesante para simulación. De otra manera si la simulación se desmanda puede ocurrir que la cola termine ocupando toda la memoria de la máquina de simulación.
Por ejemplo en la siguiente figura utilizamos una FIFO para, suponiendo que queremos comparar el resultado de un diseño con un modelo ideal (EMULADOR), podamos olvidarnos de la latencia existente en el diseño bajo test.

Simulación de una cola
Si deseamos ver una simulación del funcionamiento de las colas podemos fijarnos el siguiente vídeo que simula el código que se adjunta a continuación.
Laboratorio virtual
En este laboratorio vamos a modelizar una FIFO ideal mediante colas y a simular sus diferentes casos