问题描述
工具文档没有清楚地描述比特流压缩选项。
什么是默认值?这个命令的参数是什么?它是如何工作的?它可以实现多少压缩?
解决/修复方法
ISE:
压缩:
此选项使用比特流中的多帧写入功能来减小比特流的大小,而不仅仅是“.bit”文件。使用“压缩”选项并不能保证比特流的大小会缩小。
通过设置BitGen选项“-g compress”启用压缩;并通过不设置此选项来禁用。
注意:使用BitGen“-r”或“-g Partial Mask”设置生成的部分位文件会自动使用多帧写入功能,并且是“压缩”的比特流。
有关更多信息,请参阅( Xilinx XAPP290 ):“用于部分重配置的两个流程:基于模块或小位操作”。
架构:Virtex,Virtex-E,Virtex-II,Virtex-II Pro,Spartan-II,Spartan-IIE,Spartan-3
设置:无
默认值:关闭
BitGen“-g compress”如何工作?
“-g compress”选项通过编写相同的配置帧一次而不是单独写入每个帧来工作。如果多个帧具有相同的数据,则将帧加载到配置逻辑中,并使用多帧写入寄存器(IMF)将其写入多个地址位置。
根据器件的利用率,这可能会显着减小比特流的大小。要使用相同的数据写入多个帧,BitGen使用以下命令构造比特流:
- 将WCFG命令写入CMD寄存器(WCFG命令=写入数据包数据; CMD =命令寄存器)。
- 将所需帧写入FDRI(FDRI =帧数据寄存器输入)。
- 使用第一个所需地址(FAR =帧地址寄存器)写入FAR寄存器。
- 将MFWR命令写入CMD寄存器。
- 将两个伪字写入MFWR寄存器。
- 使用第二个所需地址写入FAR寄存器。
- 向MFW写两个虚拟字。
- 重复步骤7和8,直到最后一个所需的地址。
笔记:
- 您不需要关心如何构造“-g compress”比特流的细节;这些步骤仅供参考。
- 有关Virtex比特流组成的背景信息,请参阅( Xilinx XAPP151 ):“Virtex系列配置架构用户指南”。
http://www.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=User+Guides
配置寄存器(CMD,FAR,MFWR等)在这些指南中进行了说明。
使用“-g compress”选项我会看到多少比特流大小的减少?
“-g compress”选项通过编写相同的配置帧一次而不是多次来工作。配置框架垂直排列。
因此,跨越尽可能少的列数的设计将实现比跨越器件宽度的设计更大的压缩。
通常在块RAM列中找到相同的帧,这些列使用相同的值进行初始化,或者在未使用的CLB或块RAM列中找到。要估计将实现的压缩量,请按照下列步骤操作:
1)确定相同CLB或Block RAM列的数量。这可能很难确定,因为在大多数情况下,CLB列只有在未使用时才相同。
如果相同的初始化值用于多个Block RAMS列,则Block RAM列是相同的。
2)计算感兴趣的列类型的配置帧数:
#config frames =(每列#帧数)x(列数#)
对于Virtex-II,每列的帧数如下:
CLB:每列22帧
BRAM:每列64帧
要查找Virtex的此信息,请参阅( Xilinx XAPP151 ):“Virtex系列配置架构用户指南”。
要确定列数,请使用FPGA编辑器或Floorplanner。例如,xc2v40有两个Block RAM列(两列Block RAM,总共四个Block RAM)。
3)保存的配置帧数是相同帧的总数(从2开始)减1。
4)计算保存的配置位数:
=(保存的配置帧数)x(每帧的比特数)
每帧的位数在Virtex-II / -II Pro用户指南或( Xilinx XAPP151 )中提供。
例如:
在将所有Block RAM值初始化为零的xc2v40设计中,使用MFWR对这些列进行编程可以实现多少压缩?
2v40中的块RAM列数(来自FPGA编辑器):2
(2v40有四个Block RAM排列在两列Block RAM中。)
2v40中的块RAM配置帧数:
=(64帧/ BRAM列)x(2个BRAM列)= 128个BRAM配置帧
不需要在比特流中明确出现的块RAM配置帧的数量(即“压缩”帧):
=(128个BRAM配置帧) – (1个BRAM配置帧)= 127个BRAM配置帧
保存的配置位数:
=(127 BRAM配置帧)x(每帧832位(来自Virtex-II用户指南中的表3-15))
= 105,664位
未压缩的2v40比特流的大小:360,096
达到的近似压缩:105,664 / 360,096 = 30%
注意:此值应仅视为估算值。
Vivado:
Vivado使用以下比特流属性来启用压缩:
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
上面解释的多帧写(压缩)算法适用于Vivado,可用于估计为Vivado支持的较新器件系列生成的比特流的压缩结果。
没有回复内容