當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]總結(jié)FPGA設計實用經(jīng)驗

1、狀態(tài)機的問題,盡量不要寫出太大的狀態(tài)機,寧愿用一些小型的狀態(tài)機來相互關(guān)聯(lián)。

2、推薦大家使用timequest來做時序約束,好處是,它可能對你的時序約束和你的設計對照做分析,在做時序分析之前,先對你的約束做分析,然后告訴你,你有多少該做的事情而沒有做的(為被約束的路徑)還有多少你要求做的,而沒有被做的(被忽略的時序要求)。

3、對時鐘的約束,要重點關(guān)注兩個現(xiàn)象。首先是盡量少的在時鐘路徑上引入邏輯,否則可能造成了時鐘和時鐘之間的skew。另外就是一種上下沿都需要用來采集數(shù)據(jù)的時鐘。對于時鐘的約束有很多的地方需要注意,否則你的電路都不知道會飛到哪里去。

4、約束中最重要的一個關(guān)鍵,不要過約束。過約束的壞處一大堆,增加編譯時間,資源使用過度,導致其他的時序問題。如果你對自己的約束有些不太放心,又或者說可能器件和器件之間會有很細微的差別,你可以給約束做一些余量,但是過約束是萬萬要不得的。

5、IP的作用就是為了完成一個特定的功能,所以我們并不需要知道它是如何實現(xiàn)的。作為一個IP,最重要的,其實是接口,因為你最重要的是需要知道是怎么讓它工作起來,而不是它怎么工作的。所以在看文檔的時候,最主要看的就是接口信號,對所有的信號的作用有一個了解。例如,NiosII CPU作為一個比較大型的模塊,使用的是Avalon MM 點對點接口,它與普通的PCI接口不同的地方是,他可以支持同時多線控制。因為它沒有總線的概念,不會在總線被占據(jù)的時候,其他任何通訊都無法進行。NiosII是在SOPC builder 中被直接使用的,我們不需要知道具體有哪些信號,因為沒有非常需要,我們是看不到這些接口的。在NiosII中,我們有兩個Master Avalon MM 接口,一個是Instruction Master Port, 這是CPU用來讀取指令的接口。CPU通過這個端口從Memory上讀取指令。另一個是Data master port, 很簡單,這是用來連接數(shù)據(jù)通道的。比如說你要讀取的數(shù)據(jù),你要存儲的數(shù)據(jù),都是走這個通道。這兩個端口可以連接同一個內(nèi)存,在這種時候需要特別小心,很有可能自己把自己的指令給改掉了。但是反過來思考一下,其實我們可以做什么?可以按照狀況改變軟件代碼。NiosII中還有第三個端口,這是用來做Debug用的端口。還有其他的一些接口,比如TCM接口。我們需要知道這些接口的存在,但是不需要知道細節(jié),只有在用到的時候再去看相關(guān)的文檔就好了。

6、作為系統(tǒng)設計,是需要有一種粗曠型的大氣魄,不需要在細節(jié)上浪費時間。你會發(fā)現(xiàn)很多的細節(jié)是沒有意義的。并不是說我們不需要去研究細節(jié),細節(jié)是很重要的,但是細節(jié)需要在被用到的時候才去關(guān)注就好了。

7、在使用IP的時候,會遭遇到意想不到的痛苦的。所以,盡量不要依靠假設來臆想了模塊的設置。而是盡量的適應環(huán)境,來配置自己的設計。作為一個FPGA的玩家,這種依照環(huán)境來改變的能力是必須的。

8、考慮Cashes的設置,Cash 有兩種,一種是用來做指令緩存的,一種是用來做數(shù)據(jù)緩存的。Cash的大小對程序的運行速度是有影響的。當然也沒必要使用過多的資源。夠用就好了。

9、自定義指令設置。這是最有價值的設置。所謂自定義指令,并不是一個軟件宏或者函數(shù)。而是一塊硬件。當CPU調(diào)用到這個指令的時候,事實上它調(diào)用的就是這個硬件模塊,它被嵌入在CPU中。而這其實就是NiosII好玩的地方。

10、SOPC builder是QuartusII中用來建立,開發(fā),維護系統(tǒng)的平臺。雖然很多時候我們用它作為NiosII的一個嵌入式系統(tǒng)的開發(fā)環(huán)境,但我不要把思路只是局限在NiosII上面。它將成為一個包容全部系統(tǒng)內(nèi)容的一個平臺。

