应用cpu在线配置fpgaWord格式.docx

上传人:b****6 文档编号:21092943 上传时间:2023-01-27 格式:DOCX 页数:15 大小:188.31KB
下载 相关 举报
应用cpu在线配置fpgaWord格式.docx_第1页
第1页 / 共15页
应用cpu在线配置fpgaWord格式.docx_第2页
第2页 / 共15页
应用cpu在线配置fpgaWord格式.docx_第3页
第3页 / 共15页
应用cpu在线配置fpgaWord格式.docx_第4页
第4页 / 共15页
应用cpu在线配置fpgaWord格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

应用cpu在线配置fpgaWord格式.docx

《应用cpu在线配置fpgaWord格式.docx》由会员分享,可在线阅读,更多相关《应用cpu在线配置fpgaWord格式.docx(15页珍藏版)》请在冰豆网上搜索。

应用cpu在线配置fpgaWord格式.docx

虽然这样做可能会增加成本,但获得的真正"

的功能是非常宝贵的。

2.CPU的Boot应不依赖于FPGA--这在单板设计时需要特别考虑的。

由于CPU对FPGA进行配置所需的资源很少,这一点比较容易做到。

设计摘要

本设计严格按照FPGA的PS配置流程进行,并在配置过程中始终监测工作状态,在完善的软件配合下,可纠正如上电次序导致配置不正常等错误。

因此,采用此方法对FPGA进行配置,性能将优于ConfigurationEPROM方式。

本设计是利用板上现有CPU子系统中空闲的ROM空间存放FPGA的配置数据,并由CPU模拟专用EPROM对FPGA进行配置,以降低硬件成本并实现FPGA的在线升级。

本设计已在MPC860和EP1K30环境下完成验证,适用于有5个多余I/O的CPU对AlteraFPGA的配置

二.硬件设计

1.配置基本原理

RAM-BasedFPGA由于SRAM工艺的特点,掉电后数据会消失。

因此,每次系统上电后,均需对FPGA进行配置。

对于Altera的FPGA,配置方法可分为:

专用的EPROM(ConfigurationEPROM)、PS(Passiveserial无源串行)、PPS(Passiveparallelsynchronous无源同步并行)、PPA(Passiveparallelasynchronous无源异步并行)、JTAG(不是所有器件都支持)。

本设计采用PS方式对FPGA进行配置,是基于如下几个方面的考虑:

1.PS方式连线最简单

2.与ConfigurationEPROM方式可以兼容(MSEL0、1设置不变)

3.与并行配置相比,误操作的几率小,可靠性高

只需利用CPU的5个I/O线,就可按图2所指示的时序对FPGA进行PS方式的配置。

2.配置电路的连接

CPU仅需要利用5个I/O脚与FPGA相连,就实现了PS方式的硬件连接,具体信号见下表(信号方向从CPU侧看):

信号名

I/O

说明

Data0

O

configurationdata

DCLK

configurationclock

nCONFIG

devicereset(alowtohightransitionstartstheconfigurationwithinthedevice)

Conf_done

I

Statusbit(getscheckedafterconfiguration,willbehighifconfigurationcomplete)

nSTATUS

Statusbitindicatinganerrorduringconfigurationiflow

图3PS配置单片FPGA的硬件连接

图4PS配置多片FPGA的硬件连接

3.配置操作过程

CPU按下列步骤操作I/O口线,即可完成对FPGA的配置:

1.nCONFIG="

0"

、DCLK="

,保持2μS以上。

2.检测nSTATUS,如果为"

,表明FPGA已响应配置要求,可开始进行配置。

否则报错。

正常情况下,nCONFIG="

后1μS内nSTATUS将为"

3.nCONFIG="

1"

,并等待5μS。

4.Data0上放置数据(LSBfirst),DCLK="

,延时。

5.DCLK="

,并检测nSTATUS,若为"

,则报错并重新开始。

6.准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。

7.此时Conf_done应变成"

,表明FPGA的配置已完成。

如果所有数据送出后,Conf_done不为"

,必须重新配置(从步骤1开始)。

8.配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。

注意事项:

1.DCLK时钟频率的上限对不同器件是不一样的,具体限制见下表:

型号

最高频率

ACEX1K、FLEX10KE、APEX20K

33MHz

FLEX10K

16MHz

APEXII、APEX20KE、APEX20KC

57MHz

Mercury

50MHz

2.步骤7中FPGA完成初始化所需要的10个周期的DCLK是针对ACEX1K和FLEX10KE的。

如果是APEX20K,则需要40个周期。

3.在配置过程中,如果检测到nSTATUS为"

,表明FPGA配置有错误,则应回到步骤1重新开始。

图5操作流程框图

4.实现在线升级

采用本模块的最大优点是可以实现单板FPGA的在线升级。

要实现在线升级,单板设计必须考虑以下几个问题:

