请教verilog的pwm波的产生

[复制链接]
8022|9
 楼主| 16ysa 发表于 2010-3-21 16:08 | 显示全部楼层 |阅读模式
看见一个程序上关于两个按键控制pwm的占空比,没明白程序中那个count计数
count[13:4]和count[15]所代表的意义   请指教  谢谢
程序如下
module pwm(clk,key,led,count,pwm_count);
input clk;
input [1:0]key;
output led;
output count;
output pwm_count;
reg [32:0] count;
reg [9:0] pwm_count;
reg flag;
reg pwm_flag;
always @(posedge clk)
begin
count=count+1'b1;
if (count[13:4] < pwm_count)
pwm_flag=1;
else
pwm_flag=0;
if (count[15] == 1'b1)
begin
if (flag == 1'b1)
  begin
  flag= 1'b0;
  if (key[0] == 1'b0)
   pwm_count=(pwm_count+10'b0000000001);
  else if (key[1] == 1'b0)
   pwm_count=(pwm_count-10'b0000000001);
  else pwm_count=pwm_count;
  end
end
else
flag= 1'b1;
end
assign led=pwm_flag;
endmodule
lelee007 发表于 2010-3-21 23:10 | 显示全部楼层
本帖最后由 lelee007 于 2010-3-21 23:16 编辑

if (count[13:4] < pwm_count)
pwm_flag=1;
else
pwm_flag=0;
很明显,count[13:4]就是用来作为产生PWM的占空比的,原理就是对clk的计数超过count[13:4]中预置的值后,PWM输出为0。最后PWM输出占空比就是count[13:4]中预置的值除以2的10次方([13:4])

count[15]是个标志位,好像是为1的时候可以读按键,然后改变PWM的占空比,步进是一个clk
  if (key[0] == 1'b0)
   pwm_count=(pwm_count+10'b0000000001);

代码貌似很简单吧?!
 楼主| 16ysa 发表于 2010-3-22 08:42 | 显示全部楼层
本帖最后由 16ysa 于 2010-3-22 08:51 编辑

恩 是很简单 我是菜鸟  就是不理解为啥他非要用13-4,而不用10-0,呵呵 辛苦啦 2# lelee007
kajan 发表于 2010-3-22 15:33 | 显示全部楼层
感觉它的占空比不是那样哦!脉冲宽度不是count[13:4],应该是{pwm_count[9:0],1111}
举个例子,如果pwm_count[9:0]=10'b1000000001,那么脉冲宽度应该是14'b10000000011111,而占空比应该是这个数除以2的14次方。
个人看法!!  不过我不怎么明白count为什么要设置为[33:0]???
kajan 发表于 2010-3-22 15:35 | 显示全部楼层
ps:我也是个新手,本来想写个testbech出来,结果仿真出错!!:'(还不会解决,LZ有testbech吗?发来分享学习一下……
kajan 发表于 2010-3-22 22:53 | 显示全部楼层
额……将位数缩小后测试了一下,脉冲pwm_flag的宽度应该是:
eg:   pwm_count[9:0]=10'b1000000001,那么脉冲宽度是14'b01111111111111
 楼主| 16ysa 发表于 2010-3-29 11:04 | 显示全部楼层
我也没仿真 就是看着这玩意设定为32-0,然后用13-4感觉有点不理解,
要是我就直接用9-0了 哈哈 6# kajan
 楼主| 16ysa 发表于 2010-3-29 11:27 | 显示全部楼层
恩 我感觉高电平持续时间是这样的,但整个周期是根据count算的 6# kajan
fym308 发表于 2010-6-10 21:24 | 显示全部楼层
请教一下 flag= 1'b0;是用来做什么的?
fym308 发表于 2010-6-10 21:25 | 显示全部楼层
还有我刚刚用这个做实验,怎么按键没按下时LED就在闪烁了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

125

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部