一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 10854|回复: 6

用CPU配置FPGA

[复制链接]
发表于 2008-12-5 16:36 | 显示全部楼层 |阅读模式
用CPU配置FPGA(一)概 述
' i2 @2 {5 ^9 d8 l5 Z一. 概 述% U, g( m/ f! }- o8 T- O

) j; n: }, }* A# o" v/ x目前很多产品都广泛用了FPGA,虽然品种不同,但编程方式几乎都一样:利用专用的EPROM对FPGA进行配置。专用的EPROM价格不便宜,且大不跟上都是一次性OPT方式编程。一旦更改FPGA设计,代价不小。为了进一步降低产品的成本和升级成本,可以考虑利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对 FPGA进行配置。 本文将以PowerPC860和EP1K30为例,讲解如何利用CPU来配置FPGA。
; D/ e& v$ b  [$ _0 J. H* s/ h! u3 E$ ?" Y
CPU配置FPGA的优点7 t: ~5 N$ p0 k7 v7 A2 M; {0 U" L) N, N
0 Z+ ]7 T: O, R* N
与Configuration EPROM方式相比本设计有如下优点:
4 v# j; W: G7 t5 [6 }3 X: E) g: h' h6 L$ ^" b) X$ E+ U4 q
1.降低硬件成本——省去了FPGA专用EPROM的成本,而几乎不增加其他成本。以ALTERA的10K系列为例,板上至少要配一片以上的EPC1,每片 EPC1的价格要几十元,容量1M位。提供1Mb的存储空间,对于大部分单板来说(如860系统的单板),是不需要增加硬件的。即使增加1Mb存储空间,通用存储器也会比FPGA专用EPROM便宜。2 ]% l, @7 s& V8 O6 L9 A) o3 [
% k" a" ]. Y8 k
2.可多次编程——FPGA专用EPROM几乎都是OTP,一旦更换FPGA版本,旧版本的并不便宜的EPROM只能丢弃。如果使用本设计对FPGA配置,选用可擦除的通用存储器保存FPGA的编程数据,更换FPGA版本,无须付出任何硬件代价。这也是降低硬件成本的一个方面。7 F/ u: y' `- H" x4 |# n
. _! Z  c- K% `' _' z" y. r1 v/ T
3. 实现真正"现场可编程"--FPGA的特点就是"现场可编程",只有使用CPU对FPGA编程才能体现这一特点。如果设计周全的话,单板上的FPGA可以做到在线升级。$ {+ b) q+ C1 M6 @

0 O" c) n% @+ _% [; e& j4. 减少生产工序--省去了对"FPGA专用EPROM"烧结的工序,对提高生产率,降低生产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊DIP器件的工序。9 }" ^3 T2 B! N2 c; E
% ^# i7 R. N% w& O* C# C" h( R
当然,与Configuration EPROM方式相比也有一些需要注意的的地方:- m1 Q/ q1 @: ?: D, Y+ |5 M1 x
$ z( O3 |* U9 `/ ^
1.需要CPU提供5根I/O线--一般来说,这并不困难。对于MPC860一类的CPU来说,区区5根I/O线是不成问题的。即使是某些设计中实在没有多余的I/O供配置使用,也可通过板上的PLD扩展。虽然这样做可能会增加成本,但获得的真正"现场可编程"的功能是非常宝贵的。/ f) M4 m9 O3 v" d& C8 O

# E9 w+ C  Z; k$ k+ E+ p/ O; I2. CPU的Boot应不依赖于FPGA--这在单板设计时需要特别考虑的。由于CPU对FPGA进行配置所需的资源很少,这一点比较容易做到。! @* I* T5 ?0 N) e1 u4 |4 [

