Page 1 sur 1

un programme en verilog que je comprend pas

Publié : 24 mai 2006 14:33
par Luffy
Voilà, j'ai trouvé ce programme sur un site, j'ai testé ce qu'il faisait, c'est une sirène de police et en le visualisant sur oscilloscope on voit que l' on a une certaine plage de fréquence. Par contre, je ne comprend pas trop comment le programme arrive à le faire surtout à partir de la ligne en gras

module music(clk, q);
input clk;
output q;

reg [22:0] tone;
always @(posedge clk) tone <= tone+1;

wire [6:0] ramp = (tone[22] ? tone[21:15] : ~tone[21:15]);
wire [14:0] clkdivider = {2'b01, ramp, 6'b000000};

reg [14:0] counter;
always @(posedge clk) if(counter==0) counter <= clkdivider; else counter <= counter-1;

reg q;
always @(posedge clk) if(counter==0) q <= ~q;

endmodule


Quelqu'un pourrait m'expliquer surtout les lignes en gras svp? Merci d'avance

Publié : 25 mai 2006 17:12
par marsu

Code : Tout sélectionner

wire [6:0] ramp = (tone[22] ? tone[21:15] : ~tone[21:15]);
C'est comme en langage C si le bit tone[22] = '1' ALORS wire[6:0]=tone[21:15] SINON wire[6:0]= not tone[21:15] (l'inverse)

Code : Tout sélectionner

wire [14:0] clkdivider = {2'b01, ramp, 6'b000000}; 
Là j'ai l'impression qu'on génére une rampe numérique mais je n'en suis pas sur desole