一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 11199|回复: 6

用CPU配置FPGA

[复制链接]
发表于 2008-12-5 16:36 | 显示全部楼层 |阅读模式
用CPU配置FPGA(一)概 述
, W- c4 O' L" `% M- T+ r0 }5 Q" M一. 概 述  {3 P! v: b  @  i6 \
4 B7 s7 @- L( [! D6 ], e. E
目前很多产品都广泛用了FPGA,虽然品种不同,但编程方式几乎都一样:利用专用的EPROM对FPGA进行配置。专用的EPROM价格不便宜,且大不跟上都是一次性OPT方式编程。一旦更改FPGA设计,代价不小。为了进一步降低产品的成本和升级成本,可以考虑利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对 FPGA进行配置。 本文将以PowerPC860和EP1K30为例,讲解如何利用CPU来配置FPGA。9 P( r& N) g7 T! E$ f4 D$ ?- F; Z

+ I/ R4 v7 P: g- g6 f) M' NCPU配置FPGA的优点. E: X- x, `/ B8 D5 L
( Y" V' c  Z0 V6 C! ?7 b' k
与Configuration EPROM方式相比本设计有如下优点:
" d9 Q3 H$ C4 P. @6 S, S/ o. U& B8 j2 ^! a0 j+ @! ?
1.降低硬件成本——省去了FPGA专用EPROM的成本,而几乎不增加其他成本。以ALTERA的10K系列为例,板上至少要配一片以上的EPC1,每片 EPC1的价格要几十元,容量1M位。提供1Mb的存储空间,对于大部分单板来说(如860系统的单板),是不需要增加硬件的。即使增加1Mb存储空间,通用存储器也会比FPGA专用EPROM便宜。2 y) w, L( T/ G/ H

% C+ L5 |3 ?1 C/ h* N9 l2.可多次编程——FPGA专用EPROM几乎都是OTP,一旦更换FPGA版本,旧版本的并不便宜的EPROM只能丢弃。如果使用本设计对FPGA配置,选用可擦除的通用存储器保存FPGA的编程数据,更换FPGA版本,无须付出任何硬件代价。这也是降低硬件成本的一个方面。9 Q4 b  Z' Y. R+ f* ]9 f1 Z1 q

; H8 P+ @. z9 c0 g* f' `" v6 k' m3. 实现真正"现场可编程"--FPGA的特点就是"现场可编程",只有使用CPU对FPGA编程才能体现这一特点。如果设计周全的话,单板上的FPGA可以做到在线升级。) K6 S% o& i, x: u3 d
1 F6 |  u0 O' E" J8 n' `
4. 减少生产工序--省去了对"FPGA专用EPROM"烧结的工序,对提高生产率,降低生产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊DIP器件的工序。# Q$ C' C; o* N; H) N( ?8 m

- `2 x  J" U# b当然,与Configuration EPROM方式相比也有一些需要注意的的地方:
5 Q; L) N: X/ }5 u" l% H& V+ o' \$ q& Q$ W
1.需要CPU提供5根I/O线--一般来说,这并不困难。对于MPC860一类的CPU来说,区区5根I/O线是不成问题的。即使是某些设计中实在没有多余的I/O供配置使用,也可通过板上的PLD扩展。虽然这样做可能会增加成本,但获得的真正"现场可编程"的功能是非常宝贵的。
! L: u# o  A" \; E* B. i9 s0 [/ _# b. z( X# H
2. CPU的Boot应不依赖于FPGA--这在单板设计时需要特别考虑的。由于CPU对FPGA进行配置所需的资源很少,这一点比较容易做到。
% ?  U" J" T2 w* f
: [( f' H: U: b# H) E设计摘要' T5 O& ]. {9 P1 L
本设计严格按照FPGA的PS配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对FPGA进行配置,性能将优于Configuration EPROM方式。
$ N3 e) e( ^- f- j0 j本设计是利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对FPGA进行配置,以降低硬件成本并实现FPGA的在线升级。) ?+ [/ A, C5 o% t/ Z6 x4 s
本设计已在MPC860和EP1K30环境下完成验证,适用于有5个多余I/O的CPU对Altera FPGA的配置。: c- a" L& |. m7 z

0 X. N$ R0 N* C- a8 O- T参考资料
6 y; w( q* ^2 o+ W% ~3 q/ o4 v1 ^" v2 G3 Y% ^& t! G3 X
ALTERA:AN-116 Configuring SRAM-Based LUT Devices
" T3 R: ~" Y' x: r1 @& W4 G+ AALTERA: ACEX 1K Programmable Logic Device Family
 楼主| 发表于 2008-12-5 16:37 | 显示全部楼层

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

用CPU配置FPGA(二)硬件设计( S+ W! J. }7 h' `3 ?9 C
二. 硬件设计
% j: Y$ s7 ]$ h8 R5 ?, l
1.配置基本原理

5 e% P) {& B7 p3 {RAM-Based FPGA由于SRAM工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对FPGA进行配置。对于Altera的FPGA,配置方法可分为:专用的EPROM (Configuration EPROM)、PS(Passive serial 无源串行)、PPS(Passive parallel synchronous 无源同步并行)、PPA(Passive parallel asynchronous 无源异步并行)、JTAG(不是所有器件都支持)。6 Q6 ?) y# @- A9 l) m
http://www.dzkf.cn/upimg/allimg/20060906/1353410.jpg
本设计采用PS方式对FPGA进行配置,是基于如下几个方面的考虑:

! e& ?2 y: D4 H% ?- T1. PS方式连线最简单
5 f4 x. x1 l' }" E# ^2. 与Configuration EPROM方式可以兼容(MSEL0、1设置不变)
9 V2 R" y1 T  ]* ^0 F' X8 X3. 与并行配置相比,误操作的几率小,可靠性高
只需利用CPU的5个I/O线,就可按图 2所指示的时序对FPGA 进行PS方式的配置。
2.配置电路的连接
! S) {( E( y3 C
CPU仅需要利用5个I/O脚与FPGA相连,就实现了PS方式的硬件连接,具体信号见下表(信号方向从CPU侧看):

9 W9 \4 v6 V  I3 I
信号名
I/O
说明
Data0
+ q+ Z0 d, N6 W3 j9 j4 S9 \, t
O
configuration data
DCLK* }9 S: d, Z; J+ A4 a" \4 d
O
configuration clock
nCONFIG# _* |5 Z! q% A
O
device reset (a low to high transition starts the configuration within the device)
Conf_done
+ u, ]4 ^) C% g  _! \2 r# i
I
Status bit (gets checked after configuration, will be high if configuration complete)
nSTATUS- ^7 W* j2 R/ ^
I
Status bit indicating an error during configuration if low

1 F1 L  m9 Z: A5 h6 ~8 P5 V9 l, Ehttp://www.dzkf.cn/upimg/allimg/20060906/1353412.jpg" o# |3 R+ k4 D3 @- V, ?2 E. T
图 3 PS配置单片FPGA的硬件连接
0 f8 f( L$ W' {  I' [0 k6 @! W
图 4 PS配置多片FPGA的硬件连接

$ w; T& Y( d! t# l2 g9 r/ Q/ N9 q! Y3 ?
3.配置操作过程
1 j6 I( g7 X: p, @& Y6 y: |
CPU按下列步骤操作I/O口线,即可完成对FPGA的配置:

) `' K. }5 W' C8 I% O  g) S  Q) T1. nCONFIG="0"、DCLK="0",保持2μS以上。& j& L1 j: i8 ^, g
2. 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错。正常情况下,nCONFIG="0"后1μS内nSTATUS将为"0"。1 D7 y: s" l1 y9 o* c7 |
3. nCONFIG="1",并等待5μS。( f% Q5 F7 v$ E) B8 V
4. Data0上放置数据(LSB first),DCLK="1",延时。6 A2 A. ~0 z/ l2 ]' V
5. DCLK="0",并检测nSTATUS,若为"0",则报错并重新开始。
+ w  a' O( O0 w) G6. 准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。
, C6 B- h6 _+ U4 k: ]7. 此时Conf_done应变成"1",表明FPGA的配置已完成。如果所有数据送出后,Conf_done不为"1",必须重新配置(从步骤1开始)。
8 c, l, G  M9 W- H! F" f3 y8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。
( ]2 r: {# x, Z$ l0 r
注意事项:

& T# H" p7 i# g0 \' |* y# r: _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个周期。
# i$ n% m4 v' m6 Z! f  o" ~
3. 在配置过程中,如果检测到nSTATUS为"0",表明FPGA配置有错误,则应回到步骤1重新开始。/ s$ Q7 r6 Z9 K/ r/ K, p
图 5 操作流程框图5 l; U" [& x8 x0 e9 h0 J# G
4.实现在线升级
" Z) {6 \( \3 ~, `
采用本模块的最大优点是可以实现单板FPGA的在线升级。要实现在线升级,单板设计必须考虑以下几个问题:
  v, A. p' R6 u3 c# M! ]
1. CPU的启动必须不依赖于FPGA,即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。$ R0 F( L0 p. t+ B
2. FPGA配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。) u9 A. p. G' @9 o$ ^2 z
3. 为了实现FPGA的在线升级,存放FPGA配置数据的存储器器必须是CPU可重写的,且此存储器应是非易失性的,以保证单板断电后,FPGA数据不需从后台重新获得。
具体过程

' ^) X3 f, U8 U& ?结合图6的实例,对FPGA在线升级作一具体描述。) V0 z3 [7 ]9 k! e" E+ Z8 Z, ]
http://www.dzkf.cn/upimg/allimg/20060906/1353415.jpg
图6 FPGA在线升级
1. 使用编译和连接工具,将FPGA的第一个版本与MPC860的工作程序连接在一起,分别占用地址为0x70000-0x7FFFF和0x00000-0x6FFFF的存储空间。
7 A6 g! C$ [, P7 t2. 单板启动时,MPC860自动将0x70000-0x7FFFF的数据下载到FPGA中,完成FPGA配置。# {( _4 w1 ?% j; j; {) \) E: L
3. 当FPGA需升级时,将新的RBF配置文件放在后台计算机中。0 x/ k4 G3 e: H' q3 ~2 F
4. MPC860把BOOTROM的0x70000-0x7FFFF空间当作普通数据存储区,通过后台将新的RBF配置文件放在0x70000-0x7FFFF中。' [9 F5 |! r  P# J+ {( N
5. MPC860调用BOOTROM中的FPGA配置子程序,对FPGA从新下载数据,完成FPGA升级。; q& _3 A2 H, }& ]

' N3 t5 Q4 u8 s以MPC860和Altera EP1K30为例,电原理图如下:, T8 v1 a$ \8 s- C' |" W. q( A+ e
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菜单下,同样可以找到类似菜单进行格式转化。

( O4 v% F( n( a+ f6 {: Q
CPU程序设计
' F6 _1 o) O% [( v- d5 Z
以MPC860为例,我们可以将转换完成的RBF文件作为二进制文件,直接写到MPC860系统的某一ROM/Flash区域。由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。
本设计的CPU源程序
void InitPORT(void)
{ // 初始化PB口相应位:
5 V! Q  K* j) c- s8 [$ {$ `// PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出
& F6 w9 d, N% f8 b- j. yIMMR->pip_pbpar=0x00000000;
, I; F- a: p' c: a* o5 CIMMR->pip_pbdir=0xFFFFF5AF;3 |3 W8 E( E4 y: u+ R
IMMR->pip_pbodr=0x00000000;
, K4 ?# x/ I3 i  u* [" Q8 e+ M+ D! yIMMR->pip_pbdat=0xffffff57;( `8 ~# B7 s3 l. k& i
}
UBYTE Fpga_DownLoad(void)
1 i4 d5 J! q% |# v; L{ // FPGA配置
( f- r9 P6 y7 r$ J0 @- fUBYTE *Bootaddr;" `% ^% `. a7 P0 e/ ]: s
UWORD CountNum=0x0;
# x8 y  X! j, ~) F: W; mUBYTE FpgaBuffer, i;
// 获得Boot区首地址8 c4 I: Z2 [; C5 m0 R
Bootaddr=(UBYTE *)(IMMR->memc_or0 & IMMR->memc_br0 & 0xFFFF8000);
Set_nCONFIG(0); // nCONFIG="0",使FPGA进入配置状态
  N0 N0 Y4 C6 q$ l7 xSet_DCLK(0);4 N& z* |5 R8 E; j% L
DELAY5us();) R% F9 K7 F  E! W: T. B
if (Read_nSTATUS() == 1). l) j& M* \9 c: G
{ // 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错! I7 ]& V- F# l) K3 k7 K( X
Err_LED(1);
; |/ w7 ?" |& T/ {$ |return 0;+ A1 l; \1 h' E& t/ [
}
( L6 z  o% g5 r: F$ A4 ^" N  |5 H' nSet_nCONFIG(1);
; s, x" v$ q$ {. ~% `" y( J( WDELAY5us();

: g2 q3 ^  Y1 V// 开始输出配置数据:: V! e- q8 g5 G7 v
while(CountNum <= 0x0e74e)
3 L( K1 K, z1 y{
7 I% F0 T9 W6 T+ G" z$ f' }+ z/ K1 pFpgaBuffer= *(Bootaddr+0x70000+CountNum);
, p% R9 \, X- mfor (i=0; i<8; i++)
: Y8 Y3 f7 B% }( ^$ O{ // DCLK="0"时,在Data0上放置数据(LSB first)
! ~5 B  r- P' l. `8 ?( `Set_Data0(FpgaBuffer&0x01);) m2 b! d7 J) v2 z7 M8 Q* r
Set_DCLK(1); // DCLK->"1",使FPGA读入数据: b( q1 P1 ~) A% W9 ^8 v
FpgaBuffer >>= 1; // 准备下一位数据
" P' U* \/ [+ _, u# s8 w" H+ iif (Read_nSTATUS() == 0)
1 [  K& Q. c; A& [4 L{ // 检测nSTATUS,如果为"0",表明FPGA配置出错 0 m0 V* [7 M% |9 P9 ]
Err_LED(1);; s5 N/ d( U7 @' x4 i
return 0;
5 N2 s' L: ^  x, j. S# Q}
$ j* _  L! Z1 a. g1 TSet_DCLK(0);
1 o" _# J  _" f, \( ^% j' O}: G  n* P# b/ U  f& u; D* u5 M
CountNum++;
* v9 Y8 m6 N" K, Y}
8 }7 \8 `: Q! Z* }* J' Z8 W
// FPGA初始化:3 d  |" c. |) e1 @8 |& w
// ACEX 1K和FLEX 10KE需要10个周期,APEX 20K需要40个周期
0 }) C) l2 O; ~/ J, T7 Rfor(i=0; i<10; i++)6 [2 }: P! O5 a5 n  Z
{  @4 W+ [  C' {- \) k
Set_DCLK(1);- |' }1 E7 U" S
DELAY100us();
8 v% _: k/ o' d, F& C& K. \Set_DCLK(0);4 @$ N0 M- H8 u$ i# ~
DELAY100us();
- s* w. E- `) h; ^/ a}5 U( B4 p/ @5 u
Set_Data0(0);! V+ [5 y/ I9 U2 r3 [
if (Read_nCONF_Done() == 0)+ J# m. u6 n9 l4 j. c- Q
{ // 检测nCONF_Done,如果为"0",表明FPGA配置未成功! y- ~7 S3 d+ ^; W
Err_LED(1);* G2 q) Q# F7 n# U% p
return 0;
+ f& f/ d9 q8 ~) f% |  E) t5 l}  Q& |6 z0 t/ p  @" `& v8 x1 u
return 1; // 成功返回
0 Q! f6 {' _& B2 A/ |# s' L( H}
// Data0输出. }$ g$ A* X0 ^
void Set_Data0(UBYTE setting)
) v0 w1 ?% |! @' K+ I) O. Y{ // PB245 p$ ?1 W2 x" _6 {
if (setting) IMMR->pip_pbdat |= 0x00000080;. U6 A- C* U6 r1 T
else IMMR->pio_pbdat &= 0xFFFFFF7F;) A* o) [0 k. v0 D
}
// 读nSTATUS状态: U  K) e! ]% P/ s: V6 j, }5 ?
UBYTE Read_nSTATUS(void)
! m0 S+ s4 _: ^9 T1 s" Q{ // PB25
" n& V8 S9 s; |' `2 h1 s! Z2 rif (IMMR->pio_pbdat & 0x00000040) return 1;6 L" L5 @, ^. p$ s1 Z2 \* `- L# U8 Y
else return 0;2 Z6 k1 v: c( f1 D9 r; O" W
}
// 设置nCONFIG电平
( G. I4 c4 q0 S  y5 qvoid Set_nCONFIG(UBYTE setting)
" T3 [. l% Y% h# `$ k{ // PB26
4 m; }5 c. C: X7 H/ R- N) hif (setting) IMMR->pip_pbdat |= 0x00000020;
1 G" p- t5 z9 selse IMMR->pio_pbdat &= 0xFFFFFFDF;
( w, c: Y1 t. M% P5 w5 Z- G}
// 读nCONF_Done状态( k- q3 B! g1 g! ?, i* L# t* \
UBYTE Read_nCONF_Done(void)
+ r* k4 S2 ?6 w  V" {9 \" v{ // PB27+ E/ M1 r  }. ^
if (IMMR->pio_pbdat & 0x00000010) return 1;3 S1 h" N! W" Q3 e6 s8 R% D
else return 0;
& P) U; X, j4 Z' n7 W, O! i}
// 输出DCLK
. q5 J6 A7 X- x" t6 T) ~void Set_DCLK(UBYTE setting)' y" k" L1 ]$ C. W8 Y
{ // PB28- Z# G+ K: |2 v; ~$ H' e' l3 j( \
if (setting) IMMR->pio_pbdat |= 0x00000008;
$ j3 [* w$ H& S/ N7 X4 R: B2 Ielse IMMR->pio_pbdat &= 0xFFFFFFF7;
2 r; S( d5 u; U& F' Z}
0 }& J- e; c) U// 结束
回复

使用道具 举报

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

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

我们已在某单板上实现了该设计。现以该单板为例,说明如何实现CPU对FPGA的配置。      在该单板上是使用MPC860作CPU,BootROM采用SST39VF040,一片FPGA型号EP1K30QC208-3。我们在MCP860的PB口选5根线与EP1K30连接成PS配置方式,硬件连接参考第二章,Data0也由MPC860输出,信号定义见下表
2 N& o  R: u0 e+ u7 U7 {
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
6 Y. W4 c; m3 n8 {4 N

  I/ D! i$ i7 [; BEP1K30所需要的配置数据为58kB(准确的长度参见生成的 RBF文件),由于BootROM比较空,我们将配置数据安排在BootROM的0x70000~0x7FFFF区间内。第一次的配置数据可利用编程器将 RBF文件当作二进制文件写到BootROM的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。
: |% E, y2 r. h. n具体软件操作参见第二章。
4 r6 s# A  O# X; M/ g
FPGA在线更改配置

, V$ U8 x$ c% B) u) y9 y为检验FPGA在线升级的可能性,我们在CPU的BootROM中放置了不同逻辑的FPGA配置数据。CPU正常运行时,测试软件随意更换FPGA的配置数据。在每次配置完成后,FPGA均能实现相应的逻辑功能。( m; Z  P1 _1 i9 [/ a2 }& i
如果和系统软件配合,在线更改EPROM中的配置数据,FPGA的在线升级是完全可以实现的。6 `+ e* M% ?0 y1 {4 j5 x
为了便于调试和实际生产,我们将FPGA的初始配置数据放置在BootROM中。如某些单板BootROM的写功能必须禁止,此时FPGA配置数据可放在其它存储器中,如存放应用程序的FLASH中,升级FPGA配置数据可以和升级应用程序一并完成。
$ {  J( Q2 g  ~
$ U# K; c7 w, U% O6 w1 L& ?6 P, z
电缆下载
" \5 c2 ]2 ^$ D6 o
为了提高调试进度,通常会采用电缆下载的方式。在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的"0欧姆电阻连接方式"。电气连接的示意图如下:% S- {8 C) }5 `; z4 o+ ~8 |
图1 兼容电缆下载
在最初调试FPGA时,R1~R5不焊,直接用电缆下载。同时,MPC860的程序中跳过FPGA配置的代码。等FPGA设计定型后(相当于准备使用EPC1时),焊上R1~R5,利用CPU配置FPGA。
6 R2 y: r( F9 R% P2 N当然,R1~R5也可改用跳线或拨动开关。这两种连接方式在开发调试中比0欧姆电阻方便,但实际使用中可靠性不如0欧姆电阻高,如跳线会出现短路块脱落、拨动开关会出现接触不良等现象。而且,0欧姆电阻连接方式最便于生产,价格也最低。建议开发阶段的单板可以用跳线或拨动开关,转产时采用0欧姆电阻连接方式。

; N+ T, i6 |5 T1 ^; Y; }在使用下载电缆时需要注意电源的选择。由于Altera以前的 Byteblaster下载电缆是5V供电的,有不少设计都把下载电缆插座接到5V电源上,这种5V供电的下载电缆可能导致不能忍受5V信号的CPU损坏。因此,使用本模块时,下载电缆应使用低电压版本的ByteblasterMV,下载插座的电源接3.3V。

. @( }7 b5 L) e0 o1 j使用、调试、维护说明

0 G. J* T2 _2 z7 N( t/ j如果使用本模块出现配置出错,有如下可能:( A1 h# t% e" C; |3 U+ b7 j
错误原因
解决方法
配置数据有错
重新生成配置数据,并检查生成过程是否正确
CPU输出信号频率太高
控制DCLK频率,具体数据参见“操作过程”相关章节
CPU与FPGA连接有误
检查硬件连线
下载电缆影响
拔去下载电缆
CPU的I/O口故障
用示波器检查PB24~PB28信号波形
FPGA故障
更换FPGA

  o* K9 s4 r" u
! |+ {7 i) O2 H& C9 O- s. {; D
经验教训

  ?: ^8 u* ^! ?! V本模块在设计过程中有如下几个要点,请使用者注意:
  • 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我只是路过,不发表意见- c9 A7 T& |% Q% y: X

6 b( E; B4 }: a5 A$ a" P3 B* `1 m# d, c
( c& B2 w" M6 S; b8 ]

4 e0 P* K" V) j$ j5 q- y) j6 s
1 w7 O' m) D0 ~  B+ g- b7 p5 }; C* N: Q' _! ^
% K9 a; f) ?% e& k. T8 s; T8 }3 k
) Z7 s/ d" h" K7 I2 A

7 D0 E2 ?* w5 N( n. c, v: e2 P' W. F7 i# ]
1 [- o9 _6 M% e' S# F& x

8 e- H9 d9 ]% o0 z* C# ?  W6 W8 Q  b, M1 [0 k+ z4 @- o8 b; n1 R$ E

3 j; o2 E9 |( |3 [% g, x2 N! Q! U7 e# o" _- w5 `% x% ^

9 e, k+ e1 F( I) u6 y6 k5 I
  F+ y, m1 E7 n& F1 X. q
: \2 H% I9 N1 F2 t: R+ f' {6 N
1 b3 M, n) a5 c2 h* t+ d2 E& _" A3 B1 ]3 \( B. d* b4 k: j
http://qb.lqualyn.com/images/sigline.gif
( v8 \% Z% o/ b% W孕妇如何防辐射
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-2-25 15:09 , Processed in 0.036954 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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