?? pwm.txt
字號:
module PWM(clk,addr,wr_n,wrdata,reset,pwm1,pwm2,pwm3,pwm4);
input clk,wr_n,reset; //wr_n ----- 寫有效,在SOPC Builder中設為wr_n
//reset ---- 全局復位信號,低電平有效,在SOPC中設為reset_n信號
input [1:0]addr; //addr ----- 寫地址,在SOPC Builder中設為address
input [15:0]wrdata; //wrdata ----- 寫數據線,16位,在SOPC Builder中設為writedata
output pwm1,pwm2,pwm3,pwm4; //這四個信號為輸出信號,與H橋的1~4號開關管一一對應,適用于驅動
//4個NMOS構成的H橋,如果H橋上臂為PMOS,則PWM1和PWM2極性需要經過
// 非門方向,
reg [15:0]duty; //占空比
reg [15:0]period; //周期
reg [15:0]counter; //計數器
reg start;
reg out;
reg direct;
reg pwm1,pwm2,pwm3,pwm4;
always @(posedge clk or negedge reset)
begin
if (reset == 1'b0)
begin
duty[15:0] <= 16'h7fff;
{direct,start} <= 2'b00;
period[15:0] <= 16'h0ffff;
end
else
begin
if (wr_n == 1'b0)
begin
if (addr[1:0] == 2'b00)
begin
{direct,start} <= wrdata[1:0];
period[15:0] <= period[15:0];
duty[15:0] <= duty[15:0];
end
else if (addr[1:0] == 2'b01)
begin
start <= start;
direct <= direct;
period[15:0] <= wrdata[15:0];
duty[15:0] <= duty[15:0];
end
else if (addr[1:0] == 2'b10)
begin
duty[15:0] <= wrdata[15:0];
start <= start;
direct <= direct;
period[15:0] <= period[15:0];
end
else
begin
duty[15:0] <= duty[15:0];
start <= start;
direct <= direct;
period[15:0] <= period[15:0];
end
end
else
begin
duty[15:0] <= duty[15:0];
start <= start;
direct <= direct;
period[15:0] <= period[15:0];
end
end
end
always @(posedge clk)
begin
if ((wr_n == 1'b0) && (addr[1:0] == 2'b11))
begin
counter[15:0] <= wrdata[15:0];
end
else if (start == 1'b1)
begin
if (counter[15:0] < period[15:0]) counter[15:0] <= counter[15:0] + 16'b1;
else counter[15:0] <= 16'b0;
end
else counter[15:0] <= counter[15:0];
if (start == 1'b1)
begin
if (counter[15:0] <= duty[15:0]) out <= 1'b1;
else out <= 1'b0;
end
else out <= 1'b0;
end
always @(out or start or direct)
begin
if (start == 1'b0)
begin
pwm1 = 1'b0;
pwm2 = 1'b0;
pwm3 = 1'b0;
pwm4 = 1'b0;
end
else if (direct == 1'b0)
begin
pwm1 = 1'b1;
pwm2 = 1'b0;
pwm3 = out;
pwm4 = 1'b0;
end
else
begin
pwm1 = 1'b0;
pwm2 = 1'b1;
pwm3 = 1'b0;
pwm4 = out;
end
end
endmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -