《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于SYSTEM C的FPGA設計方法
基于SYSTEM C的FPGA設計方法
摘要: System C 是一個C++ 庫,也是一種使設計者可以有效地設計出一個軟件算法的準確循環模型,硬件結構以及系統級設計的方法。它不僅可以幫助設計人員完成一個復雜的系統設計,還可以避免傳統設計中的各種弊端,并提高設計人員的工作效率。
Abstract:
Key words :

  一、概述

       隨著VLSI的集成度越來越高,設計也越趨復雜。一個系統的設計往往不僅需要硬件設計人員的參與,也需要有軟件設計人員的參與。軟件設計人員與硬件設計人員之間的相互協調就變的格外重要,它直接關系到工作的效率以及整個系統設計的成敗。傳統的設計方法沒有使軟件設計工作與硬件設計工作協調一致,而是將兩者的工作割裂開來。軟件算法的設計人員在系統設計后期不能為硬件設計人員的設計提供任何的幫助。同時現在有些大規模集成電路設計中往往帶有DSP Core或其它CPU Core。這些都使得單純地用原理圖或硬件描述語言來設計、仿真這么復雜的系統變得十分困難。SYSTEM C就是在這些矛盾的背景下提出的。它的出現為復雜的系統設計提供了一條有效的解決途徑。 System C 是由 Synospy Inc. 提出的,目前最新的版本為V2.0。它提出的目的就是以一種系統設計的思想進行系統設計。它將軟件算法與硬件實現很好的結合在一起,提高了整個系統設計的效率和正確性。

     

 

  System C 是一個C++ 庫,也是一種使設計者可以有效地設計出一個軟件算法的準確循環模型,硬件結構以及系統級設計的方法。設計者可以用System C開發工具或在標準C++開發工具中加如System C庫制作系統級模型,快速地仿真和優化設計,以及研究不同的算法,并且為硬件和軟件設計人員提供一個設計系統的可執行規范。可執行規范本質上是一個C++程序,它顯示了和設計系統同樣的性能,為軟件設計人員和硬件設計人員提供了一個設計的標準。

 

      System C 庫提供了創造系統結構模型的必須結構,包括那些在C++沒有的功能如硬件時序,并行和觸發功能。C++這種面對象語言提供了通過增加類來擴展語言的能力,而這種能力是C語言所不具備的。因此,System C使用大家熟悉的C++語言和開發工具。

        二、SYSTEM C的特點

       System C 支持對硬件和軟件的聯合設計,支持描述一個既包含硬件部分也包含軟件部分的復雜系統結構。它也支持對接口的描述,有以下幾個顯著的特點:

       1.System C可以為軟件設計人員和硬件設計人員提供一個系統的可執行規范。設計人員使用該可執行規范可以避免設計中矛盾和錯誤的產生,并確保設計的完備性。這是應為在設計可執行規范時,系統設計者必須設計出也一個和系統具有同樣工作狀態的程序,通過這個程序可以發掘出潛在的矛盾和錯誤,并將這些矛盾和錯誤消除在整個設計的開始階段,而不是在整個系統進行調試階段才發現和解決這些矛盾和錯誤。這個程序還可以幫助設計者確保整個系統設計的完備性。

       2.設計人員利用這個可執行的系統規范,還可以發現設計中概念模糊的地方。無論什么時候,設計人員對設計產生疑惑,就可以運行這個可執行程序以明確在這個問題上系統設計人員是如何處理的,從而確保系統設計的正確性。而現在的設計方法不能使設計人員方便迅速的解決這些疑惑。甚至這些疑惑是系統設計人員也不曾考慮過,這可能導致系統要重新進行設計。

       3.在系統設計被實現以前,設計人員還可以通過用System C設計的系統可執行規范來驗證整個系統設計。這樣可以避免由于在系統設計上的失誤,而使系統實現不能達到要求。現在的設計方法不能提供這樣的手段在設計完成前進行系統的驗證,對系統的驗證必須是在系統設計完后。即使在完成前進行驗證,由于不能完全模擬實際系統的工作,其結果也只能作為一種參考。

       4.System C設計的可執行規范所使用的TESTBENCH文件可以通過小范圍的修改或直接用在實現后的系統仿真。這就為設計實現人員帶來很大的好處,他們不必花很多的時間去編寫用來驗證實現后系統正確性的TESTBENCH文件。而現在采用的設計方法所使用的TESTBENCH文件卻沒有提供這樣的便利條件。這是應為軟件設計人員和硬件設計人員兩者的設計思想和設計手段都是不同的,一個軟件設計人員所使用的TESTBENCH文件并不能被硬件設計人員使用,甚至不能給硬件設計人員任何幫助。

       三、SYSTEM C設計與傳統設計比較

       現在的系統設計一般是由系統工程師用C語言或C++語言設計出一個系統模型,并在系統級層次上檢驗概念和算法。當這些概念和算法被檢驗為正確無誤時,C/C++模塊被分解為功能相對獨立的子模塊。這些相對對立的子模塊由硬件設計人員手工地轉化為VHDL或Verilog語言用以硬件實現。

  1.人工將C\C++程序轉換為HDL程序容易產生錯誤。在現在的這種設計方法中,系統工程師先按期望的設計要求設計出一個C模塊,并驗證這個模塊使其達到期望的設計要求。然后系統工程師所設計的C模塊被硬件設計人員手工轉換為HDL模塊。這個轉換過程不僅容易產生錯誤,而且還很浪費時間。這是因為C\C++語言和HDL語言有著顯著的區別。首先,HDL的處理方式比C\C++的復雜。C\C++程序采用順序執行的處理方式,而HDL程序中既有順序執行也有并行執行的處理方式。要將C\C++程序轉化為HDL程序必然要引入一些控制信號,由這些信號控制

 

