一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 10646|回复: 6

用CPU配置FPGA

[复制链接]
发表于 2008-12-5 16:36 | 显示全部楼层 |阅读模式
用CPU配置FPGA(一)概 述% x- ?6 I$ E7 B; P4 R- R
一. 概 述& M/ \, M- E* j) ?

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

8 N( k  Q  f; s# v; S4 f: L8 |4. 减少生产工序--省去了对"FPGA专用EPROM"烧结的工序,对提高生产率,降低生产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊DIP器件的工序。
2 _2 ~9 \* y6 O7 }
# c6 U0 m- q. Z8 R. w% n3 \" c: |7 g' U当然,与Configuration EPROM方式相比也有一些需要注意的的地方:
3 A4 d) e5 {- W6 j# Q4 B; _1 k; {2 b7 S7 K
1.需要CPU提供5根I/O线--一般来说,这并不困难。对于MPC860一类的CPU来说,区区5根I/O线是不成问题的。即使是某些设计中实在没有多余的I/O供配置使用,也可通过板上的PLD扩展。虽然这样做可能会增加成本,但获得的真正"现场可编程"的功能是非常宝贵的。& J  ?* v4 K0 y' m' R# c

& E9 K4 F* C2 _! F! z" z+ O" Y2. CPU的Boot应不依赖于FPGA--这在单板设计时需要特别考虑的。由于CPU对FPGA进行配置所需的资源很少,这一点比较容易做到。
- R- ~$ l6 c3 `$ p8 @1 N4 c$ j3 P; J! W; E9 h3 L" ~
设计摘要% D; Y! j4 U; Z% o& m1 x
本设计严格按照FPGA的PS配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对FPGA进行配置,性能将优于Configuration EPROM方式。
7 F2 \* t7 r2 w4 ^本设计是利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对FPGA进行配置,以降低硬件成本并实现FPGA的在线升级。8 d3 r. J7 ^; T
本设计已在MPC860和EP1K30环境下完成验证,适用于有5个多余I/O的CPU对Altera FPGA的配置。! ], {! |+ S+ \8 a( H/ P

" ~0 d& z; ~$ F4 l# {参考资料" g( B" y& x6 h' z

/ H, J3 h: y5 Q8 e* ?ALTERA:AN-116 Configuring SRAM-Based LUT Devices6 Y+ p" K  `! R" n4 f  S/ V7 b9 ^/ y
ALTERA: ACEX 1K Programmable Logic Device Family
 楼主| 发表于 2008-12-5 16:37 | 显示全部楼层

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

用CPU配置FPGA(二)硬件设计
9 d+ z4 A6 v7 R; W  \) D2 x) ?6 J* x 二. 硬件设计. L& a- u# z! A
1.配置基本原理
1 R7 @# y/ R  @, s6 X/ C- _
RAM-Based FPGA由于SRAM工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对FPGA进行配置。对于Altera的FPGA,配置方法可分为:专用的EPROM (Configuration EPROM)、PS(Passive serial 无源串行)、PPS(Passive parallel synchronous 无源同步并行)、PPA(Passive parallel asynchronous 无源异步并行)、JTAG(不是所有器件都支持)。
5 I6 T9 _3 v9 l2 v; Y, J% [  v+ Ghttp://www.dzkf.cn/upimg/allimg/20060906/1353410.jpg
本设计采用PS方式对FPGA进行配置,是基于如下几个方面的考虑:
) t6 Z0 f, C) y4 @8 x2 J* w
1. PS方式连线最简单
- u3 c6 l) Z' e2. 与Configuration EPROM方式可以兼容(MSEL0、1设置不变)
& P- @9 `# Y% h; ?% g3. 与并行配置相比,误操作的几率小,可靠性高
只需利用CPU的5个I/O线,就可按图 2所指示的时序对FPGA 进行PS方式的配置。
2.配置电路的连接

+ h$ ~! S# m$ F5 l5 R# BCPU仅需要利用5个I/O脚与FPGA相连,就实现了PS方式的硬件连接,具体信号见下表(信号方向从CPU侧看):

: J9 L" v; `! g' M8 u
信号名
I/O
说明
Data0
3 x' O; r6 e7 X6 R; }
O
configuration data
DCLK$ v% ]3 z( S8 L
O
configuration clock
nCONFIG" e5 X8 u) k' |1 ~7 n, Y* y
O
device reset (a low to high transition starts the configuration within the device)
Conf_done# ~" Z, g. ]% Z& U  O( U/ E
I
Status bit (gets checked after configuration, will be high if configuration complete)
nSTATUS
1 Z! k1 ~4 O9 I7 d7 R% E
I
Status bit indicating an error during configuration if low
- Z1 k. O& X  J! S3 V
http://www.dzkf.cn/upimg/allimg/20060906/1353412.jpg1 L: U1 y. ]+ L3 ^. D
图 3 PS配置单片FPGA的硬件连接

! [; j/ \1 z% A4 ^+ h
图 4 PS配置多片FPGA的硬件连接
! G7 l- O6 ?; C( f' |9 Y6 P
3.配置操作过程
- P% M+ e7 K7 d+ d! z( M" C5 ^
CPU按下列步骤操作I/O口线,即可完成对FPGA的配置:

+ e: b0 I5 o3 N" N1. nCONFIG="0"、DCLK="0",保持2μS以上。
4 R0 M$ h# t# X2. 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错。正常情况下,nCONFIG="0"后1μS内nSTATUS将为"0"。- F8 U3 O6 n+ ^+ o/ ^
3. nCONFIG="1",并等待5μS。- g" @9 G4 `  w+ d. v, ~, S+ v
4. Data0上放置数据(LSB first),DCLK="1",延时。
9 ]0 d" A  e& i0 M, c5. DCLK="0",并检测nSTATUS,若为"0",则报错并重新开始。1 T( {6 q( q" U: w9 x
6. 准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。
' t$ t, ]0 l3 B$ V" c# B1 V5 @' r# R% R7. 此时Conf_done应变成"1",表明FPGA的配置已完成。如果所有数据送出后,Conf_done不为"1",必须重新配置(从步骤1开始)。% }. B& ?  i/ t  r, z3 k! A
8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。

6 ]1 d5 I" H  i( ]: X' k7 B' C注意事项:

! G' [9 M0 a! @& \+ 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个周期。
& G) T3 N. ]/ R
3. 在配置过程中,如果检测到nSTATUS为"0",表明FPGA配置有错误,则应回到步骤1重新开始。6 U& u% V! q9 G
图 5 操作流程框图
" T* {2 t1 P+ @/ `* [* x6 H
4.实现在线升级

