用CPU配置Altera公司的FPGA(3)

2019-08-03 11:15

// 开始输出配置数据: while(CountNum <= 0x0e74e) {

FpgaBuffer= *(Bootaddr+0x70000+CountNum); for (i=0; i<8; i++)

{ // DCLK=\时,在Data0上放置数据(LSB first) Set_Data0(FpgaBuffer&0x01);

Set_DCLK(1); // DCLK->\,使FPGA读入数据 FpgaBuffer >>= 1; // 准备下一位数据 if (Read_nSTATUS() == 0)

{ // 检测nSTATUS,如果为\,表明FPGA配置出错 Err_LED(1); return 0; }

Set_DCLK(0); }

CountNum++; }

// FPGA初始化:

// ACEX 1K和FLEX 10KE需要10个周期,APEX 20K需要40个周期 for(i=0; i<10; i++) {

Set_DCLK(1); DELAY100us(); Set_DCLK(0); DELAY100us(); }

Set_Data0(0);

if (Read_nCONF_Done() == 0)

{ // 检测nCONF_Done,如果为\,表明FPGA配置未成功 Err_LED(1); return 0; }

return 1; // 成功返回 }

// Data0输出

void Set_Data0(UBYTE setting) { // PB24

if (setting) IMMR->pip_pbdat |= 0x00000080; else IMMR->pio_pbdat &= 0xFFFFFF7F; }

// 读nSTATUS状态 UBYTE Read_nSTATUS(void) { // PB25

if (IMMR->pio_pbdat & 0x00000040) return 1; else return 0; }

// 设置nCONFIG电平

void Set_nCONFIG(UBYTE setting) { // PB26

if (setting) IMMR->pip_pbdat |= 0x00000020; else IMMR->pio_pbdat &= 0xFFFFFFDF; }

// 读nCONF_Done状态 UBYTE Read_nCONF_Done(void) { // PB27

if (IMMR->pio_pbdat & 0x00000010) return 1; else return 0; }

// 输出DCLK

void Set_DCLK(UBYTE setting) { // PB28

if (setting) IMMR->pio_pbdat |= 0x00000008; else IMMR->pio_pbdat &= 0xFFFFFFF7; } // 结束

四. 应用实例

我们已在某单板上实现了该设计。现以该单板为例,说明如何实现CPU对FPGA的配置。

在该单板上是使用MPC860作CPU,BootROM采用SST39VF040,一片FPGA型号EP1K30QC208-3。我们在MCP860的PB口选5根线与EP1K30连接成PS配置方式,硬件连接参考第二章,Data0也由MPC860输出,信号定义见下表:

MPC860引脚 PB24 PB25 PB26 PB27 PB28 I/O O I O I O 信号名称 DATA0 nSTATUS nCONFIG CONF_DONE DCLK EP1K30引脚 156 52 105 2 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配置数据可以和升级应用程序一并完成。 电缆下载

为了提高调试进度,通常会采用电缆下载的方式。在单板上兼容这两种配置方式有多种办法,我们采用了比较简单又便于生产的\欧姆电阻连接方式\。电气连接的示意图如下:

图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输出信号频率太高 CPU与FPGA连接有误 下载电缆影响 CPU的I/O口故障 FPGA故障 解决方法 重新生成配置数据,并检查生成过程是否正确 控制DCLK频率,具体数据参见“错误!未找到引用源。”相关章节 检查硬件连线 拔去下载电缆 用示波器检查PB24~PB28信号波形 更换FPGA

经验教训

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

1. CPU的启动必须不依赖于FPGA,这在单板设计时需要特别考虑的。即CPU子系统应在FPGA被配置前可独立运行并访问所需资源。CPU对FPGA进行配置所需的资源很少,一般来说,仅RAM和BootROM的访问而已。当然,其他挂在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能否忍受下载电缆信号电平。


用CPU配置Altera公司的FPGA(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第十章 电化学基础与氧化还原平衡

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: