基于Quartus2组件DSP_builder设计DDS信号发生器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Quartus2组件DSP_builder 设计DDS 信号发生器
说明:Quartus2中DSP_builder 组件建立了Quartus2与Matlab 的无缝链接,这样极大的有利于FPGA 在信号处理中的应用,本次课题旨在通过建立一个信号发生器来说明DSP_builder 的强大之处。
传统的DDS 信号发生器的设计相对比较复杂(包括相位累加器,地址查找表,D/A ),通过传统的编程思想,会比较复杂,DSP_builder 则是通过simulink 中的Altera 库,直接构建DDS 模型,再通过signal complier 生成VHDL 语言以及仿真所用的测试脚本(testbench 文件),非常方便,并通过simulink 和FPGA 的仿真工具Modelsim_Atera 一起做了对比,两者吻合,达到了预期效果。
1.在Simulink 中构建DDS 模型
Signal Compiler
2.Simulink 下的仿真如图所示:
3.RTL 级仿真(modelsim 仿真):
-200
-150-100-50050100150200050100150200250300350400450500
-2
-1.5-1-0.500.511.52
4.RTL级视图
附:.vhl代码
-- sinwafe_GN.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity sinwafe_GN is
port (
Output : out std_logic_vector(7 downto 0); -- Output.wire
Input : in std_logic_vector(0 downto 0) := (others => '0'); -- Input.wire
Clock : in std_logic := '0'; -- Clock.clk
aclr : in std_logic := '0'
);
end entity sinwafe_GN;
architecture rtl of sinwafe_GN is
component alt_dspbuilder_clock_GNF343OQUJ is
port (
aclr : in std_logic := 'X'; -- reset
aclr_n : in std_logic := 'X'; -- reset_n
aclr_out : out std_logic; -- reset
clock : in std_logic := 'X'; -- clk
clock_out : out std_logic -- clk
);
end component alt_dspbuilder_clock_GNF343OQUJ;
component alt_dspbuilder_port_GNXAOKDYKC is
port (
input : in std_logic_vector(0 downto 0) := (others => 'X'); -- wire
output : out std_logic_vector(0 downto 0) -- wire );
end component alt_dspbuilder_port_GNXAOKDYKC;
component alt_dspbuilder_lut_GNV7OH7CRC is
generic (
use_lpm : natural := 0;
reg_addr : natural := 0;
reg_data : natural := 0;
family : string := "STRATIX";
ADDRWIDTH : positive := 8;
DATAWIDTH : positive := 8;
RAMTYPE : string := "AUTO"
);
port (
aclr : in std_logic := 'X'; -- clk
clock : in std_logic := 'X'; -- clk
ena : in std_logic := 'X'; -- wire
Input : in std_logic_vector(ADDRWIDTH-1 downto 0) := (others => 'X'); -- wire
Output : out std_logic_vector(DATAWIDTH-1 downto 0); -- wire
sclr : in std_logic := 'X' -- wire
);
end component alt_dspbuilder_lut_GNV7OH7CRC;
component alt_dspbuilder_gnd_GN is
port (
output : out std_logic -- wire
);
end component alt_dspbuilder_gnd_GN;
component alt_dspbuilder_vcc_GN is
port (
output : out std_logic -- wire
);
end component alt_dspbuilder_vcc_GN;
component alt_dspbuilder_product_GNSX3UCWXH is
generic (
pipeline : natural := 0;
UseDedicatedMult : natural := 0;
lpm : natural := 0;
MaskValue : string := "1";
Signed : natural := 0;
width : natural := 8
);
port (
aclr : in std_logic := 'X'; -- clk
clock : in std_logic := 'X'; -- clk
dataa : in std_logic_vector(width-1 downto 0) := (others => 'X'); -- wire
datab : in std_logic_vector(width-1 downto 0) := (others => 'X'); -- wire
ena : in std_logic := 'X'; -- wire
result : out std_logic_vector(width*2-1 downto 0); -- wire
user_aclr : in std_logic := 'X' -- wire
);
end component alt_dspbuilder_product_GNSX3UCWXH;
component alt_dspbuilder_delay_GN53FGQEY3 is
generic (
width : positive := 8;
delay : positive := 1;
ClockPhase : string := "1";
use_init : natural := 0;
BitPattern : string := "00000001"
);
port (