# x% f" x8 \; Z% ]( ?采用本模块的最大优点是可以实现单板FPGA的在线升级。要实现在线升级,单板设计必须考虑以下几个问题:

$ ^" I* p7 O" T7 ]' I1. CPU的启动必须不依赖于FPGA,即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。
( f" g* m+ [1 o. @+ [2. FPGA配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。
; D" }* h$ S1 L- z3. 为了实现FPGA的在线升级,存放FPGA配置数据的存储器器必须是CPU可重写的,且此存储器应是非易失性的,以保证单板断电后,FPGA数据不需从后台重新获得。
具体过程

: G- Z6 q* z# s; j结合图6的实例,对FPGA在线升级作一具体描述。
# i6 \& {- i8 d- F( jhttp://www.dzkf.cn/upimg/allimg/20060906/1353415.jpg
图6 FPGA在线升级
1. 使用编译和连接工具,将FPGA的第一个版本与MPC860的工作程序连接在一起,分别占用地址为0x70000-0x7FFFF和0x00000-0x6FFFF的存储空间。
' p8 p, |! b: D2 }3 G. p2. 单板启动时,MPC860自动将0x70000-0x7FFFF的数据下载到FPGA中,完成FPGA配置。0 `$ [: U4 z7 r% O
3. 当FPGA需升级时,将新的RBF配置文件放在后台计算机中。6 E$ P' [& M! w: O% I. k9 j
4. MPC860把BOOTROM的0x70000-0x7FFFF空间当作普通数据存储区,通过后台将新的RBF配置文件放在0x70000-0x7FFFF中。
, L1 Q! F. [3 k7 ~8 `5 f- _5. MPC860调用BOOTROM中的FPGA配置子程序,对FPGA从新下载数据,完成FPGA升级。8 I7 W$ s3 p% _8 O1 Y5 `
0 V/ m/ @0 E& S0 a( T( T1 f. M
以MPC860和Altera EP1K30为例,电原理图如下:
, z$ h! U0 t5 `+ q) j6 n. |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菜单下,同样可以找到类似菜单进行格式转化。
) ]& T7 ?' x1 P+ r# }/ Q
CPU程序设计
. I  S2 l, g' Q- @
以MPC860为例,我们可以将转换完成的RBF文件作为二进制文件,直接写到MPC860系统的某一ROM/Flash区域。由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。
本设计的CPU源程序
void InitPORT(void)
{ // 初始化PB口相应位:
4 }0 M# w# y% K+ G// PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出- n  `: L1 I% M6 i
IMMR->pip_pbpar=0x00000000;
, C5 R$ \+ E% z; ]) d, i2 XIMMR->pip_pbdir=0xFFFFF5AF;7 q6 w5 x: b, i" t! y( ^5 ^" I! i
IMMR->pip_pbodr=0x00000000;# E* Z/ p) x) @4 E' q$ P. K
IMMR->pip_pbdat=0xffffff57;& }+ U  G- {4 m7 }+ @* X: m1 X
}
UBYTE Fpga_DownLoad(void)% ?* ^9 c' M1 R% A/ e9 J
{ // FPGA配置
. S+ e. }& [4 \0 G# }. o. ~- a. mUBYTE *Bootaddr;* U# v1 l+ \6 `7 Q& r" ?
UWORD CountNum=0x0;
$ R9 P+ l" C; J+ S( z' @UBYTE FpgaBuffer, i;
// 获得Boot区首地址0 @8 e, @2 `" a5 W3 {  r
Bootaddr=(UBYTE *)(IMMR->memc_or0 & IMMR->memc_br0 & 0xFFFF8000);
Set_nCONFIG(0); // nCONFIG="0",使FPGA进入配置状态; M7 ^& a0 ]* d
Set_DCLK(0);
7 Q$ ^* R8 {, u4 Z$ \, C& DDELAY5us();
- P0 t. _$ X9 Q0 n7 A; Mif (Read_nSTATUS() == 1)- i, q1 o( K4 x( G8 H6 x
{ // 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错4 @' y) w7 G8 U! ~2 J) y
Err_LED(1);
, L% o- g* y$ M" p3 _: s$ i# greturn 0;
: I& C! H. a2 j! B: c}( Z( `4 O0 l! l  |2 f
Set_nCONFIG(1);$ r5 `8 P: l+ U3 i! c# q1 R4 I
DELAY5us();
6 E0 g0 s& Q* m+ g# N' ~* m6 o1 M+ a
// 开始输出配置数据:
" F% O( L" e8 H* J* Hwhile(CountNum <= 0x0e74e)3 V+ u: p2 G5 B2 M6 X) i
{& V' o# i: f8 I- Z) m
FpgaBuffer= *(Bootaddr+0x70000+CountNum);0 d. m; ?% L( H7 L- y
for (i=0; i<8; i++)1 j1 @& W4 j' g. d
{ // DCLK="0"时,在Data0上放置数据(LSB first)+ l: i" t2 ^( z5 V* ~1 Z+ l
Set_Data0(FpgaBuffer&0x01);
3 O; Z3 L# q9 ~. f" V; y) tSet_DCLK(1); // DCLK->"1",使FPGA读入数据) Q& C+ q  d$ L; p
FpgaBuffer >>= 1; // 准备下一位数据
% O# s) o0 [$ W$ Y+ Wif (Read_nSTATUS() == 0)
0 M# p0 i! I2 c: u. n{ // 检测nSTATUS,如果为"0",表明FPGA配置出错
3 t; v' P+ _/ g, T6 a& A- MErr_LED(1);+ Z" B9 }: D+ ?
return 0;
2 i0 }' a+ S3 M/ \}
# r- Y& o/ p' @1 VSet_DCLK(0);
7 |" W5 A& P1 Y: |3 `/ Y! k3 h}+ \. f# E2 B6 J+ \
CountNum++;' P1 {5 Q- I2 `# X* k- D6 d' o
}

% _! Z, i7 a4 q// FPGA初始化:( e3 x9 a7 a) s* x
// ACEX 1K和FLEX 10KE需要10个周期,APEX 20K需要40个周期6 V" q) s, p! ?$ |( x
for(i=0; i<10; i++)8 i: X: W+ L' a; i: ]$ o
{0 J4 G6 e8 z( o, k0 ?, o: l
Set_DCLK(1);4 r9 |# K2 B0 s) _2 L8 k* s
DELAY100us();! y4 @" m- U9 |) U# o; h4 C* l
Set_DCLK(0);2 `+ o% x2 T+ s
DELAY100us();
8 v- ~* P( j( i. q/ y2 }1 q1 Y}1 `0 G  k' z' j3 C* k4 p  \6 X
Set_Data0(0);. b& H1 m7 k, A0 _8 J7 O' Q
if (Read_nCONF_Done() == 0)3 R& k0 I+ g: W, w8 r" O
{ // 检测nCONF_Done,如果为"0",表明FPGA配置未成功
5 `5 l/ d; Q4 ~- tErr_LED(1);
$ ^  G$ W* j  K* q' T# r: Kreturn 0;; T: T$ C7 ^, n! ~) w! G
}: [* P) |, E8 |* e6 w0 ]4 T
return 1; // 成功返回
+ M. p0 R9 R& M: M7 V2 \}
// Data0输出
) `0 i# m# l: J' ^; H1 I$ M, ^void Set_Data0(UBYTE setting)
5 Z: E" ?4 t0 _9 z; O{ // PB243 `+ Y( \' z% @- W
if (setting) IMMR->pip_pbdat |= 0x00000080;" W& ^/ p5 {1 H: g
else IMMR->pio_pbdat &= 0xFFFFFF7F;
/ j* W1 k3 ^% J( M- G) c% U}
// 读nSTATUS状态. J+ i3 a; f3 Z  m: w* j; A
UBYTE Read_nSTATUS(void), b/ Y: K5 W5 |. j1 t
{ // PB253 |! E- G3 ^) C  ]
if (IMMR->pio_pbdat & 0x00000040) return 1;0 [" I! W+ J7 B* e, i0 Z9 G
else return 0;  h$ ]/ ?- w/ o* |
}
// 设置nCONFIG电平
: l7 Q4 y5 J! w7 u8 V* \# Pvoid Set_nCONFIG(UBYTE setting)+ w& \& @; P6 I& R, w
{ // PB269 Z4 g0 N% D1 x, K' F# M; E' _
if (setting) IMMR->pip_pbdat |= 0x00000020;
* n$ f7 p9 ~) A. selse IMMR->pio_pbdat &= 0xFFFFFFDF;
8 H. O, _$ K  Y% Y4 e}
// 读nCONF_Done状态
+ b8 d4 s+ o) m8 `5 vUBYTE Read_nCONF_Done(void)
4 V4 b# X$ B. x( w$ d! X1 |. ~{ // PB27
; l) D$ M* n5 n+ Sif (IMMR->pio_pbdat & 0x00000010) return 1;
3 F* L8 |1 W) r; `2 I4 Relse return 0;% G7 B! n: x) R' Z, E9 o9 {
}
// 输出DCLK
; a" i2 T( d& _5 M2 @  Mvoid Set_DCLK(UBYTE setting)
; P. \! X) w9 C{ // PB28
! X; F) ?% A2 ]- S  D) qif (setting) IMMR->pio_pbdat |= 0x00000008;7 g% s6 w4 z3 q" X7 u  F
else IMMR->pio_pbdat &= 0xFFFFFFF7;# O  A9 a5 Y* x6 o: d6 O; I
}
5 ?/ ]) X2 m' y) l// 结束
回复

