名称:4种波形发生器设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
4种波形发生器
2、不同波形通过开关进行选择
3、可以控制波形的频率
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.工程文件
2.程序文件
3.程序运行
4.RTL图
5.Testbench
6.程序仿真
最终输出波形为wave_data信号,wave_select信号选择输出哪种波形(00方波;01-三角波;10-正弦波;11-锯齿波),frequency_data信号设置波形频率(frequency_data值越小频率越大)。
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?wave_generation?IS ???PORT?( ??????sys_clk?????????:?IN?STD_LOGIC;--输入时钟 ??????sys_rst?????????:?IN?STD_LOGIC;--高电平复位 ?????? ??????wave_select?????:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);--00方波;01-三角波;10-正弦波;11-锯齿波 ??????frequency_data??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);--频率控制信号? ??????wave_data???????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--波形输出 ???); END?wave_generation; ARCHITECTURE?behaviour?OF?wave_generation?IS ???COMPONENT?carrier_wave?IS ??????PORT?( ?????????clk?????????????:?IN?STD_LOGIC; ?????????rst?????????????:?IN?STD_LOGIC; ?????????triangular_wave?:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????sawtooth_wave???:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????square_wave?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????sin_wave????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ??????); ???END?COMPONENT; ??? ??? ???SIGNAL?clk?????????????:?STD_LOGIC; ???SIGNAL?triangular_wave?:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?sawtooth_wave???:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?square_wave?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?sin_wave????????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ??? ???SIGNAL?clk_cnt?????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; BEGIN ??? ??? ???carrier_wave_ge?:?carrier_wave ??????PORT?MAP?( ?????????clk??????????????=>?clk, ?????????rst??????????????=>?sys_rst, ?????????triangular_wave??=>?triangular_wave, ?????????sawtooth_wave????=>?sawtooth_wave, ?????????square_wave??????=>?square_wave, ?????????sin_wave?????????=>?sin_wave ??????); ???PROCESS?(sys_clk) ???BEGIN ??????IF?(sys_clk'EVENT?AND?sys_clk?=?'1')?THEN ?????????IF?(sys_rst?=?'1')?THEN ????????????clk_cnt?<=?"00000000"; ?????????ELSIF?(clk_cnt?=?frequency_data)?THEN ????????????clk_cnt?<=?"00000000"; ?????????ELSE ????????????clk_cnt?<=?clk_cnt?+?"00000001"; ?????????END?IF; ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1276
阅读全文