HDL程序的運行,但這樣也容易產生錯誤。其次,C\C++語言不涉及到時序關系。由于C\C++語言不支持對時序的描述,系統工程師設計的系統模型只是驗證了概念和算法,而只能對時間耗費上有一個大概的估計。這就使得硬件實現時,為滿足系統在時間上的要求,硬件設計人員必須對軟件算法進行一定的改造或優化。而這些改造或優化也有可能引入各種錯誤。

 

       2.系統模塊和HDL模塊間缺乏聯系。當系統模塊被轉換為HDL模塊后,HDL模塊成為整個系統設計的焦點。為適應硬件實現的特點,硬件設計人員會更改系統設計人員的設計,但這種更改只是在HDL模塊中進行,而系統設計人員設計的C模塊并沒有因此更改。這就使得系統工程師設計的C模塊和當前硬件設計人員設計的HDL模塊缺乏必要的聯系。當硬件設計人員遇到概念模糊或理解錯誤的地方時,往往不能馬上從C模塊中得到明確的解答。此時,C模塊的設計人員也不一定能為HDL設計人員提供有效的幫助。

       3.多系統測試。不但C模塊要轉換為HDL模塊,對C模塊的測試也要人工轉換為在HDL環境下的測試。這種轉換也很復雜,而且浪費時間。HDL設計人員是根據他所設計的HDL模塊和系統要求來設計TESTBENCH,這使得硬件設計人員不可能利用軟件設計人員所使用的測試文件。同時,HDL人員要設計出一個好的TESTBENCH也需要比較長的時間。為解決在現在設計流程中所帶來的種種弊端,一種全新的設計流程被提出,這就是System C設計流程。它能很好的解決上面所提到的各種設計弊端,大大提高設計效率。圖2是System C的硬件設計流程。

  

System C的硬件設計流程