1.CPU的启动必须不依赖于FPGA,即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。

CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。

2.FPGA配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。

3.为了实现FPGA的在线升级,存放FPGA配置数据的存储器器必须是CPU可重写的,且此存储器应是非易失性的,以保证单板断电后,FPGA数据不需从后台重新获得。

具体过程

结合图6的实例,对FPGA在线升级作一具体描述。

图6FPGA在线升级

1.使用编译和连接工具,将FPGA的第一个版本与MPC860的工作程序连接在一起,分别占用地址为0x70000-0x7FFFF和0x00000-0x6FFFF的存储空间。

2.单板启动时,MPC860自动将0x70000-0x7FFFF的数据下载到FPGA中,完成FPGA配置。

3.当FPGA需升级时,将新的RBF配置文件放在后台计算机中。

4.MPC860把BOOTROM的0x70000-0x7FFFF空间当作普通数据存储区,通过后台将新的RBF配置文件放在0x70000-0x7FFFF中。

5.MPC860调用BOOTROM中的FPGA配置子程序,对FPGA从新下载数据,完成FPGA升级。

以MPC860和AlteraEP1K30为例,电原理图如下:

图7电原理图

编程文件格式的转换

MAX+plusII或QuartusII生成的SOF或POF文件不能直接用于CPU配置FPGA中,需要进行数据转换才能得到软件可用的配置数据。

在MaxplusII中的具体步骤如下:

1.进入数据转换对话框

图1进入数据转换对话框

2.选择需要转换的SOF文件,对于配置多个FPGA的场合,应选择所有的SOF文件并排好次序。

输出文件的格式我们选则二进制的rbf(Sequential)。

(也可以选择其他格式,如HEX等,在CPU软件编写上会与本文例子略有区别,关于不同文件格式的区别,在altera的AN116号文档上有详细解释)

图2选择相应的输出数据格式

在QuartusII软件的file菜单下,同样可以找到类似菜单进行格式转化。

CPU程序设计

以MPC860为例,我们可以将转换完成的RBF文件作为二进制文件,直接写到MPC860系统的某一ROM/Flash区域。

由于这段数据的起始地址和长度都是已知的,相应的软件编写是很方便的。

本设计的CPU源程序

voidInitPORT(void)

{//初始化PB口相应位:

//PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出

IMMR->

pip_pbpar=0x00000000;

pip_pbdir=0xFFFFF5AF;

pip_pbodr=0x00000000;

pip_pbdat=0xffffff57;

}

UBYTEFpga_DownLoad(void)

