首先抛出重点:使用xilinx的平台,最大的难点在于,要自己设计一个flash读写控制器
具体如何设计一个合适的flash读写控制器,鉴于flash有诸多型号诸多接口,设计需求也不尽相同,所以这里不详细论述了。文本讨论一些与xilinx fpga相关的、大概率会遇到的问题。
这个xapp的附件中,有一个用vhdl实现的flash读写控制器设计可以参考。设计提供了源代码。
关于这一篇,xapp1081,有几点需要注意:
1.这一篇文档的重点不是flash读写控制器,提供的flash读写控制器代码在文档中没有详细说明。
2.提供的flash读写控制器只针对文档中提到的特定用法。如果有更换fpga、flash等任何改变,均不保证能正常工作。
3.xilinx默认对xapp不提供任何官方支持。
自行设计flash读写控制器的优势是:
1.理论上可以通过修改设计来支持任何flash,不用担心兼容问题。
2.在时钟、数据位宽、flash操作命令等方面更灵活,可以充分挖掘fpga和flash的潜力。
假设已经有了flash读写控制器的rtl设计,下一步应该是集成到fpga设计中,其中主要的工作是连接fpga i/o。
pin安排
对于xilinx的平台的配置pin,一般分为两类,专用和复用。专用pin是指只能用于配置模式,用户无法(或者不方便)直接控制pin的行为。复用pin是指加载完成之后,这个pin会变为user i/o,即和普通的user i/o一样,可以由加载后的fpga设计来控制pin的行为。
控制flash的配置pin,基本都是复用类型pin。在配置完成之后,都可以作为用户可控的user i/o。所以可以设计一个flash读写控制器,连接到这些pin上。这样fpga在加载之前和加载的过程中,这些pin工作在配置模式,从flash中读取配置数据;在加载完成之后,这些pin变为user i/o模式,由读写控制器设计控制进行读写操作。
需要注意的是配置时钟的处理。部分fpga的cclk是复用模式,加载完成之后可以作为user i/o。内部通过oddr输出时钟即可提供flash需要的时钟。但是另外一部分fpga的cclk是专用pin,用户无法直接控制。这个时候可以查查是否有startup这个模块,往这个模块的 usrcclko port上送某个时钟,就等于cclk pin上输出这个时钟。
假设现在flash读写控制器已经集成到fpga中了,数据的握手传输也完成了。那么下一步,就是,把什么数据往flash中写入了。
这个问题xilinx的处理就方便多了。最简单的方案,是写入bin文件。不过即使是bin文件,也可能会犯错。下面分析一下xilinx的配置文件。
xilinx常用的配置文件格式有三个(大部分情况下知道这三个就足够了):bit/bin/mcs
直接写入flash的数据,对应的是bin文件。bin文件和bit文件都是二进制格式,bin文件直接对应flash中的二进制数据。
下面用a7 100t为例子,生成一个bit文件作为基准。分析一下三种文件。
默认的情况下没有任何约束,生成的bit文件作为基准,取名为original.bit。
在vivado工程生成bit的同时,可以同时生成一个bin文件,取名original.bin。
另外,当获取bit文件之后,可以使用write_cfgmem命令来生成bin文件和mcs文件。这种方法生成的bin文件,在默认情况下,取名g.bin,可以发现g.bin和original.bin两个文件不太一样。不过如果在使用write_cfgmem命令时添加参数 -interface spix1,生成文件spix1.bin,会发现spix1.bin和original.bin两个文件几乎一样。
这个原因就是,write_cfgmem这个命令生成的文件是给flash使用的。所以生成的文件内容会随着flash配置的改变而改变。
默认情况下,生成的bit文件original.bit是原始文件,伴随生成的bin文件original.bin是直接转为bin文件,不包含针对flash的配置。
而write_cfgmem生成的bin文件,默认情况下认为flash接口格式为smapx8(可以参考同时生成的.prm文件),所以生成的bin文件g.bin做了相关处理(一般是位序和大小端的转换)。而spi模式下,不需要额外的转换,所以生成的bin文件spix1.bin和original.bin几乎一样。
类似,如果选择bpix8模式生成bpix8.bin,可以发现和smapx8模式下的g.bin文件几乎一样。
所以可以明确,生成bit文件时生成的bin文件并不含有配置的相关信息。如果需要使用bin文件,那么用write_cfgmem,并同时提供相关配置接口信息,是更好的方案。上文提到的使用bin文件时可能会犯错,就在于此。
至于mcs文件,由于是文本格式,所以直接读取文件的数据是无法直接写入flash的,需要进行一定程度的转换。如果仅仅是远程更新中烧录flash的操作,那么可能用不到这个mcs文件。
注:三种文件虽然是在vivado平台下进行讨论。由于配置文件的内容,应该与工具无关而和器件相关,所以ise环境下的原理是一样的,只是生成各个文件的操作步骤有不同而已。ise工程生成bit文件后,使用impact工具进行文件的转换。
另外,写入flash时需要注意:
1.flash需要先擦除再写入。
2.写入可能遇到大小端的问题,比较简单的方法就是先试一下,如果不行,数据大小端改换一下再进行尝试。
3.对于7系列及以后的芯片,基本上都是从0地址开始写入flash即可。spartan-6可能其实位置不是0地址,需要查看文档确认一下。
到此,xilinx平台下远程更新的flash读写控制方案已经基本介绍完了。更多配置的细节,可以参考相关fgpa的配置文档,例如7系列是ug470。
真机皇诺基亚8你怕不怕 MWC 2017大会前瞻
采用智能手机的革新设计 为用户带来“全新体验”创造笔记本电脑新市场
中兴通讯正研发5nm工艺5G芯片,有望2021年实现商用
新唐科技ISD15108主板介绍
粗糙度仪如何选型?
使用VHDL实现Flash读写控制器设计
微软Windows 10应用程序更多新图标浮出水面
使用Chiplet的三个优势介绍
宇宙膨胀在加速 没人知道其原因
卫星通信地球站防雷系统探讨
关于剥离试验机的相关常识,你知道多少?
dfrobotM0 音频扩展板简介
联网安全问题由来已久,评估工作获授权
iPhone7将提前发布?还改名为iPhone6se
GPRS设计的自来水流量监测终端技术
中国移动通信联合会教育与考试中心和泰国格乐大学5G+人才培养工程基地签约仪式
电源树中BUCK电源采用哪种方式可以减少开关噪声并实现更高的效率
Vega显卡形势不妙 AMD开始发力处理器方面:最高16核心骨灰CPU
中关村数智人工智能产业联盟发起虚拟数字人推进计划
苹果发布iOS 15.4.1正式版