今天再啰嗦點(diǎn)玄學(xué) - fpga的設(shè)計(jì)流程,因?yàn)椤傲鞒獭蔽覀儗W(xué)習(xí)任何一門技術(shù)都必須事先清楚的重要信息。
還是先劃一下重點(diǎn) - 我們應(yīng)該學(xué)什么?想一下如果你要去駕校學(xué)開車,什么是你的重點(diǎn)?開車的一系列要領(lǐng)和技術(shù)還是你用來學(xué)習(xí)駕駛的車的按鈕的操作?顯然是前者,雖然市場上的車有幾十上百個(gè)不同的型號(hào),多數(shù)的駕校都用桑塔納來當(dāng)教練車,基于的前提就是所有的車支持你在路上行駛的功能(換擋、加速、剎車、后視鏡、方向盤)都是齊備的,主要的不同點(diǎn)在于這些功能按鈕擺放的位置不同。
因此當(dāng)你要駕駛一輛從未摸過的車,你心里并不緊張,因?yàn)槟阋呀?jīng)學(xué)會(huì)了駕駛,而且知道所有的車操作起來都大同小異,只要花5分鐘看一下說明書,熟悉一下各個(gè)功能的按鈕在哪里就可以上路了。
設(shè)計(jì)FPGA和畫PCB道理也是如此 - 我們要清楚地知道你需要掌握的技術(shù)是什么?運(yùn)用這些技術(shù)需要的步驟、流程是什么?包括哪些環(huán)節(jié)?把這些搞清楚了,無論你用哪家的平臺(tái)、哪家的工具,就像換一輛不同品牌的車一樣都可以在簡單地對(duì)應(yīng)之后從容操作。
因此,要學(xué)習(xí)設(shè)計(jì)FPGA,第一件要做的事情就是FPGA設(shè)計(jì)和使用要經(jīng)歷哪些環(huán)節(jié)、流程?每個(gè)環(huán)節(jié)的注意事項(xiàng)是什么?
下面是一個(gè)簡單的FPGA設(shè)計(jì)Flow(流程)示意圖。
我們來看看每一步都要做什么事情:
設(shè)計(jì)定義:雖然貌似跟器件還沒打交道,這一步卻是整個(gè)過程中最重要的,它是將你的需求轉(zhuǎn)化為具體的邏輯功能實(shí)現(xiàn)的過程。比如你要設(shè)計(jì)一個(gè)交通燈的控制邏輯,我建議你去馬路邊蹲十分鐘,仔細(xì)觀察十字路口的交通燈的變化方式,用你自己的語言把每個(gè)狀態(tài)以及各個(gè)狀態(tài)之間的轉(zhuǎn)換方式、導(dǎo)致這些轉(zhuǎn)換的條件等描述清楚,將這些用筆在紙上畫出來,不漏掉任何一個(gè)細(xì)節(jié),做到這點(diǎn),你的邏輯其實(shí)已經(jīng)出來了。后面的步驟都是工具要做的事情 - 將你腦子里的邏輯轉(zhuǎn)變成用FPGA芯片執(zhí)行的邏輯,并通過板子上的按鍵、LED指示燈等表現(xiàn)出來而已。復(fù)雜的任務(wù)就需要進(jìn)行分解,就像你有一個(gè)團(tuán)隊(duì),團(tuán)隊(duì)中的每一個(gè)角色承擔(dān)不同的職能,既要定義好每個(gè)角色的功能,又要定義好他們之間的關(guān)聯(lián)方式,也就是你需要將要實(shí)現(xiàn)的邏輯功能自上而下(Top Down)地分解為多個(gè)功能模塊(module),把每個(gè)模塊之間的接口信號(hào)及相應(yīng)的時(shí)序關(guān)系定義清楚;
告訴機(jī)器該怎么做:將你紙上畫好的邏輯關(guān)系用計(jì)算機(jī)工具軟件能夠理解的語言方式撰寫清楚,這個(gè)過程叫邏輯輸入,使用的方式可以是原理圖(最古老、直觀的方式)或者一些硬件描述語言 - Verilog、System Verilog、VHDL、System C等。在我們的教程中用的是Verilog這種硬件描述語言(HDL),做過PCB設(shè)計(jì)的同學(xué)肯定會(huì)覺得這個(gè)過程很類似繪制原理圖;
通過驗(yàn)證確保機(jī)器的理解跟你想的一致:在用這些機(jī)器語言表述你的邏輯的時(shí)候你要確保機(jī)器理解的跟你自己理解的是一致的,如何才能做到這一點(diǎn)?我們聰明的工程師發(fā)明了“Simulation(仿真)”這么個(gè)過程,給出一些輸入條件,看機(jī)器理解的結(jié)果是不是如你預(yù)期的一樣,如果有出入,那就是你們之間的溝通有問題,也就是你用它的語言表述的不夠清晰、準(zhǔn)確,你需要進(jìn)行調(diào)整;類比PCB設(shè)計(jì),這個(gè)過程類似你設(shè)計(jì)了一個(gè)模擬電路之后需要運(yùn)行Spice工具對(duì)你設(shè)計(jì)的電路以及相應(yīng)的參數(shù)進(jìn)行驗(yàn)證一樣。很多人省去了這個(gè)過程,把風(fēng)險(xiǎn)留給了后面;
讓機(jī)器生成一個(gè)“它”理解的邏輯,這一步叫邏輯綜合,當(dāng)然得到的結(jié)果是機(jī)器能夠理解的抽象的關(guān)系圖,基于這個(gè)關(guān)系圖機(jī)器就可以在下一步自動(dòng)根據(jù)FPGA的內(nèi)部資源進(jìn)行具體的功能分配了。到現(xiàn)在為止還沒有跟具體的FPGA器件發(fā)生任何關(guān)系,這就類似PCB設(shè)計(jì)中基于繪制的原理圖生成了Netlist一樣。
針對(duì)具體的FPGA器件進(jìn)行資源分配 - 我們叫Implementation,也可以叫Place & Route(中文意思是布局布線,跟PCB中的過程類似)。這個(gè)過程就與你選用的哪家的器件、哪個(gè)類別的器件、哪個(gè)型號(hào)的器件,乃至哪個(gè)速度等級(jí)的器件都有關(guān)系了,在資源分配的過程中你一定要給出讓計(jì)算機(jī)分配資源的約束條件,除了你選用的具體的器件本身的資源限制以外,你要指定在邏輯中的哪個(gè)信號(hào)對(duì)應(yīng)在哪個(gè)管腳上,從一個(gè)管腳到另一個(gè)管腳之間的最大延時(shí)是多少等等,這就類似PCB布局布線的時(shí)候你一定要根據(jù)加工廠提供的需求設(shè)定每根走線的寬度、線間距、過孔的大小等design rule一樣。道理都是一致的,面對(duì)具體的器件,你不能隨心所欲。
每次完成布局布線,因?yàn)椴煌瑥S商的不同型號(hào)的器件其內(nèi)部的構(gòu)成架構(gòu)是不同的,因此需要再次驗(yàn)證將你的邏輯映射到具體的器件的具體資源里面以后,它干的活是不是滿足你的要求,不僅要求其實(shí)現(xiàn)你需要的功能,更要要求其滿足你要求的性能,也就是說內(nèi)部的這些功能塊乃至每個(gè)門之間的時(shí)序配合要滿足你的要求,否則在實(shí)際的系統(tǒng)中就會(huì)出亂子的。這就像國慶閱兵,每個(gè)部隊(duì)在拉到長安街之前要經(jīng)過嚴(yán)格的演練,要做各種演習(xí),驗(yàn)證你的每一個(gè)環(huán)節(jié)都配合得天衣無縫。
一切都完美 - perfect,生成一個(gè)最高指示 - bit stream,發(fā)送到你選中的fpga芯片配置的PROM中,每次FPGA加上電以后就調(diào)用這些PROM中的最高指示,將其內(nèi)部的資源配置成最高指示想要的模樣,任勞任怨地干活唄。
這個(gè)流程清楚了吧?每家的FPGA都得遵循這個(gè)過程,無論是其中的貴族還是貧民,因?yàn)樵O(shè)計(jì)的規(guī)則都是一樣的。
還是那話,無論是Lattice的Diamond,Intel的Quartus,亦或是Xilinx的Vivado,都是“大同”的 - 都要具備這些功能,都要遵循這些流程,不同的就是有的搞得簡約一些,有得搞得華麗一些,每個(gè)按鈕點(diǎn)一點(diǎn),每個(gè)輸出的結(jié)果看一看,就清楚他們之間的“小異”了。
不要再宣稱我只會(huì)用Xilinx的Vivado、我只會(huì)用Altium的AD,這只能說明你沒有真正掌握設(shè)計(jì)的核心。
-
FPGA
+關(guān)注
關(guān)注
1645文章
22049瀏覽量
618385 -
機(jī)器
+關(guān)注
關(guān)注
0文章
790瀏覽量
41284 -
機(jī)器語言
+關(guān)注
關(guān)注
0文章
36瀏覽量
10908
原文標(biāo)題:從概念到FPGA邏輯實(shí)現(xiàn)的設(shè)計(jì)流程
文章出處:【微信號(hào):xiaojiaoyafpga,微信公眾號(hào):電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
氯離子結(jié)構(gòu)示意圖和鈉離子結(jié)構(gòu)示意圖

Altera公司的FPGA選擇示意圖資料免費(fèi)下載

一個(gè)電子馬達(dá)啟動(dòng)電路的示意圖

評(píng)論