El tono de encendido y apagado a 120 bpm no funciona

2

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í?

    
pregunta aftrumpet

1 respuesta

2

50000000/2 requiere 25 bits, no 15 (la base de registro 2 de 25000000 es 24.575, el máximo de eso es 25). En el segundo módulo, el contador se establece en 30783 en lugar de 25000000, por lo que el 'BPM' es ~ 97456 en lugar de 120.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas