|
AG10K/16K FPGA 设计参考(官方版)AG10K/16K FPGA 设计参考 1. PLL AG10K FPGA 工程如果在编译时出现“Error: Please use a live signal to reset PLL”错误信息。设计中需要在系统启动后做个 PLL 复位,可以参考下面 Verilog 代码,这里需要 PLL IP 的 areset或 pfdena 引出,用 PLL 的输入时钟触发计数器输出来控制复位信号。 注意:在 DateCode 2234 日期之后的 AG10K 芯片可以不加入复位控制,可以使用 2023 年新版本 Supra 设计,提示信息只是 warning,可以忽略。原设计有复位的话也不影响运行。 2. Flash 管脚 如果在设计中对配置 FLASH 进行读写,则要在 Quartus II 中把 4 个 SPI 配置管脚设置为“Use as regular I/O”。 3. VccINT 如果 FPGA 的资源利用率较高,或者设计时序要求高,建议把 1.2V 的 VccINT 电压,升高到正常电压范围的 1.25V,会有效提高 FPGA 性能和稳定性。 4. FLASH 编程文件 离线单独烧写配置用 SPI FLASH,使用 XXX_master.bin,可通过第三方 FLASH 编程器烧写。如使用其它兼容 Altera POF 文件的烧写工具,需注意 Altera 文件 MSB-LSB 为反向,需倒置后才可正确烧写。 5. AS 口在线烧写 FLASH 如果使用 USB-Blaster 通过 AS 接口在线烧写配置用 SPI FLASH,由于 AG10K 的 DCLK、nCSO、ASDO 管脚并未输出三态,因此需分别串接 1KΩ 电阻,使得 USB-Blaster 驱动能力高过这些管脚的输出能力,且 DCLK 时钟降低频率,即可实现正常烧写和配置。建议 FPGA 采用 JTAG 接口,则可直接通过 Supra 软件烧写 XXX_master.prg 文件到 SPI FLASH中,无需通过 AS 接口。 注意:在 DateCode 2234 日期之后的 AG10K 芯片没有以上问题,可以不串接电阻,和 Altera兼容型号电路一致。 6. CLK 输入管脚 CLK 专用输入管脚,没有内部上拉电阻,所以在悬空没有输入状态时,会得到 0 的电平数据。这和 Altera EP4C 的高电平结果不同。如果正常输入时钟或信号驱动,则没有影响。 7. Latch 锁存器 支持 latch, 但建议设计中不用 latch, 异步电路时序不容易分析操作,建议不使用。 8.Conf_done 所有 fpga 逻辑功能必须发生在 fpga 配置完成之后(conf_done 为高)。 9.除法器 如设计中使用了除法器,需对除法器的路径设置 multicycle。除法器的 latency 即为 multicycle 的时钟数。如无法满足 timing,建议增加除法器的 latency。 10. 烧写文件压缩 AG10K/16K 支持 AS 模式的烧写文件压缩,以减少存储空间。但不同设计压缩出的文件大小不一,如需统一文件存储空间,可选非压缩方式。AG10K 不支持 PS 模式的烧写文件压缩。原 QuartusII 设计里如果选了压缩,产生的编程文件则无法正常运行,请取消设置;或者在 AGM 项目中的 DesignName.asf 中加入:set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFFAG16K 支持 PS 压缩。 11. 3.3V IO 软件中要按实际 IO 电压正确设置。Quartus II 中对 IO standard 的默认为 2.5V,如果实际采用3.3V,需要修改 IO 默认值为 3.3V。AG10K/16K SDE176,由于内部 SDRAM 为 3.3V,VCCIO 必须使用 3.3V,软件中也要设置正确。 12. 电源上电顺序 3.3V VCCIO 电源应不晚于 VCCINT 1.2V 和 2.5V 上电,这样保证 FPGA 在启动配置前,使得配置 FLASH(3.3V)启动完成,从而避免上电配置失败。 13. PLL 时钟输出 为了避免时钟域 skew 或 jitter,如果需要同频率同相位的时钟驱动不同功能,尽可能合并成同一个时钟进行处理,不要采用多个同样的输出时钟这种方式,避免跨时钟域的情况出现。不同频的时钟,尽可能采用 RAM 或者 FIFO 交互,如果寄存器直接交互,尽可能通过设计保证时钟采样在数据中间位置。 14. 逻辑资源优化 当逻辑资源比较紧张时,推荐将同步复位改为异步复位,可以节省一定的逻辑资源; 15. MSEL 配置模式选择 MSEL[0..2]在 AS 模式连接为 010 或 101,PS 模式为 000。管脚要直接连接 VCC 或 GND,不用 串接电阻。 16. PHY PHY 芯片时钟,一般在 Tx 方向,数据与 clk 会使用边沿对齐,Rx 方向是中央对齐的方式。 a) Tx: Edge Aligned,除了在数据端使用 DDIO_OUT,在 clk 上也要用上 DDIO_OUT,以保证时钟和 数据的对齐。 Center Aligned,不用 DDIO,把时钟反向,如:assign p0gtxc = !pll_clk; 然后 asf 文件中加入延迟: set_instance_assignment -name OUT_DELAY -to p0tx* 1'b1 -extension set_instance_assignment -name OUT_DELAY -to p1tx* 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 17. 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 时序约束可以不加。 ——方法(2) 同时在 SDRAM 的端口使用 IO register,Sdc 时序约束可以不加。 输入端:在数据端口使用 FAST_INPUT_REGISTER 设置; 输出端:DATA 端口使用 FAST_OUTPUT_REGISTER 和 FAST_OUTPUT_ENABLE_REGISTER 设置, 其它控制管脚使用 FAST_OUTPUT_REGISTER 设置。 输出给 SDRAM 的时钟相对于 Controller 的时钟加一个反向,即相移 180 度。 |