0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教你如何輕松玩轉(zhuǎn)FPGA開發(fā)

Q4MP_gh_c472c21 ? 來源:cg ? 2018-12-29 10:29 ? 次閱讀

很多人在剛接觸FPGA時(shí)都有著無從下手的體驗(yàn),包括剛開始做FPGA開發(fā)時(shí)候的筆者亦如此。針對(duì)這種情況,新手要多做試驗(yàn),多思考,然后試著寫些小的程序,再在FPGA上驗(yàn)證功能,如果不是想要的就再調(diào)試,慢慢的就可以學(xué)習(xí)到一些實(shí)際的東西。FPGA終極目標(biāo)不是理論,而是實(shí)現(xiàn)實(shí)踐的路徑,成為“書蟲”肯定是不行的,所以建議大家多動(dòng)動(dòng)手。

做開發(fā)需要什么樣的心態(tài)?個(gè)人性格我覺得這個(gè)是勉強(qiáng)不來的,有的人做銷售,不需要什么技術(shù)和技巧,因?yàn)樗麖男【湍苷f會(huì)道,周邊的人都比較喜歡,和別人溝通,交際這方面比較擅長。如果是這樣的人,就適合做銷售和行政之類,和別人打交道的工作,如果你讓這些人做技術(shù),他坐不住,處處感覺別扭。

有的人做研究,從小就沉默寡言,喜歡發(fā)呆思考問題,數(shù)理化總能不怎么學(xué)都能考試高分,但是如果家里來了親戚,確害羞的不愛說話,也就是人們常說的木訥。這些人適合做技術(shù)。如果你讓這些人做銷售,單子估計(jì)一個(gè)也接不到。所以我覺得不管做什么,根絕自己的性格找到合適的工作,這樣身心愉悅。實(shí)際上,開發(fā)工作也是一項(xiàng)較累人的工作。

回歸正題,F(xiàn)PGA首先要了解硬件,大部分做FPGA不太關(guān)注硬件問題,都認(rèn)為硬件不是FPGA的問題,這就大錯(cuò)特錯(cuò)了,硬件設(shè)計(jì)的好壞直接影響到FPGA工作的質(zhì)量。

做FPGA需要注意調(diào)試各類驅(qū)動(dòng)芯片,如果做通信的話,有各種通信芯片,主要包括PHY芯片,通信交換芯片,光纖驅(qū)動(dòng)芯片等,各類芯片。另外還有各種通信接口。這些接口和芯片需要時(shí)間去調(diào)試和積累,這些不是在論壇上能完成的,這個(gè)過程是要在實(shí)驗(yàn)室來完成的。另外,定位FPGA的位置,F(xiàn)PGA要了解的大部分不是FPGA知識(shí),而是硬件知識(shí)和軟件知識(shí),這是因?yàn)镕PGA的位置,F(xiàn)PGA的硬件和軟件的橋梁。

目前FPGA的發(fā)展方向分為接口統(tǒng)一化(類似于AXI系接口)、硬件語言軟件化、系統(tǒng)化。以后FPGA開發(fā)難度會(huì)越來越下降,也是技術(shù)開發(fā)的方向。在幾年前,硬件很吃香,現(xiàn)在幾乎不需要硬件工程師,其實(shí)并不是不需要,而是硬件越來越標(biāo)準(zhǔn)化,一個(gè)行業(yè)越來越標(biāo)準(zhǔn),說明開發(fā)的難度也隨之降低。

FPGA代碼其中一個(gè)最重要的步驟就是仿真。仿真簡(jiǎn)單的說,就是驗(yàn)證代碼是否正確,其中就包含了很多仿真的東西,測(cè)試平臺(tái)的搭建,庫的建立等等。最讓我們忽略的恐怕就是線延時(shí)了。

有時(shí)仿真正確,但是加載到FPGA里面就不正確了,這是為什么呢?忽略了一個(gè)問題,那就是線延時(shí)。接口從FPGA到接口芯片肯定鋪銅線過去了,中間這段走線是有延時(shí)。所以在仿真時(shí),測(cè)試平臺(tái)要在庫和頂層之間加上一定的延時(shí),來保證我們代碼的正確。

那么目前FPGA的主要生產(chǎn)廠商有哪些?有哪些區(qū)別?

