《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于ARM的FPGA加載配置實現方案
基于ARM的FPGA加載配置實現方案
摘要: 基于SRAM工藝FPGA在每次上電后需要進行配置,通常情況下FPGA的配置文件由片外專用的EPROM來加載。這種傳統配置方式是在FPGA的功能相對穩定的情況下采用的。在系統設計要求配置速度高、容量大、以及遠程升級時,這種方法就顯得很不實際也不方便。本文介紹了通過ARM對可編程器件進行配置的的設計和實現。
關鍵詞: FPGA ARM 加載配置
Abstract:
Key words :

  引言

  基于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隨即進入初始化狀態。

ARM配置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 < 8; i++)

  {

  if (c & 1)

           pioc_out_1 (DATA0);

      else

           pioc_out_0 (DATA0);

           pioc_out_0 (DCLK);

           pioc_out_1 (DCLK);

      c >>= 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;

}

int pioc_map ()

{

    int fd;

    off_t addr = 0xFFFFF800;   // PIO controller C

    static void *base;

    if ((fd = open ("/dev/mem", O_RDWR | O_SYNC)) == -1)

     {

       printf ("Cannot open /dev/mem.\n");

       

 

return 0;

 

     }

    printf ("/dev/mem opened.\n");

    base = mmap (0, MAP_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr & ~MAP_MASK);

    if (base == (void *) -1)

    {

    printf ("Cannot mmap.\n");

      return 0;

    }

    printf ("Memory mapped at address %p.\n", base);

    pioc = base + (addr & MAP_MASK);

    return 1;

}

int main (int argc, char **argv)