使用道具 举报

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

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

我们已在某单板上实现了该设计。现以该单板为例,说明如何实现CPU对FPGA的配置。      在该单板上是使用MPC860作CPU,BootROM采用SST39VF040,一片FPGA型号EP1K30QC208-3。我们在MCP860的PB口选5根线与EP1K30连接成PS配置方式,硬件连接参考第二章,Data0也由MPC860输出,信号定义见下表, u! s; d. L$ @0 e! Y0 c
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

- S. b, w6 y$ h
, E5 }2 `) `  I+ {+ c& t
EP1K30所需要的配置数据为58kB(准确的长度参见生成的 RBF文件),由于BootROM比较空,我们将配置数据安排在BootROM的0x70000~0x7FFFF区间内。第一次的配置数据可利用编程器将 RBF文件当作二进制文件写到BootROM的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。" S6 c3 y) ~1 D! t( i8 Q8 D3 l
具体软件操作参见第二章。

6 L/ j( p- O9 N! [! GFPGA在线更改配置

  Z- z: z# I' P+ l- O! E' T# o3 n为检验FPGA在线升级的可能性,我们在CPU的BootROM中放置了不同逻辑的FPGA配置数据。CPU正常运行时,测试软件随意更换FPGA的配置数据。在每次配置完成后,FPGA均能实现相应的逻辑功能。0 s, A* e, {5 X3 @( }7 m6 [6 A  h  ?; H
如果和系统软件配合,在线更改EPROM中的配置数据,FPGA的在线升级是完全可以实现的。
1 v" m- T" A2 z为了便于调试和实际生产,我们将FPGA的初始配置数据放置在BootROM中。如某些单板BootROM的写功能必须禁止,此时FPGA配置数据可放在其它存储器中,如存放应用程序的FLASH中,升级FPGA配置数据可以和升级应用程序一并完成。9 I0 V6 s- Y- V3 ]. d7 H! ]) r  e