1.Altera,開發(fā)平臺(tái)是Quartus II

2.Xilinx開發(fā)平臺(tái)是ISE

3.Actel ,開發(fā)平臺(tái)是Libero

4.Lattice

5.Atmel

其中Altera作為世界老牌可編程邏輯器件的廠家,是可編程邏輯器件的發(fā)明者,開發(fā)軟件MAX+PLUSII和QuartusII。記得上學(xué)的時(shí)候用的用的就是altera的芯片,當(dāng)時(shí)的工具也是MAX,現(xiàn)在感覺當(dāng)時(shí)的軟件很強(qiáng)大了,現(xiàn)在感覺比較弱智了,下載FPGA就是用串口,當(dāng)時(shí)的時(shí)鐘速率也就是25M左右,用的是試驗(yàn)箱,就是一個(gè)大箱子,里面有板子和說明,板子上還有8位數(shù)碼管和跳線。

Xilinx是FPGA的發(fā)明者,擁有世界一半以上的市場(chǎng),提供90%的高端65nmFPGA產(chǎn)品,開發(fā)軟件為ISE,其產(chǎn)品主要用于軍用和宇航。

畢業(yè)后就是xilinx的,altera的很少用,大家一定問為什么,我也畢業(yè)的時(shí)候也是這樣問老大的,老大說altera的不好用,我也有點(diǎn)氣不忿兒,現(xiàn)在看來確實(shí)是這樣,總結(jié)幾點(diǎn):

1:xilinx的資源豐富,新手會(huì)說很雜不容易用,但是如果上手之后,里面的資源確實(shí)會(huì)為你處理帶來方便,比如說BUFG,IODELAY,ODDR,OBUFT等等這些小的資源,還有一些IPcore,altera的好像要少些。

2:xilinx邏輯量比較大,一些大容量的FPGA好像altera沒有這么大的,比如V5,V6,V7,K7,這些altera是遠(yuǎn)遠(yuǎn)沒有的。不過也帶來了隱患,比如說散熱。不過有一點(diǎn)xilinx好像沒有altera的做的好,那就是高速查分線,xilinx叫GTP,GTX,GTH,現(xiàn)在好像也區(qū)別不大了。Altera和Xilinx主要生產(chǎn)一般用途FPGA,其主要產(chǎn)品采用RAM工藝。Actel主要提供非易失性FPGA,產(chǎn)品主要基于反熔絲工藝和FLASH工藝。

講到FPGA語言就不得不講verilog和VHDL,本人大學(xué)學(xué)的是VHDL,工作就一直在用VHDL。veilog更接近底層,關(guān)鍵是更接近C,所以被FPGA工程師所喜歡。HDL特別是Verilog HDL得到在第一線工作的設(shè)計(jì)工程師的特別青睞,不僅因?yàn)镠DL與C語言很相似,學(xué)習(xí)和掌握它并不困難,更重要的是它在復(fù)雜的SOC的設(shè)計(jì)上所顯示的非凡性能和可擴(kuò)展能力。在學(xué)習(xí)HDL語言時(shí),筆者認(rèn)為先學(xué)習(xí)VerilogHDL比較好:一是容易入門;二是接受Verilog HDL代碼做后端芯片的集成電路廠家比較多,現(xiàn)成的硬核、固核和軟核比較多。而在實(shí)現(xiàn)上,veilog更容易實(shí)現(xiàn)。

比如說要例化多個(gè)模塊,我們就可以用for語句,并且這個(gè)是可綜合的。在申明總線時(shí),由于比較繁瑣的語句的時(shí)候,稍不注意還會(huì)有書寫錯(cuò)誤。也許在veilog里面,只需要一個(gè)for語句就能搞定。

begin : loop

integer i;

for(i = 0; i <= 7; i = i + 1)

begin

if(int_stat_clr[i] ==1)

int_stat[i] <= 0 ;

end

end // block: loop71

這就話的意思就是如果stat_clr寄存器某一位為1,那么相對(duì)應(yīng)的stat下面的一位就為1,這樣寫是不是很簡(jiǎn)單。

wire和reg的區(qū)別

reg相當(dāng)于存儲(chǔ)單元,wire相當(dāng)于物理連線,但是新學(xué)FPGA的會(huì)問,存儲(chǔ)單元是什么,其實(shí)說白了就是D觸發(fā)器。通俗的解釋就是,wire相當(dāng)于物理連線,就當(dāng)與銅絲,PCB板子的走線,reg相當(dāng)于芯片。wire走線延時(shí)小,幾乎可以忽略不計(jì)。reg一個(gè)時(shí)鐘的延時(shí),這樣就夠了。

賦值:

wire對(duì)應(yīng)的是assign,always,reg對(duì)應(yīng)的always或者initial。

例如:

assign a = b ;把b點(diǎn)和a點(diǎn)相連接

always @(b)

a=b ;

表示變化出發(fā)

always @(posedge clk)

a<=b ;

把b線經(jīng)過一級(jí)D觸發(fā)器給a,可以看出這時(shí):

1、wire型的變量綜合出來一般是一根導(dǎo)線;

2、reg變量在always塊中有兩種情況:

(1)、always后的敏感表中是b 形式的,也就是不帶時(shí)鐘邊沿的,綜合出來還是組合邏輯

(2)、always后的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來一般是時(shí)序邏輯,會(huì)包含觸發(fā)器(Flip-Flop)

FPGA用的所有的信號(hào)賦值都是wire和 reg ,學(xué)會(huì)了這兩個(gè)也就掌握了FPGA的基本。

I2C

眾所周知,F(xiàn)PGA一般作為主控芯片,I2C也一般是做主設(shè)備。一般情況下,I2C做從設(shè)備是不好做的,特別是做大容量的從設(shè)備。I2C看起來簡(jiǎn)單,但是里面還有很多問題,如果我們只考慮簡(jiǎn)單的7為device address,8 bit register address,數(shù)據(jù)讀寫位也是簡(jiǎn)單的8bit的話,另外讀寫只是簡(jiǎn)單的I2C interface的話,還簡(jiǎn)單些。

如果要考慮大容量的,如16bit的設(shè)備地址,讀的情形考慮到簡(jiǎn)單的接口外還要考慮有restart的情況,就不好做了,如果要考慮的再細(xì)一點(diǎn),特別是做圖像處理的話,讀寫EDID的時(shí)候有個(gè)搜索device設(shè)備的過程,這種情形恐怕做好的就不容易了。

如果是大廠商,像一些AT的ROM,F(xiàn)lash等公司,做的也是巨爛,我們用他們的芯片,用ARM訪問也是會(huì)有一些問題,就是他們考慮的不太周全。像一些圖像驅(qū)動(dòng)的廠商,做的I2C相對(duì)來說還好些;通信設(shè)備的I2C寫的也是很差,控制起來比較麻煩,像一些光纖收發(fā)器的廠商,也就是光模塊的廠商,有的時(shí)候你用ARM等標(biāo)準(zhǔn)設(shè)備訪問的時(shí)候,也會(huì)有一些問題。

所以如果要做個(gè)I2C的從設(shè)備的話,要考慮的周全一些,這樣我們的芯片健壯性就會(huì)比較高。

關(guān)于FPGA的延時(shí)以及時(shí)序等要求包括skew,width,period,hold&set time。

檢查時(shí)鐘和控制信號(hào)在指定事件之間的時(shí)間間隔,包括:skew、width、period和nochange。

skew:$skew(reference_event, data_event, limit, notifier); 限制最大偏斜$skew (posedge clk1, posedge clk2, 1, notifier); 當(dāng)data_eventtime - reference_event > limit,則會(huì)報(bào)告skew timeviolations。$skew是基于事件(event-based)的,如果監(jiān)測(cè)到一個(gè)reference_event,那么就開始評(píng)估脈寬,只要監(jiān)測(cè)到一個(gè)data_event,就會(huì)生成相應(yīng)的報(bào)告,直到監(jiān)測(cè)到下一個(gè)reference_event,才重新開始新的監(jiān)測(cè)。如果在監(jiān)測(cè)到一個(gè)data_event之前,又監(jiān)測(cè)到一個(gè)reference_event,那么就放棄本次評(píng)估,重新開始新的評(píng)估。

