集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 9399|回复: 15

基于verilog的PWM实现

[复制链接]
老怪甲 该用户已被删除
老怪甲 发表于 2010-5-18 10:13:14 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-8-13 09:45 编辑

基于verilog的PWM实现

module pwm (clk, write_data, cs, write_n, addr, clr_n, read_data, pwm_out);
input clk;
input [31:0] write_data;

input cs;
input write_n;
input addr;
input clr_n;
output [31:0] read_data;
output pwm_out;
// 定义period和pulse_width寄存器的内容
reg [31:0] period;
reg [31:0] pulse_width;
reg [31:0] counter;
reg off;
reg [31:0] read_data;
wire period_en, pulse_width_en; //写使能


always @(posedge clk or negedge clr_n)
begin
  if (clr_n==0)
  begin
    period<=32&#39;h 00000000;
    pulse_width<=32&#39;h 00000000;
  end
  else begin
    if (period_en) period<=write_data[31:0];
    else period<=period;
    if (pulse_width_en) pulse_width<=write_data[31:0];
    else pulse_width<=pulse_width;
  end
end
// period和pulse_width寄存器的读访问
always @(addr or period or pulse_width)
if (addr == 0) read_data=period;
else read_data=pulse_width;

always @(posedge clk or negedge clr_n)
begin
  if (clr_n==0) counter<=0;
  else if (counter>=period-1) counter<=0;
  else counter<=counter+1;
end

always @(posedge clk or negedge clr_n)
begin
  if (clr_n==0) off<=0;  
  else if (counter>=pulse_width) off <= 1;
  else if (counter==0)   off<=0;
  else off<=off;
end

assign period_en = cs & !write_n & !addr;
assign pulse_width_en = cs & !write_n & addr;

endmodule
wq152683 发表于 2010-5-27 22:45:03 | 显示全部楼层
版主能不能加一下我好友,想请教一下问题QQ329282320谢谢
yezhutou 发表于 2010-8-7 22:32:19 | 显示全部楼层
谢谢LZ  我算是学习了
lscjp 发表于 2010-9-9 15:04:26 | 显示全部楼层
谢谢LZ   好好学习
zouyucqu2005 发表于 2010-11-15 14:42:59 | 显示全部楼层
谢谢楼主!
达_东 发表于 2011-1-15 14:51:22 | 显示全部楼层
谢谢楼主分享!
wzpawzz 发表于 2011-1-24 09:32:50 | 显示全部楼层
XIEXIE!!!!!!!!!!!!!
flyingbomber 发表于 2011-2-14 21:26:37 | 显示全部楼层
学习了,谢谢楼主!
haoge 发表于 2011-8-9 09:04:48 | 显示全部楼层
谢谢楼主!
duanlianming 发表于 2011-8-28 12:51:34 | 显示全部楼层
谢分享拉了拉
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-19 04:51 , Processed in 0.081757 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表