问题描述
Spartan-3器件在识别配置数据之前需要32位同步字(0xAA995566)。如何确定器件是否已同步?
解决/修复方法
没有直接的方法来确定器件是否同步。但是,这可以间接确定。必须使用不同的技术,具体取决于配置模式。
确定处于串行配置模式的器件是否已同步
如果您怀疑器件未正确同步,则创造性地使用LOUT寄存器可指示正确同步。
注意:写入LOUT寄存器仅在串行模式下有效
LOUT寄存器是一个流水线寄存器,用于将数据传输到DOUT引脚。在加载同步字后立即插入一个小LOUT写入将允许您确定是否正确加载了同步字。如果是,器件将识别LOUT写数据包,数据将出现在LOUT引脚上。
在写入LOUT的数据与DOUT上出现的数据之间存在40个时钟周期的延迟。如果未正确加载同步字,则不会识别任何数据包,DOUT引脚将保持高电平。
使用LOUT寄存器进行调试的最简单方法是在BitGen中指定“-g DebugBitstream:Yes”选项(Xilinx答复4219) 。这将产生一个“.bit”文件,在同步字之后和每帧之后有一个LOUT Write。但是,调试比特流将比标准比特流大约20%。如果比特流大小的增加使得调试比特流对于您的应用程序不切实际,则可以将LOUT写入手动插入“.RBT”文件,如下所示:
比特流由BitGen生成(为清晰起见,由DWORDS分隔) :
FFFFFFFF
AA995566
30008001(CMD写)
…
…
您可以在第一次CMD写入之前将LOUT写入数据包插入RBT文件:
FFFFFFFF
AA995566
30010001(LOUT写入的包头,字数= 1)
00000000(32位数据) – 该数据将在Dout引脚上读出。
30008001(第一次CMD写)
…
…
注意:应更改RBT文件中的“位:”字段以反映此大小的增加。不要手动编辑“.bit”文件,因为这可能会导致PROMGen或下载工具出现问题。
这个例子将在DOUT上产生32个0。虽然此示例使用LOUT写入来指示是否加载了同步字,但其他LOUT写入可以在配置期间的任何时刻以任何理由嵌入比特流中。
有关Spartan-3配置格式以及配置寄存器和数据包说明的更深入讨论,请参阅( Xilinx XAPP452 ):“Spartan-3高级配置架构”应用笔记。
在主串行模式下检测同步
在主串行模式下,有一种间接方式来确定器件是否已同步:
在比特流的早期,加载了将改变CCLK频率的命令。默认速度约为2 MHz,更改频率约为4 MHz。如果您在配置过程的早期观察到CCLK频率发生了变化,则表示器件已同步。 (这是因为必须在器件中加载同步字才能识别和处理任何命令。)
在SelectMAP模式下检测同步
在SelectMAP模式下,不能使用LOUT写操作,因为当MODE引脚设置为SelectMAP时,DOUT引脚(写入LOUT数据的位置)将变为BUSY信号。但是,FPGA状态寄存器可通过SelectMAP接口获得,它可用于以不同方式收集相同的信息。
发出ABORT时,FPGA会将状态字驱动到数据线上。此状态字包含有关同步的信息。有关ABORT过程的详细信息,请参阅(Xilinx答复20058) 。
没有回复内容