<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > 基于SYSTEM C的FPGA設計方法

基于SYSTEM C的FPGA設計方法

——
作者:胡玲娜 張小軍 鄧鴻威 時(shí)間:2007-04-24 來(lái)源:今日電子 收藏
一、概述 

隨著(zhù)VLSI的集成度越來(lái)越高,設計也越趨復雜。一個(gè)系統的設計往往不僅需要硬件設計人員的參與,也需要有軟件設計人員的參與。軟件設計人員與硬件設計人員之間的相互協(xié)調就變的格外重要,它直接關(guān)系到工作的效率以及整個(gè)系統設計的成敗。傳統的設計方法沒(méi)有使軟件設計工作與硬件設計工作協(xié)調一致,而是將兩者的工作割裂開(kāi)來(lái)。軟件算法的設計人員在系統設計后期不能為硬件設計人員的設計提供任何的幫助。同時(shí)現在有些大規模集成電路設計中往往帶有DSP ore或其它PU ore。這些都使得單純地用原理圖或硬件描述語(yǔ)言來(lái)設計、仿真這么復雜的系統變得十分困難。System C就是在這些矛盾的背景下提出的。它的出現為復雜的系統設計提供了一條有效的解決途徑。 

System C 是由 Synospy Inc. 提出的,目前最新的版本為V2.0。它提出的目的就是以一種系統設計的思想進(jìn)行系統設計。它將軟件算法與硬件實(shí)現很好的結合在一起,提高了整個(gè)系統設計的效率和正確性。 

System C 是一個(gè)C++ 庫,也是一種使設計者可以有效地設計出一個(gè)軟件算法的準確循環(huán)模型,硬件結構以及系統級設計  
的方法。  

設計者可以用System C開(kāi)發(fā)工具或在標準C++開(kāi)發(fā)工具中加如System C庫制作系統級模型,快速地仿真和優(yōu)化設計,以及研究不同的算法,并且為硬件和軟件設計人員提供一個(gè)設計系統的可執行規范??蓤绦幸幏侗举|(zhì)上是一個(gè)C++程序,它顯示了和設計系統同樣的性能,為軟件設計人員和硬件設計人員提供了一個(gè)設計的標準。 

System C 庫提供了創(chuàng )造系統結構模型的必須結構,包括那些在C++沒(méi)有的功能如硬件時(shí)序,并行和觸發(fā)功能。C++這種面對象語(yǔ)言提供了通過(guò)增加類(lèi)來(lái)擴展語(yǔ)言的能力,而這種能力是C語(yǔ)言所不具備的。因此,System C使用大家熟悉的C++語(yǔ)言和開(kāi)發(fā)工具。 

二、 C的特點(diǎn) 

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

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

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

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

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

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

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

這種設計流程中我們可以發(fā)現以下幾個(gè)問(wèn)題:

1.人工將CC++程序轉換為HDL程序容易產(chǎn)生錯誤。在現在的這種設計方法中,系統工程師先按期望的設計要求設計出一個(gè)C模塊,并驗證這個(gè)模塊使其達到期望的設計要求。然后系統工程師所設計的C模塊被硬件設計人員手工轉換為HDL模塊。這個(gè)轉換過(guò)程不僅容易產(chǎn)生錯誤,而且還很浪費時(shí)間。這是因為CC++語(yǔ)言和HDL語(yǔ)言有著(zhù)顯著(zhù)的區別。首先,HDL的處理方式比CC++的復雜。CC++程序采用順序執行的處理方式,而HDL程序中既有順序執行也有并行執行的處理方式。要將CC++程序轉化為HDL程序必然要引入一些控制信號,由這些信號控制HDL程序的運行,但這樣也容易產(chǎn)生錯誤。其次,CC++語(yǔ)言不涉及到時(shí)序關(guān)系。由于CC++語(yǔ)言不支持對時(shí)序的描述,系統工程師設計的系統模型只是驗證了概念和算法,而只能對時(shí)間耗費上有一個(gè)大概的估計。這就使得硬件實(shí)現時(shí),為滿(mǎn)足系統在時(shí)間上的要求,硬件設計人員必須對軟件算法進(jìn)行一定的改造或優(yōu)化。而這些改造或優(yōu)化也有可能引入各種錯誤。

