DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 102|回复: 0
打印 上一主题 下一主题

TMS320C61416控制FPGA数据加载设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-17 23:22:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
目前实现加载的方法通常有两种:一种是用专用Cable通过JTAG口进行数据加载,另一种是外挂与该FPGA厂商配套的PROM芯片。前者需要在PC机上运行专用的加载软件,直接下载到FPGA片内,所以掉电数据仍然会丢失,只适用于FPGA调试阶段而不能应用于工业现场的数据加载。后者虽然可以解决数据丢失问题,但这种专用芯片成本较高,供货周期也较长(一般大于2个月),使FPGA产品的开发时间受到很大约束。根据FPGA芯片加载时序分析,本文提出了采用通过市面上常见的Flash ROM芯片替代专用PROM的方式,通过DSP的外部高速总线进行FPGA加载;既节约了系统成本,也能达到FPGA上电迅速加载的目的;特别适用于在FPGA调试后期,待固化程序的阶段。下面以两片Xilinx公司Virtex-4系列XC4VLX60芯片为例,详细介绍采用TI公司的TMS320C61416 DSP控制FPGA芯片数据加载的软硬件设计。

  1 Xilinx FPGA配置原理
  Virtex-4系列的FPGA芯片外部配置引脚MODE PIN(M0、M1、M2),有5种配置模式,如表1所列。



  FPGA在Slave SelectMAP方式下,共用了表2所列的15个配置引脚。



  1.1 配置流程
  FPGA加载时序如图1所示。各配置信号必须满足其时序关系,否则配置工作无法正常完成。



  图1中,Slave SelelctMAP加载主要包括以下3个步骤:
  ①启动和初始化。FPGA上电正常后,通过PROG_b引脚低脉冲进行FPGA异步复位,使得FPGA内部逻辑清零。其次PROG_b上拉高,停止外部复位,INIT_b引脚会在TPOR时间段内自动产生一个由低到高的跳变,指示FPGA内部初始化完成,可以进行数据下载;同时FPGA在INIT_b的上升沿采样其模式引脚MODE PIN,决定其模式配置。
  ②比特流加载。INIT_b信号变高后,不需要额外的等待时间,Virtex器件就可以立即开始数据的配置。比特流数据在外部CCLK信号上升沿按字节方式置入。该过程包括同步初始化字、器件ID号校验、加载配置数据帧、CRC校验4个部分。
  ③STARTUP启动。在成功校验CRC码位后,比特流命令使得FPGA进入STARTUP状态。它是由8相状态机实现的。中间包括等待DCM锁相、DCI匹配等几个状态,最后FPGA释放外部DONE引脚,对外输出高阻态,由外部上拉高,指示FPGA加载成功。
  1.2 文件生成
  ISE生成数据文件主要有3种:bIT文件,由二进制格式进行表征逻辑设计,包括文件头和配置数据,主要用于JTAG下载电缆模式;MCS文件,为外部PROM烧写生成的下载文件,ASCII码,与前者不同的是它含有在PROM中的数据地址和校验值;bIN文件格式,由二进制表示,完全由配置数据组成,不需要作其他的提取和进制转换,只是配置前的byte-Swapped是在CPLD中实现的。本设计采用的是bIN文件格式。
  2 硬件实现
  系统采用2片Xilinx Virtex-4系列的600万门的FPGA XC4VLX60。主MCU是TI公司高性能定点处理器TMS320C6416,对外有2个EMIF总线接口,分别是64位宽EMIFA和16位宽EMIFb。EMIFb上挂有8位8Mb的Flash和16位CPLD:Flash做2片FPGA的bIN文件保存,之前由仿真器烧写;CPLD用于2片FPGA地址译码和DSP与FPGA配置部分的逻辑接口。整个数据流程是在DSP上电启动后,bootloader自行引导用户程序运行。该程序负责由EMIFb总线搬移Flash空间中bIN文件,通过CPLD分别对2片FPGA进行配置加载。硬件系统拓扑图如图2所示。



  3 软件设计
  软件包括3部分:引导bootloader代码,加载FPGA用户程序以及接口部分的CPLD Verilog代码。
  3.1 DSP bootloader
  本系统中目标板处于FPGA调试后期,需要固化其加载程序。整板上电后,要求脱离仿真器自行加载FPGA,因此这里采用DSP的EMIF booT方式。它是由DSP上电复位后,以默认ROM时序通过EDMA自行搬移bCE1的ROM空间前1 Kb内容到片内,在其0x0地址开始运行。
  一般由C编写的程序代码长度都远大于1 Kb,如果只是纯粹由DSP搬移Flash前1 Kb空间,这样便会丢失数据,程序无法正常运行。这里采用由汇编语言写的一个两次搬移的bootloader程序,来引导较大的用户程序。使用汇编语言是因为其代码效率高,代码长度短(本系统中只有256字节)。两次搬移是因为第一次DSP自行搬移后的bootloader会占用片内的0x0地址前1 Kb空间,与下一步的用户程序0x0地址拷贝冲突(中断向量表必须放在0x0地址,否则会丢失中断跳转的绝对地址),且运行中的bootloader不能覆盖自身。所以把拷贝用户程序的那部分代码放在片内较底端运行,腾出了用户空间的0x0地址。最后整体拷贝结束后,bootloader再跳转到用户程序入口地址c_int00运行。
       3.2 用户程序和CPLD程序


  本系统中2片FPGA加载的原理一样。为避免繁琐,这里以1片FPGA_A为例来作介绍。
  CPLD在系统中负责2项工作。
  ①映射DSP端Flash分页寄存器:控制Flash的高3位地址线,分8页,每页1 Mb空间。
  ②映射DSP端2片FPGA的加载寄存器:
  a.配置寄存器FpgaA(b)_config_Reg[8:O]。负责配置数据和时钟,高8位为byte-Swapped前的数据位,输出到配
  置引脚时进行字节交换,最低位为CCLK位。
  b.控制寄存器FpgaA(b)_Prog_Reg[2:O]。负责外部控制引脚,分别为CS_b、RDWR_b和PROG_b。
  c.状态寄存器FpgaA(b)_State_Reg[2:0]。负责回读配置中的握手信号,分别为bUSY、DONE和INIT_b。
  由bootloader引导的用户程序由C语言开发,在CCS下调试通过。它主要实现Flash翻页,把之前烧写在Flash中的bIN文件,通过上述CPLD中3个加载寄存器对FPGA进行上电配置。具体流程如图3所示。



  当前FPGA配置时钟CCLK是在用户程序中通过DSP写命令产生的,即写FpgaA(b)_Config_Reg的CCLK位高低电平;同时8位配置数据也连续写2次,由CPLD锁存到FPGA总线上,便能充分保证图1中该有效数据在CCLK上升沿上被锁。
  以下是CPLD中动态加载部分的Verilog代码:






  //FPGA控制寄存器(DSP只写)
  结 语
  该系统已成功用于某公司一款软件无线电平台中,通过反复软硬件调试,现已投放市场。此平台不仅可以实现上述提到的上电Flash自行加载FPGA的目的,还可在其配置完以后通过主机端对FPGA实现动态加载,充分满足了软件无线电中可重构化、实时灵活的指导思想。

                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-26 12:36 , 耗时 0.096577 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

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