名称:可控脉冲发生器(PWM)VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
可控脉冲发生器(PWM)
选用语言:VHDL
输入时钟50MHZ,将50MHZ的时钟分频为1HZ和2HZ,将分频后的时钟信号(1HZ和2HZ)当做可控脉冲的信号输入。
其中要求:
1.由拨动开关控制所选的输入信号(低电平时1HZ,高电平时2HZ)。
2.由四个拨动开关控制pwm信号的脉宽调制(实现0~15种模式共16种波形的输出),预留标准输出口。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 仿真图
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --可控脉冲发生器 ENTITY?pwm?IS ???PORT?( ??????clk???????:?IN?STD_LOGIC;--时钟50M ??????sel_sw????:?IN?STD_LOGIC;--选择1Hz还是2Hz ??????mode_key??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--输出模式控制 ??????pwm_out???:?OUT?STD_LOGIC--输出PWM波形 ???); END?pwm; ARCHITECTURE?behave?OF?pwm?IS ???SIGNAL?clk_2Hz?:?STD_LOGIC; ???SIGNAL?clk_1Hz?:?STD_LOGIC; ???SIGNAL?div_cnt?:?integer?:=?0;??? ???SIGNAL?sel_clk?:?STD_LOGIC; ???SIGNAL?pwm_cnt?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000"; BEGIN --50MHz分频产生2Hz ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(div_cnt?=?12)?THEN--需要计数12500000再控制clk_2Hz翻转(仿真将12500000改为12节约仿真时间) ????????????div_cnt?<=?0; ????????????clk_2Hz?<=?NOT(clk_2Hz);--翻转 ?????????ELSE ????????????div_cnt?<=?div_cnt?+?1;--计数 ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???--将2Hz分频为1Hz ???PROCESS?(clk_2Hz) ???BEGIN ??????IF?(clk_2Hz'EVENT?AND?clk_2Hz?=?'1')?THEN ?????????clk_1Hz?<=?NOT(clk_1Hz);--翻转 ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=647
阅读全文