为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

用CPU配置Altera公司的FPGA

2011-08-03 15页 pdf 445KB 43阅读

用户头像

is_491738

暂无简介

举报
用CPU配置Altera公司的FPGA 用 CPU 配置 Altera 公司的 FPGA 一. 概 述 目前很多产品都广泛用了 FPGA,虽然品种不同,但编程方式几乎都一样:利用专用的 EPROM对 FPGA 进行配置。专用的 EPROM价格不便宜,且大不跟上都是一次性 OPT方式 编程。一旦更改 FPGA设计,代价不小。 为了进一步降低产品的成本和升级成本,可 以考虑利用板上现有 CPU 子系统中空闲的 ROM空间存放 FPGA的配置数据,并由 CPU 模拟专用 EPROM 对 FPGA 进行配置。 本文将以 PowerPC860 和 EP1...
用CPU配置Altera公司的FPGA
用 CPU 配置 Altera 公司的 FPGA 一. 概 述 目前很多产品都广泛用了 FPGA,虽然品种不同,但编程方式几乎都一样:利用专用的 EPROM对 FPGA 进行配置。专用的 EPROM价格不便宜,且大不跟上都是一次性 OPT方式 编程。一旦更改 FPGA设计,代价不小。 为了进一步降低产品的成本和升级成本,可 以考虑利用板上现有 CPU 子系统中空闲的 ROM空间存放 FPGA的配置数据,并由 CPU 模拟专用 EPROM 对 FPGA 进行配置。 本文将以 PowerPC860 和 EP1K30为例,讲解如何 利用 CPU来配置 FPGA。 CPU 配置 FPGA 的优点 与 Configuration EPROM 方式相比本设计有如下优点: 1. 降低硬件成本——省去了 FPGA专用 EPROM的成本,而几乎不增加其他成本。以 A LTERA的 10K 系列为例,板上至少要配一片以上的 EPC1,每片 EPC1 的价格要几十元, 容量 1M位。提供 1Mb的存储空间,对于大部分单板来说(如 860系统的单板),是 不需要增加硬件的。即使增加 1Mb存储空间,通用存储器也会比 FPGA专用 EPROM便 宜。 2. 可多次编程——FPGA 专用 EPROM几乎都是 OTP,一旦更换 FPGA版本,旧版本的 并不便宜的 EPROM只能丢弃。如果使用本设计对 FPGA配置,选用可擦除的通用存储 器保存 FPGA 的编程数据,更换 FPGA版本,无须付出任何硬件代价。这也是降低硬件 成本的一个方面。 3. 实现真正"现场可编程"--FPGA的特点就是"现场可编程",只有使用 CPU对 FPGA 编程才能体现这一特点。如果设计周全的话,单板上的 FPGA可以做到在线升级。 4. 减少生产工序--省去了对"FPGA专用 EPROM"烧结的工序,对提高生产率,降低生 产成本等均有好处。对于双面再流焊的单板,更可省去手工补焊 DIP器件的工序。 当然,与 Configuration EPROM 方式相比也有一些需要注意的的地方: fisherxiang 高亮 1. 需要 CPU 提供 5根 I/O线--一般来说,这并不困难。对于 MPC860一类的 CPU来 说,区区 5 根 I/O线是不成问题的。即使是某些设计中实在没有多余的 I/O供配置使 用,也可通过板上的 PLD 扩展。虽然这样做可能会增加成本,但获得的真正"现场可 编程"的功能是非常宝贵的。 2. CPU的 Boot应不依赖于 FPGA--这在单板设计时需要特别考虑的。由于 CPU对 FP GA进行配置所需的资源很少,这一点比较容易做到。 设计摘要 本设计严格按照 FPGA的 PS配置进行,并在配置过程中始终监测工作状态,在完 善的软件配合下,可纠正如上电次序导致配置不正常等错误。因此,采用此方法对 F PGA进行配置,性能将优于 Configuration EPROM 方式。 本设计是利用板上现有 CPU子系统中空闲的 ROM 空间存放 FPGA的配置数据,并由 CP U模拟专用 EPROM对 FPGA 进行配置,以降低硬件成本并实现 FPGA的在线升级。 本设计已在 MPC860和 EP1K30 环境下完成验证,适用于有 5个多余 I/O 的 CPU对 Alt era FPGA的配置。 参考资料 ALTERA:AN-116 Configuring SRAM-Based LUT Devices ALTERA: ACEX 1K Programmable Logic Device Family 二. 硬件设计 1.配置基本原理 RAM-Based FPGA 由于 SRAM 工艺的特点,掉电后数据会消失。因此,每次系统上电后,均需对 FPGA 进行配 置。对于 Altera 的 FPGA,配置方法可分为:专用的 EPROM (Configuration EPROM)、PS(Passive serial 无 源串行)、PPS(Passive parallel synchronous 无源同步并行)、PPA(Passive parallel asynchronous 无源异步并 行)、JTAG(不是所有器件都支持)。 本设计采用 PS 方式对 FPGA 进行配置,是基于如下几个方面的考虑: 1. PS 方式连线最简单 2. 与 Configuration EPROM 方式可以兼容(MSEL0、1 设置不变) 3. 与并行配置相比,误操作的几率小,可靠性高 只需利用 CPU 的 5 个 I/O 线,就可按图 2 所指示的时序对 FPGA 进行 PS 方式的配置。 2.配置电路的连接 CPU 仅需要利用 5 个 I/O 脚与 FPGA 相连,就实现了 PS 方式的硬件连接,具体信号见下表(信号方向从 CPU 侧 看): 信号名 I/O 说明 Data0 O configuration data DCLK O configuration clock nCONFIG O device reset (a low to high transition starts the configuration within the device) Conf_done I Status bit (gets checked after configuration, will be high if configuration complete) nSTATUS I Status bit indicating an error during configuration if low 图 3 PS 配置单片 FPGA 的硬件连接 图 4 PS 配置多片 FPGA 的硬件连接 3.配置操作过程 CPU 按下列步骤操作 I/O 口线,即可完成对 FPGA 的配置: 1. nCONFIG="0"、DCLK="0",保持 2μS 以上。 2. 检测 nSTATUS,如果为"0",表明 FPGA 已响应配置要求,可开始进行配置。否则报错。正常情况下,nCO NFIG="0"后 1μS 内 nSTATUS 将为"0"。 3. nCONFIG="1",并等待 5μS。 4. Data0 上放置数据(LSB first),DCLK="1",延时。 5. DCLK="0",并检测 nSTATUS,若为"0",则报错并重新开始。 6. 准备下一位数据,并重复执行步骤 4、5,直到所有数据送出为止。 7. 此时 Conf_done 应变成"1",表明 FPGA 的配置已完成。如果所有数据送出后,Conf_done 不为"1",必须重新 配置(从步骤 1 开始)。 8. 配置完成后,再送出 10 个周期的 DCLK,以使 FPGA 完成初始化。 注意事项: 1. DCLK 时钟频率的上限对不同器件是不一样的,具体限制见下表: 型号 最高频率 ACEX1K、FLEX10KE、APEX20K 33MHz FLEX10K 16MHz APEXII、APEX20KE、APEX20KC 57MHz Mercury 50MHz 2. 步骤 7 中 FPGA 完成初始化所需要的 10 个周期的 DCLK 是针对 ACEX 1K 和 FLEX 10KE 的。如果是 APE X 20K,则需要 40 个周期。 3. 在配置过程中,如果检测到 nSTATUS 为"0",表明 FPGA 配置有错误,则应回到步骤 1 重新开始。 图 5 操作流程框图 4.实现在线升级 采用本模块的最大优点是可以实现单板 FPGA 的在线升级。要实现在线升级,单板设计必须考虑以下几个问题: 1. CPU 的启动必须不依赖于 FPGA,即 CPU 子系统应在 FPGA 被配置前可独立运行并访问所需资源。CPU 对 F PGA 进行配置所需的资源很少,一般来说,仅 RAM 和 BootROM 的访问而已。 2. FPGA 配置前(或配置过程中)必须保证控制的设备处于非工作态或不影响其他设备工作的稳定态。 3. 为了实现 FPGA 的在线升级,存放 FPGA 配置数据的存储器器必须是 CPU 可重写的,且此存储器应是非易 失性的,以保证单板断电后,FPGA 数据不需从后台重新获得。 具体过程 结合图 6 的实例,对 FPGA 在线升级作一具体描述。 图 6 FPGA 在线升级 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 和 Altera EP1K30 为例,电原理图如下: 图 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 源程序 void InitPORT(void) { // 初始化 PB 口相应位: // PB24-输出,PB25-输入,PB26-输出,PB27-输入,PB28-输出 IMMR->pip_pbpar=0x00000000; IMMR->pip_pbdir=0xFFFFF5AF; IMMR->pip_pbodr=0x00000000; IMMR->pip_pbdat=0xffffff57; } UBYTE Fpga_DownLoad(void) { // FPGA 配置 UBYTE *Bootaddr; UWORD CountNum=0x0; UBYTE FpgaBuffer, i; // 获得 Boot 区首地址 Bootaddr=(UBYTE *)(IMMR->memc_or0 & IMMR->memc_br0 & 0xFFFF8000); Set_nCONFIG(0); // nCONFIG="0",使 FPGA 进入配置状态 Set_DCLK(0); DELAY5us(); if (Read_nSTATUS() == 1) { // 检测 nSTATUS,如果为"0",表明 FPGA 已响应配置要求,可开始进行配置。否则报错 Err_LED(1); return 0; } Set_nCONFIG(1); DELAY5us(); // 开始输出配置数据: while(CountNum <= 0x0e74e) { FpgaBuffer= *(Bootaddr+0x70000+CountNum); for (i=0; i<8; i++) { // DCLK="0"时,在 Data0 上放置数据(LSB first) Set_Data0(FpgaBuffer&0x01); Set_DCLK(1); // DCLK->"1",使 FPGA 读入数据 FpgaBuffer >>= 1; // 准备下一位数据 if (Read_nSTATUS() == 0) { // 检测 nSTATUS,如果为"0",表明 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,如果为"0",表明 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。我们在 M CP860 的 PB 口选 5 根线与 EP1K30 连接成 PS 配置方式,硬件连接参考第二章,Data0 也由 MPC860 输出,信号 定义见下表: 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 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 配置的代码。等 FPG A 设计定型后(相当于准备使用 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 进行配置所需的资源很少,一般来说,仅 RAM 和 BootROM 的访问而 已。当然,其他挂在 CPU 总线上的设备必须处于非访问态,FPGA 所控制的设备也应处于非工作态或不影响其他 设备工作的稳定态。 2. 为了实现 FPGA 的在线升级,存放 FPGA 配置数据的区域必须是 CPU 可重写的 3. 利用 CPU 配置 FPGA,在使用者的主观感觉上会觉得 FPGA"起来"得比较慢。这是因为 FPGA 的配置要等 C PU 启动完成后才进行。因此,应充分考虑 FPGA 所控制的设备在 FPGA 被配置完成前处于非工作态或不影响其 他设备工作的稳定态。 4. 关于配置数据占用空间的问题。对于 Altera 的 FPGA 来说,每个确定型号的器件,配置数据的长度是一定的 (和设计逻辑无关)。因此,一旦确定了 FPGA 的型号,配置数据占用 EPROM 的空间也可以在设计中确定。 5. 在使用中请保留下载电缆插座,以加快调试进度。 6. 下载成功后,软件应有指示,便于维护。 7. 要从系统的角度考虑现场升级,保护好 FPGA 数据。 8. 单板调试时电缆下载的问题。为了兼容两种下载方式,需要电缆下载时,可在 CPU 程序中跳过配置程序。 9. 如果单板有可能使用电缆下载,必须考虑 CPU 的 I/O 能否忍受下载电缆信号电平
/
本文档为【用CPU配置Altera公司的FPGA】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索