2.系統模塊和HDL模塊間缺乏聯(lián)系。當系統模塊被轉換為HDL模塊后,HDL模塊成為整個(gè)系統設計的焦點(diǎn)。為適應硬件實(shí)現的特點(diǎn),硬件設計人員會(huì )更改系統設計人員的設計,但這種更改只是在HDL模塊中進(jìn)行,而系統設計人員設計的C模塊并沒(méi)有因此更改。這就使得系統工程師設計的C模塊和當前硬件設計人員設計的HDL模塊缺乏必要的聯(lián)系。當硬件設計人員遇到概念模糊或理解

錯誤的地方時(shí),往往不能馬上從C模塊中得到明確的解答。此時(shí),C模塊的設計人員也不一定能為HDL設計人員提供有效的幫助。

3.多系統測試。不但C模塊要轉換為HDL模塊,對C模塊的測試也要人工轉換為在HDL環(huán)境下的測試。這種轉換也很復雜,而且浪費時(shí)間。HDL設計人員是根據他所設計的HDL模塊和系統要求來(lái)設計TESTBENCH,這使得硬件設計人員不可能利用軟件設計人員所使用的測試文件。同時(shí),HDL人員要設計出一個(gè)好的TESTBENCH也需要比較長(cháng)的時(shí)間。

為解決在現在設計流程中所帶來(lái)的種種弊端,一種全新的設計流程被提出,這就是System C設計流程。它能很好的解決上面所提到的各種設計弊端,大大提高設計效率。圖2是System C的硬件設計流程。

流程

這種設計方法與現在常用的設計方法相比有很多優(yōu)點(diǎn):

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

2.單一語(yǔ)言書(shū)寫(xiě)。使用System C設計系統,整個(gè)設計都用一種語(yǔ)言設計系統,降低了對設計人員的要求,減少了語(yǔ)言轉換時(shí)所造成的錯誤。這一優(yōu)點(diǎn)也使得設計人員可以在一個(gè)比較高的層次上進(jìn)行系統模塊設計。在較高層次的設計會(huì )導致產(chǎn)生小的設計代碼,使設計和仿真的速度比傳統的設計方法要快很多。這一點(diǎn)是很顯著(zhù)的。

四、 C基本概念

1.模塊

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

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

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

2.過(guò)程

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

● Methods : SC_METHOD()

● Threads : SC_THREAD()

● Clock Threads : SC_CTHREAD()

這種設計流程中我們可以發(fā)現以下幾個(gè)問(wèn)題: 

1.人工將CC++程序轉換為HDL程序容易產(chǎn)生錯誤。在現在的這種設計方法中,系統工程師先按期望的設計要求設計出一個(gè)C模塊,并驗證這個(gè)模塊使其達到期望的設計要求。然后系統工程師所設計的C模塊被硬件設計人員手工轉換為HDL模塊。這個(gè)轉換過(guò)程不僅容易產(chǎn)生錯誤,而且還很浪費時(shí)間。這是因為CC++語(yǔ)言和HDL語(yǔ)言有著(zhù)顯著(zhù)的區別。首先,HDL的處理方式比CC++的復雜。CC++程序采用順序執行的處理方式,而HDL程序中既有順序執行也有并行執行的處理方式。要將CC++程序轉化為HDL程序必然要引入一些控制信號,由這些信號控制HDL程序的運行,但這樣也容易產(chǎn)生錯誤。其次,CC++語(yǔ)言不涉及到時(shí)序關(guān)系。由于CC++語(yǔ)言不支持對時(shí)序的描述,系統工程師設計的系統模型只是驗證了概念和算法,而只能對時(shí)間耗費上有一個(gè)大概的估計。這就使得硬件實(shí)現時(shí),為滿(mǎn)足系統在時(shí)間上的要求,硬件設計人員必須對軟件算法進(jìn)行一定的改造或優(yōu)化。而這些改造或優(yōu)化也有可能引入各種錯誤。 

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