$ ]% v# c  I- B( q/ x+ y电缆下载

& ~+ {) \- x, |7 V+ }为了提高调试进度,通常会采用电缆下载的方式。在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的"0欧姆电阻连接方式"。电气连接的示意图如下:+ C2 M) b% i2 d% s+ N7 X, }
图1 兼容电缆下载
在最初调试FPGA时,R1~R5不焊,直接用电缆下载。同时,MPC860的程序中跳过FPGA配置的代码。等FPGA设计定型后(相当于准备使用EPC1时),焊上R1~R5,利用CPU配置FPGA。
% ^7 C) z) M- P2 d1 b& P8 x当然,R1~R5也可改用跳线或拨动开关。这两种连接方式在开发调试中比0欧姆电阻方便,但实际使用中可靠性不如0欧姆电阻高,如跳线会出现短路块脱落、拨动开关会出现接触不良等现象。而且,0欧姆电阻连接方式最便于生产,价格也最低。建议开发阶段的单板可以用跳线或拨动开关,转产时采用0欧姆电阻连接方式。

/ e" r( ^* L1 I% d& z, ^+ X3 `在使用下载电缆时需要注意电源的选择。由于Altera以前的 Byteblaster下载电缆是5V供电的,有不少设计都把下载电缆插座接到5V电源上,这种5V供电的下载电缆可能导致不能忍受5V信号的CPU损坏。因此,使用本模块时,下载电缆应使用低电压版本的ByteblasterMV,下载插座的电源接3.3V。

