一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 11198|回复: 6

用CPU配置FPGA

[复制链接]
发表于 2008-12-5 16:36 | 显示全部楼层 |阅读模式
用CPU配置FPGA(一)概 述4 N# Y2 A6 ^8 N
一. 概 述1 G0 ~5 ?& P0 a. V) j  ]0 V7 Q  M  j
" [- {8 G; @6 m+ N
目前很多产品都广泛用了FPGA,虽然品种不同,但编程方式几乎都一样:利用专用的EPROM对FPGA进行配置。专用的EPROM价格不便宜,且大不跟上都是一次性OPT方式编程。一旦更改FPGA设计,代价不小。为了进一步降低产品的成本和升级成本,可以考虑利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对 FPGA进行配置。 本文将以PowerPC860和EP1K30为例,讲解如何利用CPU来配置FPGA。+ g1 ^& N# u) p" R6 O" t
( y" |2 h' d* ?  \. D
CPU配置FPGA的优点& b* L1 e( H$ }2 F* w& e

, J7 v7 N) d* V4 V& \( N与Configuration EPROM方式相比本设计有如下优点:; V" J0 X5 Z8 h! \' F9 b6 \
1 E/ k- g3 M6 G6 P5 c, W
1.降低硬件成本——省去了FPGA专用EPROM的成本,而几乎不增加其他成本。以ALTERA的10K系列为例,板上至少要配一片以上的EPC1,每片 EPC1的价格要几十元,容量1M位。提供1Mb的存储空间,对于大部分单板来说(如860系统的单板),是不需要增加硬件的。即使增加1Mb存储空间,通用存储器也会比FPGA专用EPROM便宜。
$ a. a4 R8 l4 G) b, M6 Z4 x1 w1 I6 u6 g* ?5 ^
2.可多次编程——FPGA专用EPROM几乎都是OTP,一旦更换FPGA版本,旧版本的并不便宜的EPROM只能丢弃。如果使用本设计对FPGA配置,选用可擦除的通用存储器保存FPGA的编程数据,更换FPGA版本,无须付出任何硬件代价。这也是降低硬件成本的一个方面。
; f! _7 o) L  R- C5 u* p) e
0 G( U( ~3 a- e7 ~. e+ S2 \1 Z3. 实现真正"现场可编程"--FPGA的特点就是"现场可编程",只有使用CPU对FPGA编程才能体现这一特点。如果设计周全的话,单板上的FPGA可以做到在线升级。! c% V! [5 y& I! f
+ B& S$ p% \9 l( E) m  i
4. 减少生产工序--省去了对"FPGA专用EPROM"烧结的工序,对提高生产率,降低生产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊DIP器件的工序。
2 r4 K! Y0 n' e6 s8 u7 |4 h3 _1 l7 R4 ~- g5 k+ a
当然,与Configuration EPROM方式相比也有一些需要注意的的地方:8 |5 S! D1 e, u0 M
; L+ n' U& P2 B# v: x! @+ }
1.需要CPU提供5根I/O线--一般来说,这并不困难。对于MPC860一类的CPU来说,区区5根I/O线是不成问题的。即使是某些设计中实在没有多余的I/O供配置使用,也可通过板上的PLD扩展。虽然这样做可能会增加成本,但获得的真正"现场可编程"的功能是非常宝贵的。% S* h2 y5 \( j8 E0 z4 u8 T

* q3 G: l! L# G  L! D1 C5 K2. CPU的Boot应不依赖于FPGA--这在单板设计时需要特别考虑的。由于CPU对FPGA进行配置所需的资源很少,这一点比较容易做到。+ g( z  ~' N( @5 w

) G5 ]6 I) l. Z3 g) F+ q& Y8 f" m& e设计摘要* S9 V" m- B- B5 L$ ^* ?6 U/ u
本设计严格按照FPGA的PS配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对FPGA进行配置,性能将优于Configuration EPROM方式。; n1 |) i8 M4 g9 S% z7 m
本设计是利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对FPGA进行配置,以降低硬件成本并实现FPGA的在线升级。
) L/ G2 b+ m8 A本设计已在MPC860和EP1K30环境下完成验证,适用于有5个多余I/O的CPU对Altera FPGA的配置。
& B1 ?; ]2 [5 R0 v
( ~8 n. s8 n. ~6 E0 p" C参考资料
6 L+ _% t/ f1 c
# Y; q7 j5 e: e. B' F6 {ALTERA:AN-116 Configuring SRAM-Based LUT Devices. h% Y: H8 k, \9 p* W- p' y
ALTERA: ACEX 1K Programmable Logic Device Family
 楼主| 发表于 2008-12-5 16:37 | 显示全部楼层

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

用CPU配置FPGA(二)硬件设计. r/ V; O& V8 ~
二. 硬件设计! v* c7 V4 S& i  j6 G
1.配置基本原理

4 z, @% q& L- x( LRAM-Based FPGA由于SRAM工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对FPGA进行配置。对于Altera的FPGA,配置方法可分为:专用的EPROM (Configuration EPROM)、PS(Passive serial 无源串行)、PPS(Passive parallel synchronous 无源同步并行)、PPA(Passive parallel asynchronous 无源异步并行)、JTAG(不是所有器件都支持)。
- `4 t, M& N$ xhttp://www.dzkf.cn/upimg/allimg/20060906/1353410.jpg
本设计采用PS方式对FPGA进行配置,是基于如下几个方面的考虑:
5 e5 }# u/ q, P
1. PS方式连线最简单2 y& c* O6 A; [* ^/ {  s$ z
2. 与Configuration EPROM方式可以兼容(MSEL0、1设置不变)
+ o& q4 n/ M2 k1 p$ a3. 与并行配置相比,误操作的几率小,可靠性高
只需利用CPU的5个I/O线,就可按图 2所指示的时序对FPGA 进行PS方式的配置。
2.配置电路的连接

* M+ _0 v: [* A* Y! Z- YCPU仅需要利用5个I/O脚与FPGA相连,就实现了PS方式的硬件连接,具体信号见下表(信号方向从CPU侧看):
( s7 m+ _, ~8 J' o9 O( R  A& K8 M! h) d
信号名
I/O
说明
Data0
8 q, c8 V. [* j4 Y4 J' P5 d
O
configuration data
DCLK1 v: W# g+ }/ ?6 M: }- @. H" t
O
configuration clock
nCONFIG. \; T5 v  h8 D# K5 {& [
O
device reset (a low to high transition starts the configuration within the device)
Conf_done; g2 I0 E  o! c/ Q
I
Status bit (gets checked after configuration, will be high if configuration complete)
nSTATUS. S5 q! T9 D7 ]2 ~+ C* ]0 k5 g
I
Status bit indicating an error during configuration if low
* M4 h" X6 u+ w$ Y
http://www.dzkf.cn/upimg/allimg/20060906/1353412.jpg6 d6 X5 ~% w$ ?
图 3 PS配置单片FPGA的硬件连接

6 D5 l3 ^/ j" Q% g5 O
图 4 PS配置多片FPGA的硬件连接

$ j% V! |9 O  C* Y  g4 q$ [1 ]
3.配置操作过程

/ A. ]9 d. E2 }  I; G5 {& U8 ^CPU按下列步骤操作I/O口线,即可完成对FPGA的配置:

% t7 p9 ~  o2 H. P6 q; Y, j- u1. nCONFIG="0"、DCLK="0",保持2μS以上。8 u) ]$ I7 @$ Y0 ?! |
2. 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错。正常情况下,nCONFIG="0"后1μS内nSTATUS将为"0"。! H6 \- P+ |- m4 q8 |5 i( l2 F: o4 ~
3. nCONFIG="1",并等待5μS。8 H3 f4 f+ ?- _' I3 o! d
4. Data0上放置数据(LSB first),DCLK="1",延时。4 r5 ~) ?2 o4 G& C% i' j
5. DCLK="0",并检测nSTATUS,若为"0",则报错并重新开始。
% P  s7 D1 v8 w  z- [0 n6 N; l6. 准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。
: U0 R" o% h# L& R1 X5 D; _7. 此时Conf_done应变成"1",表明FPGA的配置已完成。如果所有数据送出后,Conf_done不为"1",必须重新配置(从步骤1开始)。5 N4 [" B2 D9 y, @3 |3 Z$ \) ?: @
8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。
6 s8 R2 V+ J( V+ t  F+ p' M# P
注意事项:
/ j& ~8 N( [* F8 T. V
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个周期。

! @/ z, b! c8 v! [1 N' S' l3. 在配置过程中,如果检测到nSTATUS为"0",表明FPGA配置有错误,则应回到步骤1重新开始。
% R0 o9 T0 Y3 r: i6 Z- }6 S
图 5 操作流程框图
$ z. j! R* N) c, r( g
4.实现在线升级

) H2 C! b- Z, [4 [# A采用本模块的最大优点是可以实现单板FPGA的在线升级。要实现在线升级,单板设计必须考虑以下几个问题:
) ~1 J+ Z7 e& ]: Y
1. CPU的启动必须不依赖于FPGA,即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。6 y$ u) J2 V2 n# H; A& O- D
2. FPGA配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。
( [4 `' W( x! {: t9 ]3. 为了实现FPGA的在线升级,存放FPGA配置数据的存储器器必须是CPU可重写的,且此存储器应是非易失性的,以保证单板断电后,FPGA数据不需从后台重新获得。
具体过程

; X$ _7 a8 r3 D/ ~+ g结合图6的实例,对FPGA在线升级作一具体描述。
, C& ^' c! o1 T$ h/ D1 Z( L' ]http://www.dzkf.cn/upimg/allimg/20060906/1353415.jpg
图6 FPGA在线升级
1. 使用编译和连接工具,将FPGA的第一个版本与MPC860的工作程序连接在一起,分别占用地址为0x70000-0x7FFFF和0x00000-0x6FFFF的存储空间。
1 T0 X2 P" A$ S' V% a' D5 D2. 单板启动时,MPC860自动将0x70000-0x7FFFF的数据下载到FPGA中,完成FPGA配置。
+ M, L* l  ~5 K1 ~2 V9 s% j3. 当FPGA需升级时,将新的RBF配置文件放在后台计算机中。
# ?5 _( H5 ^; u- p3 J4. MPC860把BOOTROM的0x70000-0x7FFFF空间当作普通数据存储区,通过后台将新的RBF配置文件放在0x70000-0x7FFFF中。) H# _2 F) R. A; @1 _8 V
5. MPC860调用BOOTROM中的FPGA配置子程序,对FPGA从新下载数据,完成FPGA升级。9 \" [, Z/ x% }9 @$ _
) Y) g7 f7 y8 d* P6 L4 n+ M
以MPC860和Altera EP1K30为例,电原理图如下:+ }* I  M- @* y& p
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菜单下,同样可以找到类似菜单进行格式转化。
  V8 C2 e- }! Q