圖2

       這種設計方法與現在常用的設計方法相比有很多優點:

       1.精煉的設計方法。使用System C設計系統,系統設計人員不必花費很大的精力將整個系統設計由C語言描述轉換為HDL描述。系統設計人員可以通過在C模塊中很小的區域范圍內加入必要的硬件和時序結構描述,從而將C模塊方便準確地轉化為一個有效的硬件設計,而避免將另行設計一個硬件模塊。利用System C設計方法,設計人員可以很輕松地實現一個設計的更改,或在優化算法時檢測出一些設計錯誤并及時修改。

       2.單一語言書寫。使用System C設計系統,整個設計都用一種語言設計系統,降低了對設計人員的要求,減少了語言轉換時所造成的錯誤。這一優點也使得設計人員可以在一個比較高的層次上進行系統模塊設計。在較高層次的設計會導致產生小的設計代碼,使設計和仿真的速度比傳統的設計方法要快很多。這一點是很顯著的。

        四、SYSTEM C基本概念

        1.模塊

        模塊是System C設計中的基本設計單元。模塊可以使得設計者將一個復雜的系統分割為一些更小但易于管理的部分。System C模塊的功能和作用與HDL語言中的模塊是相類似的,這使得一位習慣于用HDL進行設計的設計人員可以很容易的轉向用System C進行設計。

 

  模塊在System C中的關鍵字為SC_MODULE。緊跟著關鍵字后的是模塊的名稱,如SC_MODULE(fifo),這就定義了一個叫fifo的模塊。定義的模塊也可以像HDL語言一樣包含端口、信號、其它模塊、處理過程和結構體,這些單元實現用以實現模塊的功能。通過端口可以將幾個模塊連接起來。

  模塊被保存為.h文件。如果在一個模塊中調用其它模塊,只需像C++中引入庫一樣將要調用的模塊作為一個庫引入即可。

       2.過程

       模塊中的處理過程(process)類似于C語言中的子程序,與C語言中的子程序不同的的是它具有HDL語言中的觸發功能。處理過程(process)的具體工作部分被保存為.cpp文件。處理過程的調用類似于在C語言中子程序的調用。根據不同的要求,SystemC中有三種處理過程。

       ●

 

Methods : SC_METHOD()
   
       ● Threads : SC_THREAD()

 

  ● Clock Threads : SC_CTHREAD()

  SC_METHOD是用來描述組合邏輯,它由輸入信號的變化觸發,但不能在兩次調用中保存控制狀態。并且在SC_METHOD中不能包含無限循環。由于組合邏輯有可能導致毛刺的產生,從而影響系統性能,所以SC_METHOD不易太復雜。 下面是一個簡單的SC_METHOD例子:

  SC_MODULE(example) {

  sc_in din;

  sc_out dout;//端口

  void inverter();//處理過程聲明

  SC_CTOR(example) {

  SC_METHOD(inverter);

  sensitive(din);//處理過程由輸入變化觸發

  }

  };

  處理過程inverter如下:

  void example::inverter() {

  bool internal;

  internal = din;//輸入數據取反后由輸出端口輸出

  dout = ~internal;

  }

  SC_THREAD是最常用的處理過程,基本上可以用在任何地方。它是由輸入信號的變化觸發,但與SC_METHOD不同的是它可以在兩次調用這保存控制狀態。它的功能類似于積存器的功能。SC_THREAD中可以包含有wait()函數,這使得處理過程可以被掛起。

  SC_CTHREAD是SC_THREAD的一種 

  特殊情況。SC_CTHREAD能產生更好的綜合效果。SC_CTHREAD中可以使用wait()函數。在不同的狀態間加入wait()函數,設計人員可以用SC_CTHREAD來實現狀態機。這種設計風格是簡便的而且容易理解。SC_CTHREAD只能由時鐘信號沿觸發,而SC_THREAD可以由其它非時鐘信號觸發。如果在時鐘上跳邊觸發,可以使用pos()函數,反之用neg()。

  為進一步說明SC_CTHREAD,下面給出了一個SC_CTHREAD的例子。

  SC_MODULE(example) {

  sc_in_clk clock;//輸入時鐘

  sc_in trigger, din;

  sc_out dout;

  void invert();

  SC_CTOR(example) {

  SC_CTHREAD(toggler, clock.pos());//時鐘上升沿觸發

  }

  }

  void example::invert() {

  bool last = false;

  for (;;) {

  wait_until(trigger.delayed() == true);//等到下個時鐘上升沿 //且trigger=1再執行

  last = din; dout = last; wait();

  last =~din; dout = last;wait();//下個上升沿才更改數據

  }

  }

  3.端口與信號

  與HDL語言相似,使用SYSTEM C庫就可以在C程序中加入端口和信號。這些原先C語言中沒有的功能,使設計更復合硬件設計的要求。  模塊與模塊之間是通過端口信號加一聯系。只要兩個端口被連接在一起,信號就可以在它們之間進行傳遞。對于這一點習慣用HDL進行設計的設計人員是很容易理解和接受的,因為這和HDL中端口的功能是一樣的。 信號只是在一個模塊的內部使用,這也是和HDL中信號的用法是一致的。 下面給出端口和信號聲明的例子。

  sc_in<“類型”> din// 輸入端口din

  sc_out<“類型”> dout// 輸出端口dout

  sc_inout<“類型”> q// 輸入輸出端口q

  sc_signal i[16]; //創建一個具有16比特的邏輯型信號i

  4.數據類型

  考慮到硬件設計的要求,System C中也加入了一些硬件設計中常用的數據類型。具體如下:

  sc_int 有符號整數類型,最大有64個比特位。

  sc_uint 無符號整數類型,最大有64個比特位。

  sc_bigint 有符號整數類型,任意比特位,其最大比特位定義在

  sc_constants.h中。

  sc_biguint 無符

 

號整數類型,任意比特位,其最大比特位定義在

 

  sc_constants.h中。

  sc_bit 二值數據,單比特位。

  sc_logic 四值數據,單比特位。

  sc_bv 二值數據,任意比特位。

  sc_lv 四值數據,任意比特位。

  sc_fixed 參數固定的有符號定點數。

  sc_ufixed 參數固定的無符號定點數。

  sc_fix 參數不固定的有符號定點數。

  sc_ufix 參數不固定的無符號定點數。

  User defined structs 用戶自定義結構

  以上是一些System C的基本概念。

  五、結論

       System C是一種很有效的設計方法,它不僅可以幫助設計人員完成一個復雜的系統設計,還可以避免傳統設計中的各種弊端,并提高設計人員的工作效率。它的這些優點使System C在復雜的系統設計中大有作為。并且習慣用HDL的設計人員,可以很容易地轉到用System C設計。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
午夜激情久久久| 亚洲欧美亚洲| 亚洲欧美激情一区| 亚洲最新合集| 亚洲精品偷拍| 99视频+国产日韩欧美| 亚洲美女区一区| 亚洲美女精品久久| 99re8这里有精品热视频免费 | 久久超碰97人人做人人爱| 亚洲欧美精品中文字幕在线| 亚洲一本大道在线| 亚洲欧美中文字幕| 性色av一区二区三区红粉影视| 亚洲综合国产| 欧美在线视频一区二区| 亚洲第一久久影院| 亚洲国产一区二区在线| 亚洲欧洲精品一区二区| 99av国产精品欲麻豆| 亚洲视频综合在线| 亚洲欧美日产图| 久久久99爱| 美女主播精品视频一二三四| 欧美国产一区二区三区激情无套| 欧美乱大交xxxxx| 国产精品福利久久久| 国产精品永久免费视频| 国产一区二区日韩精品| 在线观看一区视频| 日韩视频中午一区| 亚洲欧美国产制服动漫| 久久狠狠婷婷| 99精品99久久久久久宅男| 中文亚洲免费| 欧美在线日韩| 欧美1区2区视频| 欧美色偷偷大香| 国产女同一区二区| 亚洲福利久久| 一本色道久久综合亚洲91| 亚洲制服av| 亚洲东热激情| 一区二区av在线| 欧美一区二区三区视频在线 | 亚洲欧美在线视频观看| 久久成人资源| 欧美大片在线观看一区| 欧美网站在线| 国产一区二区三区久久悠悠色av | 久久精品99无色码中文字幕| 亚洲精品小视频在线观看| 亚洲一级影院| 久久亚洲精品一区二区| 欧美日韩国产黄| 国产精品一页| 亚洲国产欧美日韩| 亚洲欧美电影院| 亚洲精选久久| 欧美一区二区三区四区在线观看| 欧美成人69av| 国产欧美日韩精品丝袜高跟鞋| 樱桃成人精品视频在线播放| a4yy欧美一区二区三区| 欧美一区二视频| 中日韩美女免费视频网站在线观看| 欧美一级在线播放| 欧美日本三级| 国内成人自拍视频| 一区二区三区产品免费精品久久75 | 99视频精品全部免费在线| 欧美一区二区三区视频在线| 一区二区免费在线视频| 久久美女性网| 欧美性猛交一区二区三区精品| 极品裸体白嫩激情啪啪国产精品| 亚洲视频成人| 亚洲三级网站| 久久精品国产精品亚洲精品| 欧美午夜激情视频| 精品1区2区3区4区| 午夜精品视频在线| 亚洲一区在线播放| 欧美成人一区二区在线| 国精品一区二区| 亚洲一线二线三线久久久| 99精品国产99久久久久久福利| 久久只有精品| 国产日韩专区| 亚洲综合成人婷婷小说| 中文日韩在线| 欧美国产专区| 亚洲第一页在线| 欧美在线亚洲综合一区| 欧美一级大片在线免费观看| 欧美三级电影大全| 亚洲三级影院| 亚洲人成绝费网站色www| 久久深夜福利免费观看| 国产日韩av在线播放| 亚洲天堂av电影| 亚洲少妇中出一区| 欧美日本中文字幕| 亚洲国产成人精品女人久久久| 欧美亚洲一区在线| 午夜伦理片一区| 国产精品麻豆成人av电影艾秋| 亚洲精品一区二区三区在线观看 | 亚洲欧美日韩国产成人| 欧美日韩人人澡狠狠躁视频| 亚洲国产精品热久久| 亚洲国产三级在线| 久久综合成人精品亚洲另类欧美 | 亚洲第一精品夜夜躁人人爽 | 欧美3dxxxxhd| 亚洲国产成人精品久久久国产成人一区| 亚洲高清一二三区| 麻豆精品在线视频| 一区精品久久| 亚洲精品视频二区| 欧美肥婆在线| 日韩一级二级三级| 亚洲一区二区不卡免费| 国产精品久久久久久五月尺| 亚洲一区亚洲二区| 欧美一区免费| 国产自产v一区二区三区c| 久久精品日韩欧美| 女女同性精品视频| 一区在线影院| 亚洲欧洲精品一区二区| 欧美另类变人与禽xxxxx| 日韩亚洲一区二区| 亚洲欧美日韩国产综合| 国产精一区二区三区| 欧美有码视频| 欧美jjzz| 一本综合精品| 香蕉久久国产| 国产欧美视频一区二区| 欧美一区免费视频| 久久人人爽爽爽人久久久| 亚洲国产福利在线| 亚洲性图久久| 国产嫩草影院久久久久| 久久精品二区三区| 欧美激情一区二区三区高清视频| 久久久久综合网| 亚洲欧美一区二区原创| 久久福利视频导航| 韩日精品中文字幕| 亚洲高清一区二| 欧美日韩国产成人在线免费| 亚洲视频1区| 久久久综合精品| 亚洲激情不卡| 亚洲无线视频| 国产亚洲精品久久久久婷婷瑜伽| 欧美怡红院视频| 欧美国产一区二区| 亚洲线精品一区二区三区八戒| 久久精品91久久久久久再现| 亚洲第一精品夜夜躁人人爽| 亚洲午夜黄色| 国产在线拍偷自揄拍精品| 亚洲精品一区在线观看| 国产精品久久久久久超碰| 欧美一区二区三区在线观看| 欧美激情综合色| 亚洲一区二区三区精品视频| 噜噜噜噜噜久久久久久91| av72成人在线| 久久综合福利| 亚洲视频一起| 欧美大片免费观看| 午夜国产一区| 欧美日本一区| 欧美一区永久视频免费观看| 欧美日韩国产不卡| 亚洲成在线观看| 国产精品国产一区二区| 91久久精品美女高潮| 国产精品亚洲综合一区在线观看| 亚洲欧洲日产国码二区| 国产精品区一区二区三| 亚洲精品美女91| 国产麻豆91精品| 日韩亚洲一区二区| 国产一区二区三区成人欧美日韩在线观看| 日韩视频在线观看国产| 国产一区亚洲| 亚洲一区二区在| 亚洲第一精品在线| 欧美在线三级| 一区二区三区日韩精品| 欧美成年人视频网站欧美| 欧美一区二区三区喷汁尤物| 欧美亚男人的天堂| 亚洲理论在线观看| 狠狠色狠狠色综合日日小说|