FPGA|VHDL入门实践第四发:使用VHDL编写程序产生PWM波

按键控制PWM波形生成

一、实验目的与要求

​ 通过实验掌握使用EDA进行独立编写设计FPGA程序的全流程,提高对VHDL语言的理解,对EDA软件的熟练程度以及对EDA软件仿真的应用。

二、实验设备

  1. 装有QuartusⅡ的PC机

三、实验内容

本实验的内容是建立一个按键控制PWM波形的生成占空比。具体内容包括:
(1)使用Quartus II建立工程、编写程序;
(2)进行波形仿真验证;
(3)进行硬件测试。

实现内容如下:
按下按键A、B或C,pwm输出不同波形,占空比分别为20,50,100

四、实验步骤

  1. 启动QuartusII建立一个空白工程,然后命名为pwm.qpf。

  2. 新建VHDL源程序文件pwm.vhl,输人程序代码并保存,然后进行综合编译。若在编译过程中发现错误,则找出并更正错误,直至编译成功为止.

  3. 波形仿真验证,建立仿真文件,分别给按键三个值进行三次仿真,分析仿真产生的波形,是否与理论相同。

五、设计程序

仿真时序通过CLK进行输入,在通过分频作为PWM产生的时基,在进程内首先判断三个按键的值,哪一个按键按下,按键的优先级为KEY_C>KEY_B>KEY_A,根据按键的按下结果,改变PWM的比较值,通过时基累加计数器与PWM比较值进行比较,生成PWM波,程序如下:

按键判断:

1
2
3
4
5
6
7
8
9
if key_a = '1'then
cmp<=2;
end if;
if key_b = '1'then
cmp<=5;
end if;
if key_c = '1'then
cmp<=8;
end if;

PWM比较生成:

1
2
3
4
5
if n>cmp then
pwm <= '1';
else
pwm <= '0' ;
end if;

对分频后时基进行计数:

1
2
3
4
5
if rising_edge(trig)then
if n=8 then n:=0;
else n:=n+1;
end if;
end if;

六、实验结果及分析

实验图片:

  1. A按下仿真波形:

  2. B按下仿真波形:

  3. C按下仿真波形:

结果分析:

​ 对下载后程序进行测试,其实验现象和理论仿真一致,每个周期波形有一个很短的间隙,推测为之前程序执行的时间,整体上程序达到设计目标。