Estoy tratando de hacer un diseño que alterna un sonido a una velocidad de 120 BPM (una vez cada .5 segundos), y estoy usando un reloj de 50 MHz. Aquí está el módulo de tono:
module tone(
input clk,
input enable,
output reg speaker);
parameter clkdivider = 25000000/440/2;
reg [14:0] counter;
always @(posedge clk) if(counter==0) counter <= clkdivider-1; else counter <= counter-1;
always @(posedge clk) if(counter==0) speaker <= enable ? ~speaker : 0;
endmodule
y aquí está el módulo de alternancia:
module lockstep_main(input clk, output speaker);
reg enable;
tone(.clk(clk), .enable(enable), .speaker(speaker));
parameter beat = 50000000/2;
reg [14:0] counter;
always @(posedge clk) if(counter==0) counter <= beat-1; else counter <= counter-1;
always @(posedge clk) if(counter==0) enable <= ~enable;
endmodule
Tal como está, el diseño no funciona correctamente, solo hace que el altavoz emita tonos confusos. Además, si trato de configurar el registro de habilitación en 1 inicialmente y no lo cambio, todavía no obtengo ningún sonido. ¿Cuál podría ser el problema aquí?