11、Avalon接口分成兩種,一種是Avalon-MM接口,另一種是Avalon-ST 接口。MM接口,是通過地址來讀寫數(shù)據(jù),更多的是用在控制邏輯上面。ST接口是用于點到點的流數(shù)據(jù)接口,更多的可以用在有高速通過率的模塊中間。這兩個接口本身并沒有矛盾,不是說勢不兩立的,一個模塊中既可以有MM接口,甚至幾個MM接口,也可以同時存在ST接口。作為一個點對點的接口定義,Avalon可以做到高效的接口效果。這與PCI之類的總線接口是有本質(zhì)區(qū)別的。PCI總線可以看作是鐵路軌道,當一個火車在軌道上行駛的時候,就不可以有另一個火車同時使用軌道。Avalon接口更多好像高速公路,車輛可以雙向行駛。

12、作為FPGA設計中比較獨特的一個原則就是,這個世界不是你創(chuàng)造的,所以你必須去適應它,而不是頑固自己的意圖。

13、在FPGA中,除了門與門之間的延遲是固定的(時鐘頻率)外,一切的組合電路的延遲都是不確定的。記住這樣一個規(guī)律就好了,凡是沒有被門關(guān)過的信號都是不穩(wěn)定的,都只是暫時的。

14、在生成新的再生門(一些邏輯的結(jié)果作為時鐘去驅(qū)動一個門,我們且管他叫作再生門吧)之前,你最好把這個時鐘信號用原來的那種門在關(guān)一下。這樣你獲得的會是一個干凈的,純粹的時鐘信號。

15、針對新的一些器件,器件本身可以提供一些時鐘控制模塊,當你需要使用門鎖(gated lock)的時候,盡量的使用這些模塊,會讓你的時鐘變得安全(clock control block)。

16、如果你不得不使用邏輯電路來鎖門,而你的器件又沒有特定的模塊。那么最好的情況就是,你可以先用那個時鐘,把你的門鎖信號關(guān)一下。這樣的好處就是可以把毛刺信號完全的規(guī)避在門外面,使你的時鐘更加安全。

17、上電初始值

在通常的狀況下,所有的門在上電的時候輸出為低。但是這并不是不能改變的。你可以把上電設置為高,這樣綜合工具可能會做兩種事情,把輸出反向,或者使用preset控制(如果存在的話)把初始值放進門里。

當時上電為高的做法,并不是非常必要,因為你其實是可以使用復位信號來獲得你想要的初始狀態(tài)的。如果你覺得這是必須的,那么有幾種方法你可以做:

首先是在QuartusII里面你可以針對某個或者某些門設置power-up level為高或低。

在代碼中使用altera_attribute

直接寫代碼設置初始值:reg q = 1'b1;

always @ (posedge clk or posedge aclr)

begin

if (aclr)

q <= 1'b0;

elseq <= d;

end

18、門的次級管理信號,按照優(yōu)先級排列一下:

1.異步清零信號 – aclr

2.上電復位信號, - pre

3.異步載入信號 – aload

4.使能信號 – ena

5.同步清零信號 – sclr

6.同步載入信號 – sload

7.數(shù)據(jù)輸入信號 – data

19、在FPGA設計中,只有在輸入輸出上可以使用雙向信號,雙向信號是不能使用在內(nèi)部邏輯上的。一定不要用這種信號,否則工具會綜合出一個你都不知道會是什么東西的東西。針對一個雙向端口,你需要把它變成一個輸入信號 in,一個輸出信號:out, 和一個輸出使能信號: output_enable. 所以代碼其實很簡單:

Assign birsignal = output_enable ? out: 1’bz;

Assign in = birsignal

這里有一個小小的提示,在寫代碼的時候突然不太清楚語法怎么寫的時候,你可以在quartus里面按一下右鍵,你可以發(fā)現(xiàn)一個insert template&hellip;的選擇。試試看吧。

20、狀態(tài)機是設計過程中的核心部分,所以我們需要特別的提一下寫狀態(tài)機的一些注意事項。為了實現(xiàn)利益最大化,建議在FPGA中使用one hot 模式的狀態(tài)機,而在CPLD中使用最少比特數(shù)的狀態(tài)機。在具體的設計中需要注意的是:

1、把狀態(tài)機寫全,也就是說不要漏寫了 Default:。沒有這個首先會出現(xiàn)什么?對了,會有假門(latch)。

2、狀態(tài)機作為控制核心部分,盡量把它和算法功能和數(shù)據(jù)分離開來。好像你看到好的流水線,控制流水線的電腦和流水線本身是分開的。這樣可以保持相對的獨立性。

3、如果一種操作設計到幾個狀態(tài),盡量把操作剝離狀態(tài)機本身。

4、使用一個簡單的復位信號來定義上電狀態(tài)。如果你的狀態(tài)機會被比較多的復位信號復位的話,工具就不會把它當作狀態(tài)機來對待。總之,盡量的保持狀態(tài)機的很傻很單純是很重要的。盡量的不要加重核心部分的復雜性。其實道理很簡單,好比在一個公司里面,真正在工作的,其實一定不是一個這個公司的核心。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