1,ad9516-4时钟芯片配置,通信协议为SPI接口协议,时序比较简单,重点是给该芯片寄出去写入合适的配置信息,让其正常工作

2,ad9516-4时钟芯片的外围电路中,环路滤波器的设计比较重要,看参考开发板或者芯片手册,选择合适的电阻电容值

3,在调试时,PFD参数可以更改,当配置正确,时序正确是,还是出不来理想的时钟信号时,可以改变PFD参数试一下,如:16M变为4M,4M变为1M,降低PFD值重新配置

4,写fpga程序的时候,可以将配置值存储在一个rom里,规划好地址空间,便于配置和检查更新等

5,附vhdl源代码,可供参考,rom配置信息请自己琢磨,可以交流

----AD9516_4������----
----Ŀ�ģ���AD9516_4�Ĵ���д���ݣ���������4·800M LVDSʱ���ź�----
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY AD9516_init IS

PORT(clk : in std_logic; -----for 16M
     rst : in std_logic; -----reset signal ,low active,from pll0.
     
     sdo : in std_logic;    ----to read register
     sclk: out std_logic;   ---same as clk
     cs  : out std_logic;   ---low active,to write or read
     sdio: inout std_logic; ----to write register
     
 sync   : out std_logic;     --manual synchronizations,not use when '1'
 pd     : out std_logic;     --powndown,low active
 ref_sel: out std_logic;     --choose ref1,when '0';
 refmon : in std_logic;
 ld     : in std_logic;
 status : in std_logic;
 AD9516_ready: out std_logic 
     );
END ENTITY;

ARCHITECTURE BEHAVE OF AD9516_init IS
    signal AD9516_ready_tmp: std_logic;
    signal cnt: integer range 0 to 1023;             ----control address and cs output
    signal address_c: std_logic_vector(9 downto 0);  ----control rom output
    signal clk_rom: std_logic;                       -----not as clk
    signal cnt_cal: integer range 0 to 200000;     ----need 8800*PDF cycles=140800Tclk
signal ld_rising: std_logic;                   ----ld ��һ��Ϊ��ʱ����10�����Ҹ�clk���ȶ�
 
    signal sub_wire: std_logic;                      -----buffer ,rom data output
    component rom_ad9516_4
        PORT
   (
   address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);
   clock : IN STD_LOGIC ;
   q : OUT STD_LOGIC_VECTOR (0 DOWNTO 0)
   );
end component;

BEGIN

R1: rom_ad9516_4 port map(address=>address_c,clock=>clk_rom,q(0)=>sub_wire);
 
AD9516_ready <= AD9516_ready_tmp;
sclk <= clk;
clk_rom <= not clk;
sync <= '1';
    pd   <= '1';
ref_sel <= '0';
    sdio <= sub_wire;

P2: process(clk_rom,rst) is ----control address and cs output,main process
    
    begin
        if(rst='0') then
     --AD9516_ready_tmp<='0';
            cnt<=0;
            address_c<="0000000000";
            cs<='1';
        else
if(rising_edge(clk_rom)) then
if(cnt=1023) then
  --AD9516_ready_tmp<='1';
cnt<=1000;  ------bigger than 657 (658---1022)
else
  --AD9516_ready_tmp<=AD9516_ready_tmp;
cnt<=cnt+1;
end if;
            
case cnt is 
  ----initialize
when 0 to 7 => cs<='1';address_c<="0000000000";                        
when 8 to 9 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);

----translate data pll
when 10 to 145 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);  
when 146 to 153 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);

----vco divider and vco calibration
 --vco divider and intiate vco calibration
when 154 to 177 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10); 
when 178 to 185 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 186 to 217 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 218 to 225 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 226 to 249 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 250 to 257 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 258 to 281 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 282 to 289 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
 --vco calibration 
when 290 to 313 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 314 to 321 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 322 to 345 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 346 to 353 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 354 to 377 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 378 to 385 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 386 to 409 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 410 to 417 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);

----channel divider 3 and 4
when 418 to 513 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10); 
when 514 to 521 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 522 to 545 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 546 to 553 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);

----lvds outputs
when 554 to 601 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10); 
when 602 to 609 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 610 to 633 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
when 634 to 641 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);

----fine delay adjust
when 642 to 753 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10); 
when 754 to 761 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);
when 762 to 785 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
        when 786 to 793 => cs<='1';address_c<=conv_std_logic_vector(cnt-8,10);

----read back information:write 0x000,0x004,0x023; read address 0x01f
--when 794 to 817 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
--when 818 to 841 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
--when 842 to 865 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);
--when 866 to 889 => cs<='0';address_c<=conv_std_logic_vector(cnt-8,10);

----cs pull high finish AD9516_4
when others => cs<='1'; address_c<="0000000000";
end case;
            end if;
end if;
    end process;

