用至简设计法进行PWM流水灯设计

2017年07月06日 10:55    发布者:chunfen26341612
脉冲宽度调制(pulse width modelation)简称PWM,利用微处理器的数字输出来对微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。在本章的应用中可以认为PWM就是一种方波。如图2-7所示。图2-8 各个LED等对应的PWM波形FPGA通过8个管脚来分别控制8个LED灯,管脚值为0,对应的LED灯亮,管脚值为1,对应的LED灯灭(低亮高灭)。如果管脚不停地变化,则LED灯会闪烁;如果这种高低变化非常快,由于人的视觉暂留现象,LED就会出现不同的亮度。基于这个原则,我们也可以通过产生PWM波形,来控制LED灯的亮度。1. 明确功能首先确定模块信号列表,如表2.2。表2.2信号列表

信号名
I/O
位宽

说明


clk

I

1

系统工作时钟100MHz。


rst_n

I

1

系统复位信号,低电平有效。


led

O

8

LED输出信号

产生8个脉冲,每个脉冲周期为10s对应的占空比分别为:80%、70%、60%、50%、40%、30%、20%和10%。2. 功能波形led所有信号的变化都是相似的,这里以led为例。见图2-9。
图2-10 计数结构图4. 加一结束条件cnt_1s的加1条件:计数器一直在计数,即:assign add_cnt_1s=1;cnt_1s的结束条件:加一条件下计数到100_000_000-1;cnt_10s的加1条件:cnt_1s的结束时刻;cnt_10s的结束条件:加一条件下计数到10-1;5. 定义特殊点图2-11有几个特殊点,需要我们记住。图2-11 特殊定义点图cnt1s的结束条件:cnt_1s==100_000_000-1,定为end_cnt_1s。cnt10s的结束条件:cnt_10s==10-1,定为end_cnt_10s。led所有位的新号变化都是相似的,所以我们以led为例定义特殊点,led变高的条件:cnt_10s==1-1,定为led0_off。led变低的条件:cnt_10s==10-1,定为led_on。
6. 完整性检查


(1)计数器cnt_1s
cnt_1s的初值:0;
cnt_1s的加1条件:assign add_cnt_1s=1;
cnt_1s的结束条件:
assign end_cnt_1s=add_cnt1s&&cnt_1s ==100_000_000- 1(6)led
led由0变1:led3_off
led由1变0:led_on
(2)计数器cnt_10s
cnt_10s初值:0;
cnt_10s的加1条件: assign add_cnt_10s=end_cnt1s;
cnt_10s的结束条件:
assign end_cnt_10s=add_cnt10s && cnt_10s==10 - 1(7)led
led由0变1:led4_off
led由1变0:led_on
(3)led
led由0变1:led0_off
led由1变0:led_on(8)led
led由0变1:led5_off
led由1变0:led_on
(4)led
led由0变1:led1_off
led由1变0:led_on(9)led
led由0变1:led6_off
led由1变0:led_on
(5)led
led由0变1:led2_off
led由1变0:led_on(10)led
led由0变1:led7_off
led由1变0:led_on
7. 计数器代码8. 完整代码