软件:Quartus
语言:VHDL
代码功能:
移相信号发生器
设计内容:采用FPGA作为控制器,设计一个移相信号发生器,能产生两路正弦信号,正弦信号频率、幅值、相位差可调,具体参数可结合目标场合需求自行拟定。
设计系统硬件电路,计算相关参数;
编写软件程序,完成代码调试。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 原理框图(红色框图)
流程图:
分为2路正弦波产生通道,每个通道对应频率、幅值、相位差可调的正弦波信号发生器。
对于每一路正弦波信号发生器,工作流程如下:
2. 工程文件
3. 程序文件
4. 程序编译
5. RTL图
6. Testbench
7. 仿真图
整体仿真图
ROM表模块
相位累加器模块
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; USE?ieee.std_logic_unsigned.all; --一个移相信号发生器,能产生两路正弦信号,正弦信号频率、幅值、相位差可调 --正弦波频率等于clk*N/2^13,clk为输入时钟,N为频率控制字frequency;2^13是因为ROM里面存储了8192个点,相位累加器位宽为13位 ENTITY?DDS_top?IS ???PORT?( ??????clk_in??????:?IN?STD_LOGIC;--时钟 --波形1接口 phase_1????????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0);--相位控制字,调整相位 ??????frequency_1????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0);--频率控制字,控制输出波形频率,值越大,频率越大 ??????amplitude_1????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);--幅值控制字,值越大,幅值越大 wave_1?????????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--输出波形1 --波形2接口 phase_2????????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0);--相位控制字,调整相位 ??????frequency_2????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0);--频率控制字,控制输出波形频率,值越大,频率越大 ??????amplitude_2????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);--幅值控制字,值越大,幅值越大 wave_2?????????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)--输出波形2 ???); END?DDS_top; ARCHITECTURE?behave?OF?DDS_top?IS --例化模块 ??? --相位累加器模块 ???COMPONENT?Frequency_ctrl?IS ??????PORT?( ?????????clk_in??????:?IN?STD_LOGIC; ?????????frequency????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0); phase???????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0);--相位控制字,调整相位 ?????????addra????????:?OUT?STD_LOGIC_VECTOR(12?DOWNTO?0) ??????); ???END?COMPONENT; --ROM表 COMPONENT?sin_ROM?IS PORT ( address:?IN?STD_LOGIC_VECTOR?(12?DOWNTO?0); clock:?IN?STD_LOGIC??:=?'1'; q:?OUT?STD_LOGIC_VECTOR?(7?DOWNTO?0) ); END?COMPONENT;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1080
阅读全文