文档库 最新最全的文档下载
当前位置:文档库 › 正弦脉宽调制波(PWM)的verilog文档

正弦脉宽调制波(PWM)的verilog文档

module pwm_1phase(
clk,
rst,
pwm
);
input clk;
input rst;
output pwm;

wire [9:0]q1;
wire [7:0]q2;

wire [7:0]rom_data;
wire [7:0]rom_addr;
wire clk_9;

reg [6:0]cnt;
reg [7:0]CNT;

assign clk_9 = q1[9];
assign CLK_0 = q1[0];

always@(posedge clk_9 or negedge rst)
if(!rst)
cnt = 0;
else if(cnt ==125)
cnt = 0;
else
cnt = cnt + 1;

assign rom_addr = cnt;

always@(posedge CLK_0 or negedge rst)
if(!rst)
CNT = 0;
else if(clk_9 == 0 && CNT != 255)
CNT = CNT + 1;
else if(clk_9 == 1 && CNT != 0)
CNT = CNT - 1;
else
CNT = CNT;


assign q2 = CNT;

counter1 my_counter1(
.CLK(clk),
.RST(rst),
.Q1(q1)
);
rom_126data my_rom_126_data(
.ROM_DATA(rom_data),
.ROM_ADDR(rom_addr)
);
comp_rom_counter my_comp_rom_counter(
.RST(rst),
.CLK(clk),
.PWM(pwm),
.ROM_DATA(rom_data),
.Q2(q2)
);


endmodule


module counter1(
CLK,
RST,
Q1
);
input CLK,RST;
output [9:0]Q1;

reg [9:0]cnt;

always@(posedge CLK or negedge RST)
if(!RST)
cnt = 0;
else cnt = cnt + 1;

assign Q1 = cnt;

endmodule


module rom_126data(
ROM_DATA,
ROM_ADDR
);
input [7:0]ROM_ADDR;
output [7:0]ROM_DATA;

reg [7:0]ROM[125:0];


assign ROM_DATA = ROM[ROM_ADDR];
initial $readmemb("rom_pwm.txt",ROM,0,125);

endmodule

module comp_rom_counter(
RST,
CLK,
PWM,
ROM_DATA,
Q2
);
output PWM;
input [7:0]ROM_DATA;
input [7:0]Q2;
input CLK;
input RST;

reg PWM;

always@(posedge CLK or negedge RST)
if(!RST)
PWM = 0;
else if(Q2 < ROM_DATA)
PWM = 1;
else if(Q2 > ROM_DATA)
PWM = 0;
else if(Q2 == 255 & ROM_DATA == 255)
PWM = 0;
else if(Q2 == 0 & ROM_DATA == 0)
PWM = 1;
else
PWM = PWM;


endmodule


module testbench;
wire pwm_t;
reg clk_t;
reg rst_t;

pwm_1phase my_pwm_1phase(
.clk(clk_t),
.rst(rst_t),
.pwm(pwm_t)
);

initial
begin
rst_t = 1;
#10rst_t = 0;
#10rst_t = 1;
end

initial
begin
clk_t = 0;
forever #1clk_t = ~clk_t;
end

endmodule

10000000
10000110
10001100
10010011
10011001
10011111
10100110
10101100
10110010
10110111
10111101
11000011
11001000
11001101
11010010
11010111
11011100
11100000
11100100
11101000
11101100
11101111
11110010
11110101
11110111
11111001
11111011
11111101
11111110
11111111
11111111
11111111
11111111
11111111
11111110
11111101
11111100
11111010
11111000
11110110
11110011
11110000
11101101
11101010
11100110
11100010
11011110
11011001
11010101
11010000
11001011
11000101
11000000
10111010
10110101
10101111


10101001
10100010
10011100
10010110
10010000
10001001
10000011
01111100
01110110
01101111
01101001
01100011
01011101
01010110
01010000
01001010
01000101
00111111
00111010
00110100
00101111
00101010
00100110
00100001
00011101
00011001
00010101
00010010
00001111
00001100
00001001
00000111
00000101
00000011
00000010
00000001
00000000
00000000
00000000
00000000
00000000
00000001
00000010
00000100
00000110
00001000
00001010
00001101
00010000
00010011
00010111
00011011
00011111
00100011
00101000
00101101
00110010
00110111
00111100
01000010
01001000
01001101
01010011
01011001
01100000
01100110
01101100
01110011
01111001
01111111

相关文档
相关文档 最新文档