La configuración del kit de inicio FPGA Cyclone II parece estar dando resultados falsos

3

He estado intentando que mi FPGA Cyclone II (del Starter Kit, EP2C20) funcione. Conseguí que el software Quartus II funcionara en mi configuración de Ubuntu y funcionó CASI: puedo escribir un Verilog, compilarlo y ponerlo en mi dispositivo a través del programador. Sin embargo, no puedo obtener mi código para controlar las salidas FPGA de ninguna manera significativa. Aquí está, esencialmente, el código que estoy intentando:

module fpga(output LEDG[7:0);

assign LEDG = 1;

endmodule

Quiero que se enciendan todos los LED verdes en el FPGA. ¿Qué estoy haciendo mal?

Lo siento mucho si esto es algo que podría haber buscado en Google, acabo de pasar la última hora intentando hacerlo, pero no llegué demasiado lejos (no parece haber mucho ejemplo del código Verilog hecho para FPGA en Internet, al menos cualquier código que se ocupe de minucias como la activación de los LED).

No puedo esperar a comenzar a jugar con esto de verdad, ¡así que agradecería cualquier ayuda para que este pequeño paso funcione!

Actualización : el planificador de pines de Quartus II muestra que la ubicación del instalador para los pines que me interesan es diferente de los pines especificados en la hoja de datos. ¿Cómo puedo solucionar esto sin volver a asignar manualmente todos los pines a los lugares correctos?

    
pregunta Andrew

1 respuesta

2

Tu código no es del todo correcto.

Si desea establecer algo en un valor, debe crear un registro y configurarlo en consecuencia, luego asignar el valor a una salida. Por lo general, no puede usar las declaraciones initial para la síntesis (verifique su documentación), por lo que configurar el registro a una constante en una señal de reinicio o usar un bloque de ROM son opciones. Digamos que quiere encender los LED, sin embargo, esto es más emocionante que simplemente encenderlos. Digamos que tenemos un reloj de 16MHz, para reducir la velocidad del reloj de modo que los LED parpadeen visiblemente, debemos dividirlo. Si seleccionamos un registro de conteo de 24 bits, 16e6 / (2 ^ 24) = ~ 1Hz para que los LED se actualicen una vez por segundo.

module fpga(
input clk,
output LEDG[7:0);

// output reg to set 
reg rOUT[7:0]
// counter reg to slow clock down
reg rCOUNT[24:0]

// this models the synchronous logic, the block is activated on each positive edge of clk
always(@ posedge clk)
begin

// add one to rCOUNT on each clock positive edge
rCOUNT <= rCOUNT + 1;

    // if rCOUNT equals 0xFFFFFF then increment rOUT by 1
    if(rCOUNT == 24'hFFFFFF)
    begin
        rOUT <= rOUT + 1;
    end

end

assign value of rOUT to LEDG so LEDs will light according to rOUTs current value
assign LEDG = rOUT;

endmodule

Tenga en cuenta que al asignar un valor a un registro, debe especificar el ancho; de lo contrario, se establecerá el ancho predeterminado del sistema (por ejemplo, 32 bits)
Entonces, si crea un registro de 8 bits rOUT y desea establecerlo en todos los 1, asumiendo que su software de síntesis le permite asignar un valor inicial que escribiría reg rOUT = 8'b11111111; o reg rOUT = 8'hFF;
Todo esto se aclarará a medida que lea más.

Sobre el planificador de pines de Quartus, no estoy seguro (ya que uso los FPGA de Xilinx / Actel), pero asegúrese de que las asignaciones de pines sean correctas. Debe poder cambiarlos en el planificador de pin o editar manualmente el archivo de restricciones según sea necesario. Todo estará allí en la documentación (sin duda muy larga).

Un buen libro es "FPGA Prototyping by Verilog Example" (Pong P Chu), pero hay algunos ejemplos que puede seguir: fpga4fun es un buen sitio con muchos proyectos de ejemplo. Pasa un tiempo leyendo y conociendo los conceptos del lenguaje. Pruebe primero las cosas en el simulador para confirmar el funcionamiento correcto antes de programar FPGA.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas