第一范文网 - 专业文章范例文档资料分享平台

用CPU配置Altera公司的FPGA

来源:用户分享 时间:2025/5/21 12:39:31 本文由孤心无意 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

图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=\,使FPGA进入配置状态 Set_DCLK(0); DELAY5us();

if (Read_nSTATUS() == 1)

{ // 检测nSTATUS,如果为\,表明FPGA已响应配置要求,可开始进行配置。否则报错 Err_LED(1); return 0; }

Set_nCONFIG(1); DELAY5us();

// 开始输出配置数据: 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

搜索更多关于: 用CPU配置Altera公司的FPGA 的文档
用CPU配置Altera公司的FPGA.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9musv7s1xb7s7tu44glg_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top