> 技术文档 > Vivado 原语STARTUPE3的使用

Vivado 原语STARTUPE3的使用

1、STARTUPE3 引脚描述

        描述 STARTUPE3 相关管脚。三态控件默认1 为禁用输出,0为是能输出,KEYCLEARB 默认为 1,其他输入默认为 0。

管脚 类型 描述 CFGCLK Output Configuration main clock output 到 FPGA logic。CFGCLK 反映 CCLK 引脚上的信号,输出一个 clock 信号,其中频率由 Configuration Rate 的 bitstream 选项定义。输出仅在配置期间处于活动状态,并且在启用了 Persist 的主模式下处于活动状态 CFGMCLK Output PROGRAM_B pulse、JPROGRAM、IPROG 或 FALLBACK REQuest 到 FPGA logic。PREQ 是 FPGA logic的 output 。此引脚是 PROGRAM_B 状态机对重置设备的请求。这允许拦截和门控 PROGRAM_B 请求的断言,直到 design 处于可以完成 reset 的状态。例如,您可能希望推迟设备重新配置,以允许清除不可重置的数据元素。仅当设置了 PROG_USR 属性时,才会启用此 pin。PREQ 可以保持打开/浮动状态,以确保安全操作 DI(3:0) Output 外部 D[03:00] 配置引脚输入,可从 STARTUPE3 路由到 FPGA 逻辑 DO(3:0) Input FPGA logic 信号,可路由到 STARTUPE3 以连接到外部 D[03:00] 配置引脚。 DTS(3:0) Input 外部 D[03:00] 输出引脚的三态控制 EOS Output 高电平有效信号,表示启动结束。EOS 是 FPGA logic的 output 。此 output 将 configuration logic EOS 标志回显到 FPGA logic中。EOS 可用作重置信号 FCSBO Input FPGA logic 信号到外部 FCS_B 配置引脚。FCSBO 允许用户控制 FCS_B pin 以进行 Flash 访问。 FCSBTS Input 外部 FCS_B 输出引脚的三态控制 GSR Input 不推荐 – 应将 Low 关联以禁用。GSR (Global Set/Reset) 引脚是来自 FPGA logic 的高效高电平输入,用于置位异步 set/reset,可用于重新初始化 CLB flip-flops。GSR 信号跨越整个器件,并以异步方式释放给用户 clock。由于整个器件的异步 release 和 skew , flip-flops 很可能不会在同一 clock cycle中被释放,并且可能会出现 metastable 事件。使用 GSR 的 Applications 应该在 GSR 之前停止所有 clocks 和/或在 GSR 之后重新配置 device 。在启动前的器件配置期间安全地执行相同的 flip-flop 初始化 (set/reset) GTS Input 全局 3 态控制。GTS 是来自 FPGA logic的高电平有效输入。当此 input 被置位为 High 时,除 configuration bank 之外的所有用户 I/O 都将进入 High-Z 状态。GTS 在配置期间自动置位,无需用户置位。对于大多数应用程序,此端口应连接为低电平 KEYCLEARB Input 从电池供电的 RAM (BBRAM) 中清除 AES 解密器密钥输入。KEYCLEARB 是来自 FPGA logic的 input。当此引脚保持为低电平时,会从电池供电的 RAM 中擦除解密密钥的内容。KEYCLEARB 可由监视器触发,以发现可疑的片上活动,这可能表明系统受到攻击 PACK Input PROGRAM_B pin 或 PROGRAM 指令 ACKnowledge。PACK 是来自 FPGA logic的 input。此 pin 确认 external PROGRAM_B 信号或内部指令的置位,并允许 PROGRAM_B state machine 的其余部分继续重置 FPGA。仅当设置了 PROG_USR 属性时,才会启用此 pin。PACK 可以绑在低处以确保安全操作 PREQ Output PROGRAM_B pulse、JPROGRAM、IPROG 或 FALLBACK REQuest 到 FPGA logic。PREQ 是 FPGA logic的 output 。此引脚是 PROGRAM_B 状态机对重置设备的请求。这允许拦截和门控 PROGRAM_B 请求的断言,直到 design 处于可以完成 reset 的状态。例如,您可能希望推迟设备重新配置,以允许清除不可重置的数据元素。仅当设置了 PROG_USR 属性时,才会启用此 pin。PREQ 可以保持打开/浮动状态,以确保安全操作 USRCCLKO Input 用户 CCLK 输入。USRCCLKO 是来自 FPGA logic的 input 。USERCCLKO 将 FPGA 生成的自定义 clock frequency 驱动到外部 FPGA CCLK pin上。这对于外部 flash 设备的配置后访问非常有用。从内部 USRCCLKO 到 CCLK 引脚的延迟在数据表中定义为 TUSRCCLKO。Startup 结束后 USRCCLKO 上的前三个 clock cycles 用于切换 clock source,不会在外部 CCLK pin上输出。但是,如果使用外部主 CCLK 引脚 EMCCLK 进行配置,则它将继续在 CCLK 上看到,直到 USRCCLKO 的三个 clock cycles 允许过渡到新的用户 clock USRCCLKTS Input 用户 CCLK 3 态使能输入至 CCLK 引脚。USRCCLKTS 是来自 FPGA logic的 input 。当 USRCCLKTS 为高电平时,外部 FPGA CCLK 引脚进入高 Z 状态。通常,USERCLKTS 应连接为低电平,以防止 CCLK 引脚进入高 Z 状态 USRDONEO Input DONE 引脚输出信号。USRDONEO 是来自 FPGA logic的 input 。该引脚直接驱动外部 FPGA DONE 引脚 USRDONETS Input DONE 3 态使能输出到 DONE 引脚。USRDONETS 是来自 FPGA logic的 input 。当此 input 为 High 时,DONE 将进入高 Z 状态。通常,此 pin 应系在 Low 上。将 USRDONETS 高电平绑定会抑制 DONE 的断言

