-
Notifications
You must be signed in to change notification settings - Fork 0
Capítulo 2: De un bit a datos. Fport
Ejemplos de este capítulo en github
Ahora en vez de 1 bit sacaremos 4, y los mostraremos por los leds. Se trata de un valor fijo, que está "cableado por hardware". Si queremos visualizar otro número por los leds, habrá que sintetizar otro circuito.
Este componente lo denominaremos Fport (Fixed port). Tiene un bus de salida de 4 bits, etiquetado como data, que está cableado al valor binario 1010
Este circuito es muy parecido al del tutorial anterior (setbit.v) pero en vez de tener 1 bit de salida tiene 4. Se describe así:
//-- Fichero Fport.v
module Fport(output [3:0] data);
//-- La salida del modulo son 4 cables
wire [3:0] data;
//-- Sacar el valor por el bus de salida
assign data = 4'b1010; //-- 4'hA
endmodule
La salida ahora es un array de 4 cables. Esto se denota poniendo [3:0] delante del nombre. Para realizar la asignación escribimos el número en binario usando la notación de Verilog: Primero el número de bits, luego el carácter ', a continuación la base del número (b para binario) y por último los 4 dígitos binarios. Este mismo número se podría expresar mediante un único dígito hexadecimal mediante: 4'hA. También lo podríamos poner en decimal como 4'd10
Cada uno de los 4 bits de la salida data se saca por los pines de la fpga donde están conectados los 4 leds:
Esto se especifica en el fichero Fport.pcf:
set_io data[0] 99
set_io data[1] 98
set_io data[2] 97
set_io data[3] 96
Para realizar la síntesis entramos en el directorio tutorial/T02-Fport y ejecutamos el comando make sint:
$ make sint
En el mensaje final obtenemos un resumen de los recursos de la FPGA consumidos y los que quedan libres:
After placement:
PIOs 2 / 96
PLBs 1 / 160
BRAMs 0 / 16
Estos recursos son:
- PIO = Programmable I/O (Entradas / salidas programables)
- PLBs = Programmable Logic Blocks (Bloques lógicos programables)
- BRAMs = Block RAM Memory (Bloques de memoria)
Ahora cargamos en la fpga el fichero Fport.bin:
$ iceprog Fport.bin
Al terminar, dos leds estarán encendidos y dos apagados, ya que estamos enviando el valor 1010:
El banco de pruebas es similar al del capítulo anterior, pero ahora en vez de comprobar sólo un bit se comprueba el patrón de 4 bits. Si no es igual al esperado se emite un mensaje de error. El diagrama es el siguiente:
El banco de pruebas (Fport_tb.v) consta de tres elementos:
- El componente a probar: Fport (En la literatura se conoce como uut: unit under test)
- El bloque de comprobación
- El cable DATA
El código del banco de pruebas es:
//-- Fport_tb.v
module Fport_tb;
//-- Bus de 4 cables para conectarlos a la salida del componente Fport
wire [3:0] DATA;
//--Instanciar el componente. Conectar la salida a DATA
Fport FP1 (
.data (DATA)
);
//-- Comenzamos las pruebas
initial begin
//-- Fichero donde almacenar los resultados
$dumpfile("Fport_tb.vcd");
$dumpvars(0, Fport_tb);
//-- Pasadas 10 unidades de tiempo comprobamos
//-- si el cable tiene el patron establecido
# 10 if (DATA != 4'b1010)
$display("---->¡ERROR! Salida Erronea");
else
$display("Componente ok!");
//-- Terminar la simulacion 10 unidades de tiempo despues
# 10 $finish;
end
endmodule
Observamos que la salida del componente es data, y le hemos conectado el cable DATA, para enfatizar el hecho de que los nombres pueden ser diferentes
Para realizar la simulación ejecutamos el comando make sim:
$ make sim
Este es el resultado con gtkwave:
Comprobamos que la salida siempre está al valor 1010
- Cambiar el valor para sacar otro patrón por los leds. Simular, sintetizar y cargar en la FPGA
- Modificar el componente para que el bus sea de 5 bits en vez de 4. Sacar el quinto bit por el pin 44 de la FPGA (no tiene led asociado)
TODO
0 You are leaving the privative sector (EN)
1 ¡Hola mundo! (EN) (RU)
2 De un bit a datos (EN)
3 Puerta NOT (EN)
4 Contador de 26 bits (EN)
5 Prescaler de N bits (EN)
6 Múltiples prescalers (EN)
7 Contador de 4 bits con prescaler (EN)
8 Registro de 4 bits (EN)
9 Inicializador (EN)
10 Registro de desplazamiento (EN)
11 Multiplexor de 2 a 1 (EN)
12 Multiplexor de M a 1 (EN)
13 Inicializando registros (EN)
14 Registro de N bits con reset síncrono
15 Divisor de frecuencias
16 Contador de segundos
17 Generando tonos audibles
18 Tocando notas
19 Secuenciando notas
20 Comunicaciones serie asíncronas
21 Baudios y transmisión
22 Reglas de diseño síncrono
23 Controladores y autómatas finitos
24 Unidad de transmisión serie asíncrona
25 Unidad de recepción serie asíncrona
26 Memoria ROM
27 Memoria ROM genérica
28 Memoria RAM
29 Puertas triestado
30 Hacia el microprocesador y más allá