{

    FILE *file;

    char data[16];

    int nbytes, i;?

    if (argc != 2)

   {

      printf ("%s \n", argv[0]);

      return -1;

   }

    file = fopen (argv[1], "r");

    if (!file)

   {

       printf ("File %s not found.\n", argv[1]);

       return -1;

   }

   if (!pioc_map ())

        return -1;

   pioc_setup ();

   pioc_out_0 (nCONFIG);

   for (i = 0; i < 10000 && pioc_in (nSTATUS); i++) { }

   if (i == 10000)

   {

       printf ("nSTATUS = 1 before attempting configuration.\n");

       return -1;

    }

    pioc_out_1 (nCONFIG);

    for (i = 0; i < 10000 && !pioc_in (nSTATUS); i++) { }

    if (i == 10000)

    {

    printf ("Timeout waiting for nSTATUS = 1.\n");

       return -1;

    }

    while ((nbytes = fread (data, sizeof (char), sizeof (data), file)) > 0)

    {

       if (pioc_in (CONF_DONE))

       {

             printf ("CONF_DONE = 1 while transmitting data.\n");

             return -1;

        }

        if (!pioc_in (nSTATUS))

        {

           printf ("nSTATUS = 0 while transmitting data.\n");

           return -1 ;

 

        }

        for (i = 0; i < nbytes; i++)

             xmit_byte (data[i]);

   }

   for (i = 0; i < 10000 && !pioc_in (CONF_DONE); i++)

   {

       if (!pioc_in (nSTATUS))

       {

          printf ("nSTATUS = 0 while transmitting data.\n");

          return -1;

       }

       pioc_out_0 (DATA0);

       pioc_out_0 (DCLK);

       pioc_out_1 (DCLK);

   }

   if (i == 10000)

   {

          printf ("Timeout waiting for CONF_DONE = 1.\n");

          return -1;

 

   }

   return 0;

}

  4 結論

  本文給出了基于ARM的FPGA加載配置軟件實現。這種方法充分利用了ARM的速度快、靈活的特點,節省了開發成本,又滿足了一些特殊的系統設計要求。本方法也適用于其它的微處理器。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲伦理自拍| 牛牛精品成人免费视频| 亚洲性色视频| 国产精品激情av在线播放| 国产精品久久久久久影视| 欧美亚洲动漫精品| 国产精品久久久久999| 欧美日韩国产高清视频| 欧美一区三区二区在线观看| 欧美三级在线| 欧美视频在线播放| 国产精品尤物福利片在线观看| 亚洲精选一区二区| 最新中文字幕亚洲| 国产精品啊v在线| 国产欧美亚洲精品| 国产精品美女主播在线观看纯欲| 欧美激情视频在线播放| 亚洲午夜精品一区二区| 在线亚洲伦理| 欧美一区=区| 久久精品视频在线看| 亚洲国产精品成人精品| 国产午夜精品美女毛片视频| 欧美亚洲一区在线| 在线观看免费视频综合| 欧美理论大片| 亚洲欧洲av一区二区三区久久| 国产精品xnxxcom| 久久电影一区| 亚洲二区视频| 欧美精品日韩| 国产一区91精品张津瑜| 国产尤物精品| 欧美日韩中文在线| 久久久蜜桃一区二区人| 最新高清无码专区| 国产精品久在线观看| 美日韩精品视频| 欧美国产丝袜视频| 美女脱光内衣内裤视频久久网站| 国产精品成人aaaaa网站| 欧美国产三级| 在线观看亚洲精品| 亚洲午夜精品久久久久久浪潮| 尤物精品国产第一福利三区| 欧美寡妇偷汉性猛交| 亚洲人成人一区二区在线观看| 欧美91视频| 91久久国产精品91久久性色| 美女被久久久| 久久不射2019中文字幕| 欧美精品乱人伦久久久久久| 欧美精品久久99久久在免费线| 国产精品成人一区二区艾草| 欧美综合国产精品久久丁香| 欧美日韩一区不卡| 国产精品久久久久久久久久尿| 国产女人精品视频| 你懂的一区二区| 欧美日韩伊人| 一本大道久久a久久精品综合| 亚洲一区二区不卡免费| 国产精品久久久久永久免费观看| 国产精品亚洲а∨天堂免在线| 极品av少妇一区二区| 欧美日韩中文在线观看| 久久精品免费看| 亚洲高清一区二| 一区二区三区**美女毛片| 亚洲精品专区| 国产精品久久久久9999| 狠狠色综合播放一区二区| 欧美国产日本| 91久久综合| 在线一区免费观看| 午夜精品久久久久久久99黑人| 欧美三级黄美女| 国产一区二区三区视频在线观看| 香蕉久久久久久久av网站| 激情综合色综合久久综合| 欧美成人一区在线| 国内精品视频在线观看| 欧美一区二区三区在线观看视频| 久久久精品国产免大香伊| 宅男噜噜噜66国产日韩在线观看| 亚洲欧美精品伊人久久| 一本色道久久综合亚洲91| 国产精品久久久久久户外露出| 亚洲国产成人不卡| 裸体素人女欧美日韩| 亚洲欧美在线一区二区| 性一交一乱一区二区洋洋av| 欧美成人tv| 久久久久久电影| 美女露胸一区二区三区| 一区二区三区免费观看| 亚洲色无码播放| 欧美波霸影院| 红桃av永久久久| 国产日产精品一区二区三区四区的观看方式| 欧美一区二区三区免费大片| 国产精品国产三级国产专播品爱网| 欧美一激情一区二区三区| 久热精品在线视频| 亚洲人精品午夜在线观看| 亚洲综合日本| 亚洲精品乱码久久久久| 一本高清dvd不卡在线观看| 国产一区二区高清视频| 欧美丝袜第一区| 亚洲精品一二三区| 玖玖在线精品| 香蕉亚洲视频| 国产精品久久九九| 美女国产一区| 欧美v亚洲v综合ⅴ国产v| 国产亚洲日本欧美韩国| 日韩视频三区| 亚洲午夜一二三区视频| 国产精品日韩欧美一区二区三区| 欧美涩涩网站| 免费观看一级特黄欧美大片| 亚洲七七久久综合桃花剧情介绍| 久久久久久久久蜜桃| 欧美午夜一区二区| 亚洲一区二区三区精品在线| 国产精品亚洲аv天堂网| 欧美喷潮久久久xxxxx| 久久久久女教师免费一区| 欧美1区视频| 国产午夜精品视频免费不卡69堂| 久久精品99国产精品酒店日本| 亚洲精品美女| 国产伦理精品不卡| 国产免费一区二区三区香蕉精| 先锋影音网一区二区| 国产一区二区三区最好精华液| 欧美一级在线亚洲天堂| 久久精品国产第一区二区三区| 国产精品成av人在线视午夜片| 欧美日本亚洲| 1024成人网色www| 欧美性jizz18性欧美| 欧美性淫爽ww久久久久无| ●精品国产综合乱码久久久久| 黑丝一区二区| 欧美色大人视频| 欧美fxxxxxx另类| 久久精品日产第一区二区三区| 久久久久久婷| 国产亚洲a∨片在线观看| 国产精品va在线播放| 羞羞答答国产精品www一本| 亚洲精品欧美极品| 噜噜噜躁狠狠躁狠狠精品视频| 欧美伊人久久久久久久久影院| 国产一区二区三区久久久久久久久| 99精品99久久久久久宅男| 在线成人小视频| 亚洲美女精品久久| 亚洲欧美综合另类中字| 欧美激情影院| 欧美国产在线视频| 日韩午夜在线播放| 欧美国产日韩xxxxx| 久久久久在线观看| 久久久免费av| 美女国内精品自产拍在线播放| 亚洲国产另类 国产精品国产免费| 国产人成精品一区二区三| 久久色中文字幕| 国内精品久久久久影院薰衣草| 欧美性做爰猛烈叫床潮| 国产欧美日韩专区发布| 激情欧美丁香| 亚洲成人在线网站| 亚洲欧美综合网| 欧美人与性动交cc0o| 国产欧美日韩综合一区在线观看| 亚洲一区中文字幕在线观看| 欧美大片网址| 午夜欧美不卡精品aaaaa| 亚洲精品影院| 久久9热精品视频| 亚洲国产免费| 国产精品激情偷乱一区二区∴| 久久夜色精品| 久久精品2019中文字幕| 欧美日韩日本国产亚洲在线| 亚洲第一狼人社区| 欧美激情国产日韩精品一区18| 亚洲一区二区精品在线观看| 在线成人www免费观看视频| 国产乱码精品一区二区三区五月婷| 日韩视频免费在线观看| 国产精品入口日韩视频大尺度| 欧美69wwwcom| 国产精品国产三级国产专播精品人| 亚洲日本欧美在线| 亚洲第一黄色| 亚洲综合色婷婷| 国产欧美va欧美不卡在线| 午夜日韩福利| 亚洲电影激情视频网站| 欧美14一18处毛片| 亚洲国产影院| 免费观看在线综合色| 日韩视频在线观看国产| 欧美伊人精品成人久久综合97| 久久久免费精品| 亚洲免费视频网站| 久久久一区二区| 欧美一激情一区二区三区| 国产亚洲在线观看| 久热爱精品视频线路一| 亚洲激情网站| 亚洲欧美自拍偷拍| 亚洲毛片在线免费观看| 欧美精品一区二区三区高清aⅴ| 国产综合色产| 在线播放视频一区| 久久久噜噜噜久久中文字免| 国产视频观看一区| 亚洲午夜高清视频| 国产精品爱啪在线线免费观看| 亚洲欧美日韩在线| 亚洲午夜精品久久| 亚洲一区二区三区在线| 欧美国产日本高清在线| 欧美日韩1区2区3区| 欧美人与禽猛交乱配视频| 欧美日韩国产一中文字不卡| 欧美一区二区三区在线| 国产欧美日韩免费看aⅴ视频| 麻豆国产精品777777在线| 免费欧美日韩| 91久久综合| 亚洲国产视频一区| 欧美日精品一区视频| 久久精品一区二区国产| 亚洲日本一区二区| 午夜精品av| 1024成人| 欧美bbbxxxxx| 亚洲人午夜精品| 欧美精品一线| 亚洲日本欧美在线| 欧美好骚综合网| 国产精品久久久久久影院8一贰佰| 国产精品电影网站| 国产亚洲欧美在线| 欧美日韩一区二区三区在线视频| 国产精品porn| 国产精品午夜电影| 亚洲免费人成在线视频观看| 国户精品久久久久久久久久久不卡| 亚洲午夜女主播在线直播| 久久久综合网| 欧美日韩三级在线| 欧美一区二区在线免费观看| 午夜亚洲性色视频| 在线一区二区三区四区| 欧美日韩亚洲系列| 免费成人激情视频| 国产欧美日韩综合| 欧美啪啪成人vr| 欧美韩日一区二区| 久久久久久久波多野高潮日日| 一区二区三区欧美激情| 国产精品久久久久久久久免费樱桃| 老司机午夜精品视频在线观看| 日韩视频中文| 久久久久久网站| 国产视频精品网| 亚洲人成在线观看一区二区| 99热这里只有成人精品国产| 国产精品萝li| 久久亚洲欧美国产精品乐播| 国内成+人亚洲+欧美+综合在线| 欧美一二三区在线观看| 久久爱91午夜羞羞| 欧美午夜性色大片在线观看| 黑人中文字幕一区二区三区| 久久综合福利| 亚洲国产综合91精品麻豆| 亚洲欧美日韩成人高清在线一区| 久久久天天操| 国产在线国偷精品产拍免费yy| 雨宫琴音一区二区在线| 欧美三级在线| 久久精品卡一| 亚洲国产精品第一区二区三区| 一区二区三区回区在观看免费视频| 好吊日精品视频| 国产精品视频久久久| 亚洲高清免费视频| 亚洲欧美视频一区| 亚洲小说区图片区| 欧美成人一区二区| 一区二区三区无毛| 亚洲精品中文字幕有码专区| 久久精品国产一区二区电影| 老鸭窝91久久精品色噜噜导演| 午夜视频久久久| 亚洲人成网站在线观看播放| 久久精品国产2020观看福利| 伊人久久大香线蕉av超碰演员| 欧美一区视频在线| 久久久久天天天天| 国外成人在线视频| 免费在线观看精品| 亚洲欧洲一区二区三区久久| 亚洲精品乱码久久久久久按摩观| 久久久精品性| 欧美电影免费观看高清完整版| 亚洲欧美日韩直播| 欧美中在线观看| 在线日韩欧美视频| 亚洲图片在线观看| 亚洲一区二区三区成人在线视频精品| 久久久久一区二区三区| 国产精品成人aaaaa网站| 在线观看的日韩av| 国产精品家教| 妖精成人www高清在线观看| 国产亚洲欧美另类中文| 久久久精品日韩|