width:$width(controlled_reference_event, limit, threshold, notifier); 限制最小脈寬 $width (posedge in, 2, notifier); 這里data_event是隱含的,它等于reference_event的相反邊緣,當(dāng)width < limit時(shí),就會(huì)報(bào)告width time violations。

period:$period(controlled_reference_event, limit, notifier); 限制最小周期$period (negedge clk, 10, notifier); 這里data_event是隱含的,它等于reference_event的相同邊緣,當(dāng)period < limit時(shí),就會(huì)報(bào)告period time violations。

nochange:$nochange(reference_event,data_event, start_edge_offset, end_edge_offset, notifier);當(dāng)eading reference event time - start_edge_offset < data_event

先描述下邏輯:FPGA實(shí)現(xiàn)一個(gè)邏輯,每按下一個(gè)按鈕(邏輯做了消抖),出現(xiàn)10個(gè)200ns的脈沖,然后通過示波器抓輸出波形,示波器出發(fā)條件,設(shè)置自動(dòng)觸發(fā)(上升沿)或者條件觸發(fā)<1ms都試過。

問題出現(xiàn):每次按下按鈕,不是每次都能在示波器看到脈沖波形,大概按下10次會(huì)有1-2次示波器抓不到波形!

首先懷疑是做的邏輯問題,這個(gè)樓主一貫的風(fēng)格,先懷疑自己,驗(yàn)證自己沒有問題了再懷疑相關(guān),而不是想當(dāng)然說自己這個(gè)沒問題那個(gè)沒問題,我覺得這點(diǎn)很重要,就是懷疑精神,我發(fā)現(xiàn)設(shè)計(jì)工程師都想把自己推的一干二凈,說自己的沒有問題,我覺得出現(xiàn)問題任何地方都是值得懷疑的,先去檢查自己,不是說自己沒問題就沒有問題的,如果后來證明是自己的問題,這不相當(dāng)于自己打自己的臉嗎!

總結(jié)一點(diǎn):要有懷疑精神,所有相關(guān)的都是值得懷疑的。

好了,回歸正題,然后我用chipesope抓到是輸出邏輯有波形,但是示波器上看不到,出現(xiàn)這種情況大家會(huì)怎么做?

輸出邏輯沒有問題后,初步判定是不是IO的驅(qū)動(dòng)能力,因?yàn)橥饷嬷苯佑檬静ㄆ鳒y(cè)量的,是不是沒有負(fù)載,所有輸出不正常,基于這點(diǎn)將輸出的邏輯再接入到FPGA某一輸入管腳,然后又寫著一段程序,檢測(cè)輸入是不是有信號(hào)過來,然后做了計(jì)數(shù)之類,結(jié)果發(fā)現(xiàn),當(dāng)示波器沒有波形的時(shí)候,輸入的信號(hào)也有,計(jì)數(shù)也正常。出現(xiàn)這種情況大家會(huì)怎么做?

是不是同一芯片的問題,然后我把這個(gè)輸出的管腳飛線到另外一個(gè)芯片,當(dāng)示波器沒有波形的時(shí)候,另外一個(gè)芯片輸入的信號(hào)也有!

基于以上測(cè)試,我大膽預(yù)測(cè)是示波器的問題,也不能說是示波器的問題吧,估計(jì)是沒有這種的應(yīng)用場(chǎng)景。

然后有試了另外一家的芯片,寫上同樣的邏輯,測(cè)試結(jié)果一樣。

做了這么多試驗(yàn),也證明了,就是示波器沒有這樣的場(chǎng)景。用的示波器是泰克的2032等,試了他的兩款表,都是如此,不是黑他的表,據(jù)估計(jì),所有的表也都如此。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598940
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67770

