打印

求助这段verilog点灯程序咋理解

[复制链接]
2614|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flyhouse112|  楼主 | 2013-8-26 17:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
flyhouse112|  楼主 | 2013-8-26 19:03 | 只看该作者
咋没人呢,刚入门学习FPGA,求教一下啊
wire [3:0] PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];                         // ramp the PWM input up and down
reg [4:0] PWM;
always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];

使用特权

评论回复
板凳
GoldSunMonkey| | 2013-8-26 21:24 | 只看该作者
有什么不解呢

使用特权

评论回复
地板
flyhouse112|  楼主 | 2013-8-27 00:55 | 只看该作者
GoldSunMonkey 发表于 2013-8-26 21:24
有什么不解呢

谢谢版主。俺对PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];这条语句中为什么取cnt[22:19]这四位作为pwm的输入,为啥为cnt[23]为0就取反呢。。
然后是PWM <= PWM[3:0]+PWM_input;这句什么意思,从最终的LED赋值来看,我猜应该是对pwm第五位值频率的变化来实现led的渐变,但还是对此编程思想不太明白。

使用特权

评论回复
5
ly7785779| | 2013-8-28 15:17 | 只看该作者
PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];
等价于
if(cnt[23] == 1)
    PWM_input <= cnt[22:19];
else
    PWM_input <= ~cnt[22:19];
计数器是累加的,当第23bit为1时(具体值是多少自己拿计算器算算吧),取4bit,为1时,4bit取反。
至于后面PWM <=PWM[3:0]+PWM_input;因为你的LED只有四位

使用特权

评论回复
6
flyhouse112|  楼主 | 2013-8-29 10:02 | 只看该作者
ly7785779 发表于 2013-8-28 15:17
PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];
等价于
if(cnt[23] == 1)

这个应该不是表示led位数吧,应该是使用4位数字来控制LED产生16个亮度等级。这个例子是控制led灯的亮度。程序的执行顺序我理解,我想再求教一下为什么不这么写呢?PWM_input = cnt[22:19],而要取反呢。还有这最后一个assign LED = PWM[4];是对led赋值0与1,那为什么要取pwm的第五位。谢谢回答

使用特权

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

本版积分规则

1

主题

8

帖子

1

粉丝