Vivado 原语STARTUPE3的使用

该文章已生成可运行项目,

1、STARTUPE3 引脚描述

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

管脚类型描述
CFGCLKOutputConfiguration main clock output 到 FPGA logic。CFGCLK 反映 CCLK 引脚上的信号,输出一个 clock 信号,其中频率由 Configuration Rate 的 bitstream 选项定义。输出仅在配置期间处于活动状态,并且在启用了 Persist 的主模式下处于活动状态
CFGMCLKOutputPROGRAM_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)InputFPGA logic 信号,可路由到 STARTUPE3 以连接到外部 D[03:00] 配置引脚。
DTS(3:0)Input外部 D[03:00] 输出引脚的三态控制
EOSOutput高电平有效信号,表示启动结束。EOS 是 FPGA logic的 output 。此 output 将 configuration logic EOS 标志回显到 FPGA logic中。EOS 可用作重置信号
FCSBOInputFPGA logic 信号到外部 FCS_B 配置引脚。FCSBO 允许用户控制 FCS_B pin 以进行 Flash 访问。
FCSBTSInput外部 FCS_B 输出引脚的三态控制
GSRInput不推荐 – 应将 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)
GTSInput全局 3 态控制。GTS 是来自 FPGA logic的高电平有效输入。当此 input 被置位为 High 时,除 configuration bank 之外的所有用户 I/O 都将进入 High-Z 状态。GTS 在配置期间自动置位,无需用户置位。对于大多数应用程序,此端口应连接为低电平
KEYCLEARBInput从电池供电的 RAM (BBRAM) 中清除 AES 解密器密钥输入。KEYCLEARB 是来自 FPGA logic的 input。当此引脚保持为低电平时,会从电池供电的 RAM 中擦除解密密钥的内容。KEYCLEARB 可由监视器触发,以发现可疑的片上活动,这可能表明系统受到攻击
PACKInputPROGRAM_B pin 或 PROGRAM 指令 ACKnowledge。PACK 是来自 FPGA logic的 input。此 pin 确认 external PROGRAM_B 信号或内部指令的置位,并允许 PROGRAM_B state machine 的其余部分继续重置 FPGA。仅当设置了 PROG_USR 属性时,才会启用此 pin。PACK 可以绑在低处以确保安全操作
PREQOutputPROGRAM_B pulse、JPROGRAM、IPROG 或 FALLBACK REQuest 到 FPGA logic。PREQ 是 FPGA logic的 output 。此引脚是 PROGRAM_B 状态机对重置设备的请求。这允许拦截和门控 PROGRAM_B 请求的断言,直到 design 处于可以完成 reset 的状态。例如,您可能希望推迟设备重新配置,以允许清除不可重置的数据元素。仅当设置了 PROG_USR 属性时,才会启用此 pin。PREQ 可以保持打开/浮动状态,以确保安全操作
USRCCLKOInput用户 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
USRCCLKTSInput用户 CCLK 3 态使能输入至 CCLK 引脚。USRCCLKTS 是来自 FPGA logic的 input 。当 USRCCLKTS 为高电平时,外部 FPGA CCLK 引脚进入高 Z 状态。通常,USERCLKTS 应连接为低电平,以防止 CCLK 引脚进入高 Z 状态
USRDONEOInputDONE 引脚输出信号。USRDONEO 是来自 FPGA logic的 input 。该引脚直接驱动外部 FPGA DONE 引脚
USRDONETSInputDONE 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
   );

 

本文章已经生成可运行项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值