3.多系統測試。不但C模塊要轉換為HDL模塊,對C模塊的測試也要人工轉換為在HDL環(huán)境下的測試。這種轉換也很復雜,而且浪費時(shí)間。HDL設計人員是根據他所設計的HDL模塊和系統要求來(lái)設計TESTBENCH,這使得硬件設計人員不可能利用軟件設計人員所使用的測試文件。同時(shí),HDL人員要設計出一個(gè)好的TESTBENCH也需要比較長(cháng)的時(shí)間。 

為解決在現在設計流程中所帶來(lái)的種種弊端,一種全新的設計流程被提出,這就是System C設計流程。它能很好的解決上面所提到的各種設計弊端,大大提高設計效率。圖2是System C的硬件設計流程。

這種設計方法與現在常用的設計方法相比有很多優(yōu)點(diǎn): 

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

2.單一語(yǔ)言書(shū)寫(xiě)。使用System C設計系統,整個(gè)設計都用一種語(yǔ)言設計系統,降低了對設計人員的要求,減少了語(yǔ)言轉換時(shí)所造成的錯誤。這一優(yōu)點(diǎn)也使得設計人員可以在一個(gè)比較高的層次上進(jìn)行系統模塊設計。在較高層次的設計會(huì )導致產(chǎn)生小的設計代碼,使設計和仿真的速度比傳統的設計方法要快很多。這一點(diǎn)是很顯著(zhù)的。 

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

  SC_MODULE(example) { 

  sc_in din; 


  sc_out dout;//端口 

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

  SC_CTOR(example) { 

  SC_METHOD(inverter); 

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

  } 

  }; 

  處理過(guò)程inverter如下: 

  void example::inverter() { 

  bool internal; 

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

  dout = ~internal; 

  } 

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

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

  為進(jìn)一步說(shuō)明SC_CTHREAD,下面給出了一個(gè)SC_CTHREAD的例子。

  SC_MODULE(example) { 

  sc_in_clk clock;//輸入時(shí)鐘 

  sc_in trigger, din; 

  sc_out dout; 

  void invert(); 

  SC_CTOR(example) { 

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

  } 

  } 

  void example::invert() { 

  bool last = false; 

  for (;;) { 

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

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

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

  } 

  } 

3.端口與信號 

與HDL語(yǔ)言相似,使用System C庫就可以在C程序中加入端口和信號。這些原先C語(yǔ)言中沒(méi)有的功能,使設計更復合硬件設計的要求。 

模塊與模塊之間是通過(guò)端口信號加一聯(lián)系。只要兩個(gè)端口被連接在一起,信號就可以在它們之間進(jìn)行傳遞。對于這一點(diǎn)習慣用HDL進(jìn)行設計的設計人員是很容易理解和接受的,因為這和HDL中端口的功能是一樣的。 信號只是在一個(gè)模塊的內部使用,這也是和HDL中信號的用法是一致的。 下面給出端口和信號聲明的例子。 

sc_in<“類(lèi)型”> din// 輸入端口din 

sc_out<“類(lèi)型”> dout// 輸出端口dout 

sc_inout<“類(lèi)型”> q// 輸入輸出端口q 

sc_signal i[16]; //創(chuàng )建一個(gè)具有16比特的邏輯型信號i 

4.數據類(lèi)型 

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

sc_int 有符號整數類(lèi)型,最大有64個(gè)比特位。 

sc_uint 無(wú)符號整數類(lèi)型,最大有64個(gè)比特位。 

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

sc_constants.h中。 

sc_biguint 無(wú)符號整數類(lèi)型,任意比特位,其最大比特位定義在 

sc_constants.h中。 

sc_bit 二值數據,單比特位。 

sc_logic 四值數據,單比特位。 

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

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

sc_fixed 參數固定的有符號定點(diǎn)數。 

sc_ufixed 參數固定的無(wú)符號定點(diǎn)數。 

sc_fix 參數不固定的有符號定點(diǎn)數。 

sc_ufix 參數不固定的無(wú)符號定點(diǎn)數。 

User defined structs 用戶(hù)自定義結構 

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

五、結論 

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



關(guān)鍵詞: C FPGA SYSTEM 單片機 嵌入式系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>