P3: process(clk_rom,rst) is ----control ad9516_ready output
    
    begin
        if(rst='0') then
     AD9516_ready_tmp<='0';
            cnt_cal<=0;
 elsif(clk_rom'event and clk_rom='1') then
     if(ld_rising='1') then
         if(cnt_cal=200000) then
       AD9516_ready_tmp<='1';
    cnt_cal<=0;
   else
       AD9516_ready_tmp<=AD9516_ready_tmp;
    cnt_cal<=cnt_cal+1;
end if;
end if;
 end if;
end process;
 
P4: process(clk_rom,rst) is  ----ld rising detect
    begin
        if(rst='0') then
     ld_rising<='0';
 elsif(clk_rom'event and clk_rom='1') then
     if(ld='1') then
   ld_rising<='1';
else
   ld_rising<=ld_rising;
end if;
 end if;
    end process;  
END ARCHITECTURE;

ad9516-4时钟芯片配置注意事项相关推荐

  1. LMK04828时钟芯片配置——配置理解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LMK04828时钟芯片配置--配置理解 配置 PLL1 PLL2 SYNC/SYSREF 总结 配置 开发板例程的SPI指令可以im ...

  2. AD9516/AD9517时钟芯片寄存器参数配置说明

    目录 1 概述 2 界面参数设置 2.1 器件选择 2.2 参数设置 2.3 VCO的主要配置与关系 3 寄存器值 4 附录 5 AD9516_17_18 Eval Software 软件下载链接如下 ...

  3. JESD204B高速AD开发(二)LMK04821时钟芯片配置代码详解

    一.驱动模块顶层 1.1 接口描述 如下图为LMK04821时钟芯片的配置模块输入输出信号,主要分为三部分, 图1 1.模块的系统时钟和复位信号,cfg_clk时钟频率<=10MHz,频率的设置 ...

  4. HMC7044芯片配置总结

    HMC7044时钟芯片配置总结 项目背景 因为项目有多地同步的需求,对时钟准确性要求很 高.市面上常见的高精度晶振的误差在0.1ppm左右,在100M的工作频率下会有10HZ的误差,并不能满足项目需求 ...

  5. DSP28377s系统时钟配置注意事项

    DSP28377s系统时钟配置注意事项 问题一脸嫣然的向我们走来... 近日,一个兄弟在配置基于28377s芯片的主控系统时钟时,遇到点困难. 具体是这样的,原来的主控板使用的是20MHz外部晶振,为 ...

  6. STM32+BM8563时钟芯片不走时问题解决(含配置代码)

    STM32+BM8563时钟芯片不走时问题解决(含配置代码) 一.寄存器 BM8563是一款低功耗CMOS实时时钟/日历芯片,它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址和数据 ...

  7. 华大芯片时钟调试配置记录

    华大F460系列出了好几款,手里有一款HC32F460PETB系列的芯片,去年官网上面给出的例程还是2.1版本,今年再去看的时候,驱动和例程已经更新到了3.0,对比之后发现驱动部分改变还比较大,虽然本 ...

  8. 【51单片机快速入门指南】5.1:SPI与DS1302时钟芯片

    目录 硬知识 DS1302 简介 DS1302 使用 控制寄存器 日历/时钟寄存器 DS1302 的读写时序 电路设计 示例程序 DS1302.c DS1302.h 测试程序 main.c 实验现象 ...

  9. WT588F/E系列语音芯片驱动程序注意事项

    WT588F/E系列语音芯片驱动程序&注意事项 一.简介 二.硬件连接 三.驱动层  1.配置GPIO  2.发送数据函数  3.播放语音  4.是否在播放语音  5.语音&命令码地址 ...

最新文章

  1. Crystal Reports中的字段
  2. 第六篇T语言实例开发,多点找色应用
  3. OpenCASCADE:Modeling Algorithms模块之拓扑工具
  4. 第二天 PYTHON 基本数据类型 - 数字 - 字符串
  5. win10 后台运行jar包_win10系统设置双击jar文件直接运行的处理教程
  6. 关于代码反射能力的哲学思考
  7. @程序员,我最多再等你两天!
  8. java线程抢占式执行,Java并发基础(一)-线程基础
  9. Atitit 招人之道 招不到人怎么办 attilax著 1. 适当降低要求 水至清则无鱼 太严格了就没有人了 2 1.1. 学历可以提升 可以开个企业内部学院快速提升学历 2 1.2. ,能力可以
  10. Android小游戏--2048
  11. 2021华为机考笔试题
  12. Turbo码相关学习
  13. 企业微信如何快速共享打印
  14. 数据结构课程设计(银行叫号机)
  15. 学术汇报(academic presentation)/PPT应该怎么做?
  16. java栈和队列的区别是什么意思_java中的栈和队列有什么区别
  17. JAVA实现汉字转拼英
  18. Catfish任意代码执行漏洞 0day
  19. 医学成像学习笔记(一):核磁共振成像(MRI)k空间为何是图像频谱详解
  20. 三种近距离通信技术(WIFI、蓝牙、NFC)简述

热门文章

  1. 对于计算机网络体系结构的初步思考(附图解)
  2. 图片底部边距清除代码
  3. 正则表达式 校验基础
  4. 大连理工大学计算机学院陈教授,软件学院三项成果被计算机顶级会议INFOCOM 2020录用...
  5. jQuery 选择器(checked)详解
  6. IE阻止了此网站安装ActiveX控件
  7. 2012.07.11
  8. 【全网最全】《统计学习方法》习题答案
  9. sublime text 3 mac 注册码
  10. ubuntu下gsoap的编译与使用