Estoy intentando implementar un simple divisor de frecuencia de 9 bits usando el módulo LPM_counter. Hardware y software en uso:
- ALtera Max V-CPLD
- Edición web 15 quartus II de 64 bits
- ModelSim Altera Starter Edition 10.3d
Escribí un programa en formato esquemático de bloque (BDF) y lo descargué en el cpld y funciona bien, dando el resultado deseado. Sin embargo, cuando intento simularlo en ModelSim, aparece 'z' (alta impedancia) en todas las salidas.
Para la simulación, creé un archivo Verilog desde el archivo BDF usando la opción 'Crear archivo de diseño HDL de archivo actual' en Quartus. Luego escribí A testbench para simular una entrada de reloj para el módulo LPM_counter.
He intentado un montón de cosas diferentes que he leído en diferentes foros, como intentar ejecutarlo sin un banco de pruebas dando una entrada de Reloj directamente en ModelSim, probando salidas reg en lugar de cables y viceversa, entre otros cosas.
He estado estancado en esto por un tiempo y realmente lo necesito para trabajar porque necesitaré que ModelSim haga programas para algunos proyectos futuros. Estoy haciendo esto para acostumbrarme a todo el proceso antes de que realmente trabaje en él.
Por cierto, hice un divisor de frecuencia usando flip-flops JK y funcionó bien tanto en la simulación de cpld como de ModelSim. Es solo este módulo de caja negra con el que estoy teniendo problemas.
Archivo de origen (convertido a Verilog desde .bdf)
module ninebitlpm( myclk, q );
input wire myclk;
output wire [8:7] q; // only using the two most significant bits
wire [8:0] q_ALTERA_SYNTHESIZED;
lpm_counter b2v_inst( .clock(myclk), .q(q_ALTERA_SYNTHESIZED));
assign q[8:7] = q_ALTERA_SYNTHESIZED[8:7];
endmodule
module lpm_counter(clock,q);
/*synthesis black_box */
input clock; output [8:0] q;
endmodule
Banco de pruebas
'timescale 1us/1ns
module test_lpm();
reg myclk;
wire [1:0]q;
ninebitlpm mycounter(myclk, q);
initial begin myclk = 1; forever #1 myclk = ~myclk; end
endmodule