$ e$ g6 U1 p% V6 `$ }7 H使用、调试、维护说明

: i* `: N7 _& s! S: n3 ?6 P如果使用本模块出现配置出错,有如下可能:
/ D4 D7 o, D# y  T
错误原因
解决方法
配置数据有错
重新生成配置数据,并检查生成过程是否正确
CPU输出信号频率太高
控制DCLK频率,具体数据参见“操作过程”相关章节
CPU与FPGA连接有误
检查硬件连线
下载电缆影响
拔去下载电缆
CPU的I/O口故障
用示波器检查PB24~PB28信号波形
FPGA故障
更换FPGA

- `. T* y6 X4 i; \' h! k  J+ K2 p/ z7 B& ]! |3 p1 N3 F
经验教训
) y# |; D6 L; n4 `. s, 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我只是路过,不发表意见+ s! A3 e2 f2 _7 T- Z$ x2 Y

0 j2 Q% I- y- V5 V0 V0 Z- ?* g' O( l, ?

5 ]8 q1 w) H6 p2 F$ S3 H1 {
# P2 g) ?! A2 P! c2 F0 _& h- @6 w6 I- E0 x
4 f+ T; Y5 I* o1 ~9 ^5 |

7 f; a6 u/ d, G- D. [5 X+ i. J+ h  f- O7 T1 A, v- O- N: i; f

. G, z) _: C( z) J1 `, P' Q
# h2 g5 m  H# _" u2 V5 K2 v' E2 _& x- u/ Y! j( t

/ |2 [3 a; R. [6 O
& @% R. z0 X( h" @5 g
: `% _" H' ^7 n$ S0 m. i& P
/ D) H1 e1 t4 r) @& b5 z; N0 F8 Q% i* X$ y
! j( d* M6 I* i  l2 ]

6 B% A8 ]0 [/ @' _6 \. Y( x& P) i5 k$ a7 u, P( b9 Z# `

. g! [8 [7 x. f$ F) R6 i  h5 }http://qb.lqualyn.com/images/sigline.gif
4 w6 R$ Q* N4 ~% k孕妇如何防辐射
回复

使用道具 举报

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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