-
Xilinx FPGA
配置的一些细节
<
/p>
2010
年
07
月
03
日
星期六
14:26
0
参考资料
(1) Xilinx:
Development System Reference Guide. , v10.1
在
Xilinx
的
doc<
/p>
目录下有。
(2)
Xilinx:
Virtex
FPGA
Series
Configuration
and
Readback.
XAPP138
(v2.8)
March
11,
2005
在
Xilinx
网站上有,链接
/bvdocs/appnotes/
(3)Xilinx: Using a Microprocessor to
Configure Xilinx FPGAs via Slave Serial or
SelectMAP 502 (v1.5) December 3, 2007 <
/p>
在
Xilinx
网站上有,链接
/bvdocs/appnotes/
注:此外
xapp139
和
xapp151
也
是和配置相关的。
(4)Xilinx: Virtex-4
Configuration Guide. UG071 (v1.5) January 12, 2007
(5) Tell me about the .BIT file format.
链接:
/FAQ_Pages/0026_Tell_me_a
bout_bit_
1
Xilinx
配置过程
主要讲一下
Startup
Sequence
。
Startup
Sequence
由
8
个状态组成
p>
.
除了
7
是固定
的之外,其它几个的顺序是用户可设置的,而且
Wait for DCM
和
DCI
是可选
的。
其中默认顺序如下:
这些在
ISE
生成
bit
文件时通过属性页设定。
这几个状态的具体含义如下:
Release_DONE :
DONE
信号变高
GWE :
p>
使能
CLB
和
IO
B
,
FPGA
的
RAMs
和
FFs
可以改变状态
p>
GTS :
激活用户
< br>IO
,之前都是高阻。
EOS
:
表示配置结束
DCI_MATCH :
表示所有的
DCI(Digitally
Controlled Impedance)
控制器已经把内部电阻和
外部参考电阻匹配完毕。
DCM_LOCK : <
/p>
表示所有的
DCM
已经锁定。这个选项默
认是选中的。
因此,我们可以得出如下结论:
(<
/p>
1
)
FPGA
最
后的
Startup
过程有
8
个周期,其中
DONE
变高仅仅是第
4
个周期。因此,在
DONE
变高之后还需要再给
3
个
CCLK
。否则
DONE
虽然变高了,
FPGA
程序并没有正确运行。
(
2
)
ISE
会在设计中搜索用户是否使用了
DCI
,如果是,<
/p>
FPGA
会使用
2
个周期的
Start Up
Phase
,等待
DCI
匹配上。
即
FPGA
会在那儿等待,直到
DCI
匹配上。
如果我们在上位机读取
了配置文件,
p>
获得了文件大小,
我们把它写到负责加载
V
4
的
SP3
里,
然后
CCLK
时钟就不给
了。这就产
生问题,因为
DCI
匹配需要时间,我们的问题就是,过了一段
时间,
DCI
匹配完
毕了,
但是
CCLK
却没有了,
因此
FPGA
一直处在
Start <
/p>
UP
的前
2
个<
/p>
Phase
上,
不会到
< br>DONE
。
导致无法配置成功。
看
xilinx Development System
Reference Guide()
中,写到
BitGen Match_cycle
The
BitGen
Match_cycle
setting
specifies
a
stall
in
the
Startup
cycle
until
digitally
controlled impedance (DCI) match
signals are matching does not begin
on
the
Match_cycle
that
was
set
in
BitGen.
The
Startup
sequence
simply
waits
in
this
cycle
until
DCI
has
matched.
Given
that
there
are
a
number
of
variables
in
determining
how long it will
take DCI to match, the number of CCLK cycles
required to complete
the Startup
sequence may vary in any given system. Ideally,
the configuration
solution should
continue driving CCLK until DONE goes high. When
the Auto setting
is specified, BitGen
searches the design for any DCI I/O standards.
If DCI standards exist, BitGen uses
Match_cycle:2. Otherwise, BitGen uses
Match_cycle:NoWait.
关于
DCI_MATCH
的设置,在生成
bit
文件的
StartUP
Options
里有个
Match Cycle
的选项,
默认是
Auto
。含
义是
ISE
会去确认用户是否使用了
D
CI
,没有的话,
Startup Sequence
直
接跳过这一步,否则会等待
DCI
匹配完毕。
2
bit
文件的格式
.bit
是二进制文件,可以分为三个部分:头部冗余信息,配置数据,尾部冗余信息。
< br>
头部信息
配置数据
尾部信息
其中头部信息的格式可以参见《
Tell me about
the .BIT file format
》
.
它里面包含了当
前
ISE
工
程名字、编译时间等信息,因此头部信息的长度是不确定的,
72
个字节左右。
第二部分是配置数据流,以
0xFF FF FF FF AA
99 55 66
开头,
AA 99 55 66
是
Xilinx
指
定的同步
字符。配置数据流的具体格式及含义可以参见参考文献,比如
的
P95
的
Configuration
Sequence
,
基本格式就是指令
+
数据,
很清晰地给出哪个字节是什么
命令,
用来干什么。
例如
bit
文件中,
加载数据帧之后,
有
CMD
寄存器的命令:
START
0x5(0101b)
表示开始
Start-Up
Sequence
。
最后一部分是尾
部信息,由
16
个
32bit
的空操作指令:
0x20 00 00 00
组
成。大家可以打
开
bit
文件看,有很
多
20 00 00 00
。这些表示空操作。这部分信息可以
不用加载到
FPGA
。
我认为
Xilinx
把
bit
文件后面加上这些空操作,是为了在
SelectMAP
时能让
用户多给一些
CCLK
,完成
Star
tUp
。
3 bit
文件和
bin
文件的区别
<
/p>
.bin
文件和
.bit
的区别就在于,
.bin
只包含配置数据,没有前面的
header
inforamtion
。
4 Se
lectMAP
文件是加载
.bit
呢
还是
.bin
?
既然
.bit
和
.bin
仅仅是
header
information
不一样,配置数据是一样的,所以两个文件都
可以加载。
但是,当用户在
ISE
中调用了
EDK
(比如使用
mic
roblaze
或者
powerpc
)
,
ISE
生成
.bin
文件并不会把用户的
.elf
文件初始化到
FPGA
内部的数据和程序存储器中,造成用户的
microblaze
或
ppc
代码不
运行。至少当前
ISE
版本
(<=10
.1)
是这样的,不知道以后的版本
Xilinx
会不会解决这个
bug
。
因此,推荐使用
.bit
文件。
5 EDK
生成的
.bit
和
ISE
生成的
.bit
文件有什么区别吗?
我们发现,
EDK
的工程中,生成的
.bit
文件通过
SelectMAP
加载到
FPGA
,程序运行不正常,
如果用
JTAG
加载这个
.bit
p>
文件,则程序运行正常。
如果把
EDK
的工程作为
ISE
的子模块调用,生成的
.bit
可以通过
SelectMAP
加载。
那么
,
EDK
生成的
.bit
和
ISE
生成的
.bit<
/p>
有什么区别吗
?
有!原因就在于
ISE
和
EDK
的<
/p>
StartUp
Clock
默认属性设置的不一样。
在
ISE-> Generate Programming
File
的属性
-> Startup Options ->
FPGA Start-Up Clock
的
Value
是
CCLK
;