📄 dds.vhd
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;
entity DDS is
port(
rst : in std_logic;
clk : in std_logic; --15MHz
fin : in std_logic_vector(19 downto 0);
pin : in std_logic_vector(11 downto 0);
-- ain : in std_logic_vector(7 downto 0);
-- sen : in std_logic;
fout : out std_logic_vector(9 downto 0);
cda : out std_logic;
test : out std_logic_vector(15 downto 0)
);
end DDS;
architecture Behavioral of DDS is
signal f_in : std_logic_vector(23 downto 0);
signal f_reg : std_logic_vector(23 downto 0);
signal p_in : std_logic_vector(15 downto 0);
signal f_add : std_logic_vector(15 downto 0);
signal adder : std_logic_vector(15 downto 0);
signal data : std_logic_vector(15 downto 0);
signal f_out : std_logic_vector(15 downto 0);
begin
--Synchronize the input fin and pin
process(rst,clk)
begin
if rst='0' then
f_in<=x"000000";
p_in<=x"0000";
elsif clk'EVENT and clk='1' then
f_in<="0000"&fin;
p_in<="0000"&pin;
end if;
end process;
--Add the fin step
process(rst,clk)
begin
if rst='0' then
f_reg<=x"000000";
elsif clk'EVENT and clk='1' then
f_reg<=f_reg+f_in;
end if;
end process;
f_add<="0000"&f_reg(23 downto 12);
--Query the sin_list
process(rst,clk)
begin
if rst='0' then
adder<=x"0000";
elsif clk'EVENT and clk='1' then
if f_add<x"0400" then
adder<=f_add+p_in;
elsif f_add<x"0800" then
adder<=x"0800"-f_add+p_in;
elsif f_add<x"0C00" then
adder<=f_add-x"0800"+p_in;
else
adder<=x"1000"-f_add+p_in;
end if;
end if;
end process;
--Send the fout
process(rst,clk)
begin
if rst='0' then
f_out<=x"0000";
elsif clk'EVENT and clk='1' then
f_out<=adder;
end if;
end process;
process(rst,clk)
begin
if rst='0' then
fout<="0000000000";
elsif clk'EVENT and clk='1' then
if f_out<x"800" then
fout<=data(15 downto 6)+"0111111111";
else
fout<="0111111111"-data(15 downto 6);
end if;
end if;
end process;
cda<=clk;
test<=data;
--the sin_list
process(rst,clk)
begin
if rst='0' then
data<=x"0000";
elsif clk'event and clk='1' then
case adder is
when x"0000" => data<=x"0000";
when x"0001" => data<=x"000f";
when x"0002" => data<=x"001e";
when x"0003" => data<=x"002e";
when x"0004" => data<=x"003d";
when x"0005" => data<=x"004c";
when x"0006" => data<=x"005c";
when x"0007" => data<=x"006b";
when x"0008" => data<=x"007a";
when x"0009" => data<=x"008a";
when x"000a" => data<=x"0099";
when x"000b" => data<=x"00a8";
when x"000c" => data<=x"00b8";
when x"000d" => data<=x"00c7";
when x"000e" => data<=x"00d6";
when x"000f" => data<=x"00e6";
when x"0010" => data<=x"00f5";
when x"0011" => data<=x"0104";
when x"0012" => data<=x"0114";
when x"0013" => data<=x"0123";
when x"0014" => data<=x"0132";
when x"0015" => data<=x"0142";
when x"0016" => data<=x"0151";
when x"0017" => data<=x"0160";
when x"0018" => data<=x"0170";
when x"0019" => data<=x"017f";
when x"001a" => data<=x"018e";
when x"001b" => data<=x"019e";
when x"001c" => data<=x"01ad";
when x"001d" => data<=x"01bc";
when x"001e" => data<=x"01cc";
when x"001f" => data<=x"01db";
when x"0020" => data<=x"01ea";
when x"0021" => data<=x"01f9";
when x"0022" => data<=x"0209";
when x"0023" => data<=x"0218";
when x"0024" => data<=x"0227";
when x"0025" => data<=x"0237";
when x"0026" => data<=x"0246";
when x"0027" => data<=x"0255";
when x"0028" => data<=x"0265";
when x"0029" => data<=x"0274";
when x"002a" => data<=x"0283";
when x"002b" => data<=x"0293";
when x"002c" => data<=x"02a2";
when x"002d" => data<=x"02b1";
when x"002e" => data<=x"02c1";
when x"002f" => data<=x"02d0";
when x"0030" => data<=x"02df";
when x"0031" => data<=x"02ee";
when x"0032" => data<=x"02fe";
when x"0033" => data<=x"030d";
when x"0034" => data<=x"031c";
when x"0035" => data<=x"032c";
when x"0036" => data<=x"033b";
when x"0037" => data<=x"034a";
when x"0038" => data<=x"0359";
when x"0039" => data<=x"0369";
when x"003a" => data<=x"0378";
when x"003b" => data<=x"0387";
when x"003c" => data<=x"0397";
when x"003d" => data<=x"03a6";
when x"003e" => data<=x"03b5";
when x"003f" => data<=x"03c4";
when x"0040" => data<=x"03d4";
when x"0041" => data<=x"03e3";
when x"0042" => data<=x"03f2";
when x"0043" => data<=x"0401";
when x"0044" => data<=x"0411";
when x"0045" => data<=x"0420";
when x"0046" => data<=x"042f";
when x"0047" => data<=x"043e";
when x"0048" => data<=x"044e";
when x"0049" => data<=x"045d";
when x"004a" => data<=x"046c";
when x"004b" => data<=x"047b";
when x"004c" => data<=x"048b";
when x"004d" => data<=x"049a";
when x"004e" => data<=x"04a9";
when x"004f" => data<=x"04b8";
when x"0050" => data<=x"04c8";
when x"0051" => data<=x"04d7";
when x"0052" => data<=x"04e6";
when x"0053" => data<=x"04f5";
when x"0054" => data<=x"0504";
when x"0055" => data<=x"0514";
when x"0056" => data<=x"0523";
when x"0057" => data<=x"0532";
when x"0058" => data<=x"0541";
when x"0059" => data<=x"0551";
when x"005a" => data<=x"0560";
when x"005b" => data<=x"056f";
when x"005c" => data<=x"057e";
when x"005d" => data<=x"058d";
when x"005e" => data<=x"059c";
when x"005f" => data<=x"05ac";
when x"0060" => data<=x"05bb";
when x"0061" => data<=x"05ca";
when x"0062" => data<=x"05d9";
when x"0063" => data<=x"05e8";
when x"0064" => data<=x"05f7";
when x"0065" => data<=x"0607";
when x"0066" => data<=x"0616";
when x"0067" => data<=x"0625";
when x"0068" => data<=x"0634";
when x"0069" => data<=x"0643";
when x"006a" => data<=x"0652";
when x"006b" => data<=x"0661";
when x"006c" => data<=x"0671";
when x"006d" => data<=x"0680";
when x"006e" => data<=x"068f";
when x"006f" => data<=x"069e";
when x"0070" => data<=x"06ad";
when x"0071" => data<=x"06bc";
when x"0072" => data<=x"06cb";
when x"0073" => data<=x"06da";
when x"0074" => data<=x"06ea";
when x"0075" => data<=x"06f9";
when x"0076" => data<=x"0708";
when x"0077" => data<=x"0717";
when x"0078" => data<=x"0726";
when x"0079" => data<=x"0735";
when x"007a" => data<=x"0744";
when x"007b" => data<=x"0753";
when x"007c" => data<=x"0762";
when x"007d" => data<=x"0771";
when x"007e" => data<=x"0780";
when x"007f" => data<=x"078f";
when x"0080" => data<=x"079e";
when x"0081" => data<=x"07ad";
when x"0082" => data<=x"07bc";
when x"0083" => data<=x"07cc";
when x"0084" => data<=x"07db";
when x"0085" => data<=x"07ea";
when x"0086" => data<=x"07f9";
when x"0087" => data<=x"0808";
when x"0088" => data<=x"0817";
when x"0089" => data<=x"0826";
when x"008a" => data<=x"0835";
when x"008b" => data<=x"0844";
when x"008c" => data<=x"0853";
when x"008d" => data<=x"0862";
when x"008e" => data<=x"0871";
when x"008f" => data<=x"0880";
when x"0090" => data<=x"088f";
when x"0091" => data<=x"089d";
when x"0092" => data<=x"08ac";
when x"0093" => data<=x"08bb";
when x"0094" => data<=x"08ca";
when x"0095" => data<=x"08d9";
when x"0096" => data<=x"08e8";
when x"0097" => data<=x"08f7";
when x"0098" => data<=x"0906";
when x"0099" => data<=x"0915";
when x"009a" => data<=x"0924";
when x"009b" => data<=x"0933";
when x"009c" => data<=x"0942";
when x"009d" => data<=x"0951";
when x"009e" => data<=x"0960";
when x"009f" => data<=x"096e";
when x"00a0" => data<=x"097d";
when x"00a1" => data<=x"098c";
when x"00a2" => data<=x"099b";
when x"00a3" => data<=x"09aa";
when x"00a4" => data<=x"09b9";
when x"00a5" => data<=x"09c8";
when x"00a6" => data<=x"09d6";
when x"00a7" => data<=x"09e5";
when x"00a8" => data<=x"09f4";
when x"00a9" => data<=x"0a03";
when x"00aa" => data<=x"0a12";
when x"00ab" => data<=x"0a21";
when x"00ac" => data<=x"0a2f";
when x"00ad" => data<=x"0a3e";
when x"00ae" => data<=x"0a4d";
when x"00af" => data<=x"0a5c";
when x"00b0" => data<=x"0a6b";
when x"00b1" => data<=x"0a79";
when x"00b2" => data<=x"0a88";
when x"00b3" => data<=x"0a97";
when x"00b4" => data<=x"0aa6";
when x"00b5" => data<=x"0ab4";
when x"00b6" => data<=x"0ac3";
when x"00b7" => data<=x"0ad2";
when x"00b8" => data<=x"0ae1";
when x"00b9" => data<=x"0aef";
when x"00ba" => data<=x"0afe";
when x"00bb" => data<=x"0b0d";
when x"00bc" => data<=x"0b1c";
when x"00bd" => data<=x"0b2a";
when x"00be" => data<=x"0b39";
when x"00bf" => data<=x"0b48";
when x"00c0" => data<=x"0b56";
when x"00c1" => data<=x"0b65";
when x"00c2" => data<=x"0b74";
when x"00c3" => data<=x"0b82";
when x"00c4" => data<=x"0b91";
when x"00c5" => data<=x"0ba0";
when x"00c6" => data<=x"0bae";
when x"00c7" => data<=x"0bbd";
when x"00c8" => data<=x"0bcc";
when x"00c9" => data<=x"0bda";
when x"00ca" => data<=x"0be9";
when x"00cb" => data<=x"0bf7";
when x"00cc" => data<=x"0c06";
when x"00cd" => data<=x"0c15";
when x"00ce" => data<=x"0c23";
when x"00cf" => data<=x"0c32";
when x"00d0" => data<=x"0c40";
when x"00d1" => data<=x"0c4f";
when x"00d2" => data<=x"0c5d";
when x"00d3" => data<=x"0c6c";
when x"00d4" => data<=x"0c7b";
when x"00d5" => data<=x"0c89";
when x"00d6" => data<=x"0c98";
when x"00d7" => data<=x"0ca6";
when x"00d8" => data<=x"0cb5";
when x"00d9" => data<=x"0cc3";
when x"00da" => data<=x"0cd2";
when x"00db" => data<=x"0ce0";
when x"00dc" => data<=x"0cef";
when x"00dd" => data<=x"0cfd";
when x"00de" => data<=x"0d0b";
when x"00df" => data<=x"0d1a";
when x"00e0" => data<=x"0d28";
when x"00e1" => data<=x"0d37";
when x"00e2" => data<=x"0d45";
when x"00e3" => data<=x"0d54";
when x"00e4" => data<=x"0d62";
when x"00e5" => data<=x"0d71";
when x"00e6" => data<=x"0d7f";
when x"00e7" => data<=x"0d8d";
when x"00e8" => data<=x"0d9c";
when x"00e9" => data<=x"0daa";
when x"00ea" => data<=x"0db8";
when x"00eb" => data<=x"0dc7";
when x"00ec" => data<=x"0dd5";
when x"00ed" => data<=x"0de3";
when x"00ee" => data<=x"0df2";
when x"00ef" => data<=x"0e00";
when x"00f0" => data<=x"0e0e";
when x"00f1" => data<=x"0e1d";
when x"00f2" => data<=x"0e2b";
when x"00f3" => data<=x"0e39";
when x"00f4" => data<=x"0e48";
when x"00f5" => data<=x"0e56";
when x"00f6" => data<=x"0e64";
when x"00f7" => data<=x"0e72";
when x"00f8" => data<=x"0e81";
when x"00f9" => data<=x"0e8f";
when x"00fa" => data<=x"0e9d";
when x"00fb" => data<=x"0eab";
when x"00fc" => data<=x"0eba";
when x"00fd" => data<=x"0ec8";
when x"00fe" => data<=x"0ed6";
when x"00ff" => data<=x"0ee4";
when x"0100" => data<=x"0ef2";
when x"0101" => data<=x"0f01";
when x"0102" => data<=x"0f0f";
when x"0103" => data<=x"0f1d";
when x"0104" => data<=x"0f2b";
when x"0105" => data<=x"0f39";
when x"0106" => data<=x"0f47";
when x"0107" => data<=x"0f55";
when x"0108" => data<=x"0f63";
when x"0109" => data<=x"0f72";
when x"010a" => data<=x"0f80";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -