/****************************************************************************************************************** * File: test_sspwm.v * Authors : Ktatruc (Areabot) * Date : 28/10/2005 * This program is released under the GNU Public License. * * Ce module est un testbench du générateur PWM spread spectrum. * Il génère une horloge, un reset, positionne les entrées et c'est tout ! * * En d'autres termes, ce n'est *PAS* un testbench réel. Il permet juste de générer des chronogrammes, * qu'on vérifie manuellement après (avec Modelsim, Icarus Verilog ou autre)... * *******************************************************************************************************************/ `timescale 1ns/100ps module test_sspwm; reg clk, reset_n; reg [11:0] period_min, period_range; reg [7:0] val; wire out; parameter half_period = 12.5; // la demi-période de l'horloge système, en ns. 50->10MHz, 20->25MHz parameter duree_simu = 5000000; // duree par defaut de chaque run, en ns. Ici 5ms // Instanciation du module à tester sspwm sspwm(clk, reset_n, period_min, period_range, val, out); // Generation de l'horloge always #half_period clk <= ~clk; initial clk <= 0; // Génération du reset initial begin reset_n <= 0; repeat(8) @(posedge clk); reset_n <= 1; end // Generation de chronogrammes (seulement out et la période) // Décommenter les lignes suivantes pour les avoir initial begin //$dumpfile("trace.vcd"); //$dumpvars(0, out, sspwm.pwm.periode_r) ; end // Creation des fichiers pour analyse spectrale integer fout; initial begin val = 128; // rapport cyclique moitie-moitie period_min <= 3; // Premier test : pas de spread spectrum fout = $fopen("test1.dat"); $fdisplay(fout, duree_simu); period_range <= 0; #duree_simu; // on simule $fclose(fout); // Deuxieme test : on spread un peu... fout = $fopen("test2.dat"); $fdisplay(fout, duree_simu); period_range <= 6; #duree_simu; // on simule $fclose(fout); // Troisieme test : on spread bien fout = $fopen("test3.dat"); $fdisplay(fout, duree_simu); period_range <= 10; #duree_simu; // on simule $fclose(fout); // Fin de la simulation $finish; end always @(posedge clk) $fwrite(fout, "%b", out); endmodule