一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 10647|回复: 6

用CPU配置FPGA

[复制链接]
发表于 2008-12-5 16:36 | 显示全部楼层 |阅读模式
用CPU配置FPGA(一)概 述2 J& p! A6 |6 ~, r* @9 Q% F( r
一. 概 述* n9 _0 }+ |, s$ _
5 }$ S% |8 W% ]; S9 M3 F
目前很多产品都广泛用了FPGA,虽然品种不同,但编程方式几乎都一样:利用专用的EPROM对FPGA进行配置。专用的EPROM价格不便宜,且大不跟上都是一次性OPT方式编程。一旦更改FPGA设计,代价不小。为了进一步降低产品的成本和升级成本,可以考虑利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对 FPGA进行配置。 本文将以PowerPC860和EP1K30为例,讲解如何利用CPU来配置FPGA。
& [; ^: }1 g  v# }/ ^! S5 E0 y* x
* `, T1 R) f8 J" xCPU配置FPGA的优点
. y) |5 l/ a% |3 P2 M1 l: E5 n. }# b  n2 e4 _( U' f. b$ f  I+ M
与Configuration EPROM方式相比本设计有如下优点:2 }3 ~! d4 z' g& z
7 m% H* y9 h7 b# U# Q
1.降低硬件成本——省去了FPGA专用EPROM的成本,而几乎不增加其他成本。以ALTERA的10K系列为例,板上至少要配一片以上的EPC1,每片 EPC1的价格要几十元,容量1M位。提供1Mb的存储空间,对于大部分单板来说(如860系统的单板),是不需要增加硬件的。即使增加1Mb存储空间,通用存储器也会比FPGA专用EPROM便宜。
# ~1 `. A: }, C, I* p% L  M# e/ h' ~- ^+ h* i. M
2.可多次编程——FPGA专用EPROM几乎都是OTP,一旦更换FPGA版本,旧版本的并不便宜的EPROM只能丢弃。如果使用本设计对FPGA配置,选用可擦除的通用存储器保存FPGA的编程数据,更换FPGA版本,无须付出任何硬件代价。这也是降低硬件成本的一个方面。, C/ B9 V( y3 z! H+ f! ]

& @9 h' N. `9 h3 J3. 实现真正"现场可编程"--FPGA的特点就是"现场可编程",只有使用CPU对FPGA编程才能体现这一特点。如果设计周全的话,单板上的FPGA可以做到在线升级。1 i* A1 i( l. z$ G( j& C( d, r

7 q" Y: W* B% G. N( ^/ a4. 减少生产工序--省去了对"FPGA专用EPROM"烧结的工序,对提高生产率,降低生产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊DIP器件的工序。: w& ]8 `8 M+ s

  g! _# o0 b# [' F( r7 E0 A当然,与Configuration EPROM方式相比也有一些需要注意的的地方:
/ G' M6 Z6 O4 ^& I7 g0 C+ f
  C$ U7 \# c6 y; l9 J9 ^; }% ~1.需要CPU提供5根I/O线--一般来说,这并不困难。对于MPC860一类的CPU来说,区区5根I/O线是不成问题的。即使是某些设计中实在没有多余的I/O供配置使用,也可通过板上的PLD扩展。虽然这样做可能会增加成本,但获得的真正"现场可编程"的功能是非常宝贵的。
  o; q5 \7 j+ p
% Q, w; l' Z4 Q/ U9 ^8 k# p! |6 v2. CPU的Boot应不依赖于FPGA--这在单板设计时需要特别考虑的。由于CPU对FPGA进行配置所需的资源很少,这一点比较容易做到。
# B2 i+ s% x7 t( X6 N0 P
9 c  k5 p$ m& C" k2 _设计摘要
9 G% X4 g2 @  w- D" I& y本设计严格按照FPGA的PS配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对FPGA进行配置,性能将优于Configuration EPROM方式。
- U4 @) Z# A7 {0 ^- d本设计是利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对FPGA进行配置,以降低硬件成本并实现FPGA的在线升级。
2 j+ B. }& n( c; p: ^7 A0 j本设计已在MPC860和EP1K30环境下完成验证,适用于有5个多余I/O的CPU对Altera FPGA的配置。
9 W. o) x, v; h9 @* {9 o
0 q0 a6 p- n9 p4 Z/ z: S参考资料
- Y0 x6 Z7 Q4 E5 I% y6 h; p
: m2 ?9 n7 B& h) cALTERA:AN-116 Configuring SRAM-Based LUT Devices. Z0 ~( C8 n) f, ]9 |+ R
ALTERA: ACEX 1K Programmable Logic Device Family
 楼主| 发表于 2008-12-5 16:37 | 显示全部楼层

用CPU配置FPGA(二)硬件设计

用CPU配置FPGA(二)硬件设计7 w% A) U) j+ R- R
二. 硬件设计
$ v. U5 N! x! a* a1 e
1.配置基本原理
4 D  A6 ~2 F" s: }4 }5 l
RAM-Based FPGA由于SRAM工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对FPGA进行配置。对于Altera的FPGA,配置方法可分为:专用的EPROM (Configuration EPROM)、PS(Passive serial 无源串行)、PPS(Passive parallel synchronous 无源同步并行)、PPA(Passive parallel asynchronous 无源异步并行)、JTAG(不是所有器件都支持)。2 f% w0 ]6 g0 q* Y
http://www.dzkf.cn/upimg/allimg/20060906/1353410.jpg
本设计采用PS方式对FPGA进行配置,是基于如下几个方面的考虑:
5 P+ c2 b" X5 |) A5 x' y" ]# K) N
1. PS方式连线最简单) k: [  j/ ]4 d5 v
2. 与Configuration EPROM方式可以兼容(MSEL0、1设置不变)6 Q# l' X- X$ P  |
3. 与并行配置相比,误操作的几率小,可靠性高
只需利用CPU的5个I/O线,就可按图 2所指示的时序对FPGA 进行PS方式的配置。
2.配置电路的连接
6 E( V! g  f4 T1 G* {
CPU仅需要利用5个I/O脚与FPGA相连,就实现了PS方式的硬件连接,具体信号见下表(信号方向从CPU侧看):

) o' M. ?, m/ a
信号名
I/O
说明
Data09 S; Q+ [; D# m! |+ v( ]% I5 O1 X
O
configuration data
DCLK
! [2 `9 X  }5 n% I- b) L# l
O
configuration clock
nCONFIG8 q/ {& c7 Y: q
O
device reset (a low to high transition starts the configuration within the device)
Conf_done% \, j5 I1 ~0 M' U' P5 j0 b
I
Status bit (gets checked after configuration, will be high if configuration complete)
nSTATUS
. @8 ^# ^" W( J
I
Status bit indicating an error during configuration if low
0 A( K: @( a5 _4 h" V/ G
http://www.dzkf.cn/upimg/allimg/20060906/1353412.jpg; ~2 ^: L( |& z) {
图 3 PS配置单片FPGA的硬件连接
% A& ]* b7 X$ @. }  t
图 4 PS配置多片FPGA的硬件连接

3 R* }1 @$ g2 D$ Z! O4 Y7 t; f1 d  `
3.配置操作过程

% \6 p* I) A& Q4 K+ R8 @- yCPU按下列步骤操作I/O口线,即可完成对FPGA的配置:

$ E& X! G2 ?, `6 q& @/ O1. nCONFIG="0"、DCLK="0",保持2μS以上。. z6 f' }) k! _1 F  B3 ~
2. 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错。正常情况下,nCONFIG="0"后1μS内nSTATUS将为"0"。5 n+ ?* z1 v9 l0 y
3. nCONFIG="1",并等待5μS。' K0 E/ ?* F! u4 u( w6 y- O# l
4. Data0上放置数据(LSB first),DCLK="1",延时。
" l/ G6 v$ V# D# U1 p5. DCLK="0",并检测nSTATUS,若为"0",则报错并重新开始。# D& `- E6 m; ~2 s2 Q' m
6. 准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。
; a2 g: [6 ~0 N# @! n) T* D0 L. V7. 此时Conf_done应变成"1",表明FPGA的配置已完成。如果所有数据送出后,Conf_done不为"1",必须重新配置(从步骤1开始)。
4 I" C  Z3 K9 F9 Q2 q2 m2 T6 J& v8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。

2 d( ?$ A# n/ w4 P注意事项:
8 F% n7 W' F+ N. i5 {3 `! C
1. DCLK时钟频率的上限对不同器件是不一样的,具体限制见下表:
型号
最高频率
ACEX1K、FLEX10KE、APEX20K
33MHz
FLEX10K
16MHz
APEXII、APEX20KE、APEX20KC
57MHz
Mercury
50MHz
2. 步骤7中FPGA完成初始化所需要的10个周期的DCLK是针对ACEX 1K和FLEX 10KE的。如果是APEX 20K,则需要40个周期。

5 B) Q( r8 A$ P3. 在配置过程中,如果检测到nSTATUS为"0",表明FPGA配置有错误,则应回到步骤1重新开始。/ \7 m1 a) h4 j8 o2 ], _1 {7 R. ?
图 5 操作流程框图5 ~5 F3 z' Q; i  e9 p
4.实现在线升级

6 ?" a$ e8 P8 q5 ?/ s, |- [采用本模块的最大优点是可以实现单板FPGA的在线升级。要实现在线升级,单板设计必须考虑以下几个问题:

3 F( [5 i) g' L1. CPU的启动必须不依赖于FPGA,即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。2 Q  a( C9 q9 s+ H8 M0 M& ?
2. FPGA配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。  u' U, d& k: P( K: o" @/ L2 J6 k
3. 为了实现FPGA的在线升级,存放FPGA配置数据的存储器器必须是CPU可重写的,且此存储器应是非易失性的,以保证单板断电后,FPGA数据不需从后台重新获得。
具体过程
5 o0 k: S' O, v; Y# c+ J2 `% ?
结合图6的实例,对FPGA在线升级作一具体描述。- z8 u# J4 ^8 j/ f' a" u2 P
http://www.dzkf.cn/upimg/allimg/20060906/1353415.jpg
图6 FPGA在线升级
1. 使用编译和连接工具,将FPGA的第一个版本与MPC860的工作程序连接在一起,分别占用地址为0x70000-0x7FFFF和0x00000-0x6FFFF的存储空间。
$ A% @+ T- a7 I! S2. 单板启动时,MPC860自动将0x70000-0x7FFFF的数据下载到FPGA中,完成FPGA配置。
) a, [2 p3 H. [3. 当FPGA需升级时,将新的RBF配置文件放在后台计算机中。
9 O/ Q8 y. r3 H7 S/ C- s4. MPC860把BOOTROM的0x70000-0x7FFFF空间当作普通数据存储区,通过后台将新的RBF配置文件放在0x70000-0x7FFFF中。. _5 v& f5 u8 H! R( |
5. MPC860调用BOOTROM中的FPGA配置子程序,对FPGA从新下载数据,完成FPGA升级。
9 M1 W2 R" C6 j+ [

( C6 O* `% a; Z" ]4 @' [4 S" p以MPC860和Altera EP1K30为例,电原理图如下:3 m% A+ a5 k/ I3 l$ v
http://www.dzkf.cn/upimg/allimg/20060906/1353416.jpg
图7 电原理图
回复

使用道具 举报

 楼主| 发表于 2008-12-5 16:38 | 显示全部楼层

用CPU配置FPGA(三)软件操作

编程文件格式的转换
    MAX+plusII或QuartusII生成的SOF或POF文件不能直接用于CPU配置FPGA中,需要进行数据转换才能得到软件可用的配置数据。在MaxplusII中的具体步骤如下:
1. 进入数据转换对话框
图1 进入数据转换对话框
2.选择需要转换的SOF文件,对于配置多个FPGA的场合,应选择所有的SOF文件并排好次序。输出文件的格式我们选则二进制的rbf(Sequential)。 (也可以选择其他格式,如HEX等,在CPU软件编写上会与本文例子略有区别,关于不同文件格式的区别,在altera的AN116号文档上有详细解释)
图2 选择相应的输出数据格式
在QuartusII软件的file菜单下,同样可以找到类似菜单进行格式转化。
" l* j& r1 @7 l, V9 z5 w
CPU程序设计

: [7 d( Y) ~) X9 x9 X6 v5 I以MPC860为例,我们可以将转换完成的RBF文件作为二进制文件,直接写到MPC860系统的某一ROM/Flash区域。由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。
本设计的CPU源程序
void InitPORT(void)
{ // 初始化PB口相应位:& g- q) q" ~$ N& a
// PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出
- f! N: E9 }8 v: [/ a! B2 o6 d, YIMMR->pip_pbpar=0x00000000;
6 I$ D: D7 D8 g, O; T& C3 `IMMR->pip_pbdir=0xFFFFF5AF;
8 G% n9 M+ G0 `& ?$ y, S! xIMMR->pip_pbodr=0x00000000;
+ [( d' Z& b2 M, B5 s8 }2 bIMMR->pip_pbdat=0xffffff57;2 f; F1 ?! P. N1 l/ F2 ]; L9 r
}
UBYTE Fpga_DownLoad(void)
1 N0 C- T  f, \" Z# Z! M{ // FPGA配置9 \* A7 t# @' c( x, M. Y
UBYTE *Bootaddr;
% E1 }6 o' E! n- J7 [! ^7 y/ X- aUWORD CountNum=0x0;
7 g3 I. U: R- G5 X+ bUBYTE FpgaBuffer, i;
// 获得Boot区首地址" `& V1 j1 K& _# r$ t  M3 p7 n) C5 j
Bootaddr=(UBYTE *)(IMMR->memc_or0 & IMMR->memc_br0 & 0xFFFF8000);
Set_nCONFIG(0); // nCONFIG="0",使FPGA进入配置状态
4 @  W+ N7 M, sSet_DCLK(0);
/ a! Z' a$ E" K  V- fDELAY5us();8 Q, A  m9 Q" s& c. p; U  W) \- h
if (Read_nSTATUS() == 1); K, t% h2 p, f
{ // 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错
* n% a3 p( M- m- j# y$ l6 tErr_LED(1);! }2 o2 f; |! x0 |
return 0;
5 j$ X1 ]/ C7 ]: E8 r" l, f}
$ ]" z) `' C% N! sSet_nCONFIG(1);9 T4 Y; Z, F1 ?" d, [
DELAY5us();

0 r1 D$ v% X6 ~  X- C: [* h// 开始输出配置数据:. s, P5 i  t; r3 s: e  P7 Q$ |
while(CountNum <= 0x0e74e)
, _1 z1 d3 Y5 P{
- y1 t' H+ S; d' N& XFpgaBuffer= *(Bootaddr+0x70000+CountNum);, a/ U5 \7 \/ a! k5 _
for (i=0; i<8; i++)
; n3 Y& M: Y. g) z) b# A{ // DCLK="0"时,在Data0上放置数据(LSB first)
6 k4 A0 J8 J: |* ?* W1 [Set_Data0(FpgaBuffer&0x01);
. f/ j% a8 L: Z. k: u8 zSet_DCLK(1); // DCLK->"1",使FPGA读入数据
, q# s+ M! \4 y! k9 d/ T, mFpgaBuffer >>= 1; // 准备下一位数据
9 Z8 [5 w2 [5 c& ]* Pif (Read_nSTATUS() == 0)9 u' T7 g. f0 v3 ~
{ // 检测nSTATUS,如果为"0",表明FPGA配置出错 3 P0 D* ]7 s7 ]# _+ X5 A3 T
Err_LED(1);
# u/ Q3 k1 @$ C0 b- ]return 0;
; l# Y4 ]* K* x9 m0 b: L}
! Y2 E8 c5 c8 a" Y0 K4 hSet_DCLK(0);+ f: g/ _9 S5 t
}
8 y: u) C0 M* `! m7 JCountNum++;. W. l! ~/ w- L9 r' j: \% A
}
9 q$ f) Z2 f( y
// FPGA初始化:: i5 ~# M0 U$ a
// ACEX 1K和FLEX 10KE需要10个周期,APEX 20K需要40个周期
+ z/ m$ T) e) u: r& e) w6 \7 D$ m0 `for(i=0; i<10; i++)
. s+ Q+ B  G$ R" O0 r{
+ N9 A  [3 M6 I7 y3 I& M) \Set_DCLK(1);" F) d5 S6 l+ n5 l6 [& \  ^+ n( f0 S
DELAY100us();
0 d. W5 g/ O$ w' g8 ZSet_DCLK(0);0 w! \( N- }# ?, Z; p5 U
DELAY100us();9 n0 Y0 l4 Z7 G3 R& V9 t
}0 G8 T/ M; i2 `; P" S" u0 y
Set_Data0(0);* d1 s9 L6 n, K# Y: K0 g
if (Read_nCONF_Done() == 0)& j; `) s7 A- y3 [3 Z4 r7 O
{ // 检测nCONF_Done,如果为"0",表明FPGA配置未成功
! I7 I- y& x: R: eErr_LED(1);) v1 Z. w" P% D/ q- Z, `
return 0;
7 @: P; F% \/ P* I5 z7 L1 K- M}! f4 [, ^( {& p5 D2 j
return 1; // 成功返回
; x0 m. N0 y2 N- C. G) d# n% Y}
// Data0输出
6 [% b9 w5 A" j' ^! gvoid Set_Data0(UBYTE setting)
& `& W3 ?5 T+ l9 ?. Y9 ?{ // PB24! e3 ?( J/ F8 N4 N/ c: g! x
if (setting) IMMR->pip_pbdat |= 0x00000080;! l, S/ r1 y: m8 w# m5 t5 B
else IMMR->pio_pbdat &= 0xFFFFFF7F;9 ^8 l. B( g5 B7 r- H- L' b4 x
}
// 读nSTATUS状态
# z- k9 l, ~. T" I- wUBYTE Read_nSTATUS(void)0 H' Z' T* ^! {7 _8 h; R7 F
{ // PB25- L" j0 T8 C8 D$ ^# Y7 P
if (IMMR->pio_pbdat & 0x00000040) return 1;" ]0 a5 {8 L6 ~5 u) Z
else return 0;
9 z- ^% [. ]8 v" Z  u! z}
// 设置nCONFIG电平- ^$ Z4 w8 F+ U! A* ]8 v, b9 ?
void Set_nCONFIG(UBYTE setting)
( _4 C& n( F" i/ r# e{ // PB26' y: n6 m2 S* v" p. Q$ ]/ ~
if (setting) IMMR->pip_pbdat |= 0x00000020;6 g3 i9 {4 V5 {+ S8 n# Y
else IMMR->pio_pbdat &= 0xFFFFFFDF;
, I9 X; I* ?+ N, S0 T. C}
// 读nCONF_Done状态9 O- f$ A5 @; N$ a; P2 ^
UBYTE Read_nCONF_Done(void)
' I- g0 g7 g5 L5 E- t% k! X3 z{ // PB27
5 V3 Q  r0 g: ?+ qif (IMMR->pio_pbdat & 0x00000010) return 1;. k4 l& V% }$ C8 z
else return 0;
" b2 _/ S5 c3 X3 e, P1 j1 B}
// 输出DCLK' C7 K' H% ?( l4 i* X
void Set_DCLK(UBYTE setting)9 s. _& e# D2 J3 ^; F0 l* @
{ // PB28
: m9 ~8 ^( {2 K1 uif (setting) IMMR->pio_pbdat |= 0x00000008;! C! ]$ I0 I% L% `
else IMMR->pio_pbdat &= 0xFFFFFFF7;  e; ~& r( T' T: j4 I4 q4 T
}2 D, k* n; z3 O8 w
// 结束
回复

使用道具 举报

 楼主| 发表于 2008-12-5 16:39 | 显示全部楼层

用CPU配置FPGA (四) 应用实例

我们已在某单板上实现了该设计。现以该单板为例,说明如何实现CPU对FPGA的配置。      在该单板上是使用MPC860作CPU,BootROM采用SST39VF040,一片FPGA型号EP1K30QC208-3。我们在MCP860的PB口选5根线与EP1K30连接成PS配置方式,硬件连接参考第二章,Data0也由MPC860输出,信号定义见下表
6 d$ }2 D! _$ b8 Z. C# H
MPC860引脚
I/O
信号名称
EP1K30引脚
PB24
O
DATA0
156
PB25
I
nSTATUS
52
PB26
O
nCONFIG
105
PB27
I
CONF_DONE
2
PB28
O
DCLK
155

' ?! s3 S& _+ i  Z( C. u

9 d2 r! `1 _  a. U, x* Z$ ~EP1K30所需要的配置数据为58kB(准确的长度参见生成的 RBF文件),由于BootROM比较空,我们将配置数据安排在BootROM的0x70000~0x7FFFF区间内。第一次的配置数据可利用编程器将 RBF文件当作二进制文件写到BootROM的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。1 t# L8 T7 k+ z
具体软件操作参见第二章。

: C' \% X. a) ^FPGA在线更改配置

4 R. N( @6 C" y# b! n8 S0 o" |为检验FPGA在线升级的可能性,我们在CPU的BootROM中放置了不同逻辑的FPGA配置数据。CPU正常运行时,测试软件随意更换FPGA的配置数据。在每次配置完成后,FPGA均能实现相应的逻辑功能。
/ F8 g# U  k& P( H4 w如果和系统软件配合,在线更改EPROM中的配置数据,FPGA的在线升级是完全可以实现的。
3 `: e  [5 l, @  _为了便于调试和实际生产,我们将FPGA的初始配置数据放置在BootROM中。如某些单板BootROM的写功能必须禁止,此时FPGA配置数据可放在其它存储器中,如存放应用程序的FLASH中,升级FPGA配置数据可以和升级应用程序一并完成。8 F7 q  E! U2 e/ t7 Q

! C& C. N7 q/ e电缆下载
& Q: ~2 N3 x/ ?8 N8 u$ D
为了提高调试进度,通常会采用电缆下载的方式。在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的"0欧姆电阻连接方式"。电气连接的示意图如下:7 c2 n( g8 Y" g8 Q+ w4 n5 P
图1 兼容电缆下载
在最初调试FPGA时,R1~R5不焊,直接用电缆下载。同时,MPC860的程序中跳过FPGA配置的代码。等FPGA设计定型后(相当于准备使用EPC1时),焊上R1~R5,利用CPU配置FPGA。( N# s; y" D; R% s. A. V% {* T
当然,R1~R5也可改用跳线或拨动开关。这两种连接方式在开发调试中比0欧姆电阻方便,但实际使用中可靠性不如0欧姆电阻高,如跳线会出现短路块脱落、拨动开关会出现接触不良等现象。而且,0欧姆电阻连接方式最便于生产,价格也最低。建议开发阶段的单板可以用跳线或拨动开关,转产时采用0欧姆电阻连接方式。
  I6 T& G2 N+ Q1 v' P6 m- T/ |
在使用下载电缆时需要注意电源的选择。由于Altera以前的 Byteblaster下载电缆是5V供电的,有不少设计都把下载电缆插座接到5V电源上,这种5V供电的下载电缆可能导致不能忍受5V信号的CPU损坏。因此,使用本模块时,下载电缆应使用低电压版本的ByteblasterMV,下载插座的电源接3.3V。
" Q: V& V/ r" G" _( _6 u
使用、调试、维护说明
7 ?. F4 i, }4 ^! x
如果使用本模块出现配置出错,有如下可能:- y  l5 w/ T0 k/ }5 h/ q7 }- q
错误原因
解决方法
配置数据有错
重新生成配置数据,并检查生成过程是否正确
CPU输出信号频率太高
控制DCLK频率,具体数据参见“操作过程”相关章节
CPU与FPGA连接有误
检查硬件连线
下载电缆影响
拔去下载电缆
CPU的I/O口故障
用示波器检查PB24~PB28信号波形
FPGA故障
更换FPGA
+ s2 Y' I! j% g; h
( m+ l( q% r! B
经验教训
: `0 w: F+ G& V, x$ o
本模块在设计过程中有如下几个要点,请使用者注意:
  • CPU的启动必须不依赖于FPGA,这在单板设计时需要特别考虑的。即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。当然,其他挂在CPU总线上的设备必须处于非访问态,FPGA所控制的设备也应处于非工作态或不影响其他设备工作的稳定态。
  • 为了实现FPGA的在线升级,存放FPGA配置数据的区域必须是CPU可重写的
  • 利用CPU配置FPGA,在使用者的主观感觉上会觉得FPGA"起来"得比较慢。这是因为FPGA的配置要等CPU启动完成后才进行。因此,应充分考虑FPGA所控制的设备在FPGA被配置完成前处于非工作态或不影响其他设备工作的稳定态。
  • 关于配置数据占用空间的问题。对于Altera的FPGA来说,每个确定型号的器件,配置数据的长度是一定的(和设计逻辑无关)。因此,一旦确定了FPGA的型号,配置数据占用EPROM的空间也可以在设计中确定。
  • 在使用中请保留下载电缆插座,以加快调试进度。
  • 下载成功后,软件应有指示,便于维护。
  • 要从系统的角度考虑现场升级,保护好FPGA数据。
  • 单板调试时电缆下载的问题。为了兼容两种下载方式,需要电缆下载时,可在CPU程序中跳过配置程序。
  • 如果单板有可能使用电缆下载,必须考虑CPU的I/O能否忍受下载电缆信号电平
回复

使用道具 举报

发表于 2011-11-4 12:39 | 显示全部楼层
我以前打算这样做,版主这样试过了吗
回复

使用道具 举报

发表于 2011-12-15 17:59 | 显示全部楼层
altera的文档里面连代码都给了,8051汇编的,很短
回复

使用道具 举报

发表于 2013-1-21 13:31 | 显示全部楼层
http://pimg.163.com/club/newclub/images/PP0.gif我只是路过,不发表意见
; M/ o, s: _; ^. _: @# `8 w
8 P5 i* W9 G- }0 E" t7 ]
3 T) q; ^+ a: p+ u+ Z5 k7 n' v3 M5 R2 a8 {& O

' m- ^7 p# Y' G+ ~, F! k' \* _
4 l6 A& Q! y- K) N+ W; n2 P" Q/ L1 _8 U' I$ i  I# [

9 y( A  f3 a+ r" }; T1 E9 r- Y- w* f$ X. ?3 e

" C& d7 V- W: e$ W3 I; h2 y# T. _, B, U$ t7 O" i
, \, O6 I9 U. ~' q. S
4 Z( S; N4 ~" Y  _4 V
, P5 M) b5 _' ~* t9 q3 F/ i
5 [/ a9 u: W: f$ a  s! H) R; n/ s4 }
3 L8 f8 q9 ^& r2 V4 e6 c

; }, r" e" C$ m9 f0 s# H& a# u! [6 P( B" X/ ?4 q. l6 U, M# Q
) e, `7 i6 ^1 P8 V) x
( H* z& Q1 [( ^8 I6 E5 L4 b

8 V- Y. P5 K: r- Yhttp://qb.lqualyn.com/images/sigline.gif$ i2 q( p/ c% q# _$ J' [: A
孕妇如何防辐射
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-20 16:10 , Processed in 0.048396 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表