AGM FPGA主要是以10KLE的应用最多,当中以AG10K为例,分享一下调试建议如下:
1.PHY PHY芯片时钟,一般在Tx方向,数据与clk会使用边沿对齐,Rx方向是中央对齐的方式。 a) Tx: Edge Aligned,除了在数据端使用DDIO_OUT,在clk上也要用上DDIO_OUT,以保证时钟和数据的对齐。 ddio_out inst ( .aclr(aclr), .datain_h(1'b1), .datain_l(1'b0), .outclock(outclock), .outclocken(outclocken), .dataout(dataout) ); |
Center Aligned,不用DDIO,把时钟反向,如:assign p0gtxc =!pll_clk; 然后asf文件中加入延迟: set_instance_assignment -name OUT_DELAY -top0tx* 1'b1 -extension set_instance_assignment -name OUT_DELAY -top1tx* 1'b1 -extension
b) Rx: 在asf文件中加入: set_instance_assignment -name IN_DATA_DELAY-to p*rxd* 3'b110 -extension p*rxd*应包括所有的rx数据输入(每个PHY有4个data和1个ctrl) 加入以上设置,在sdc文件中可以省略输入输出延迟的约束。 这只针对rxc使用Global Clock 时的情况。其它需具体根据时序分析延迟。 DDIO的应用除data外,dv信号有可能不会被Supra识别,这时,需在ve文件中对dv信号加入DDIO_IN参数,如: P0_rxdv pin_xx DDIO_IN 2.SDRAM ——方法(1) a) 输出端: sdc文件中加入以下时序约束(以下红色标示的需改): set sdr_src_pin{mclk_inst|altpll_component|auto_generated|pll1|clk[2]} set sdr_clk sdrclk_output set sdr_ctrl_data {sdramcs sdramba*sdramcas sdramras sdramwe sdramadd* sdramdatam*} create_generated_clock -name $sdr_clk-source [get_pins $sdr_src_pin] [get_ports $sdr_clk] set_output_delay -clock $sdr_clk -max 1.5[get_ports $sdr_ctrl_data] set_output_delay -clock $sdr_clk -min-1 [get_ports $sdr_ctrl_data] sdr_clk是输出到SDRAM的时钟,不再需要相位移动; mclk_inst|altpll_component|auto_generated|pll1|clk[2]替换为实际的sdr_clk时钟管脚名称; sdram* 替换为实际的SDRAM数据和控制端口。 对于16位SDRAM,每一组SDRAM的时钟和数据控制端口都要加入以上约束。 b) 输入端: 数据输入端需加入一级流水线Pipeline。在数据端口使用FAST_INPUT_REGISTER设置,来优化IO到寄存器的时序; Sdc时序约束可以不加。 其他的可以加Q or weix :-150-,615-255。 ——方法(2) 同时在SDRAM的端口使用IO register,Sdc时序约束可以不加。 输入端:在数据端口使用FAST_INPUT_REGISTER设置; 输出端:DATA端口使用FAST_OUTPUT_REGISTER和FAST_OUTPUT_ENABLE_REGISTER设置,其它控制管脚使用FAST_OUTPUT_REGISTER设置。 输出给SDRAM的时钟相对于Controller的时钟加一个反向,即相移180度。
|