Skip to content

Capítulo 2: De un bit a datos. Fport

Juan Gonzalez-Gomez edited this page Aug 11, 2015 · 20 revisions

Ejemplos de este capítulo en github

Introducción

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 sintentizar otro circuito.

Imagen 1

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

Fport.v: Descripción del hardware

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 mísmo número se podría expresar mediante un único dígito hexadecimal mediante: 4'hA. También lo podriamos poner en decimal como 4'd10

Síntesis en la FPGA

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:

Imagen 2

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 descargamos en la fpga el fichero Fport.bin:

$ sudo iceprog Fport.bin

Al terminar, dos leds estarán encendidos y dos apagados, ya que estamos enviando el valor 1010:

Simulación

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:

Imagen 3

El banco de pruebas (Fport_tb.v) consta de tres elementos:

  • El componente a probar: Fport (En la liteatura 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:

Imagen 4

Comprobamos que la salida siempre está al valor 1010

Ejercicios propuestos

  • 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)

Conclusiones

TODO

Clone this wiki locally