一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 11369|回复: 6

用CPU配置FPGA

[复制链接]
发表于 2008-12-5 16:36 | 显示全部楼层 |阅读模式
用CPU配置FPGA(一)概 述
& Z. f; @- s, e5 u一. 概 述1 k, G8 k% \  X  H% R& `

4 g' f0 o- B6 G6 `! }% H* E目前很多产品都广泛用了FPGA,虽然品种不同,但编程方式几乎都一样:利用专用的EPROM对FPGA进行配置。专用的EPROM价格不便宜,且大不跟上都是一次性OPT方式编程。一旦更改FPGA设计,代价不小。为了进一步降低产品的成本和升级成本,可以考虑利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对 FPGA进行配置。 本文将以PowerPC860和EP1K30为例,讲解如何利用CPU来配置FPGA。
- P* |" N+ [3 e% h
# v; R" j' j  Z9 i( J& e0 hCPU配置FPGA的优点
2 F0 a; h- f0 S  J( K9 m! M" r" {: [5 V9 ~7 D' B% N
与Configuration EPROM方式相比本设计有如下优点:( Q& O0 J$ C& `' [- S! z8 _

) ^4 c' a- x/ T* _; ^, m+ D' k1.降低硬件成本——省去了FPGA专用EPROM的成本,而几乎不增加其他成本。以ALTERA的10K系列为例,板上至少要配一片以上的EPC1,每片 EPC1的价格要几十元,容量1M位。提供1Mb的存储空间,对于大部分单板来说(如860系统的单板),是不需要增加硬件的。即使增加1Mb存储空间,通用存储器也会比FPGA专用EPROM便宜。
" b  H/ l! H, u4 ]
; h0 M& M3 `9 l4 U3 `  f0 K2.可多次编程——FPGA专用EPROM几乎都是OTP,一旦更换FPGA版本,旧版本的并不便宜的EPROM只能丢弃。如果使用本设计对FPGA配置,选用可擦除的通用存储器保存FPGA的编程数据,更换FPGA版本,无须付出任何硬件代价。这也是降低硬件成本的一个方面。
, g1 q. N2 l3 ]0 g- b
( d; X8 Z. i' l9 h+ N3. 实现真正"现场可编程"--FPGA的特点就是"现场可编程",只有使用CPU对FPGA编程才能体现这一特点。如果设计周全的话,单板上的FPGA可以做到在线升级。3 T. i; Z3 B- P% [" ?

* ?4 }. f6 ^1 s2 ?/ P: o4. 减少生产工序--省去了对"FPGA专用EPROM"烧结的工序,对提高生产率,降低生产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊DIP器件的工序。
# J) W0 N& m/ z1 E( L, H; M+ k0 E/ ]+ _3 g3 X+ o
当然,与Configuration EPROM方式相比也有一些需要注意的的地方:8 U* f% A0 B9 L# q! |

9 |( L3 m* w' M, N9 T& U( h1.需要CPU提供5根I/O线--一般来说,这并不困难。对于MPC860一类的CPU来说,区区5根I/O线是不成问题的。即使是某些设计中实在没有多余的I/O供配置使用,也可通过板上的PLD扩展。虽然这样做可能会增加成本,但获得的真正"现场可编程"的功能是非常宝贵的。$ N6 i7 B( o; v) L) l0 i0 M2 y# P

  S* W( S* R! ^& O2. CPU的Boot应不依赖于FPGA--这在单板设计时需要特别考虑的。由于CPU对FPGA进行配置所需的资源很少,这一点比较容易做到。
' @: _6 H+ h! {1 `( u7 {4 q' A0 }# o+ ]2 v% C: I) D
设计摘要& e: H) U3 [  D% ?0 T3 w$ N6 k
本设计严格按照FPGA的PS配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对FPGA进行配置,性能将优于Configuration EPROM方式。
( S/ K3 D2 [* E: K2 a7 o5 x& I本设计是利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对FPGA进行配置,以降低硬件成本并实现FPGA的在线升级。
$ K! w( J$ i* d- j: u本设计已在MPC860和EP1K30环境下完成验证,适用于有5个多余I/O的CPU对Altera FPGA的配置。8 j( G9 V* o+ K) H( o
: ~+ O' U! R/ ?
参考资料
5 c5 M0 J; S+ e% E/ k
3 P- m- \! ]! MALTERA:AN-116 Configuring SRAM-Based LUT Devices/ S2 o4 G& @  T- j& i' u8 v9 p
ALTERA: ACEX 1K Programmable Logic Device Family
 楼主| 发表于 2008-12-5 16:37 | 显示全部楼层

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

用CPU配置FPGA(二)硬件设计; D9 ~' R2 |' e
二. 硬件设计- w6 A6 a9 Z+ T+ _
1.配置基本原理

8 U/ S: v+ x  C% f" ^- ARAM-Based FPGA由于SRAM工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对FPGA进行配置。对于Altera的FPGA,配置方法可分为:专用的EPROM (Configuration EPROM)、PS(Passive serial 无源串行)、PPS(Passive parallel synchronous 无源同步并行)、PPA(Passive parallel asynchronous 无源异步并行)、JTAG(不是所有器件都支持)。/ u/ t( ]5 q) B8 G; h, }
http://www.dzkf.cn/upimg/allimg/20060906/1353410.jpg
本设计采用PS方式对FPGA进行配置,是基于如下几个方面的考虑:

4 I9 y' Z* S+ e1. PS方式连线最简单
0 {$ S/ R& K0 {8 q: k1 T. Z3 ^$ L6 E' V2. 与Configuration EPROM方式可以兼容(MSEL0、1设置不变)
+ E& l( y! V' n- [+ m3. 与并行配置相比,误操作的几率小,可靠性高
只需利用CPU的5个I/O线,就可按图 2所指示的时序对FPGA 进行PS方式的配置。
2.配置电路的连接

5 o( W! P1 n6 c  @3 MCPU仅需要利用5个I/O脚与FPGA相连,就实现了PS方式的硬件连接,具体信号见下表(信号方向从CPU侧看):
+ U+ ^- n, i) e5 ~' K" x) R4 {
信号名
I/O
说明
Data0# f! V3 g6 e3 _9 t
O
configuration data
DCLK9 \, B1 x' {' d! e# w2 W/ c, r* u4 I
O
configuration clock
nCONFIG
' w1 I9 E. V9 i
O
device reset (a low to high transition starts the configuration within the device)
Conf_done
; n$ O% ~: H5 E% S0 w! z
I
Status bit (gets checked after configuration, will be high if configuration complete)
nSTATUS
  _/ `( o6 A( ]/ r
I
Status bit indicating an error during configuration if low

& P9 j: [$ n; }0 `# mhttp://www.dzkf.cn/upimg/allimg/20060906/1353412.jpg/ N, S# e. X2 u
图 3 PS配置单片FPGA的硬件连接
+ ]( Q8 k) f( a! j! F3 L
图 4 PS配置多片FPGA的硬件连接
1 O3 L) `6 j0 b  z; W  G
3.配置操作过程

# q6 w' C6 L1 W) GCPU按下列步骤操作I/O口线,即可完成对FPGA的配置:

, Y/ m. D3 ^- ?, y1. nCONFIG="0"、DCLK="0",保持2μS以上。2 N" r5 D* W" H+ g
2. 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错。正常情况下,nCONFIG="0"后1μS内nSTATUS将为"0"。0 J% Z  L3 P( o' T7 C9 G# i* l
3. nCONFIG="1",并等待5μS。
  S9 H5 t$ r+ C. `1 e: C4. Data0上放置数据(LSB first),DCLK="1",延时。/ S0 L. Y+ R8 U$ Q: Y) a
5. DCLK="0",并检测nSTATUS,若为"0",则报错并重新开始。
3 g9 p3 W1 A: B* E1 m2 T& h* S; ]6. 准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。4 R9 W% ]' e9 R6 g  z% A1 T& i- Z
7. 此时Conf_done应变成"1",表明FPGA的配置已完成。如果所有数据送出后,Conf_done不为"1",必须重新配置(从步骤1开始)。8 m% _' N0 }0 t1 X0 }6 c4 Q5 {& v
8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。
1 a# c5 Z# ^$ ]% j
注意事项:

" }! i; Y9 I$ G! X1. 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个周期。

! m0 F2 E5 U. U& f$ t' t+ t% ~9 F+ o3. 在配置过程中,如果检测到nSTATUS为"0",表明FPGA配置有错误,则应回到步骤1重新开始。
  b9 Q) |! Z( |7 P0 {
图 5 操作流程框图
6 m+ o- C3 o, c
4.实现在线升级
- j* w" f' E$ V7 Z
采用本模块的最大优点是可以实现单板FPGA的在线升级。要实现在线升级,单板设计必须考虑以下几个问题:
8 Z+ a% c" r$ ]" X" h2 B" k- s. N
1. CPU的启动必须不依赖于FPGA,即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。1 c5 ^5 ^0 E) D8 Q( T
2. FPGA配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。
: \: d) w6 [6 \" E7 L8 C$ L3. 为了实现FPGA的在线升级,存放FPGA配置数据的存储器器必须是CPU可重写的,且此存储器应是非易失性的,以保证单板断电后,FPGA数据不需从后台重新获得。
具体过程
* D8 ^' g! Y( `1 A- p( ^
结合图6的实例,对FPGA在线升级作一具体描述。2 |% J* w  f' A
http://www.dzkf.cn/upimg/allimg/20060906/1353415.jpg
图6 FPGA在线升级
1. 使用编译和连接工具,将FPGA的第一个版本与MPC860的工作程序连接在一起,分别占用地址为0x70000-0x7FFFF和0x00000-0x6FFFF的存储空间。* O6 O3 f2 r2 h, i
2. 单板启动时,MPC860自动将0x70000-0x7FFFF的数据下载到FPGA中,完成FPGA配置。
& i* H! F3 S2 E, Y* D3. 当FPGA需升级时,将新的RBF配置文件放在后台计算机中。9 {% _3 }; T* {2 C' B& V
4. MPC860把BOOTROM的0x70000-0x7FFFF空间当作普通数据存储区,通过后台将新的RBF配置文件放在0x70000-0x7FFFF中。
. L( U7 Q3 e# [$ E. k/ v5 D5. MPC860调用BOOTROM中的FPGA配置子程序,对FPGA从新下载数据,完成FPGA升级。$ M3 r: G7 W% M

6 [# D- J( v9 Z9 v+ J以MPC860和Altera EP1K30为例,电原理图如下:
7 J% T5 S7 m3 x/ L4 A2 J. Thttp://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菜单下,同样可以找到类似菜单进行格式转化。
$ K7 @* @+ b( z1 i# _; H/ S% v
CPU程序设计

( p% O* Y3 V  c8 n1 c! i以MPC860为例,我们可以将转换完成的RBF文件作为二进制文件,直接写到MPC860系统的某一ROM/Flash区域。由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。
本设计的CPU源程序
void InitPORT(void)
{ // 初始化PB口相应位:7 t: a/ }8 R/ R8 w$ u( S
// PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出, B, l5 l' F2 r
IMMR->pip_pbpar=0x00000000;, L5 h6 D0 V! A( v
IMMR->pip_pbdir=0xFFFFF5AF;
1 j/ t) V" f% E5 Z' r$ V& zIMMR->pip_pbodr=0x00000000;; R+ q8 e; L4 r7 m6 S: }
IMMR->pip_pbdat=0xffffff57;! t8 }; q6 w- W" ?' Y# h
}
UBYTE Fpga_DownLoad(void)( @* G$ z4 N6 O  J, i7 e
{ // FPGA配置
; I; h+ |, k7 d3 z; m8 bUBYTE *Bootaddr;
7 V: Z  c3 ^2 D( F$ ~" I0 ~UWORD CountNum=0x0;" W5 P4 F1 l$ X1 z- @+ ~
UBYTE FpgaBuffer, i;
// 获得Boot区首地址  ?# |1 I$ A$ @2 [3 D. l$ U1 o
Bootaddr=(UBYTE *)(IMMR->memc_or0 & IMMR->memc_br0 & 0xFFFF8000);
Set_nCONFIG(0); // nCONFIG="0",使FPGA进入配置状态
/ X3 ^0 v! i, fSet_DCLK(0);
% V$ [7 I# h9 @1 fDELAY5us();
6 }3 Z7 n; T" B4 ?/ Y' i2 Cif (Read_nSTATUS() == 1)+ Q" n+ [: M9 `' k6 I
{ // 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错
7 G8 a! v6 A: V& q8 o; AErr_LED(1);
" ^- t0 d/ z. o8 ~3 @  b( _return 0;3 q. h  {! {' Q3 b, P+ x  w9 n! {
}% E6 z9 |/ e: l3 ?$ R; U
Set_nCONFIG(1);
' ^" @- y# r; w. EDELAY5us();

7 R8 H# w0 ^8 j# e/ g0 {7 t// 开始输出配置数据:
4 n5 H0 M6 ^7 Z, K0 }) @- i9 bwhile(CountNum <= 0x0e74e)- a3 I& v% J1 p8 x- G2 c3 v* d
{8 }- M* b$ \! [
FpgaBuffer= *(Bootaddr+0x70000+CountNum);
$ o& K, E! G( j, r4 K' bfor (i=0; i<8; i++)- x- `) N& r! r: Z, n( ?
{ // DCLK="0"时,在Data0上放置数据(LSB first)
! W. b  `) |. q9 u. o+ [Set_Data0(FpgaBuffer&0x01);
# R4 ?* V. v4 b6 X5 lSet_DCLK(1); // DCLK->"1",使FPGA读入数据
+ i/ T) M" s4 m4 y; |( tFpgaBuffer >>= 1; // 准备下一位数据
, \- g9 c+ z( T' Lif (Read_nSTATUS() == 0): z+ j  ?2 i( Z3 g8 _4 ]$ ?' n* w
{ // 检测nSTATUS,如果为"0",表明FPGA配置出错
  [" q% b) d; {7 @' x4 ?Err_LED(1);
+ G' Q9 l, X% wreturn 0;
$ P5 ~# w3 G+ M" d3 p}
: M  ?* q/ L8 G7 i# JSet_DCLK(0);# u$ k8 G0 o" L/ v! Q# U( a. A
}* l3 |& w7 c% `3 P
CountNum++;# B- g) h( ?% v$ S
}

$ i" R1 Q) K# G// FPGA初始化:; I5 T$ Y) q1 {7 {% F% F( ~+ A' L- ~
// ACEX 1K和FLEX 10KE需要10个周期,APEX 20K需要40个周期5 y' g/ i) \& Z& x7 ^+ ~
for(i=0; i<10; i++)
! M) s5 s5 v2 B! F{+ P( F9 Z5 u# f; X0 O( h6 K! O! ^
Set_DCLK(1);- `' z% F9 D% j  O, ~1 n/ Q
DELAY100us();% a: C+ H1 u( O: J; A  q0 y
Set_DCLK(0);
6 ^0 [6 [: P+ a/ H  W7 A9 gDELAY100us();
+ W5 y4 a. B/ k" [+ J0 l}
6 V4 R# i) T* Q0 o6 i& DSet_Data0(0);
! T% G! w* w7 S+ wif (Read_nCONF_Done() == 0)  ]- ?. q% w7 S$ o3 w) n( A( F
{ // 检测nCONF_Done,如果为"0",表明FPGA配置未成功
2 V  i4 u5 K+ PErr_LED(1);
  w3 M5 Y, X. O& g5 f1 G2 a5 @7 ^$ wreturn 0;
$ @/ C) S% b' h$ J+ R}
8 [( g0 u% `1 ?( |return 1; // 成功返回4 R4 h! ^6 r5 [% S* V- C; F( d+ f
}
// Data0输出
7 ?" ]1 O( D$ O* m: F$ yvoid Set_Data0(UBYTE setting); E5 S( r# T- z4 H$ e5 z% X
{ // PB24
9 t7 k- l! {; n% j) [- o, S- _7 cif (setting) IMMR->pip_pbdat |= 0x00000080;
7 t6 V" N; _, h0 t: R/ Delse IMMR->pio_pbdat &= 0xFFFFFF7F;' V: _0 h& j% s4 D* C  c0 f+ }
}
// 读nSTATUS状态
0 ?/ k1 Z/ s' c7 ?  p5 oUBYTE Read_nSTATUS(void)$ Q. Q* g6 f/ C% `9 g% q* Y5 B
{ // PB25. f3 r/ H" g7 e* Y+ a# t+ P, E, }# u
if (IMMR->pio_pbdat & 0x00000040) return 1;
. g" C; @3 ]. `, n' `4 jelse return 0;* h: t; T$ N- @6 \
}
// 设置nCONFIG电平
. c; K/ C6 H1 F0 svoid Set_nCONFIG(UBYTE setting)1 l9 S% q" ^# N! ^, V6 I
{ // PB261 w2 X1 g* n- c) w% o$ d  O
if (setting) IMMR->pip_pbdat |= 0x00000020;  y$ _9 @- D" d0 N& V
else IMMR->pio_pbdat &= 0xFFFFFFDF;2 k% a4 t. T% _
}
// 读nCONF_Done状态+ [1 [1 Y6 p7 M8 n" ~7 ~. d  u" m
UBYTE Read_nCONF_Done(void)
  v0 X7 q2 H% V4 V) m% w{ // PB27
3 D; w  W: ]; `: xif (IMMR->pio_pbdat & 0x00000010) return 1;- `" X0 I/ t, Z
else return 0;
+ o! U; \& \/ t" Y# }8 J}
// 输出DCLK
  r! _" x/ l6 c+ t. g' Rvoid Set_DCLK(UBYTE setting)
( E2 P' X1 S+ X0 i4 w; D/ w3 i{ // PB28( A4 T  x$ R7 B  t. R% Z" Q& @- q! p
if (setting) IMMR->pio_pbdat |= 0x00000008;
8 Y# k7 [( U& g3 F9 ]else IMMR->pio_pbdat &= 0xFFFFFFF7;7 F# K: J) {: ~! D
}
9 h( T- G" |) \4 v; p+ G// 结束
回复

使用道具 举报

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

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

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

" b4 m3 W/ d8 e; T& Y+ }

. x# a* E& n& w5 D2 r, M* T( IEP1K30所需要的配置数据为58kB(准确的长度参见生成的 RBF文件),由于BootROM比较空,我们将配置数据安排在BootROM的0x70000~0x7FFFF区间内。第一次的配置数据可利用编程器将 RBF文件当作二进制文件写到BootROM的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。
# j, Q5 o) e3 m- a) h9 v具体软件操作参见第二章。

1 u( G* u9 I" YFPGA在线更改配置
" x. a& g0 O! E# e% K) m
为检验FPGA在线升级的可能性,我们在CPU的BootROM中放置了不同逻辑的FPGA配置数据。CPU正常运行时,测试软件随意更换FPGA的配置数据。在每次配置完成后,FPGA均能实现相应的逻辑功能。
; h% I7 J& Z; |: S5 B' s2 H" T. ^如果和系统软件配合,在线更改EPROM中的配置数据,FPGA的在线升级是完全可以实现的。
6 x& ]! t* B2 l* F" s为了便于调试和实际生产,我们将FPGA的初始配置数据放置在BootROM中。如某些单板BootROM的写功能必须禁止,此时FPGA配置数据可放在其它存储器中,如存放应用程序的FLASH中,升级FPGA配置数据可以和升级应用程序一并完成。4 Z" b# R+ N( e: E! E  d2 L  g
$ G8 T# j2 W( \4 S" I, h
电缆下载
: f5 N  Z$ W* s2 H+ G+ Z
为了提高调试进度,通常会采用电缆下载的方式。在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的"0欧姆电阻连接方式"。电气连接的示意图如下:
- x3 \9 P' Q4 [5 M* s
图1 兼容电缆下载
在最初调试FPGA时,R1~R5不焊,直接用电缆下载。同时,MPC860的程序中跳过FPGA配置的代码。等FPGA设计定型后(相当于准备使用EPC1时),焊上R1~R5,利用CPU配置FPGA。
* a# j' M6 |# m2 S) B* U2 K. @( y$ H当然,R1~R5也可改用跳线或拨动开关。这两种连接方式在开发调试中比0欧姆电阻方便,但实际使用中可靠性不如0欧姆电阻高,如跳线会出现短路块脱落、拨动开关会出现接触不良等现象。而且,0欧姆电阻连接方式最便于生产,价格也最低。建议开发阶段的单板可以用跳线或拨动开关,转产时采用0欧姆电阻连接方式。
0 u  j* ]. u9 c/ c
在使用下载电缆时需要注意电源的选择。由于Altera以前的 Byteblaster下载电缆是5V供电的,有不少设计都把下载电缆插座接到5V电源上,这种5V供电的下载电缆可能导致不能忍受5V信号的CPU损坏。因此,使用本模块时,下载电缆应使用低电压版本的ByteblasterMV,下载插座的电源接3.3V。

; E6 b( q6 n& ^4 z+ t使用、调试、维护说明
) @: Q+ ^" c/ k( b0 f3 O2 O
如果使用本模块出现配置出错,有如下可能:
. }0 e/ R# q* ^" w
错误原因
解决方法
配置数据有错
重新生成配置数据,并检查生成过程是否正确
CPU输出信号频率太高
控制DCLK频率,具体数据参见“操作过程”相关章节
CPU与FPGA连接有误
检查硬件连线
下载电缆影响
拔去下载电缆
CPU的I/O口故障
用示波器检查PB24~PB28信号波形
FPGA故障
更换FPGA
0 ]- r2 V) r) X4 V

/ L6 [/ C2 M# p2 F/ N% g
经验教训

) i, b- V. E& Q% X本模块在设计过程中有如下几个要点,请使用者注意:
  • 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我只是路过,不发表意见
% F% Y+ o6 Y; E) c8 S1 I2 n' m! `0 k, o9 t$ q7 ^: Z

4 f; z  \$ `6 m' g; g9 I$ C6 `8 i1 F

4 G/ y3 O% ?+ I0 q6 s
5 Y! {" o, c2 T
) M2 b' S! P8 y! l( `. j
( v2 u# s: {# w3 m; ^. @
) s4 f, U1 I' M2 f) P
! w- y) v  H& W, w9 R3 H& r
0 u4 }+ P; B4 G4 |0 t! G, c
+ S% x4 P0 e3 N! U* f* W) }. i- }& e5 _* q

$ _7 ^. d/ Q( `7 O* \  j
3 g6 W& m. ?$ D; E& X
7 @; n, m! r1 B. @( ~. t/ x# p9 Z% p8 L$ I% z; X4 _0 o8 r9 p2 w3 V8 [
. L8 i$ h* j" C2 L  c7 e

$ i4 P) M' W9 ]/ t7 d3 T% a' D
5 n: i' N/ z9 i* ]1 b# `/ S7 k  q# E; X) X* s' x! x. H5 i
http://qb.lqualyn.com/images/sigline.gif6 g* {( R/ A' p5 J! h8 o1 \
孕妇如何防辐射
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-4-19 18:33 , Processed in 0.036441 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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