FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。而且FPGA開(kāi)發(fā)工程師是一個(gè)相對(duì)高薪的工作,學(xué)習(xí)的人也不少。然而對(duì)于剛?cè)腴T(mén)的初學(xué)者來(lái)說(shuō),總有一種無(wú)從下手的感覺(jué)。本文是來(lái)自一個(gè)資深FPGA工程師的自述,他從FPGA的的基礎(chǔ)知識(shí)開(kāi)始介紹,提出學(xué)習(xí)FGPA需要注重的要點(diǎn),并用自己的親身經(jīng)歷驗(yàn)證和告誡廣大愛(ài)好者,經(jīng)驗(yàn)都是從實(shí)踐中獲得,多動(dòng)手才是王道。
深入了解FPGA廠商并掌握FPGA編程語(yǔ)言
談FPGA之前,先說(shuō)說(shuō)生產(chǎn)廠商吧。全球知名的FPGA生產(chǎn)廠商有:
1.Altera,開(kāi)發(fā)平臺(tái)是Quartus II
2.Xilinx?開(kāi)發(fā)平臺(tái)是ISE
3.Actel ,開(kāi)發(fā)平臺(tái)是Libero
4.Lattice
5.Atmel
其中Altera作為世界老牌可編程邏輯器件的廠家,是可編程邏輯器件的發(fā)明者,開(kāi)發(fā)軟件MAX+PLUSII和QuartusII。記得上學(xué)的時(shí)候用的用的就是altera的芯片,當(dāng)時(shí)的工具也是MAX,現(xiàn)在感覺(jué)當(dāng)時(shí)的軟件很強(qiáng)大了,現(xiàn)在感覺(jué)比較弱智了,下載FPGA就是用串口,當(dāng)時(shí)的時(shí)鐘速率也就是25M左右,用的是試驗(yàn)箱,就是一個(gè)大箱子,里面有板子和說(shuō)明,板子上還有8位數(shù)碼管和跳線,當(dāng)時(shí)感覺(jué)好神奇啊,現(xiàn)在感覺(jué)那是個(gè)垃圾、廢物,忘記是那個(gè)廠家了。
Xilinx是FPGA的發(fā)明者,擁有世界一半以上的市場(chǎng),提供90%的高端65nmFPGA產(chǎn)品,開(kāi)發(fā)軟件為ISE,其產(chǎn)品主要用于軍用和宇航。畢業(yè)后就是xilinx的,altera的很少用,大家一定問(wèn)為什么,我也畢業(yè)的時(shí)候也是這樣問(wèn)老大的,老大說(shuō)altera的不好用,我也有點(diǎn)氣不忿兒,現(xiàn)在看來(lái)確實(shí)是這樣,總結(jié)幾點(diǎn):
1:xilinx的資源豐富,新手會(huì)說(shuō)很雜不容易用,但是如果上手之后,里面的資源確實(shí)會(huì)為你處理帶來(lái)方便,比如BUFG,IODELAY,ODDR,OBUFT等等這些小的資源,還有一些IPcore,altera的好像要少些。
2:xilinx邏輯量比較大,一些大容量的FPGA好像altera沒(méi)有這么大的,比如V5,V6,V7,K7,這些altera是遠(yuǎn)遠(yuǎn)沒(méi)有的。不過(guò)也帶來(lái)了隱患,比如說(shuō)散熱。不過(guò)有一點(diǎn)xilinx好像沒(méi)有altera的做的好,那就是高速查分線,xilinx叫GTP,GTX,GTH,現(xiàn)在好像也區(qū)別不大了。
Altera和Xilinx主要生產(chǎn)一般用途FPGA,其主要產(chǎn)品采用RAM工藝。Actel主要提供非易失性FPGA,產(chǎn)品主要基于反熔絲工藝和FLASH工藝。
講到FPGA語(yǔ)言就不得不講verilog 和VHDL,本人大學(xué)學(xué)的是VHDL,工作就一直在用VHDL。我覺(jué)得veilog更接近底層,關(guān)鍵是更接近C,所以被FPGA工程師所喜歡。HDL特別是Verilog HDL得到在第一線工作的設(shè)計(jì)工程師的特別青睞,不僅因?yàn)镠DL與C語(yǔ)言很相似,學(xué)習(xí)和掌握它并不困難,更重要的是它在復(fù)雜的SOC的設(shè)計(jì)上所顯示的非凡性能和可擴(kuò)展能力。在學(xué)習(xí)HDL語(yǔ)言時(shí),筆者認(rèn)為先學(xué)習(xí)VerilogHDL比較好:一是容易入門(mén);二是接受Verilog HDL代碼做后端芯片的集成電路廠家比較多,現(xiàn)成的硬核、固核和軟核比較多。
實(shí)現(xiàn)起來(lái),veilog更容易實(shí)現(xiàn)。比如說(shuō)要例化多個(gè)模塊,我們就可以用for語(yǔ)句,并且這個(gè)是可綜合的。我們?cè)谏昝骺偩€時(shí),由于比較繁瑣的語(yǔ)句的時(shí)候,稍不注意還會(huì)有書(shū)寫(xiě)錯(cuò)誤。
我們都知道FPGA一般作為主控芯片,I2C也一般是做主設(shè)備。但是大家有沒(méi)有遇到過(guò)做從設(shè)備的情況,從設(shè)備穩(wěn)定嗎?一般情況下,I2C做從設(shè)備是不好做的,特別是做大容量的從設(shè)備。I2C看起來(lái)簡(jiǎn)單,但是里面還有很多問(wèn)題,如果我們只考慮簡(jiǎn)單的7為device address,8 bit register address,數(shù)據(jù)讀寫(xiě)位也是簡(jiǎn)單的8bit的話,另外讀寫(xiě)只是簡(jiǎn)單的I2C interface的話,還簡(jiǎn)單些。
如果要考慮大容量的,如16bit的設(shè)備地址,讀的情形考慮到簡(jiǎn)單的接口外還要考慮有restart的情況,就不好做了,如果要考慮的再細(xì)一點(diǎn),特別是做圖像處理的話,讀寫(xiě)EDID的時(shí)候有個(gè)搜索device設(shè)備的過(guò)程,這種情形恐怕做好的就不容易了。
如果你是大廠商,像一些AT的ROM,F(xiàn)lash等公司,做的也是巨爛,我們用他們的芯片,用ARM訪問(wèn)也是會(huì)有一些問(wèn)題,就是他們考慮的不太周全。像一些圖像驅(qū)動(dòng)的廠商,做的I2C相對(duì)來(lái)說(shuō)還好些;通信設(shè)備的I2C寫(xiě)的也是很差,控制起來(lái)比較麻煩,像一些光纖收發(fā)器的廠商,也就是光模塊的廠商,有的時(shí)候你用ARM等標(biāo)準(zhǔn)設(shè)備訪問(wèn)的時(shí)候,也會(huì)有一些問(wèn)題。所以你如果要做個(gè)I2C的從設(shè)備的話,要考慮的周全一些,這樣我們的芯片健壯性就會(huì)比較高。
做FPGA代碼,其中一個(gè)最重要的步驟,那就是仿真。仿真簡(jiǎn)單的說(shuō),就是驗(yàn)證代碼是否正確。里面就包含了很多仿真的東西,測(cè)試平臺(tái)的搭建,庫(kù)的建立等等。最讓我們忽略的恐怕就是線延時(shí)了。有的時(shí)候我們仿真正確,但是加載到FPGA里面就不正確了,這是為什么呢?你忽略了一個(gè)問(wèn)題,那就是線延時(shí)。你的接口從FPGA到接口芯片肯定鋪銅線過(guò)去了,中間這段走線是有延時(shí)。所以在我們仿真的時(shí)候,測(cè)試平臺(tái)要在庫(kù)和頂層之間加上一定的延時(shí)。這樣來(lái)保證我們代碼的正確。
精品來(lái)自于于千錘百煉 要不斷的發(fā)現(xiàn)問(wèn)題才能解決問(wèn)題
如果我們用FPGA只是做個(gè)小程序?qū)嶒?yàn)實(shí)驗(yàn)我們的功能,應(yīng)該說(shuō)還是比較容易的;如果我們用FPGA作產(chǎn)品,那么你要考慮的要很多,有的時(shí)候你覺(jué)得你的代碼很完美,實(shí)驗(yàn)也沒(méi)啥問(wèn)題,那么你有沒(méi)有讓你的程序跑一年甚至是更遠(yuǎn)時(shí)間,你有沒(méi)有把你的程序放在各種環(huán)境下實(shí)驗(yàn)。如果說(shuō)你認(rèn)為這是芯片的問(wèn)題和你的程序沒(méi)有關(guān)系,這就大錯(cuò)特錯(cuò)了。這些最終考究的就是你的代碼的健壯性,也就是說(shuō)的精品來(lái)自于千錘百煉。
這里我們談?wù)凢PGA需要注意的兩點(diǎn):
1:調(diào)試各類(lèi)驅(qū)動(dòng)芯片;如果做通信的話,有各種通信芯片,主要包括PHY芯片,通信交換芯片,光纖驅(qū)動(dòng)芯片等,各類(lèi)芯片。另外還有各種通信接口。這些接口和芯片需要時(shí)間去調(diào)試和積累,這些不是在論壇上能完成的,這個(gè)過(guò)程是要在實(shí)驗(yàn)室來(lái)完成的。
2:定位FPGA的位置,F(xiàn)PGA要了解的大部分不是FPGA知識(shí),而是硬件知識(shí)和軟件知識(shí),這是因?yàn)镕PGA的位置是FPGA的硬件和軟件的橋梁。首先要了解硬件,大部分做FPGA不太關(guān)注硬件問(wèn)題,都認(rèn)為硬件不是FPGA的問(wèn)題,這就大錯(cuò)特錯(cuò)了,硬件設(shè)計(jì)的好壞直接影響到FPGA工作的質(zhì)量。
親身經(jīng)歷驗(yàn)證對(duì)任何問(wèn)題要有懷疑自我的精神
先描述下邏輯:FPGA實(shí)現(xiàn)一個(gè)邏輯,每按下一個(gè)按鈕(邏輯做了消抖),出現(xiàn)10個(gè)200ns的脈沖,然后通過(guò)示波器抓輸出波形,示波器出發(fā)條件,設(shè)置自動(dòng)觸發(fā)(上升沿)或者條件觸發(fā)<1ms都試過(guò)。
問(wèn)題出現(xiàn):每次按下按鈕,不是每次都能在示波器看到脈沖波形,大概按下10次會(huì)有1-2次示波器抓不到波形!首先我懷疑是我做的邏輯問(wèn)題,這個(gè)樓主一貫的風(fēng)格,先懷疑自己,驗(yàn)證自己沒(méi)有問(wèn)題了再懷疑相關(guān),而不是想當(dāng)然說(shuō)自己這個(gè)沒(méi)問(wèn)題那個(gè)沒(méi)問(wèn)題,我覺(jué)得這點(diǎn)很重要,就是懷疑精神,我發(fā)現(xiàn)設(shè)計(jì)工程師都想把自己推的一干二凈,說(shuō)自己的沒(méi)有問(wèn)題,我覺(jué)得出現(xiàn)問(wèn)題任何地方都是值得懷疑的,先去檢查自己,不是說(shuō)自己沒(méi)問(wèn)題就沒(méi)有問(wèn)題的,如果后來(lái)證明是自己的問(wèn)題,這不相當(dāng)于自己打自己的臉嗎!總結(jié)一點(diǎn):要有懷疑精神,所有相關(guān)的都是值得懷疑的。
回歸正題,然后我用chipesope抓到是輸出邏輯有波形,但是示波器上看不到,出現(xiàn)這種情況大家會(huì)怎么做?我輸出邏輯沒(méi)有問(wèn)題后,我就想是不是IO的驅(qū)動(dòng)能力,因?yàn)槲彝饷嬷苯佑檬静ㄆ鳒y(cè)量的,是不是沒(méi)有負(fù)載,所有輸出不正常,基于這點(diǎn),然后我把輸出的邏輯再接入到FPGA某一輸入管腳,然后又寫(xiě)著一段程序,檢測(cè)輸入是不是有信號(hào)過(guò)來(lái),然后做了計(jì)數(shù)之類(lèi),結(jié)果發(fā)現(xiàn),當(dāng)示波器沒(méi)有波形的時(shí)候,輸入的信號(hào)也有,計(jì)數(shù)也正常。出現(xiàn)這種情況大家會(huì)怎么做?
是不是同一芯片的問(wèn)題,然后我把這個(gè)輸出的管腳飛線到另外一個(gè)芯片,當(dāng)示波器沒(méi)有波形的時(shí)候,另外一個(gè)芯片輸入的信號(hào)也有!
基于以上測(cè)試,我大膽預(yù)測(cè)是示波器的問(wèn)題,也不能說(shuō)是示波器的問(wèn)題吧,估計(jì)是沒(méi)有這種的應(yīng)用場(chǎng)景。然后我有試了另外一家的芯片,寫(xiě)上同樣的邏輯,測(cè)試結(jié)果一樣。做了這么多試驗(yàn),也證明了,就是示波器沒(méi)有這樣的場(chǎng)景。用的示波器是泰克的2032等,試了他的兩款表,都是如此,不是黑他的表,我估計(jì)所有的表也都是如此。
經(jīng)驗(yàn)是從實(shí)踐中獲得 多動(dòng)手才是王道
FPGA新手總是覺(jué)得FPGA無(wú)從下手,也不知道該如何下手。包括剛開(kāi)始做FPGA開(kāi)發(fā)時(shí)候的我,也是如此。針對(duì)這種情況,我還是勸新手們,多做點(diǎn)試驗(yàn),多有點(diǎn)想法,然后試著寫(xiě)些小的程序,然后再FPGA上驗(yàn)證功能,如果不是你想要的,那就再調(diào)試,慢慢的你就學(xué)習(xí)到一些實(shí)踐的東西。因?yàn)樽罱KFPGA不是理論,他要靠實(shí)踐來(lái)完成,你才知道哪些是對(duì)的哪些是錯(cuò)的。光靠書(shū)本不去試驗(yàn)肯定是不行的,所以勸大家多動(dòng)動(dòng)手。
目前覺(jué)得fpga的發(fā)展方向:1:接口統(tǒng)一化,類(lèi)似于AXI系接口;2:硬件語(yǔ)言軟件化;3:系統(tǒng)化。以后fpga開(kāi)發(fā)難度會(huì)越來(lái)越下降,也是技術(shù)開(kāi)發(fā)的方向。擱在幾年前,硬件很吃香,現(xiàn)在幾乎不需要硬件工程師。其實(shí)也不是不需要,而是硬件越來(lái)越標(biāo)準(zhǔn)化,一個(gè)行業(yè)越來(lái)越標(biāo)準(zhǔn),說(shuō)明開(kāi)發(fā)的難度也隨之降低。
做開(kāi)發(fā),心態(tài)問(wèn)題很重要,什么人適合做研發(fā),什么人適合做銷(xiāo)售。我覺(jué)得這個(gè)是勉強(qiáng)不來(lái)的。有的人做銷(xiāo)售,不需要什么技術(shù)和技巧,因?yàn)樗麖男【湍苷f(shuō)會(huì)道,周邊的人都比較喜歡,和別人溝通,交際這方面比較擅長(zhǎng)。如果是這樣的人,就適合做銷(xiāo)售和行政之類(lèi),和別人打交道的工作。如果你讓這些人做技術(shù),他坐不住,處處感覺(jué)別扭。有的人做研究,我覺(jué)得同樣也不需要太多的技術(shù),因?yàn)樗麖男【统聊蜒?,喜歡發(fā)呆思考問(wèn)題,數(shù)理化總能不怎么學(xué)都能考試高分,但是如果家里來(lái)了親戚,確害羞的不愛(ài)說(shuō)話,也就是人們常說(shuō)的木訥,這些人適合做技術(shù)。如果你讓這些人做銷(xiāo)售,單子估計(jì)一個(gè)也接不到。所以我覺(jué)得不管做什么,根絕自己的性格找到合適的工作,這樣身心愉悅!
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1645文章
22046瀏覽量
618285 -
邏輯器件
+關(guān)注
關(guān)注
0文章
90瀏覽量
20405 -
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1956瀏覽量
36635
原文標(biāo)題:FPGA工程師自述:實(shí)踐中獲得經(jīng)驗(yàn) 多動(dòng)手才是王道
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
【經(jīng)驗(yàn)分享】玩轉(zhuǎn)FPGA串口通信:從“幻覺(jué)調(diào)試”到代碼解析

FPGA與ASIC的區(qū)別 FPGA性能優(yōu)化技巧
玩轉(zhuǎn)FPGA必備的基礎(chǔ)知識(shí)
Verilog vhdl fpga
FPGA與ASIC的優(yōu)缺點(diǎn)比較
FPGA加速深度學(xué)習(xí)模型的案例
FPGA編程語(yǔ)言的入門(mén)教程
FPGA芯片架構(gòu)和資源有深入的理解,精通Verilog HDL、VHDL
為什么FPGA屬于硬件,還需要搞算法?
深入了解PCI轉(zhuǎn)XMC載板轉(zhuǎn)接卡
國(guó)產(chǎn)FPGA的發(fā)展前景是什么?
技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握程序結(jié)構(gòu)知識(shí)

評(píng)論