ad9516-4时钟芯片配置注意事项
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时钟芯片配置注意事项相关推荐
- LMK04828时钟芯片配置——配置理解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LMK04828时钟芯片配置--配置理解 配置 PLL1 PLL2 SYNC/SYSREF 总结 配置 开发板例程的SPI指令可以im ...
- AD9516/AD9517时钟芯片寄存器参数配置说明
目录 1 概述 2 界面参数设置 2.1 器件选择 2.2 参数设置 2.3 VCO的主要配置与关系 3 寄存器值 4 附录 5 AD9516_17_18 Eval Software 软件下载链接如下 ...
- JESD204B高速AD开发(二)LMK04821时钟芯片配置代码详解
一.驱动模块顶层 1.1 接口描述 如下图为LMK04821时钟芯片的配置模块输入输出信号,主要分为三部分, 图1 1.模块的系统时钟和复位信号,cfg_clk时钟频率<=10MHz,频率的设置 ...
- HMC7044芯片配置总结
HMC7044时钟芯片配置总结 项目背景 因为项目有多地同步的需求,对时钟准确性要求很 高.市面上常见的高精度晶振的误差在0.1ppm左右,在100M的工作频率下会有10HZ的误差,并不能满足项目需求 ...
- DSP28377s系统时钟配置注意事项
DSP28377s系统时钟配置注意事项 问题一脸嫣然的向我们走来... 近日,一个兄弟在配置基于28377s芯片的主控系统时钟时,遇到点困难. 具体是这样的,原来的主控板使用的是20MHz外部晶振,为 ...
- STM32+BM8563时钟芯片不走时问题解决(含配置代码)
STM32+BM8563时钟芯片不走时问题解决(含配置代码) 一.寄存器 BM8563是一款低功耗CMOS实时时钟/日历芯片,它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址和数据 ...
- 华大芯片时钟调试配置记录
华大F460系列出了好几款,手里有一款HC32F460PETB系列的芯片,去年官网上面给出的例程还是2.1版本,今年再去看的时候,驱动和例程已经更新到了3.0,对比之后发现驱动部分改变还比较大,虽然本 ...
- 【51单片机快速入门指南】5.1:SPI与DS1302时钟芯片
目录 硬知识 DS1302 简介 DS1302 使用 控制寄存器 日历/时钟寄存器 DS1302 的读写时序 电路设计 示例程序 DS1302.c DS1302.h 测试程序 main.c 实验现象 ...
- WT588F/E系列语音芯片驱动程序注意事项
WT588F/E系列语音芯片驱动程序&注意事项 一.简介 二.硬件连接 三.驱动层 1.配置GPIO 2.发送数据函数 3.播放语音 4.是否在播放语音 5.语音&命令码地址 ...
最新文章
- Crystal Reports中的字段
- 第六篇T语言实例开发,多点找色应用
- OpenCASCADE:Modeling Algorithms模块之拓扑工具
- 第二天 PYTHON 基本数据类型 - 数字 - 字符串
- win10 后台运行jar包_win10系统设置双击jar文件直接运行的处理教程
- 关于代码反射能力的哲学思考
- @程序员,我最多再等你两天!
- java线程抢占式执行,Java并发基础(一)-线程基础
- Atitit 招人之道 招不到人怎么办 attilax著 1. 适当降低要求 水至清则无鱼 太严格了就没有人了	2 1.1. 学历可以提升 可以开个企业内部学院快速提升学历	2 1.2. ,能力可以
- Android小游戏--2048
- 2021华为机考笔试题
- Turbo码相关学习
- 企业微信如何快速共享打印
- 数据结构课程设计(银行叫号机)
- 学术汇报(academic presentation)/PPT应该怎么做?
- java栈和队列的区别是什么意思_java中的栈和队列有什么区别
- JAVA实现汉字转拼英
- Catfish任意代码执行漏洞 0day
- 医学成像学习笔记(一):核磁共振成像(MRI)k空间为何是图像频谱详解
- 三种近距离通信技术(WIFI、蓝牙、NFC)简述