{//FPGA配置

UBYTE*Bootaddr;

UWORDCountNum=0x0;

UBYTEFpgaBuffer,i;

//获得Boot区首地址

Bootaddr=(UBYTE*)(IMMR->

memc_or0&

IMMR->

memc_br0&

0xFFFF8000);

Set_nCONFIG(0);

//nCONFIG="

,使FPGA进入配置状态

Set_DCLK(0);

DELAY5us();

if(Read_nSTATUS()==1)

{//检测nSTATUS,如果为"

否则报错

Err_LED

(1);

return0;

Set_nCONFIG

(1);

//开始输出配置数据:

while(CountNum<

=0x0e74e)

{

FpgaBuffer=*(Bootaddr+0x70000+CountNum);

for(i=0;

i<

8;

i++)

{//DCLK="

时,在Data0上放置数据(LSBfirst)

Set_Data0(FpgaBuffer&

0x01);

Set_DCLK

(1);

//DCLK->

"

,使FPGA读入数据

FpgaBuffer>

>

=1;

//准备下一位数据

if(Read_nSTATUS()==0)

,表明FPGA配置出错

CountNum++;

//FPGA初始化:

//ACEX1K和FLEX10KE需要10个周期,APEX20K需要40个周期

for(i=0;

10;

DELAY100us();

Set_Data0(0);

if(Read_nCONF_Done()==0)

{//检测nCONF_Done,如果为"

,表明FPGA配置未成功

return1;

//成功返回

//Data0输出

voidSet_Data0(UBYTEsetting)

{//PB24

if(setting)IMMR->

pip_pbdat|=0x00000080;

elseIMMR->

pio_pbdat&

=0xFFFFFF7F;

//读nSTATUS状态

UBYTERead_nSTATUS(void)

{//PB25

if(IMMR->

0x00000040)return1;

elsereturn0;

//设置nCONFIG电平

voidSet_nCONFIG(UBYTEsetting)

{//PB26

pip_pbdat|=0x00000020;

=0xFFFFFFDF;

//读nCONF_Done状态

UBYTERead_nCONF_Done(void)

{//PB27

0x00000010)return1;

//输出DCLK

voidSet_DCLK(UBYTEsetting)

{//PB28

pio_pbdat|=0x00000008;

=0xFFFFFFF7;

//结束

我们已在某单板上实现了该设计。

现以该单板为例,说明如何实现CPU对FPGA的配置。

在该单板上是使用MPC860作CPU,BootROM采用SST39VF040,一片FPGA型号EP1K30QC208-3。

我们在MCP860的PB口选5根线与EP1K30连接成PS配置方式,硬件连接参考第二章,Data0也由MPC860输出,信号定义见下表

MPC860引脚

信号名称

EP1K30引脚

PB24

DATA0

156

PB25

52

PB26

105

PB27

CONF_DONE

2

PB28

155

EP1K30所需要的配置数据为58kB(准确的长度参见生成的RBF文件),由于BootROM比较空,我们将配置数据安排在BootROM的0x70000~0x7FFFF区间内。

第一次的配置数据可利用编程器将RBF文件当作二进制文件写到BootROM的起始地址为0x70000的区域,也可以通过860仿真器把数据写到指定位置。

具体软件操作参见第二章。

FPGA在线更改配置

为检验FPGA在线升级的可能性,我们在CPU的BootROM中放置了不同逻辑的FPGA配置数据。

CPU正常运行时,测试软件随意更换FPGA的配置数据。

在每次配置完成后,FPGA均能实现相应的逻辑功能。

如果和系统软件配合,在线更改EPROM中的配置数据,FPGA的在线升级是完全可以实现的。

为了便于调试和实际生产,我们将FPGA的初始配置数据放置在BootROM中。

如某些单板BootROM的写功能必须禁止,此时FPGA配置数据可放在其它存储器中,如存放应用程序的FLASH中,升级FPGA配置数据可以和升级应用程序一并完成。

电缆下载

为了提高调试进度,通常会采用电缆下载的方式。

在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的"

0欧姆电阻连接方式"

电气连接的示意图如下:

图1兼容电缆下载

在最初调试FPGA时,R1~R5不焊,直接用电缆下载。

同时,MPC860的程序中跳过FPGA配置的代码。

等FPGA设计定型后(相当于准备使用EPC1时),焊上R1~R5,利用CPU配置FPGA。

当然,R1~R5也可改用跳线或拨动开关。

这两种连接方式在开发调试中比0欧姆电阻方便,但实际使用中可靠性不如0欧姆电阻高,如跳线会出现短路块脱落、拨动开关会出现接触不良等现象。

而且,0欧姆电阻连接方式最便于生产,价格也最低。

建议开发阶段的单板可以用跳线或拨动开关,转产时采用0欧姆电阻连接方式。

在使用下载电缆时需要注意电源的选择。

由于Altera以前的Byteblaster下载电缆是5V供电的,有不少设计都把下载电缆插座接到5V电源上,这种5V供电的下载电缆可能导致不能忍受5V信号的CPU损坏。

因此,使用本模块时,下载电缆应使用低电压版本的ByteblasterMV,下载插座的电源接3.3V。

使用、调试、维护说明

如果使用本模块出现配置出错,有如下可能:

错误原因

解决方法

配置数据有错

重新生成配置数据,并检查生成过程是否正确

CPU输出信号频率太高

控制DCLK频率,具体数据参见“操作过程”相关章节

CPU与FPGA连接有误

检查硬件连线

下载电缆影响

拔去下载电缆

CPU的I/O口故障

用示波器检查PB24~PB28信号波形

FPGA故障

更换FPGA

经验教训

本模块在设计过程中有如下几个要点,请使用者注意:

1.CPU的启动必须不依赖于FPGA,这在单板设计时需要特别考虑的。

即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。

当然,其他挂在CPU总线上的设备必须处于非访问态,FPGA所控制的设备也应处于非工作态或不影响其他设备工作的稳定态。

2.为了实现FPGA的在线升级,存放FPGA配置数据的区域必须是CPU可重写的

3.利用CPU配置FPGA,在使用者的主观感觉上会觉得FPGA"

起来"

得比较慢。

这是因为FPGA的配置要等CPU启动完成后才进行。

因此,应充分考虑FPGA所控制的设备在FPGA被配置完成前处于非工作态或不影响其他设备工作的稳定态。

4.关于配置数据占用空间的问题。

对于Altera的FPGA来说,每个确定型号的器件,配置数据的长度是一定的(和设计逻辑无关)。

因此,一旦确定了FPGA的型号,配置数据占用EPROM的空间也可以在设计中确定。

5.在使用中请保留下载电缆插座,以加快调试进度。

6.下载成功后,软件应有指示,便于维护。

7.要从系统的角度考虑现场升级,保护好FPGA数据。

8.单板调试时电缆下载的问题。

为了兼容两种下载方式,需要电缆下载时,可在CPU程序中跳过配置程序。

9.如果单板有可能使用电缆下载,必须考虑CPU的I/O能否忍受下载电缆信号电平

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1