原文標(biāo)題:FPGA該如何學(xué)習(xí)?聽這位FPGAer如何渡劫

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    玩轉(zhuǎn)FPGA設(shè)計(jì)大賽上線,開始接受報(bào)名

    經(jīng)過準(zhǔn)備,"玩轉(zhuǎn)FPGA,賽靈思超值開發(fā)板等你拿"設(shè)計(jì)大賽正式上線,現(xiàn)已開始接受報(bào)名.報(bào)名地址:http://www.ttokpm.com/activities/fpga/
    發(fā)表于 04-23 15:31

    輕松玩轉(zhuǎn)AVR C語言 資料很好

    輕松玩轉(zhuǎn)AVR資料很好
    發(fā)表于 07-26 22:44

    原創(chuàng)手把手教你學(xué)習(xí)FPGA視頻教程,不看后悔喲

    很多囊中羞澀的初學(xué)者只能望板興嘆。針對(duì)現(xiàn)狀,推出了此款初學(xué)者能買得起的開發(fā)板,并以此開發(fā)板為硬件平臺(tái),推出手把手教你學(xué)習(xí)FPGA原創(chuàng)視頻教程,帶領(lǐng)初學(xué)者
    發(fā)表于 08-14 16:24

    韓老師教你輕松用示波器

    韓老師教你輕松用示波器
    發(fā)表于 04-06 11:14

    教你輕松上手51單片機(jī)

    1、7天入門,教你輕松上手51單片機(jī)https://www.moore8.com/series/51dpj?2csdn2、嵌入式系統(tǒng)開發(fā)攻略丨完整 全面 細(xì)致 實(shí)操 匯總https
    發(fā)表于 07-13 08:10

    如何輕松玩轉(zhuǎn)adc?

    如何輕松玩轉(zhuǎn)adc?
    發(fā)表于 01-21 06:28

    零死角輕松玩轉(zhuǎn)stm32下載

    《零死角輕松玩轉(zhuǎn) STM32》 系列教程由初級(jí)篇、 中級(jí)篇、 高級(jí)篇、 系統(tǒng)篇、 四個(gè)部分組成,根據(jù)野火 STM32 開發(fā)板舊版教程升級(jí)而來,且經(jīng)過重新深入編 寫,重新排版,更適合初學(xué)者
    發(fā)表于 04-28 14:23 ?0次下載

    把手教你學(xué)習(xí)FPGA—蜂鳴器篇

    把手教你學(xué)習(xí)FPGA—蜂鳴器篇,詳細(xì)的教程。
    發(fā)表于 09-01 16:40 ?0次下載

    一文教你如何玩轉(zhuǎn)Zynq平臺(tái)

    經(jīng)過這幾年的市場(chǎng)磨礪,Zynq-7000 FPGA SoC器件平臺(tái)在開發(fā)者中的認(rèn)知度和接受度越來越高,這種“ARM處理器+可編程邏輯”的創(chuàng)新架構(gòu),可以幫助開發(fā)者在設(shè)計(jì)中找到高性能與靈活性的完美平衡,對(duì)此大家也心知肚明。 但是在實(shí)
    的頭像 發(fā)表于 06-26 06:40 ?8700次閱讀

    輕松玩轉(zhuǎn)STM32Cube資料包下載(上)

    輕松玩轉(zhuǎn)STM32Cube資料包下載(上)
    發(fā)表于 09-28 09:39 ?0次下載

    輕松玩轉(zhuǎn)STM32Cube資料包下載(2)

    輕松玩轉(zhuǎn)STM32Cube資料包下載(2)
    發(fā)表于 09-28 09:41 ?0次下載

    輕松玩轉(zhuǎn)STM32Cube資料包下載(下)

    輕松玩轉(zhuǎn)STM32Cube資料包下載(下)
    發(fā)表于 09-28 09:46 ?0次下載

    通過一個(gè)案例教你玩轉(zhuǎn)MCU代碼生成工具(基于STM32)

    通過一個(gè)案例教你玩轉(zhuǎn)MCU代碼生成工具(基于STM32)
    發(fā)表于 11-18 17:36 ?12次下載
    通過一個(gè)案例<b class='flag-5'>教你</b><b class='flag-5'>玩轉(zhuǎn)</b>MCU代碼生成工具(基于STM32)

    輕松玩轉(zhuǎn)AVR單片機(jī)C語言源代碼

    輕松玩轉(zhuǎn)AVR單片機(jī)C語言圖書的配套源代碼資料分享。
    發(fā)表于 04-20 16:17 ?17次下載

    手把手教你pcb壓合的整個(gè)流程,小白也能玩轉(zhuǎn)電路板制作

    手把手教你pcb壓合的整個(gè)流程,小白也能玩轉(zhuǎn)電路板制作
    的頭像 發(fā)表于 09-18 10:43 ?3280次閱讀