原文参考xilinx官方手册UG570第116页

2、FPGA逻辑端控制

        STARTUPE3 组件的一个关键特性是将用户设计连接到一些专用的 configuration pins。这些 pins 可用于作为用户设计的一部分访问 configuration flash。STARTUPE3 表示与外部引脚的连接,因此 STARTUPE3 的输入是与输出引脚或双向引脚的连接,而 STARTUPE3 的输出是返回用户设计的双向引脚输入。

        特别需要注意DO、DI管脚在输入输出方向DTS信号控制使能,逻辑端sck、cs、mosi信号为输出类型,相应使能控制信号应该置‘0’;对于miso为输入信号,控制信号DTS相应为应该置为‘1’。下面是我使用xcku035系列fpga芯片验证spi_x1使用原语端口例化部分可以参考:

wire [1 :0] w_operation_type  ; wire [31:0] w_operation_addr  ; wire [8 :0] w_operation_num; wire  w_operation_valid  ; wire  w_operation_ready  ; wire [7 :0] w_write_data ; wire  w_write_sop ; wire  w_write_eop ; wire  w_write_valid ; wire [7 :0] w_read_data ; wire  w_read_sop ; wire  w_read_eop ; wire  w_read_valid ; wire  o_spi_clk ; wire  o_spi_cs ; wire  o_spi_mosi ; wire  i_spi_miso ; flash_drive flash_drive_u0( .i_clk (i_clk ), .i_rst (i_rst ), .i_operation_type  (w_operation_type ), //操作类型 .i_operation_addr  (w_operation_addr ), //操作地址 .i_operation_num  (w_operation_num ), //限制用户每次最多写256字节 .i_operation_valid (w_operation_valid ), //操作握手有效 .o_operation_ready (w_operation_ready ), //操作握手准备 .i_write_data  (w_write_data ), //写数据 .i_write_sop(w_write_sop ), //写数据-开始信号 .i_write_eop(w_write_eop ), //写数据-结束信号 .i_write_valid  (w_write_valid ), //写数据-有效信号 .o_read_data(w_read_data ), //读数据 .o_read_sop (w_read_sop  ), //读数据-开始信号 .o_read_eop (w_read_eop  ), //读数据-结束信号 .o_read_valid  (w_read_valid ), //读数据-有效信号 .o_spi_clk (o_spi_clk ), //spi的clk .o_spi_cs (o_spi_cs ), //spi的片选 .o_spi_mosi (o_spi_mosi  ), //spi的主机输出 .i_spi_miso (i_spi_miso  ) //spi的从机输出); STARTUPE3 #( .PROG_USR (\"FALSE\"  ),  .SIM_CCLK_FREQ  (0.0  ) // Set the Configuration Clock Frequency (ns) for simulation ) STARTUPE3_inst ( .CFGCLK (  ), // 1-bit output: Configuration main clock output .CFGMCLK (  ), // 1-bit output: Configuration internal oscillator clock output .DI ({1\'b0,1\'b0,i_spi_miso,1\'b0} ), // 4-bit output: Allow receiving on the D input pin .EOS (  ), // 1-bit output: Active-High output signal indicating the End Of Startup .PREQ (  ), // 1-bit output: PROGRAM request to fabric output .DO ({1\'b1,1\'b1,1\'b0,o_spi_mosi} ), // 4-bit input: Allows control of the D pin output .DTS (4\'b0010  ), // 4-bit input: Allows tristate of the D pin .FCSBO (o_spi_cs ), // 1-bit input: Controls the FCS_B pin for flash access .FCSBTS (0  ), // 1-bit input: Tristate the FCS_B pin .GSR (0  ), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port) .GTS (0  ), // 1-bit input: Global 3-state input (GTS cannot be used for the port name) .KEYCLEARB (0  ), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM) .PACK (0  ), // 1-bit input: PROGRAM acknowledge input .USRCCLKO (o_spi_clk ), // 1-bit input: User CCLK input .USRCCLKTS (0  ), // 1-bit input: User CCLK 3-state enable input .USRDONEO (1  ), // 1-bit input: User DONE pin output control .USRDONETS (1  ) // 1-bit input: User DONE 3-state enable output );