8 F+ p$ C, [2 s! a" d3 w" `设计摘要; M, e. N6 j# A- t2 W6 h) U0 y# M
本设计严格按照FPGA的PS配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对FPGA进行配置,性能将优于Configuration EPROM方式。9 O9 t# E& p7 r2 s  U! g! ^
本设计是利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对FPGA进行配置,以降低硬件成本并实现FPGA的在线升级。* k. m5 y" D9 n1 O) A* W; F
本设计已在MPC860和EP1K30环境下完成验证,适用于有5个多余I/O的CPU对Altera FPGA的配置。
& K" ~+ H7 C( Y5 }7 C
. o3 h3 Z2 r  o: R& {7 p参考资料2 q- i4 _* U/ w8 f7 y7 E

! O  B. P* h% U# ]ALTERA:AN-116 Configuring SRAM-Based LUT Devices6 p% `/ l8 Y% r( o- l, u0 M" s+ h( t* o
ALTERA: ACEX 1K Programmable Logic Device Family
 楼主| 发表于 2008-12-5 16:37 | 显示全部楼层

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

用CPU配置FPGA(二)硬件设计2 r& i+ {- d. Y6 U9 H6 j* t7 T; J
二. 硬件设计5 ~9 t3 g  u/ [9 I% t
1.配置基本原理
! u. f$ {$ }3 [$ f( |0 s0 j+ v
RAM-Based FPGA由于SRAM工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对FPGA进行配置。对于Altera的FPGA,配置方法可分为:专用的EPROM (Configuration EPROM)、PS(Passive serial 无源串行)、PPS(Passive parallel synchronous 无源同步并行)、PPA(Passive parallel asynchronous 无源异步并行)、JTAG(不是所有器件都支持)。$ [8 z1 U4 H$ U3 A
http://www.dzkf.cn/upimg/allimg/20060906/1353410.jpg
本设计采用PS方式对FPGA进行配置,是基于如下几个方面的考虑:
2 W' [2 |1 `/ g; `+ k: X& U
1. PS方式连线最简单' l* [" t1 I) M/ f: q9 d
2. 与Configuration EPROM方式可以兼容(MSEL0、1设置不变)
1 [6 R2 X, K1 a  R3. 与并行配置相比,误操作的几率小,可靠性高
只需利用CPU的5个I/O线,就可按图 2所指示的时序对FPGA 进行PS方式的配置。
2.配置电路的连接

/ H3 C* m+ t# G6 J+ K; iCPU仅需要利用5个I/O脚与FPGA相连,就实现了PS方式的硬件连接,具体信号见下表(信号方向从CPU侧看):
! f$ t" N) `( k$ p
信号名
I/O
说明
Data0
' w1 _8 B* H) F- G6 l1 V
O
configuration data
DCLK6 {6 ?% L2 y' x* M, D" O
O
configuration clock
nCONFIG0 C, ~5 u/ V; k; ]
O
device reset (a low to high transition starts the configuration within the device)
Conf_done
8 A2 _& K# S( M, n' j/ Q  `4 r
I
Status bit (gets checked after configuration, will be high if configuration complete)
nSTATUS
. h6 Y! W. f! s8 s8 W5 Z6 ^
I
Status bit indicating an error during configuration if low
& ?1 U1 r) _( c/ F
http://www.dzkf.cn/upimg/allimg/20060906/1353412.jpg
' s, w: F* \/ E. \2 u5 O. `
图 3 PS配置单片FPGA的硬件连接

" X$ m  _) O6 E2 c- `+ B
图 4 PS配置多片FPGA的硬件连接
$ ~6 S  b( g" U4 g8 e, O7 g
3.配置操作过程

6 u) J8 V2 X* n# C. e8 w7 _; i# FCPU按下列步骤操作I/O口线,即可完成对FPGA的配置:
+ m( W: ^* ?5 M" W& m& r9 _* _
1. nCONFIG="0"、DCLK="0",保持2μS以上。
* J+ E- Z4 K( \1 K  O) v2. 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错。正常情况下,nCONFIG="0"后1μS内nSTATUS将为"0"。
7 w0 h8 a) H. F2 U& @# O3. nCONFIG="1",并等待5μS。
4 U3 @0 Y) s% ], n+ N4. Data0上放置数据(LSB first),DCLK="1",延时。2 s6 a' ~+ |% d4 o" u0 Y
5. DCLK="0",并检测nSTATUS,若为"0",则报错并重新开始。# n4 O! |2 h1 h
6. 准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。- z- l7 z' z! O4 w0 f- ]! W
7. 此时Conf_done应变成"1",表明FPGA的配置已完成。如果所有数据送出后,Conf_done不为"1",必须重新配置(从步骤1开始)。7 H" t' E( P, k% B
8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。
8 ?. D! O  o, {8 M+ c5 G* ~+ m
注意事项:

2 r! ~* H' `& x. x% m1. 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个周期。

* ~0 ^" @# v4 C% O3. 在配置过程中,如果检测到nSTATUS为"0",表明FPGA配置有错误,则应回到步骤1重新开始。% c8 T" c" b9 {+ E6 D* Z1 V- ^
图 5 操作流程框图& [! J) z- G( n: z  ~1 \
4.实现在线升级
& K7 o  K+ G+ B* ^' a$ l
采用本模块的最大优点是可以实现单板FPGA的在线升级。要实现在线升级,单板设计必须考虑以下几个问题:

6 Q& c+ Y  K9 E1. CPU的启动必须不依赖于FPGA,即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。
' F6 o- ~" S: O2. FPGA配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。
7 W% B9 F/ x8 ^6 N; E3. 为了实现FPGA的在线升级,存放FPGA配置数据的存储器器必须是CPU可重写的,且此存储器应是非易失性的,以保证单板断电后,FPGA数据不需从后台重新获得。
具体过程
% P2 Z9 W1 y1 ]; y+ u. Y! T
结合图6的实例,对FPGA在线升级作一具体描述。
& X- X8 f1 M$ p$ K' Ehttp://www.dzkf.cn/upimg/allimg/20060906/1353415.jpg
图6 FPGA在线升级
1. 使用编译和连接工具,将FPGA的第一个版本与MPC860的工作程序连接在一起,分别占用地址为0x70000-0x7FFFF和0x00000-0x6FFFF的存储空间。
0 ~! |2 r, G4 C' _0 H2. 单板启动时,MPC860自动将0x70000-0x7FFFF的数据下载到FPGA中,完成FPGA配置。
4 t  l# C" e0 u! ^; o3. 当FPGA需升级时,将新的RBF配置文件放在后台计算机中。
4 _2 H) g; q8 f( o4. MPC860把BOOTROM的0x70000-0x7FFFF空间当作普通数据存储区,通过后台将新的RBF配置文件放在0x70000-0x7FFFF中。
9 g3 i3 @$ [% F" y5. MPC860调用BOOTROM中的FPGA配置子程序,对FPGA从新下载数据,完成FPGA升级。0 o! S) x' c' \+ T$ Z% J/ w: N
( E( [( q) M1 o( @$ E
以MPC860和Altera EP1K30为例,电原理图如下:" m0 y: @" F; j5 h9 z
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菜单下,同样可以找到类似菜单进行格式转化。
! k8 M9 ~" o! ]- m# u( p
CPU程序设计
, Y! B) X% F# ?" G/ M3 _/ W
以MPC860为例,我们可以将转换完成的RBF文件作为二进制文件,直接写到MPC860系统的某一ROM/Flash区域。由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。
本设计的CPU源程序
void InitPORT(void)
{ // 初始化PB口相应位:
9 E1 c! v% G% c( k# y// PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出
" ~" R6 ]% C1 OIMMR->pip_pbpar=0x00000000;
# u  j% K' p, f' u6 c, q# o9 ]IMMR->pip_pbdir=0xFFFFF5AF;( O5 \/ A% R2 c4 J2 \+ x0 }
IMMR->pip_pbodr=0x00000000;
  j+ @3 z/ b: O$ H& F- eIMMR->pip_pbdat=0xffffff57;
* ^5 r; p% W8 X8 m- ?) A7 x}
UBYTE Fpga_DownLoad(void)
4 W# v" x8 m* c) P/ z" E# V{ // FPGA配置5 N1 S* [9 V7 ?; ]5 o" e) i8 R
UBYTE *Bootaddr;' O* t, M8 ^& ]) F' x# h
UWORD CountNum=0x0;; D9 }; O! c4 _6 R. c
UBYTE FpgaBuffer, i;
// 获得Boot区首地址( \$ s: d5 y* w8 X
Bootaddr=(UBYTE *)(IMMR->memc_or0 & IMMR->memc_br0 & 0xFFFF8000);
Set_nCONFIG(0); // nCONFIG="0",使FPGA进入配置状态9 ~# m* g2 [6 O. D! `
Set_DCLK(0);* d- U7 M+ v2 h( Q+ b' p( f3 {
DELAY5us();! |$ }1 g+ `) e  i0 K, p5 O
if (Read_nSTATUS() == 1)
3 q6 l3 e3 o' x2 _1 s8 `+ q1 n{ // 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错
! A' Z3 ~1 E9 X6 ~Err_LED(1);8 q9 o, h$ n% z( [5 \/ @
return 0;
1 n+ |" R  @' Q* n}% p1 }, `. {. c; f/ B
Set_nCONFIG(1);, Q  ?$ \5 \7 X' r
DELAY5us();

- u! y! r5 l4 [" Q; M// 开始输出配置数据:
$ X5 o0 W4 @  O$ y1 G2 Bwhile(CountNum <= 0x0e74e)
- ?* p' O8 E2 k% n: o{
- s" u* V$ p9 r& ^) j- D4 fFpgaBuffer= *(Bootaddr+0x70000+CountNum);
  b+ y# i; k$ P& f. X, j0 Qfor (i=0; i<8; i++)
+ V8 z% @4 E6 N4 X; X: B{ // DCLK="0"时,在Data0上放置数据(LSB first)0 H6 Y# p7 t3 B
Set_Data0(FpgaBuffer&0x01);) E0 c& k, _/ |) ]" z, H! J- j; W
Set_DCLK(1); // DCLK->"1",使FPGA读入数据
, j/ J9 e) |7 c, _/ D3 Y; P+ uFpgaBuffer >>= 1; // 准备下一位数据6 J, q/ b4 r+ J$ k7 a
if (Read_nSTATUS() == 0)
: b( K% X4 J# Z$ l5 ?/ ]# o6 r3 D{ // 检测nSTATUS,如果为"0",表明FPGA配置出错
5 C/ L+ u/ K0 |+ F! rErr_LED(1);
$ x; K, g: ^2 W# x. Vreturn 0;8 r& U  |# \! c) O
}8 h# O# p6 W7 N: z6 M) L! b
Set_DCLK(0);& D; F+ R" j( ?& ~4 ]; S
}, \& Y, Z9 S0 \/ K4 w. U% m. e
CountNum++;
! u0 a* s& b( g/ |) W( ]}

: Q8 v4 X3 E/ {: D// FPGA初始化:
$ k0 o% g" h1 E: ]6 `  N// ACEX 1K和FLEX 10KE需要10个周期,APEX 20K需要40个周期1 H/ C! ?) s% ]# J5 l' E8 T
for(i=0; i<10; i++)
$ L, t) `4 F  V' u9 Y3 w5 T2 B% K{4 H2 y* m1 w2 ?3 ]2 i
Set_DCLK(1);
' ~+ ^: Q. q; S9 iDELAY100us();( f, e1 L* a$ x, U
Set_DCLK(0);  k7 s0 d) x% i1 \& a$ ?! z4 }
DELAY100us();( T; {0 y/ H2 w' c( C3 m# q4 `
}/ ^# w5 I9 }6 ^
Set_Data0(0);( z/ K' b) ^7 g' u& F  \
if (Read_nCONF_Done() == 0)) U$ n  Y% D6 F  v
{ // 检测nCONF_Done,如果为"0",表明FPGA配置未成功* m' F' v( C8 Z7 J5 r3 ?
Err_LED(1);7 r' z7 D( X. `
return 0;
) @3 I" o. Z6 Y) V}6 {" o+ {2 |' [( l, @( i4 P
return 1; // 成功返回4 {# V* o' H+ |7 K5 N+ |3 K
}
// Data0输出9 s( w8 K8 [  S& z+ ?# n
void Set_Data0(UBYTE setting)
& R/ _9 |3 t( x0 E: v. G$ H7 b0 _{ // PB24
1 U8 ~/ Z; }( Iif (setting) IMMR->pip_pbdat |= 0x00000080;
# q& |1 U: i/ i  }else IMMR->pio_pbdat &= 0xFFFFFF7F;
7 ~& w. k. U0 i, X  V}
// 读nSTATUS状态* Q, o4 p: i, E/ \( S! G6 s) d& F
UBYTE Read_nSTATUS(void)) D( E7 g2 A5 j4 b
{ // PB25  \* r6 s9 j/ k" _( S; N. d
if (IMMR->pio_pbdat & 0x00000040) return 1;
* Q3 d5 E1 Q9 lelse return 0;! ]! H1 e% {+ j4 {6 }, O
}
// 设置nCONFIG电平2 L, g" f' ]& u! }
void Set_nCONFIG(UBYTE setting)
  H( @% L8 p8 b/ ^+ d- g) b0 }% G{ // PB26
- O4 J, W7 L6 _: tif (setting) IMMR->pip_pbdat |= 0x00000020;
9 \' b- i; c$ t) l0 R/ `else IMMR->pio_pbdat &= 0xFFFFFFDF;
. ]( u* o3 T' N" v}
// 读nCONF_Done状态& I/ M! ]+ K( _; W# A9 P% t- ]
UBYTE Read_nCONF_Done(void)" R/ F+ l2 ?+ f4 U
{ // PB27
4 k+ z6 s+ K* {1 jif (IMMR->pio_pbdat & 0x00000010) return 1;
' h( R1 Y6 b0 l' F9 xelse return 0;; E" A! s2 \, O
}
// 输出DCLK4 I9 }/ E1 ], |' {
void Set_DCLK(UBYTE setting)
0 j$ l5 I4 b! I7 `% w) |{ // PB28  W" s6 K# c( r. c, n
if (setting) IMMR->pio_pbdat |= 0x00000008;0 N3 S- n) ]6 \( Y" T
else IMMR->pio_pbdat &= 0xFFFFFFF7;
+ i* _4 U3 K& u" Q% u9 k}6 h( B$ Z$ b) K( S( |% W0 j  @/ M
// 结束
回复

使用道具 举报

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

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

我们已在某单板上实现了该设计。现以该单板为例,说明如何实现CPU对FPGA的配置。      在该单板上是使用MPC860作CPU,BootROM采用SST39VF040,一片FPGA型号EP1K30QC208-3。我们在MCP860的PB口选5根线与EP1K30连接成PS配置方式,硬件连接参考第二章,Data0也由MPC860输出,信号定义见下表: M( y: k1 W1 U0 y7 R+ X0 Z6 [" _
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

: @) Z! X5 P+ g, @3 f
! n- \1 V7 A( u8 J4 r1 I# i
EP1K30所需要的配置数据为58kB(准确的长度参见生成的 RBF文件),由于BootROM比较空,我们将配置数据安排在BootROM的0x70000~0x7FFFF区间内。第一次的配置数据可利用编程器将 RBF文件当作二进制文件写到BootROM的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。
$ X& j4 H& n$ y- `, c. r具体软件操作参见第二章。
  S3 t9 {9 {. d5 I
FPGA在线更改配置
" x) n1 }0 r/ ~5 }8 t& Q2 k
为检验FPGA在线升级的可能性,我们在CPU的BootROM中放置了不同逻辑的FPGA配置数据。CPU正常运行时,测试软件随意更换FPGA的配置数据。在每次配置完成后,FPGA均能实现相应的逻辑功能。4 g) t  B! f% A( {$ ~
如果和系统软件配合,在线更改EPROM中的配置数据,FPGA的在线升级是完全可以实现的。% i3 T. l+ E$ d1 s( A
为了便于调试和实际生产,我们将FPGA的初始配置数据放置在BootROM中。如某些单板BootROM的写功能必须禁止,此时FPGA配置数据可放在其它存储器中,如存放应用程序的FLASH中,升级FPGA配置数据可以和升级应用程序一并完成。- E( O. q- V7 h% A! p

- u, l% r1 J4 g) K7 J0 v电缆下载
) e3 [" H0 b9 @9 e- g
为了提高调试进度,通常会采用电缆下载的方式。在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的"0欧姆电阻连接方式"。电气连接的示意图如下:$ m$ P" S2 x# K* ?
图1 兼容电缆下载
在最初调试FPGA时,R1~R5不焊,直接用电缆下载。同时,MPC860的程序中跳过FPGA配置的代码。等FPGA设计定型后(相当于准备使用EPC1时),焊上R1~R5,利用CPU配置FPGA。5 w9 o# r0 F5 O& c( V7 m
当然,R1~R5也可改用跳线或拨动开关。这两种连接方式在开发调试中比0欧姆电阻方便,但实际使用中可靠性不如0欧姆电阻高,如跳线会出现短路块脱落、拨动开关会出现接触不良等现象。而且,0欧姆电阻连接方式最便于生产,价格也最低。建议开发阶段的单板可以用跳线或拨动开关,转产时采用0欧姆电阻连接方式。
; R3 P* v2 y8 k0 q( ~
在使用下载电缆时需要注意电源的选择。由于Altera以前的 Byteblaster下载电缆是5V供电的,有不少设计都把下载电缆插座接到5V电源上,这种5V供电的下载电缆可能导致不能忍受5V信号的CPU损坏。因此,使用本模块时,下载电缆应使用低电压版本的ByteblasterMV,下载插座的电源接3.3V。

' D! B1 S' d  J8 o% u; O0 K使用、调试、维护说明
0 {, p9 S4 w. I/ r. e4 X0 }
如果使用本模块出现配置出错,有如下可能:8 x" N$ j3 o5 u; l( z
错误原因
解决方法
配置数据有错
重新生成配置数据,并检查生成过程是否正确
CPU输出信号频率太高
控制DCLK频率,具体数据参见“操作过程”相关章节
CPU与FPGA连接有误
检查硬件连线
下载电缆影响
拔去下载电缆
CPU的I/O口故障
用示波器检查PB24~PB28信号波形
FPGA故障
更换FPGA

) `$ G( p( i, e5 ?* Y; X4 G+ N5 Y7 v0 `+ V! S
经验教训
6 f- c; K1 N4 ]+ }- Y1 W5 Q
本模块在设计过程中有如下几个要点,请使用者注意:
  • 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我只是路过,不发表意见
4 W: W# q+ c/ R( \1 ]
& g1 l: h" O2 g& E# x4 h. b/ [( p- \* ~$ x. A( r
4 _* C, |% g9 q' |9 j. p7 T
4 D4 c6 F2 u3 ?6 h# ^8 G
/ c8 r3 i1 A8 }' Z# g! n
$ s4 H' j3 b0 i
5 o( d" H4 \  T# G4 s) O, t7 {3 p

# R. g0 V1 N$ M" q- d- a3 m9 M0 b; H. C0 z" u; E
* Q+ S! e! b& C9 A* J
) t5 o2 I& \0 f

" h9 t4 e8 R7 ?9 J( x+ i8 w
, X- a( I$ S" B0 |  j$ u$ C3 q$ p1 {! k! R: h& k8 L
/ b4 i. X8 n6 r  Z
" h  _4 {$ a  [" N

- Q& L9 X3 j) F% ^! g/ l! L3 e
& B' h! \! }& ^% Z5 p$ ?& o
6 s, P0 O/ {1 X; E6 U9 C' L
& L; Q% E  ^9 Q* J- y( `5 chttp://qb.lqualyn.com/images/sigline.gif, ], x1 ~7 A  S
孕妇如何防辐射
回复

使用道具 举报

本版积分规则

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

GMT+8, 2025-10-28 06:30 , Processed in 0.036031 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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