第一次在CSDN博客发帖,可能做的不好,不到位,如果那里有错,请联系 QQ 14730497
首先申明自己是新手,学fpga也快一年了,但感觉没怎么学到,弱爆了。。
发帖主要是给那些需要的人帮助,呵呵。。
直接数字频率综合技术,即DDS技术,是一种新型的频率合成技术和信号产生方法。其电路系统具有较高的频率分辨率,可以实现快速的频率切换,并且在改变时能够保持相位的连续,很容易实现频率、相位和幅度的数控调制。
DDS基本结构:
相位累加器位宽和采样点关系
ROM
LIBRARY ieee; --波形数据ROM
USE ieee.std_logic_1164.all;
LIBRARY altera_mf;
USE altera_mf.altera_mf_components.all;
ENTITY data_rom IS
PORT
( address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);
inclock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) );
END data_rom;
. . .
init_file => "./data/LUT10X10.mif", --波形数据初始化文件路径
lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom2",
. . .
_____________________________________________________________
LIBRARY IEEE; --32位加法器模块
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER32B IS
PORT ( A : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );
END ADDER32B;
ARCHITECTURE behav OF ADDER32B IS
BEGIN
S <= A + B;
END behav;
__________________________________________________________________
--32位寄存器模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG32B IS
PORT ( Load : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );
END REG32B;
ARCHITECTURE behav OF REG32B IS
BEGIN
PROCESS(Load, DIN)
BEGIN
IF Load'EVENT AND Load = '1' THEN -- 时钟到来时,锁存输入数据
DOUT <= DIN;
END IF;
END PROCESS;
END behav;
_________________________________________________________
rom_data.mif 10位正弦波数据文件,读者可用MATLAB/DSP Builder生成
WIDTH=10;
DEPTH=1024;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENT BEGIN
0 : 513; 1 : 515; 2 : 518; 3 : 521; 4 : 524; 5 : 527; 6 : 530; 7 : 533;
8 : 537; 9 : 540; 10 : 543; 11 : 546; 13 : 549; 13 : 552; 14 : 555;
. . . . . .(略去部分数据)
1018 : 493; 1019 : 496; 1020 : 499; 1021 : 502; 1022 : 505; 1023 : 508;
END;
结束。。。。。。。。
昵称: gong