基于ARM的FPGA加载配置实现
发布时间:2008/6/3 0:00:00 访问次数:554
    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;    }&
    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;    }&