Estoy planeando hacer un generador de forma de onda usando una placa FPGA (spartan 6 de diychips), sin embargo, soy nuevo en verilog, así que estoy teniendo un pequeño problema. Creé una secuencia de onda sinusoidal usando MATLAB y la importé a mi código verilog. Aquí está el código que debería generar la secuencia de 7 bits:
module dac7bit(input M_CLOCK, output reg [6:0] DAC);
reg[8:0] counter;
reg clk = 0;
reg[4:0] i = 0;
always @(posedge M_CLOCK) begin
counter <= counter+1;
if(counter==320)begin
clk <= ~clk;
counter <= 0;
end
end
always @(posedge clk) begin
case(i)
5'b00000 :DAC <= 7'b1000000;
5'b00001 :DAC <= 7'b1001111 ;
5'b00010 :DAC <= 7'b1011110 ;
5'b00011 :DAC <= 7'b1101011 ;
5'b00100 :DAC <= 7'b1110110 ;
5'b00101 :DAC <= 7'b1111100 ;
5'b00110 :DAC <= 7'b1111111 ;
5'b00111 :DAC <= 7'b1111110 ;
5'b01000 :DAC <= 7'b1111001 ;
5'b01001 :DAC <= 7'b1110001 ;
5'b01010 :DAC <= 7'b1100101 ;
5'b01011 :DAC <= 7'b1010111 ;
5'b01100 :DAC <= 7'b1001000 ;
5'b01101 :DAC <= 7'b0110111 ;
5'b01110 :DAC <= 7'b0101000 ;
5'b01111 :DAC <= 7'b0011010 ;
5'b10000 :DAC <= 7'b0001110 ;
5'b10001 :DAC <= 7'b0000110 ;
5'b10010 :DAC <= 7'b0000001 ;
5'b10011 :DAC <= 7'b0000000 ;
5'b10100 :DAC <= 7'b0000011 ;
5'b10101 :DAC <= 7'b0001001 ;
5'b10110 :DAC <= 7'b0010100 ;
5'b10111 :DAC <= 7'b0100001 ;
5'b11000 :DAC <= 7'b0110000;
default: DAC <= 7'b0100000;
endcase
i<=i+1;
if(i==24) begin
i<=0;
end
end
endmodule
He creado un DAC de registro que he asignado en el archivo .ucf, utilizando esta hoja de datos. Luego, los pines se conectan al R2R DAC fuera de la placa mediante puentes. No estoy seguro de si esta es la forma de hacerlo (para asignar los pines), tuve esta idea de cómo se hizo esto para la placa de E / S enviada con la placa FPGA. Aquí está el archivo .ucf:
# DAC
NET "DAC<6>" LOC = P104;
NET "DAC<5>" LOC = P101;
NET "DAC<4>" LOC = P99;
NET "DAC<3>" LOC = P97;
NET "DAC<2>" LOC = P94;
NET "DAC<1>" LOC = P92;
NET "DAC<0>" LOC = P87;
#====================================================
# Clock signal
NET "M_CLOCK" LOC = P123;
Sin embargo, no pude probar nada, todos los pines estaban altos. Pensé que el problema podría estar en la generación de mi propia señal de reloj o en la sintaxis de case (), así que intenté asignar solo un valor de 7 bits al registro DAC en cada ciclo M_CLOCK. Aún así, nada ha cambiado. Por lo tanto, creo que el problema está en inicializar el registro DAC, asignarlo o asignarle valores; sin embargo, no puedo encontrar nada que pueda ayudar.
EDITAR:
El problema era mucho más trivial de lo que esperaba. Fue debido al software que estaba usando. Instalé Xilinx ISE en una máquina con Windows 8 y algunas de las características (como la producción de archivos .mcs de bits de trabajo que parecían) estaban dañadas. Una vez que llegué a la computadora de mi escuela que ejecuta una versión funcional de ISE, el código funcionó como se esperaba.