CPU程序设计

  @2 Y7 ?. P9 [  f- Z以MPC860为例,我们可以将转换完成的RBF文件作为二进制文件,直接写到MPC860系统的某一ROM/Flash区域。由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。
本设计的CPU源程序
void InitPORT(void)
{ // 初始化PB口相应位:7 E' x2 r  G* j- l
// PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出
! }4 T3 m( y2 k2 d' v% R' S# J, \IMMR->pip_pbpar=0x00000000;, I& A5 |+ l- y' e7 k: c7 I0 S
IMMR->pip_pbdir=0xFFFFF5AF;/ R* o" Z4 ]6 G% x, P, k  K0 k1 z
IMMR->pip_pbodr=0x00000000;
( N6 ]- M8 h5 I/ h  Q! L9 S' uIMMR->pip_pbdat=0xffffff57;
( b& O0 H* k7 T" m- }}
UBYTE Fpga_DownLoad(void)9 y3 `2 W0 p+ \- j& t! x! G3 v) `
{ // FPGA配置
) s) B& P  W  UUBYTE *Bootaddr;
1 k/ s  d# ^, IUWORD CountNum=0x0;
7 }4 K6 w, S0 TUBYTE FpgaBuffer, i;
// 获得Boot区首地址& f7 d0 V5 |$ Y! D. ~( x" h; G
Bootaddr=(UBYTE *)(IMMR->memc_or0 & IMMR->memc_br0 & 0xFFFF8000);
Set_nCONFIG(0); // nCONFIG="0",使FPGA进入配置状态5 @6 O# @6 u- f6 v) U2 j4 y$ E
Set_DCLK(0);
, H1 _2 `  a- z$ _; |& BDELAY5us();* l' \9 I4 \7 ~2 t, ~) w
if (Read_nSTATUS() == 1)9 `3 r7 U+ H7 r/ s" f9 a
{ // 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错
% y) c1 l, w1 L- ~5 zErr_LED(1);
5 K6 j& R, X0 ^- m2 E" T) B: w* x+ Dreturn 0;
1 \% X, P. }6 S# p' t}
, z2 K5 ~2 P5 m  z: b" i+ FSet_nCONFIG(1);
; y' d  G% {* [8 tDELAY5us();
+ B' ~7 L) `$ v# {9 H9 \
// 开始输出配置数据:
: W# t6 W! b4 Gwhile(CountNum <= 0x0e74e)
' g0 M' b& O, M+ Y  F( J. [{
, |. _# J8 e$ x0 I/ o5 O5 p) e; @FpgaBuffer= *(Bootaddr+0x70000+CountNum);3 n6 r' R3 g$ |6 @
for (i=0; i<8; i++)
( @+ K' A5 n( E{ // DCLK="0"时,在Data0上放置数据(LSB first)& N9 b( R% X+ A3 A# N8 i- @
Set_Data0(FpgaBuffer&0x01);! J. v& }# R- \4 I( U6 y2 T# o, @% D' I
Set_DCLK(1); // DCLK->"1",使FPGA读入数据
. W, l1 V- p0 ?: ]2 L! _; eFpgaBuffer >>= 1; // 准备下一位数据
5 r$ M; ^2 |. ^if (Read_nSTATUS() == 0)9 O5 t+ f/ A, d$ e4 P" q3 Y8 Q9 C1 L. _
{ // 检测nSTATUS,如果为"0",表明FPGA配置出错 " y* r4 |* ^6 D  E/ p
Err_LED(1);! Z9 H5 Q1 H- ^! h4 J
return 0;2 B1 A7 E  A' a
}
4 @+ H; R8 ?! H" Q: GSet_DCLK(0);
; J- g# Y' R* {; U8 ~- G# {}
# U! D7 o) U+ j% A8 f  `' q  WCountNum++;
  D6 Y# _1 ^1 ?  ]/ U) j7 u4 r, Q}
8 c6 P5 z- t, i+ t1 f$ G" `
// FPGA初始化:+ F% B& X$ h$ I5 {/ E
// ACEX 1K和FLEX 10KE需要10个周期,APEX 20K需要40个周期1 W' E" Z* {. h3 b
for(i=0; i<10; i++)& j5 X! m. L: ]4 h
{4 {2 g8 I0 s9 V- |9 T. z: l
Set_DCLK(1);
4 z" [, K  r8 N% l5 |0 ]  QDELAY100us();2 j! q+ l. H2 k
Set_DCLK(0);
( M! \( r' V6 ADELAY100us();( Q9 G7 P$ R( w9 H- z
}) G# A" Z0 V+ T. e: V6 \
Set_Data0(0);) b$ y) s  q: M5 k' v/ ]  x
if (Read_nCONF_Done() == 0). _5 P$ x/ S0 y0 [  K/ v$ I
{ // 检测nCONF_Done,如果为"0",表明FPGA配置未成功
  |2 m0 b2 B5 C2 rErr_LED(1);
* T( K! c* F8 Areturn 0;$ ?& b2 m; y/ P' T
}
/ H+ n+ q, O# H8 \* H. p! q% E) ireturn 1; // 成功返回
: v$ ^  P) y4 p8 `; w5 i$ m5 M}
// Data0输出
2 @/ P9 V: p- |% zvoid Set_Data0(UBYTE setting)# @, @7 R( C5 K$ R
{ // PB24* }$ t$ f% w- P; E+ _0 G6 @
if (setting) IMMR->pip_pbdat |= 0x00000080;3 b1 t4 z. B8 J5 a
else IMMR->pio_pbdat &= 0xFFFFFF7F;2 L" `* n( H- _2 f
}
// 读nSTATUS状态
- M) m( k; x3 h1 n, Y# vUBYTE Read_nSTATUS(void)+ V+ p' ^# i! v# i5 m
{ // PB25
' Y$ h: B; [1 M4 w6 `if (IMMR->pio_pbdat & 0x00000040) return 1;
4 M# I- Y: [' a: N9 S  Y6 Kelse return 0;
8 O" o( E) o: ^: u$ S1 E9 [}
// 设置nCONFIG电平- K4 q4 u5 c/ N2 Y. l" C  i
void Set_nCONFIG(UBYTE setting)
' \; S; \1 v% x8 _  \" s3 r{ // PB26
0 o3 Y0 [! l8 I* n( c) h/ d! ^; P7 Bif (setting) IMMR->pip_pbdat |= 0x00000020;
8 u0 e) c* _  V4 celse IMMR->pio_pbdat &= 0xFFFFFFDF;
8 N7 C2 u# y0 }}
// 读nCONF_Done状态& P1 ?1 X& G1 r+ K
UBYTE Read_nCONF_Done(void)
) g* ^3 o2 A! Z{ // PB27; ?) w2 i& v) f0 p9 j7 P8 S' w
if (IMMR->pio_pbdat & 0x00000010) return 1;* S% l8 Y& {7 e( b6 i" ^& y1 j
else return 0;( ^$ l; Z3 m' c" h% q# u; I
}
// 输出DCLK
) G+ K- V. o! B3 v5 Y3 ovoid Set_DCLK(UBYTE setting)
! }( u. g6 X* S" Q8 m) q{ // PB28
7 x- e) T' x% D/ M. E1 V. Uif (setting) IMMR->pio_pbdat |= 0x00000008;
, T; r, a- _/ h9 X6 ]8 G5 V( [: k; Telse IMMR->pio_pbdat &= 0xFFFFFFF7;
4 U1 Z6 d$ f7 D* _$ t7 W}) D: Q' W" x7 T5 T- ^  \" [
// 结束
回复

使用道具 举报

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

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

我们已在某单板上实现了该设计。现以该单板为例,说明如何实现CPU对FPGA的配置。      在该单板上是使用MPC860作CPU,BootROM采用SST39VF040,一片FPGA型号EP1K30QC208-3。我们在MCP860的PB口选5根线与EP1K30连接成PS配置方式,硬件连接参考第二章,Data0也由MPC860输出,信号定义见下表' S' _2 ^# b7 d1 C; b
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
4 [+ x+ b6 t* z9 }: S" t5 O
! D: R2 F; q" g; j& r
EP1K30所需要的配置数据为58kB(准确的长度参见生成的 RBF文件),由于BootROM比较空,我们将配置数据安排在BootROM的0x70000~0x7FFFF区间内。第一次的配置数据可利用编程器将 RBF文件当作二进制文件写到BootROM的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。
# }" ^- R7 F% o) w具体软件操作参见第二章。
7 |- `( @' ^: l; ~% X
FPGA在线更改配置
2 |0 r, `0 S8 x
为检验FPGA在线升级的可能性,我们在CPU的BootROM中放置了不同逻辑的FPGA配置数据。CPU正常运行时,测试软件随意更换FPGA的配置数据。在每次配置完成后,FPGA均能实现相应的逻辑功能。
6 Z6 ]: I$ v+ E. S如果和系统软件配合,在线更改EPROM中的配置数据,FPGA的在线升级是完全可以实现的。
+ D! X+ I1 `# h* v! c. u9 w7 z' t8 x为了便于调试和实际生产,我们将FPGA的初始配置数据放置在BootROM中。如某些单板BootROM的写功能必须禁止,此时FPGA配置数据可放在其它存储器中,如存放应用程序的FLASH中,升级FPGA配置数据可以和升级应用程序一并完成。
) |6 I9 h' |2 U2 q, }5 x/ l3 w

3 N$ y0 h$ Y$ k0 p电缆下载
: p/ p- E  H' Y( l( f
为了提高调试进度,通常会采用电缆下载的方式。在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的"0欧姆电阻连接方式"。电气连接的示意图如下:
- D; g( k9 Q: F. v/ i
图1 兼容电缆下载
在最初调试FPGA时,R1~R5不焊,直接用电缆下载。同时,MPC860的程序中跳过FPGA配置的代码。等FPGA设计定型后(相当于准备使用EPC1时),焊上R1~R5,利用CPU配置FPGA。
. J. R; i4 _' K7 p$ j当然,R1~R5也可改用跳线或拨动开关。这两种连接方式在开发调试中比0欧姆电阻方便,但实际使用中可靠性不如0欧姆电阻高,如跳线会出现短路块脱落、拨动开关会出现接触不良等现象。而且,0欧姆电阻连接方式最便于生产,价格也最低。建议开发阶段的单板可以用跳线或拨动开关,转产时采用0欧姆电阻连接方式。
! W. M- d- |% `" F! x5 C
在使用下载电缆时需要注意电源的选择。由于Altera以前的 Byteblaster下载电缆是5V供电的,有不少设计都把下载电缆插座接到5V电源上,这种5V供电的下载电缆可能导致不能忍受5V信号的CPU损坏。因此,使用本模块时,下载电缆应使用低电压版本的ByteblasterMV,下载插座的电源接3.3V。
- U" s5 j$ Q/ x9 O$ V$ e, g
使用、调试、维护说明
0 f' h  O) R0 Z2 _3 s
如果使用本模块出现配置出错,有如下可能:7 {: j: i. L  b1 m3 G
错误原因
解决方法
配置数据有错
重新生成配置数据,并检查生成过程是否正确
CPU输出信号频率太高
控制DCLK频率,具体数据参见“操作过程”相关章节
CPU与FPGA连接有误
检查硬件连线
下载电缆影响
拔去下载电缆
CPU的I/O口故障
用示波器检查PB24~PB28信号波形
FPGA故障
更换FPGA
2 G3 _1 l- h) M! a) s/ \* W  \. ]9 H/ H
/ |5 L7 E$ u$ y. Q* x, l
经验教训
: }" k# N% S- e! R1 Z4 V7 I
本模块在设计过程中有如下几个要点,请使用者注意:
  • 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我只是路过,不发表意见
  X1 @" q- D& j1 d1 h2 d. L! _0 S$ D7 p8 m$ y

6 p4 B" A1 Z; J5 E6 x
* B% \& H8 s$ t1 p5 [; c
/ I1 x4 x( f" N. S/ j- E! F! ]' ^( [; ?% P4 e0 w

3 {. g& n5 ~5 o2 u5 g8 c  t. Q
8 @: p/ n) L( O  v! d+ C9 u- L" c9 i! a

, x' u) q; M6 _  y/ m& k6 d
4 e2 Z- A$ r9 ]0 Q# j8 k3 y% w5 L5 G4 l7 S
( F: ]; L/ O) g) U5 X# Z
7 N+ w: P8 g6 Y* S4 q
, v: G2 Q7 _7 l5 Z* @, ~

/ z  `6 H! f  V; X
$ k/ s, V& _  s9 E, ]2 U$ Z
. q6 _- a" V! `+ f$ X2 _& A9 }
7 B6 [$ s. }- Z9 e9 {9 _; ?& b/ R# T5 ~! @" s

- u2 z$ R+ r) [  Yhttp://qb.lqualyn.com/images/sigline.gif9 k% Z8 x4 A3 Y3 k5 ~9 K
孕妇如何防辐射
回复

使用道具 举报

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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