久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2067|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

vhdl數(shù)字頻率計(jì)程序_DDS

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
數(shù)字頻率計(jì)_DDS


單片機(jī)源程序如下:
  1. LIBRARY ieee;
  2. USE ieee.std_logic_1164.all;
  3. USE ieee.std_logic_unsigned.all;
  4. USE ieee.std_logic_arith.all;

  5. ENTITY dds_dds IS
  6.         port(ftw: in std_logic_vector(23 downto 0);                                        --頻率控制字
  7.                  clk: in std_logic;                                                                                --系統(tǒng)時(shí)鐘
  8.                  rec: in std_logic;                                                                                --接收信號使能
  9.                  out_q:        out std_logic_vector(9 downto 0);                                --幅度值輸出
  10.                  ack: out std_logic);                                                                        --接收應(yīng)答信號
  11. END dds_dds;

  12. ARCHITECTURE beh of dds_dds is
  13. signal phase_adder,frq_reg:std_logic_vector(23 downto 0);
  14. signal rom_address,address:std_logic_vector(9 downto 0);
  15. signal rom_out:std_logic_vector(9 downto 0);
  16. signal s_1,s_2,a_1,a_2:std_logic;
  17. signal a:std_logic;
  18. component dds_dds_rom                                                                                        --定義ROM元件
  19.         PORT(address        : IN STD_LOGIC_VECTOR (9 DOWNTO 0);
  20.                  q                : OUT STD_LOGIC_VECTOR (9 DOWNTO 0));
  21. end component;
  22. begin
  23.         data: dds_dds_rom port map(address,rom_out);
  24.         datain: process(clk)                                                                                --數(shù)據(jù)輸入部分
  25.         begin
  26.         if(clk'event and clk='1') then                                                                --clk上升沿觸發(fā)
  27.                 if(rec='1') then                                                                                --rec為1則讀取ftw數(shù)據(jù)并將應(yīng)答信號ack置1
  28.                         frq_reg<=ftw;                                                                          
  29.                         ack<='1';                                                                                  
  30.                         a<='1';                                                                                                --a與ack內(nèi)容相同在判斷時(shí)使用
  31.                 end if;                                                                                                  
  32.                 if(a='1') then                                                                                        --檢測到上一個(gè)周期ack為1,則將其復(fù)位
  33.                         ack<='0';                                                                                  
  34.                         a<='0';                                                                                          
  35.                 end if;
  36.         end if;
  37.         end process;

  38.         phase_add: process(clk)                                                                                --相位累加部分
  39.         begin
  40.                 if(clk'event and clk='1') then                                                        --clk上升沿觸發(fā)
  41.                         phase_adder<=phase_adder+frq_reg;                                        --進(jìn)行相位累加
  42.                         rom_address(0)<=phase_adder(12);                               
  43.                         rom_address(1)<=phase_adder(13);
  44.                         rom_address(2)<=phase_adder(14);
  45.                         rom_address(3)<=phase_adder(15);
  46.                         rom_address(4)<=phase_adder(16);
  47.                         rom_address(5)<=phase_adder(17);
  48.                         rom_address(6)<=phase_adder(18);
  49.                         rom_address(7)<=phase_adder(19);
  50.                         rom_address(8)<=phase_adder(20);
  51.                         rom_address(9)<=phase_adder(21);
  52.                         s_2<=phase_adder(22);
  53.                         s_1<=phase_adder(23);                                                                --將上一個(gè)累加值的高12位送出
  54.                 end if;
  55.         end process;
  56.        
  57.         lookfor_rom: process(clk)                                                                        --ROM查找部分
  58.         begin
  59.                 if(clk'event and clk='1') then                                                        --clk上升沿觸發(fā)
  60.                         a_1<=s_1;                                                                                        --a_1和a_2比s_1和s_2落后一個(gè)周期
  61.                         a_2<=s_2;
  62.                         if(s_1='0' and s_2='0') then                                                  --將各區(qū)間的地址對應(yīng)到0~π/2的地址
  63.                                 address<=rom_address;
  64.                         elsif(s_1='0' and s_2='1') then       
  65.                                 address<=NOT rom_address;       
  66.                         elsif(s_1='1' and s_2='0') then
  67.                                 address<=rom_address;
  68.                         elsif(s_1='1' and s_2='1') then
  69.                                 address<=NOT rom_address;
  70.                         end if;                                                                                                -- NOT rom_address=3FF-rom_address

  71.                         if(a_1='0' and a_2='0') then                                                  --將各區(qū)間的幅度對應(yīng)到0~π/2的幅度
  72.                                 out_q<=rom_out;                                                                        --由于幅度比地址輸出慢一個(gè)周期所以用
  73.                                                                                                                                 -- a_1和a_2進(jìn)行判斷,a_1和a_2比s_1
  74.                                                                                                                                 --和s_2落后一個(gè)時(shí)鐘周期
  75.                         elsif(a_1='0' and a_2='1') then       
  76.                                 out_q<=rom_out;
  77.                         elsif(a_1='1' and a_2='0') then
  78.                                 out_q<=NOT rom_out+"0000000001";
  79.                         elsif(a_1='1' and a_2='1') then
  80.                                 out_q<=NOT rom_out+"0000000001";
  81.                         end if;                                                                                                --負(fù)數(shù)通過正數(shù)取反再加1得到
  82.                 end if;
  83.         end process;

  84. end beh;
復(fù)制代碼

所有資料51hei提供下載:
數(shù)字頻率計(jì)_DDS.rar (3.31 KB, 下載次數(shù): 13)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:984711 發(fā)表于 2021-11-29 14:22 | 只看該作者
頻率測量的范圍大概在哪一個(gè)階段?
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利 | 中文字字幕一区二区三区四区五区 | 免费的av | 毛片区| 久热电影| 欧美色图综合网 | 国产一区二区精品在线观看 | 免费视频久久 | 瑞克和莫蒂第五季在线观看 | 91亚洲国产成人久久精品网站 | 国产精品视频在线观看 | 欧美日韩一区在线 | 国产精品视频网 | av不卡一区 | 亚洲一区二区三区福利 | 亚洲精品中文在线观看 | 国产黄色av网站 | 日日操操| 婷婷国产一区二区三区 | 欧美日韩精品区 | 精品国产乱码久久久久久88av | 亚洲免费在线播放 | 欧美视频网 | 亚洲欧美一区二区三区1000 | 男女羞羞免费视频 | 国产视频综合 | 亚洲最大看片网站 | 久久久网 | 久久天堂| 欧美亚洲一级 | 狠狠色狠狠色综合日日92 | www.4虎影院| 黄色亚洲 | 欧美日韩精品中文字幕 | 天堂成人国产精品一区 | 黄色av免费网站 | 日韩免费一区二区 | 欧美成人一区二区三区 | 欧美xxxⅹ性欧美大片 | 啪啪网页| 色啪网 |