很早就有在博客中記錄技術(shù)細(xì)節(jié),分享一些自己體會(huì)的想法,拖著拖著也就到了現(xiàn)在。畢業(yè)至今已經(jīng)半年有余,隨著項(xiàng)目越來越深入,感覺可以慢慢進(jìn)行總結(jié)工作了。趁著2024伊始,就先開個(gè)頭吧,這篇博客暫時(shí)作為匯總篇,記錄在這幾個(gè)月以及之后從FPGA初學(xué)者到也算有一定理解程度的學(xué)習(xí)過程。
前言
回想我的編程之旅其實(shí)挺坎坷的,在我初高中的時(shí)候完全沒接觸過電腦,只有個(gè)老人機(jī)用于打打電話,看看小說,所以第一次接觸程序設(shè)計(jì)時(shí)完全跟天書一樣。最最開始寫程序應(yīng)該是Matlab上機(jī)作業(yè),這個(gè)是靠抄書磕磕絆絆做完的。然后大一下的時(shí)候教C++程序設(shè)計(jì),在當(dāng)時(shí)看來真的太抽象了,老師上課也沒有手把手帶著學(xué),現(xiàn)在來看,編程這東西,看的再多不如上手去實(shí)踐,通過項(xiàng)目進(jìn)行學(xué)習(xí)。我記得期中考試是上機(jī),總共五道題,第一次好像就做了一道題,妥妥不及格,然后大家都做的不好所以補(bǔ)考了一次,還是差點(diǎn)掛了,從此我在心里就默認(rèn)編程太難了,看到程序就慫,我有一次還在微信跟資助我的師兄還抱怨,我選錯(cuò)方向了,工業(yè)自動(dòng)化要編程,我肯定學(xué)不好。那個(gè)時(shí)候的自己肯定打死也想不到,我未來還是在這個(gè)行業(yè)里,天天打交道的就是Matlab,C還有Verilog,還有一系列需要的語言,需要就去現(xiàn)炒現(xiàn)賣。人生就是這么兜兜轉(zhuǎn)轉(zhuǎn)難以琢磨,這也是精彩之處吧,現(xiàn)在人都想要安穩(wěn),可是當(dāng)下的安穩(wěn),當(dāng)下的信誓旦旦未來真的會(huì)如此確定嗎,我不敢肯定。命運(yùn)的推手我不知道會(huì)把我推向何處,就先做好當(dāng)下的事,充實(shí)自己,將自己武裝好了也就慢慢建立從容了。
說回FPGA,第一次了解這個(gè)是在大學(xué)數(shù)電課程中,當(dāng)時(shí)應(yīng)該是大二下學(xué)習(xí),那個(gè)時(shí)候我對(duì)于編程還是一竅不通的狀態(tài),記得在實(shí)驗(yàn)課上每次都是大佬們先做完,然后我們也就做完了。教我們的是一個(gè)快退休的高級(jí)工程師,他經(jīng)常跟我們說,雖然現(xiàn)在單片機(jī)應(yīng)用最為廣泛,但是FPGA的靈活性是單片機(jī)不能媲美的,這一行會(huì)很有作為,這個(gè)說法我現(xiàn)在無法給出自己的答案,確實(shí)了解還是不夠,很多行業(yè),很多應(yīng)用還沒有去深入體會(huì)過,再過上很多年希望有能力來說只言片語。
從上完這門課,F(xiàn)PGA就被我拋下了大概三年之久。大四暑假的時(shí)候提前來教研室,當(dāng)時(shí)想的是單片機(jī)和FPGA在之后做項(xiàng)目會(huì)用得上,需要惡補(bǔ)一下,但是現(xiàn)實(shí)告訴我,沒有帶著具體項(xiàng)目和體悟只是單純?nèi)ジ套呖梢运愕蒙鲜亲云燮廴?,所以就那么糊弄了自己兩個(gè)月。開學(xué)之后立馬就拋到一邊去了。
研究生階段我的編程能力算是有斷斷續(xù)續(xù)的成長,主要是三個(gè)階段吧,一個(gè)是研一下,當(dāng)時(shí)選了模式識(shí)別的課程,每學(xué)完一個(gè)分類器都要用Matlab去手?jǐn)]出來,我記得上課的老師全程板書,對(duì)分類器的實(shí)現(xiàn)步驟講解特別細(xì)致,所以我基本上就是按照這個(gè)步驟一句一句敲下來的,每次敲完運(yùn)行然后修修改改都得到了想要的結(jié)果就很有成就感。雖然只是簡單的貝葉斯判別,模糊判別,主成分分析等,但是通過自己手敲是真真切切感受到了程序不過就是算法的實(shí)現(xiàn)而已。第二個(gè)階段到了研二上學(xué)期,這半年去了某公司進(jìn)行實(shí)習(xí),實(shí)習(xí)的時(shí)候圍繞著那顆單片機(jī)完成了很多功能,SPI讀寫FLASH,IIC讀數(shù)字溫度傳感器,文件系統(tǒng)和IAP在線升級(jí)等等,一步一步走下來,都是現(xiàn)學(xué)現(xiàn)用,慢慢就發(fā)現(xiàn)好像只要去學(xué)就沒什么很恐怖的地方,網(wǎng)上都有很多教程,耐心去理解去實(shí)現(xiàn)就好了,這半年讓我對(duì)編程的畏懼心理少了好多,對(duì)單片機(jī)的應(yīng)用信心提高了很多。所以畢設(shè)就算是只有一個(gè)月交稿子的時(shí)候也可以不慌不忙在單片機(jī)里增加SDRAM讀寫和FFT功能。第三個(gè)階段就是研二下開始做畢設(shè)了,畢設(shè)要用在FPGA中實(shí)現(xiàn)DDS技術(shù),做一個(gè)信號(hào)源,那個(gè)時(shí)候又是一陣雄心勃勃,想著要好好學(xué)習(xí)一下,我記得還在??途W(wǎng)刷了好多題,但是很多都是找答案抄的,DDS的話也就是在FPGA中簡單實(shí)現(xiàn)了一個(gè)ROM讀取,SPI輸出。這些經(jīng)歷斷斷續(xù)續(xù)下來,說沒有用也不是沒用,就是在腦海里加深了印象還有對(duì)FPGA的開發(fā)打下基礎(chǔ)吧,這次算是淺嘗吧,真正用FPGA做了實(shí)際項(xiàng)目,到畢業(yè)這半年才開始算是入門了,讓我能有一點(diǎn)信心開始寫下這篇博客。
這幾個(gè)階段的經(jīng)歷慢慢切實(shí)告訴我自己,程序這個(gè)東西就兩點(diǎn):一是算法或者框圖,二就是動(dòng)手,一點(diǎn)一點(diǎn)寫下去,有問題就Debug,程序就是簡單的將邏輯思路實(shí)現(xiàn)的過程。與我而言,最難的就是第二點(diǎn)了,我自認(rèn)一直以來還挺聰明的,學(xué)東西很快,自學(xué)能力也還行,就是總是不敢動(dòng)手,主要是怕自己做不好,還會(huì)用這還不簡單來麻痹自己。就跟寫這個(gè)博客一樣,一直在腦海里想著要做,但是一直拖拖拖,怕自己寫的太淺薄,怕自己寫不好,但是只有寫下來才能慢慢改進(jìn),不自己做看別人的文章時(shí)還在那指點(diǎn)江山。編程也是如此,總會(huì)覺得這個(gè)思路就很簡單啊,陷入俯視一切的自欺欺人當(dāng)中,但是機(jī)器不是人,他是沒辦法完全理解人的想法的,只要有一點(diǎn)設(shè)計(jì)上的不謹(jǐn)慎導(dǎo)致系統(tǒng)無法運(yùn)行,所以對(duì)于初學(xué)者即使是簡單的hello world也會(huì)發(fā)現(xiàn)怎么也跑不出來。
前言差不多就這些吧,我沒寫很多FPGA知識(shí)點(diǎn)相關(guān),講了講自己的歷程吧,一方面后續(xù)會(huì)穿插需要的FPGA的內(nèi)容,一方面希望我自己的經(jīng)歷能引起大家的共鳴,學(xué)習(xí)FPGA或是編程,或是任何新的事物,都是這么從面對(duì)未知的發(fā)憷到慢慢變得從容的過程,這個(gè)我會(huì)在后面反反復(fù)復(fù)經(jīng)歷,而在每一小段經(jīng)歷中成長的最為重要的點(diǎn)就是不要害怕,動(dòng)手去實(shí)踐,知行合一,螺旋上升。
我的項(xiàng)目成長歷程
前言里主要寫的是我編程的成長經(jīng)歷,這篇主要還是針對(duì)FPGA的學(xué)習(xí)分享,所以主要還是講的我的FPGA學(xué)習(xí)過程。研究生期間工作就不說了,不成體系,大家估計(jì)都知道能跑起來就算成功,而且沒有啥技術(shù)要點(diǎn)。所以就主要還是這半年還有更多的東西再慢慢補(bǔ)充吧。
剛?cè)肼毜臅r(shí)候,我們公司的培養(yǎng)計(jì)劃是讓新人獨(dú)立負(fù)責(zé)一個(gè)項(xiàng)目,在項(xiàng)目中成長。我要負(fù)責(zé)的是一款高速ADC的測(cè)試工作,首先要做的就是項(xiàng)目拆解,其中包含有硬件平臺(tái)的設(shè)計(jì),數(shù)據(jù)采集程序的設(shè)計(jì),上位機(jī)的設(shè)計(jì),每個(gè)部分都可以作為一個(gè)課題進(jìn)行分享,這里我分享的是基于FPGA的高速數(shù)據(jù)采集程序設(shè)計(jì)部分,我是如何在設(shè)計(jì)這部分程序時(shí)深入了解FPGA的。
整個(gè)工程主要包含這四個(gè)模塊:ADC驅(qū)動(dòng)模塊,數(shù)據(jù)存儲(chǔ)模塊,USB傳輸模塊和MicroBlaze控制模塊,這半年來我就是從這幾個(gè)模塊慢慢學(xué)習(xí)慢慢進(jìn)階而來,下面我會(huì)按照自己的學(xué)習(xí)過程慢慢講述自己的心路,設(shè)計(jì)過程,遇到的問題,如何debug,有什么收獲。不過我這確實(shí)還學(xué)得不夠深,所以分享的比較淺薄,希望大家看過之后多多溝通交流,有問題歡迎批評(píng)指正,有什么好的設(shè)計(jì)方法技巧歡迎多多分享。
LVDS接口設(shè)計(jì)及應(yīng)用
這部分主要講述的是有關(guān)LVDS電平,接口的原理,時(shí)序,程序設(shè)計(jì)及仿真,仿真中包括TestBench的編寫,以及一些調(diào)試經(jīng)驗(yàn)。主要參考的是xilinx官方發(fā)布的應(yīng)用筆記串行LVDS高速ADC接口,站在巨人的肩膀上確實(shí)事半功倍。
跨時(shí)鐘域處理
之所以先說這部分,是因?yàn)椴煌K之間通信涉及到各種跨時(shí)鐘處理,這里主要應(yīng)用的是異步FIFO還有打兩拍。
DDR3接口設(shè)計(jì)及應(yīng)用
這里主要講述的是MIG IP核的應(yīng)用,DDR3控制程序設(shè)計(jì)及仿真驗(yàn)證。
USB3.0接口設(shè)計(jì)及應(yīng)用
這里面寫的主要是FPGA與USB3014芯片間的通信,USB3014的數(shù)據(jù)傳輸?shù)絇C上需要在上位機(jī)進(jìn)行相應(yīng)的設(shè)計(jì)。
MicroBlaze設(shè)計(jì)及應(yīng)用
這部分內(nèi)容是在FPGA內(nèi)部設(shè)計(jì)了一個(gè)嵌入式軟核,從而可以便利得如同使用單片機(jī)一樣控制GPIO,串口,SPI和中斷等外設(shè),實(shí)際上如果只是單獨(dú)的串口,SPI等功能,只需要編寫簡單的verilog代碼即可,但是當(dāng)需要控制功能越多,使用MicroBlaze相比于狀態(tài)機(jī)切換的優(yōu)勢(shì)就越顯現(xiàn)出來了。
GTX設(shè)計(jì)及應(yīng)用
記得在一篇博客中看到過,沒有用過FPGA中的串行高速接口就不算用過FPGA,當(dāng)我用到了這部分時(shí)候就體會(huì)到了這一點(diǎn),通過GTX接口可以接收常見的各種高速協(xié)議數(shù)據(jù),例如PCIE,SATA等。由于我也才剛開始接觸,所以主要就是介紹GTX的原理及簡單的仿真,以及針對(duì)我的項(xiàng)目中比較有挑戰(zhàn)的一點(diǎn):ADC數(shù)據(jù)接口沒有任何編碼,這是如何應(yīng)用GTX接收數(shù)據(jù)的。文章來源:http://www.zghlxwxcb.cn/news/detail-776856.html
后記
這部分內(nèi)容等到整個(gè)內(nèi)容寫完再來做一個(gè)總結(jié),有預(yù)感是一個(gè)龐大的工程,也挺有壓力的,因?yàn)楹芏嗟胤蕉歼€不太明白,但還是要先動(dòng)筆,開了這個(gè)頭再不停學(xué)習(xí)不停完善不斷優(yōu)化吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-776856.html
到了這里,關(guān)于FPGA學(xué)習(xí)實(shí)踐之旅——前言及目錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!