MLK-FEP-DAQ006子卡内含一路14bits双通道65MSPS ADC采集模块该方案采用了ADI的AD9248芯片;一路14bits双通道125MSPS DAC数模转换模块,该方案采用了ADI的AD9767芯片。
12.1 AD9248
非复合模式下一个数据采样一个模拟通道,采用LVCMOS SDR数据时序。
复合模式下一个数据通道采样两个模拟通道,采用LVCMOS DDR数据时序,这种工作模式下当MUX_SELECT为逻辑高时,通道A数据被定向到A输出总线,通道B数据被定向到通道B输出总线。当MUX_SELECT为逻辑低电平时,数据通道区分,即通道A数据导向通道B输出总线,通道B数据导向通道A输出总线。通过切换MUX_SELECT位,复用数据可在任一数据输出端口上使用。
DAQ006子卡在硬件设计时,MUX_SELECT由程序控制高低电平,故这里采用LVCMOS DDR模式进行分析。由于FPGA输出的参考时钟为AD9248芯片发送数据的随路时钟,在这里采用源同步双沿采样边沿对齐输入延迟模板。
由LVCMOS DDR时序图可以得到数据的最小传输延时为2ns,最大传输延时为6ns。
在计算输入延时约束时,需要加上1/2时钟周期,delay(min)=7.69+2=9.69ns,delay(max)=7.69+6=13.69ns。FPGA输出的参考时钟的频率为65MHz,由PLL产生,约束如下:
create_generated_clock -name clk_9248 -source [get_pins clk_adc_pll_inst/clk_out3] -multiply_by 1 [get_ports O_ad9248_clka_fepa]
set_input_delay -clock [get_clocks clk_9248] -rise -min 9.69 [get_ports {I_ad9248_da_fepa}]
set_input_delay -clock [get_clocks clk_9248] -rise -max 13.69 [get_ports {I_ad9248_da_fepa}]
set_input_delay -clock [get_clocks clk_9248] -clock_fall -fall -min -add_delay 13.69 [get_ports {I_ad9248_da_fepa}]
set_input_delay -clock [get_clocks clk_9248] -clock_fall -fall -max -add_delay 9.69 [get_ports {I_ad9248_da_fepa}] | 布局布线后得到的时序报告如下图所示。
通过分析报告可以知道,时序分析工具在分析保持时间关系时,实际上是按照下图进行分析的。这会导致建立时间约束的过紧。
使用多周期约束,将目的时钟锁存沿推后一个沿。
约束命令如下:
set_multicycle_path -setup -rise_from [get_clocks clk_9248] -fall_to [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]] 2
set_multicycle_path -setup -fall_from [get_clocks clk_9248] -rise_to [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]] 2 | 双沿采样,上升沿采样上升沿数据,下降沿采样下降沿数据,使用伪路径约束不分析上升沿采样下降沿数据、下降沿采样上升沿数据,约束命令如下:set_false_path -setup -rise_from [get_clocks clk_9248] -fall_to [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]]
set_false_path -setup -fall_from [get_clocks clk_9248] -rise_to [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]]
set_false_path -hold -rise_from [get_clocks clk_9248] -rise_to [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]]
set_false_path -hold -fall_from [get_clocks clk_9248] -fall_to [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]] |
布局布线后得到的时序报告如下图所示。
建立时间为例,可以通过修改时钟相位,增加时钟的延迟时间。
修改多周期约束,约束命令如下:
set_multicycle_path -setup -from [get_clocks clk_9248] -to [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]] 2 | 布局布线后得到的时序报告如下图所示。
通道A:
通道B:
12.2 AD9767
双端口模式:MODE引脚为逻辑1时,AD9767工作在双端口模式。AD9767用作两个不同的DAC。每个DAC都有自己完全独立的数字输入和控制线。 AD 9767具有双缓冲数据路径。数据通过通道输入锁存器进入器件。 然后,该数据被传输到每个信号路径中的DAC锁存器。数据加载到DAC锁存器后,模拟输出建立为新值。出于一般考虑,WRT 线控制通道输入锁存器,CLK 线控制 DAC 锁存器。两组锁存器均在其各自控制信号的上升沿更新。 CLK的上升沿必须出现在WRT的上升沿之前或同时出现。如果CLK的上升沿出现在WRT的上升沿之后,则从WRT的上升沿到CLK的上升沿必须保持最小2ns的延迟。双端口模式的时序规范如图所示: 交错模式:当MODE引脚处于逻辑0时,AD9767以交错模式运行。另外,WRT1用作IQWRT,CLK1用作IQCLK,WRT2用作IQSEL,CLK2用作IQRESET。 数据在 IQWRT 的上升沿进入器件。IQSEL 的逻辑电平将数据引导至通道锁存器 1 (IQSEL = 1) 或通道锁存器 2 (IQSEL = 0)。为了正确操作,只有当 IQWRT 和 IQCLK 为低电平时,IQSEL 才必须改变状态。 当 IQRESET 为高电平时,IQCLK 被禁用。当 IQRESET 变低时,IQCLK 的下一个上升沿用输入端的数据更新两个 DAC 锁存器。在交错模式下,IQCLK 在内部除以 2。在第一个上升沿之后,DAC 锁存器仅在 IQCLK 的每隔一个上升沿更新。这样,IQRESET 可用于同步数据到 DAC 的过程。 与双端口模式下 CLK 和 WRT 的顺序类似,IQCLK 必须在 IQWRT 之前或同时发生。交错模式的时序规范如图所示: DAQ006子卡在硬件设计时,mode接的高电平,故这里采用双端口模式进行分析。CLK和WRT接入同一个信号源。FPGA在发送数据时,发送了与数据同步的时钟,在这里采用源同步单沿采样模板,数据和时钟传输到AD9767的PCB走线等长,计算延迟时忽略PCB走线延迟。 在计算输出延时约束时,delay(min)= - Th= -1.5ns,delay(max)=Tsu=2ns。FPGA输出的参考时钟的频率为65MHz,由PLL产生,约束如下: #AD9767通道1 create_generated_clock -name clka_9767 -source [get_pins clk_adc_pll_inst/clk_out2] -multiply_by 1 [get_ports O_ad9767_clka_fepa] set_output_delay -clock [get_clocks clka_9767] -rise -min -1.500 [get_ports {O_ad9767_DBa_fepa set_output_delay -clock [get_clocks clka_9767] -rise -max 2.000 [get_ports {O_ad9767_DBa_fepa #AD9767通道2 create_generated_clock -name clkb_9767 -source [get_pins clk_adc_pll_inst/clk_out2] -multiply_by 1 [get_ports O_ad9767_clkb_fepa] set_output_delay -clock [get_clocks clkb_9767] -rise -min -1.500 [get_ports {O_ad9767_DBb_fepa set_output_delay -clock [get_clocks clkb_9767] -rise -max 2.000 [get_ports {O_ad9767_DBb_fepa |
时序分析报告的结果如下图所示: 通过分析报告可以知道,时序分析工具在分析保持时间关系时,实际上是按照下图进行分析的。 由于数据经过打拍输出到端口,通过多周期约束将锁存沿向后移动一个时钟周期。 约束命令如下: #AD9767通道1 set_multicycle_path -setup -from [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]] -to [get_clocks clka_9767] 2 通道2 set_multicycle_path -setup -from [get_clocks -of_objects [get_pins clk_adc_pll_inst/inst/mmcm_adv_inst/CLKOUT0]] -to [get_clocks clkb_9767] 2 |
时序分析报告的结果如下图所示: 上板效果如下图所示: 通道1: 通道2:
|