un programme en verilog que je comprend pas

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

Luffy
NOUVEAU
NOUVEAU
Messages : 10
Inscription : 20 déc. 2005 14:43
Localisation : Mérignac

un programme en verilog que je comprend pas

Message 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
Avatar de l’utilisateur
marsu
INSATIABLE
INSATIABLE
Messages : 155
Inscription : 13 juin 2005 11:08
Localisation : Paris
Contact :

Message 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
Répondre