欢迎来到亿配芯城! | 免费注册
你的位置:AI人工智能半导体芯片 > 芯片资讯 > Flash读写控制器设计
Flash读写控制器设计
发布日期:2024-02-12 11:09     点击次数:85

使用Xilinx平台最大的困难在于设计Flash读写控制器

如何设计一个合适的Flash读写控制器,因为Flash有很多型号和接口,设计需求不同,这里就不详细讨论了。文本讨论了一些与Xilinx的讨论 与FPGA相关的高概率问题。

在这个Xapp的附件中,有一个Flash读写控制器设计可供参考。设计提供源代码。

关于这篇文章,xapp1081有几点需要注意:

1.本文档的重点不是Flash读写控制器,文档中没有详细说明提供的Flash读写控制器代码。2.提供的Flash读写控制器仅针对文档中提到的具体用法。如果有更换FPGA、Flash等任何变化都不能保证正常工作。3.默认情况下,Xilinx不为Xapp提供任何官方支持。

Flash读写控制器自行设计的优点是:

理论上,任何Flash都可以通过修改设计来支持,而不用担心兼容性。

2.在时钟、数据位宽、Flash操作命令等方面更加灵活,可以充分挖掘FPGA和Flash的潜力。

假设Flash读写控制器的RTL设计已经存在,下一步应该集成到FPGA设计中,其中主要工作是连接FPGA I/O。

Pin安排

对于Xilinx平台的配置,Pin一般分为两类:专用和重用。特殊Pin是指用户不能(或不方便)直接控制Pin的行为,只能用于配置模式。重用Pin是指加载后,Pin将成为优步 I/O,就像普通的User一样 IPin的行为可以通过加载FPGA设计来控制。

控制Flash配置的Pin基本上是复用类型的Pin。配置完成后,用户可以控制User I/O。因此,Flash读写控制器可以设计,连接到这些Pin上。这样,在FPGA加载前和加载过程中,这些Pin在配置模式下工作,从Flash中读取配置数据;加载后,这些Pin变成了User I读写操作由读写控制器设计控制/O模式进行。

配置时钟的处理需要注意。部分FPGA的CCLK是复用模式,加载后可用作User I/O。Flash所需的时钟可以在内部通过ODDR输出时钟。但FPGA的另一部分CCLK是专用Pin,用户无法直接控制。此时,您可以检查是否有STARTUP模块,并将其转移到该模块 USRCCLKO 在Port上发送一个时钟等于CCLK 在Pin上输出此时钟。

假设Flash读写控制器已经集成到FPGA中,数据的握手传输也已经完成。下一步是在Flash中写入哪些数据。

Xilinx处理这个问题要方便得多。最简单的方案是写bin文件。但即使是bin文件也可能会犯错误。以下是Xilinx配置文件的分析。

Xilinx常用的配置文件格式有三种(大多数情况下知道这三种就够了):bit/bin/mcs

bin文件直接写入Flash数据。bin文件和bit文件都是二进制格式,bin文件直接对应flash中的二进制数据。

下面用A7 以100T为例,生成bit文件作为基准。分析三个文件。

默认情况下没有约束,生成的bit文件作为基准,命名为original.bit。

在Vivado工程生成bit的同时,可以同时生成bin文件,取名original.bin。

此外,获取bite文件后,AI,人工智能,半导体芯片可以使用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。