建设专业网站排名,长沙电商网站制作,什么浏览器可以看任何网站,wordpress 企业小程序最近的工作涉及对 FPGA 进行远程更新#xff0c;也就是通过远程通信接口将 .bin 文件送到 FPGA#xff0c;然后写入 FLASH#xff0c;这样当 FPGA 重新上电后就可以执行更新后的程序了。因此第一步工作就是进行 FLASH 的读写控制。 然而如果尝试配置 FLASH 管脚时#xff0… 最近的工作涉及对 FPGA 进行远程更新也就是通过远程通信接口将 .bin 文件送到 FPGA然后写入 FLASH这样当 FPGA 重新上电后就可以执行更新后的程序了。因此第一步工作就是进行 FLASH 的读写控制。 然而如果尝试配置 FLASH 管脚时会发现 CCLK 管脚是不可配置的这实际上是因为 CCLK_0 管脚在内部已经被占用我们必须通过其他方式获取/设置它。笔者所用芯片为 K7 系列根据 ug470 数据手册我们可以使用 STARTUPE2 原语获取、设置该时钟官方手册的介绍如下 原语调用格式如下
STARTUPE2 #(.PROG_USR (FALSE),.SIM_CCLK_FREQ (0.0)
)
STARTUPE2_inst(.CFGCLK (cfgclk),.CFGMCLK (cfgmclk),.EOS (eos),.PREQ (),.CLK (0),.GSR (0),.GTS (0),.KEYCLEARB (1),.PACK (1),.USRCCLKO (usrcclk),.USRCCLKTS (0),.USRDONEO (1),.USRDONETS (0)
);CFGCLK配置逻辑主时钟仅在配置时有输出在 master 模式下也一直存在存疑根据后面的测试文档所说的 Persist Enabled 应当指的是 Master 模式下一直使能/连接但除了配置的时候存在时钟其他时候为无效的高电平在配置了 USRCCLK 时在 FPGA 配置结束后三个 clk 该时钟将切换到 USRCCLK。Configuration mode 是根据 M[2:0] 管脚配置的最常用的是 M[2:0]001 对应的 Master SPI 配置模式笔者开发板即本模式Master 模式下 CCLK 由 FPGA 输出给 FLASH 的 SCK EOSEnd Of Start指示 FPGA 配置的结束 CFGMCLK配置内部振荡器时钟是从内部的一个锁相环输出的 65MHz 时钟不是很准笔者输出到 GPIO 用示波器看过那块板子的 ~68MHz USRDONEO输出到FPGA 的 DONE_0 管脚。一般而言在硬件设计中会在这个管脚挂一个 LED 灯以指示 FPGA 完成配置开始运行 USRDONETS控制 DONE 管脚的三态门1 将设置为高阻0 将会把用户给入的 USRDONEO 输出到 DONE_0 管脚 USRCCLKO在配置完成后驱动 CCLK_0 管脚的用户自定义时钟。在配置完成后前三个时钟周期用于切换时钟源且不会被输出但如果使用了 EMCCLK 管脚则 EMCCLK 信号会出现在 CCLK 管脚上直到过渡到用户自定义时钟 USRCCLKTS控制 USRCCLKO 的三态门 GTS全局三态门使能要用户自定义 CCLK/DONE 等此管脚必须置低。
其他信号详见官方手册说明默认启动设置下配置期间的时序图如下 测试
不配置 USRCCLKO
STARTUPE2 STARTUPE2_inst (.CFGCLK (cfgclk),.CFGMCLK (cfgmclk),.EOS (eos)
);做如上配置将上述三信号输出到 GPIO 以及 ILA。测试发现 cfgclk 仅在上电一瞬有输出之后为常高Master SPI 模式CFGMCLK 为 ~65MHz 时钟输出到 GPIO 的信号极其微弱但 ILA 可以正常捕获因此此时钟可用于 FPGA 内部逻辑但不可直接输出其驱动 I/O 的能力太弱了EOS 信号上电后一瞬即由低变高指示配置完成因此可用作 FPGA 启动的判断依据。 由于没有配置 USRCCLKCCLK 仅在初始配置有信号。上述写法仅为获取 FPGA 内部时钟以及判断 FPGA 是否配置完成不涉及对 FLASH 的控制。
配置 USRCCLKO 要进行 FLASH 的读写就要对 CCLK 进行配置如下
STARTUPE2 #(.PROG_USR (FALSE),.SIM_CCLK_FREQ (0.0)
)
STARTUPE2_inst(.CFGCLK (cfgclk),.CFGMCLK (cfgmclk), //~65MHz可用于 FPGA 内部逻辑驱动 IO 的能力太弱了.EOS (eos), //指示 FPGA 配置完成.PREQ (),.CLK (0),.GSR (0),.GTS (0),.KEYCLEARB (1),.PACK (1),.USRCCLKO (usrcclk), //FLASH SCK.USRCCLKTS (0), //设为0以启用USRCCLK.USRDONEO (usrdone), //控制DONE_0管脚.USRDONETS (0) //设为0以启用usrdone不想用就设为1
);在该配置下测试发现cfgclk 将被配置为 usrcclk这个也就是输出到 CCLK_0 的信号ILA 捕获、GPIO 输出均正常cfgmclk 仍为 ~65MHz 时钟GPIO 输出极弱。 如果只是要控制 CCLK_0可以只配置如下
STARTUPE2 STARTUPE2_inst(.GTS (0),.USRCCLKO (usrcclk),.USRCCLKTS (0)
);通过控制 usrcclk 即可控制 CCLK_0 管脚了从而获得对 FLASH 的控制权。 关于如何对 FLASH 芯片进行读写控制将持续更新…