位置:51电子网 » 技术资料 » 测试测量

基于ARM的FPGA加载配置实现

发布时间:2008/6/3 0:00:00 访问次数:554

            引言     基于sram工艺fpga在每次上电后需要进行配置,通常情况下fpga的配置文件由片外专用的eprom来加载。这种传统配置方式是在fpga的功能相对稳定的情况下采用的。在系统设计要求配置速度高、容量大、以及远程升级时,这种方法就显得很不实际也不方便。本文介绍了通过arm对可编程器件进行配置的的设计和实现。     1 配置原理与方式    1.1 配置原理    在fpga正常工作时,配置数据存储在sram单元中,这个sram单元也被称为配置存储(configuration ram)。由于sram是易失性的存储器,因此fpga在上电之后,外部电路需要将配置数据重新载入到片内的配置ram中。在芯片配置完成后,内部的寄存器以及i/o管脚必须进行初始化。等初始化完成以后,芯片才会按照用户设计的功能正常工作。     1.2 配置方式    根据fpga在配置电路中的角色,其配置数据可以使用3种方式载入到目标器件中:    ·fpga主动(active)方式;    ·fpga 被动(passive)方式;    ·jt

    ag 方式;    在fpga 主动方式下,由目标fpga来主动输出控制和同步信号(包括配置时钟)给专用的一种串行配置芯片,在配置芯片收到命令后,就把配置数据发到fpga,完成配置过程。在被动方式下,由系统中的其他设备发起并控制配置过程,fpga只输出一些状态信号来配合配置过程。被动方式包括被动串行ps(passive serial )、快速被动并行fpp(fast passive parallel)、被动并行同步pps(passive parallel serial)、被动并行异步ppa(passive parallel asynchronous)、以及被动串行异步psa(passive serial asynchronous)。jtag是ieee 1149.1边界扫描测试的标准接口。从jtag接口进行配置可以使用altera的下载电缆,通过quartus工具下载,也可以采用微处理器来模拟jtag时序进行配置。    2 硬件电路设计    at91arm9200对ep1c6配置的硬件电路示意图如图1所示。    在配置fpga时,首先需要将年nconfig拉低(至少40us), 然后拉高。当nconfig被拉高后,fpga的nstatus也将变高,表示这时已经可以开始配置,外部电路就可以用dclk的时钟上升沿一位一位地将配置数据写进fpga中。当最后一个比特数据写入以后,config_done管脚被fpga释放,被外部的上拉电阻拉高,fpga随即进入初始化状态。

        

      图 1 arm配置fpga电路原理图    3 软件设计    本文在设计时使用linux系统,软件编写和调试是在ads 下。主要程序如下:    static at91ps_pio pioc;    inline void pioc_out_0 (int mask)    {      pioc->pio_codr = mask;    }    inline void pioc_out_1 (int mask)    {      pioc->pio_sodr = mask;    }    inline int pioc_in (int mask)    {      return pioc->pio_pdsr & mask;    }    inline void xmit_byte (char c)    {      int i;      for (i = 0; i >= 1;       }    }    void pioc_setup ()    {       pioc->pio_per   =data0 | nconfig | dclk | nstatus | conf_done;       pioc->pio_oer   =data0 | nconfig | dclk;       pioc->pio_odr   =nstatus | conf_done;       pioc->pio_ifer   =nstatus | conf_done;       pioc->pio_codr   =data0 | nconfig | dclk;     pioc->pio_idr   =data0 | nconfig | dclk | nstatus | conf_done;       pioc->pio_mddr =data0 | nconfig | dclk;       pioc->pio_ppudr =data0 | nconfig | dclk | nstatus | conf_done;       pioc->pio_owdr =data0 | nconfig | dclk | nstatus | conf_done;    }&

            引言     基于sram工艺fpga在每次上电后需要进行配置,通常情况下fpga的配置文件由片外专用的eprom来加载。这种传统配置方式是在fpga的功能相对稳定的情况下采用的。在系统设计要求配置速度高、容量大、以及远程升级时,这种方法就显得很不实际也不方便。本文介绍了通过arm对可编程器件进行配置的的设计和实现。     1 配置原理与方式    1.1 配置原理    在fpga正常工作时,配置数据存储在sram单元中,这个sram单元也被称为配置存储(configuration ram)。由于sram是易失性的存储器,因此fpga在上电之后,外部电路需要将配置数据重新载入到片内的配置ram中。在芯片配置完成后,内部的寄存器以及i/o管脚必须进行初始化。等初始化完成以后,芯片才会按照用户设计的功能正常工作。     1.2 配置方式    根据fpga在配置电路中的角色,其配置数据可以使用3种方式载入到目标器件中:    ·fpga主动(active)方式;    ·fpga 被动(passive)方式;    ·jt

    ag 方式;    在fpga 主动方式下,由目标fpga来主动输出控制和同步信号(包括配置时钟)给专用的一种串行配置芯片,在配置芯片收到命令后,就把配置数据发到fpga,完成配置过程。在被动方式下,由系统中的其他设备发起并控制配置过程,fpga只输出一些状态信号来配合配置过程。被动方式包括被动串行ps(passive serial )、快速被动并行fpp(fast passive parallel)、被动并行同步pps(passive parallel serial)、被动并行异步ppa(passive parallel asynchronous)、以及被动串行异步psa(passive serial asynchronous)。jtag是ieee 1149.1边界扫描测试的标准接口。从jtag接口进行配置可以使用altera的下载电缆,通过quartus工具下载,也可以采用微处理器来模拟jtag时序进行配置。    2 硬件电路设计    at91arm9200对ep1c6配置的硬件电路示意图如图1所示。    在配置fpga时,首先需要将年nconfig拉低(至少40us), 然后拉高。当nconfig被拉高后,fpga的nstatus也将变高,表示这时已经可以开始配置,外部电路就可以用dclk的时钟上升沿一位一位地将配置数据写进fpga中。当最后一个比特数据写入以后,config_done管脚被fpga释放,被外部的上拉电阻拉高,fpga随即进入初始化状态。

        

      图 1 arm配置fpga电路原理图    3 软件设计    本文在设计时使用linux系统,软件编写和调试是在ads 下。主要程序如下:    static at91ps_pio pioc;    inline void pioc_out_0 (int mask)    {      pioc->pio_codr = mask;    }    inline void pioc_out_1 (int mask)    {      pioc->pio_sodr = mask;    }    inline int pioc_in (int mask)    {      return pioc->pio_pdsr & mask;    }    inline void xmit_byte (char c)    {      int i;      for (i = 0; i >= 1;       }    }    void pioc_setup ()    {       pioc->pio_per   =data0 | nconfig | dclk | nstatus | conf_done;       pioc->pio_oer   =data0 | nconfig | dclk;       pioc->pio_odr   =nstatus | conf_done;       pioc->pio_ifer   =nstatus | conf_done;       pioc->pio_codr   =data0 | nconfig | dclk;     pioc->pio_idr   =data0 | nconfig | dclk | nstatus | conf_done;       pioc->pio_mddr =data0 | nconfig | dclk;       pioc->pio_ppudr =data0 | nconfig | dclk | nstatus | conf_done;       pioc->pio_owdr =data0 | nconfig | dclk | nstatus | conf_done;    }&

相关IC型号

热门点击

 

推荐技术资料

音频变压器DIY
    笔者在本刊今年第六期上着重介绍了“四夹三”音频变压器的... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!