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

He estado tratando de hacer funcionar mi FPGA Cyclone II (del kit de inicio, EP2C20). Conseguí que el software Quartus II funcione en mi configuración de Ubuntu y CASI funciona: puedo escribir algo de Verilog, compilarlo y ponerlo en mi dispositivo a través del programador. Sin embargo, no puedo obtener mi código para controlar las salidas de FPGA de 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 del FPGA. ¿Qué estoy haciendo mal?

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

No puedo esperar para 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 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 reasignar manualmente todos los pines a los lugares correctos?

Tendrá que asignar manualmente los pines, de lo contrario, las herramientas se elegirán al azar
Debe haber un archivo de restricción de pines suministrado con el kit de inicio que contiene todas las asignaciones de pines (de todos modos, para los pines utilizados en el kit).

Respuestas (1)

Tu código no es del todo correcto.

Si desea establecer algo en un valor, debe crear un registro y establecerlo en consecuencia, luego asigne el valor a una salida. En general, no puede usar initialdeclaraciones para la síntesis (consulte su documentación), por lo que establecer el registro en una constante en una señal de reinicio o usar un bloque ROM son opciones.
Sin embargo, digamos que desea hacer parpadear los LED, esto es más emocionante que simplemente encenderlos. Digamos que tenemos un reloj de 16 MHz, para reducir la velocidad del reloj para que los LED parpadeen visiblemente, necesitamos dividirlo. Si elegimos un registro de conteo de 24 bits, 16e6 / (2^24) = ~ 1 Hz, por lo que los LED se actualizarán 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á de forma predeterminada en el ancho predeterminado del sistema (por ejemplo, 32 bits). Por lo tanto,
si crea un registro de 8 bits rOUTy desea establecerlo en todos los 1, luego, suponiendo que su software de síntesis permita 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 Quartus, no estoy seguro (ya que uso Xilinx/Actel FPGA), pero asegúrese de que las asignaciones de pines sean correctas. Debería poder cambiarlos en el planificador de pines 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 Examples" (Pong P Chu), pero hay algunos ejemplos que puede seguir: fpga4fun es un buen sitio con muchos proyectos de ejemplo. Pasa algún tiempo leyendo y conociendo las construcciones del lenguaje. Pruebe cosas en el simulador primero para confirmar la operación correcta antes de programar FPGA.