一、实验目的与要求
1、熟悉Quartus Ⅱ软件的基本使用方法;
2、熟悉EDA实验开发系统的基本使用方法;
3、学习VHDL程序中数据对象、数据类型、顺序语句和并行语句的综合使用。
二、实验原理
设计并调试好一个脉宽数控调制信号发生器,此信号发生器是由两个完全相同的可自加载加法计数器LCNT8组成的,它的输出信号的高/低电平脉宽可分别由两组8位预置数进行控制。用EDA实验开发系统(事先应选定拟采用的实验芯片的型号)进行硬件验证。
三、实验内容
1.系统设计思路
PWM即脉冲宽度调制,就是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM从处理器到被控系统信号都是数字式的,无需进行数/模转换。让信号保持为数字形式可将噪声影响降到最小,因此广泛应用在测量、通信和功率控制与变换的许多领域中。
图17-1是一种PWM(脉冲宽度调制)信号发生器的逻辑图,此信号发生器是由两个完全相同的可自加载加法计数器LCNT8组成的,它的输出信号的高、低电平脉宽可分别由两组8位预置数进行控制。
如果将初始值可预置的加法计数器的溢出信号作为本计数器的初始预置加载信号LD,则可构成计数初始值自加载方式的加法计数器,从而构成数控分频器。图中,D触发器的一个重要功能就是均匀输出信号的占空比,提高驱动能力,这对驱动,诸如扬声器或电动机十分重要。
2.VHDL源程序
1) 8位可自加载加法计数器的源程序LCNT8.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LCNT8 IS --8位可自加载加法计数器
PORT(CLK, LD: IN STD_LOGIC; --工作时钟/预置值加载信号
D: IN INTEGER RANGE 0 TO 255; --8位分频预置数
CAO: OUT STD_LOGIC); --计数溢出输出
END ENTITY LCNT8;
ARCHITECTURE ART OF LCNT8 IS
SIGNAL COUNT: INTEGER RANGE 0 TO 255; --8位计数器设置
BEGIN
PROCESS(CLK) IS
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF LD='1' THEN COUNT<=D; --LD为高电平时加载预置数
ELSE COUNT<=COUNT+1; --否则继续计数
END IF;
END IF;
END PROCESS;
PROCESS(COUNT) IS
BEGIN
IF COUNT=255 THEN CAO<='1'; --计数满后,置于溢出位
ELSE CAO<='0';
END IF;
END PROCESS;
END ARCHITECTURE ART;
2) PWM信号发生器的源程序PWM.VHD
LIBRARY IEEE; --PWM信号发生器顶层文件
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY PWM IS
PORT(CLK: IN STD_LOGIC; --计数时钟
A,B: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --8位计数预置数
PWM: OUT STD_LOGIC); --计数溢出并分频输出
END ENTITY PWM;
ARCHITECTURE ART OF PWM IS
COMPONENT LCNT8 IS
PORT(CLK,LD: IN STD_LOGIC;
D: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CAO: OUT STD_LOGIC);
END COMPONENT LCNT8;
SIGNAL CAO1, CAO2: STD_LOGIC;
SIGNAL LD1,LD2: STD_LOGIC;
SIGNAL SPWM: STD_LOGIC;
BEGIN
U1: LCNT8 PORT MAP(CLK=>CLK, LD=>LD1, D=>A, CAO=>CAO1);
U2: LCNT8 PORT MAP(CLK=>CLK, LD=>LD2, D=>B, CAO=>CAO2);
PROCESS(CAO1,CAO2) --程序没问题,我将这里重输了一下,编译就没问题了。
BEGIN
IF CAO1='1' THEN SPWM<='0';
ELSIF CAO2'EVENT AND CAO2='1' THEN SPWM<='1';
END IF;
END PROCESS;
LD1<=NOT SPWM; LD2<=SPWM; PWM<=SPWM;
END ARCHITECTURE ART;
标签:STD,FPGA,CLK,--,发生器,LCNT8,LOGIC,PWM
From: https://blog.csdn.net/lengmei1/article/details/140652516