HMC7044 SPI配置过程(未完。。。)

HMC7044特性:
HMC7044 双环结构可以attenuate incoming reference clock jitter.
One of the unique features of the HMC7044 is the independent flexible phase management of each of the 14 channels
在这里插入图片描述
上位机发送ADDR+DATA,锁存入FPGA内部寄存器 da_data,
在da_start0时,把da_data存入parrel_data,在da_start1时,开始发送parrel_data
参考7044write processing,数据在sclk下降沿时改变,在上升沿保持
在这里插入图片描述

module PLL_config(
				adsp_clk, //250MHz
				ref_freq, // 1MHz		
				da_start,//dsp control staring to transfer the data 
				da_data, // 24bits parallel data input 62.5M输入
				da_cs,
				da_din,	 
				da_clk
				);
				
	parameter tr_num=24,cnt_bit=4;  //tr_num-----the width of parallel data,(cnt_bit+1)-----the width of counter。
	
	input adsp_clk;
	input ref_freq;
	input da_start;
	input [23:0] da_data;
	 
	output da_cs;
	output da_din;
	output da_clk;
	
	reg [cnt_bit:0] cnt;
	
	reg [tr_num-1:0] parrel_data;
	reg [cnt_bit:0] parrel_data_bitsel; //5bits
	
	reg ref_freq_reg;
	
	reg ref_freq_en;
	reg ref_freq_en_1;
	reg ref_freq_en_2;
	
	
	reg da_din_reg;
	reg da_din_reg_1;
	
//要传送多少个控制字数据由软件部分控制

	always @ (posedge adsp_clk)
	begin
		ref_freq_reg <= ref_freq;
	end
		
	/*parrel data to serial data*/
	always @ (posedge adsp_clk )//or negedge da_start )
	begin
		if (da_start == 1'b0)
		begin
			ref_freq_en <= 1'b0;
			parrel_data[tr_num-1:0] <= da_data[tr_num-1:0];
			parrel_data_bitsel <= tr_num - 1'b1; //23  -1'b1;
			cnt <= 5'b00000;
		end
		else //da_start
		begin
			if((ref_freq == 1'b0) && (ref_freq_reg == 1'b1)) //negedge
			begin
				if (cnt < tr_num)
				begin
					ref_freq_en <= 1'b1;
					da_din_reg <= parrel_data [parrel_data_bitsel];
					parrel_data_bitsel <= parrel_data_bitsel - 1'b1;
					cnt <= cnt + 5'h01;
				end
				else
				begin
					ref_freq_en <= 1'b0;
				end
			end
		end
	end
	
	always @ (posedge adsp_clk)
	begin
		if((ref_freq == 1'b0) && (ref_freq_reg == 1'b1))
		begin
			ref_freq_en_1 <= ref_freq_en;
			ref_freq_en_2 <= ref_freq_en_1;
			da_din_reg_1 <= da_din_reg;
		end
	end

	assign da_clk = (ref_freq_en_1 & ref_freq); //(ref_freq_en & ref_freq)
	assign da_din = da_din_reg_1;        //可以写成 da_din_reg;
	assign da_cs = ~ (ref_freq_en | ref_freq_en_2);
	

endmodule

注意到

always @ (posedge adsp_clk)
begin
	if((ref_freq == 1'b0) && (ref_freq_reg == 1'b1))
	begin
		ref_freq_en_1 <= ref_freq_en;
		ref_freq_en_2 <= ref_freq_en_1;
		da_din_reg_1 <= da_din_reg;
	end
end

assign da_clk = (ref_freq_en_1 & ref_freq);  
assign da_din = da_din_reg_1;       
assign da_cs = ~ (ref_freq_en | ref_freq_en_2);

通过ref_freq时钟延迟,把ref_freq_en进行延迟,从而保证da_cs在da_din和da_clk之前就拉低,数据结束后再拉高cs
在这里插入图片描述

在这里插入图片描述

SNR = 6.02*ENOB +1.76

对锁相环输出的时钟有jitter要求。本次设计要求在1G信号输入下,ENOB达到9.8bit。锁相环输出时钟抖动要求小于120fs左右。

遇到问题:

Question
PLL1
1、OSCIN prescaler太小,即LOS输入信号太大的时候,PLL1锁不上,最后设置prescaler为10;可以与PLL counter有关 待确认;

2、CPout1电流理论上应该是越小越好,但是设置120uA和1.2mA后,PLL1相噪曲线没多大区别

3、没有得到sysref输出(给ADC/FPGA的JESD204B 链路建立信号)

4、multislip、slip enable、slip event和phase delay的关系?

Answer
1、At a minimum, fLCM must be a common submultiple of all available references.
即fLCM至少是ref clk的公约数

3、FPGA HP bank 不支持LVPECL电平标准,而HMC7044设置的输出电平标准为LVPECL,修改硬件电路,设置HMC70044输出电平为LVDS后,用示波器测到12.5MHz sysref信号。
sysref信号可用reseed 和 pulse generator request 通过SPI(0x0001寄存器) 发送cmd,此时0x0091寄存器读回状态从done变为running,用示波器测到12.5MHz sysref。
sysref信号的mode通过0x5A,0x5c,0x5d寄存器设置, 同时还要设置Clock Distribution中,需要作为sysref输出的寄存器,例如电平标准,Start-Up Mode[1:0]设置为Dynamic,Divider

  • 6
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值