打印

请教verilog的pwm波的产生

[复制链接]
6906|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]???

使用特权

评论回复
5
kajan| | 2010-3-22 15:35 | 只看该作者
ps:我也是个新手,本来想写个testbech出来,结果仿真出错!!:'(还不会解决,LZ有testbech吗?发来分享学习一下……

使用特权

评论回复
6
kajan| | 2010-3-22 22:53 | 只看该作者
额……将位数缩小后测试了一下,脉冲pwm_flag的宽度应该是:
eg:   pwm_count[9:0]=10'b1000000001,那么脉冲宽度是14'b01111111111111

使用特权

评论回复
7
16ysa|  楼主 | 2010-3-29 11:04 | 只看该作者
我也没仿真 就是看着这玩意设定为32-0,然后用13-4感觉有点不理解,
要是我就直接用9-0了 哈哈 6# kajan

使用特权

评论回复
8
16ysa|  楼主 | 2010-3-29 11:27 | 只看该作者
恩 我感觉高电平持续时间是这样的,但整个周期是根据count算的 6# kajan

使用特权

评论回复
9
fym308| | 2010-6-10 21:24 | 只看该作者
请教一下 flag= 1'b0;是用来做什么的?

使用特权

评论回复
10
fym308| | 2010-6-10 21:25 | 只看该作者
还有我刚刚用这个做实验,怎么按键没按下时LED就在闪烁了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

125

帖子

1

粉丝