大家好,這里小梅哥將我們精心錄制和編輯的FPGA學(xué)習(xí)系列教程——《小梅哥FPGA設(shè)計(jì)思想與驗(yàn)證方法視頻教程》分享給大家。教程充分考慮0基礎(chǔ)朋友的實(shí)際情況,手把手帶領(lǐng)學(xué)習(xí)者分析思路、編寫代碼、仿真驗(yàn)證、板級調(diào)試。教語法,學(xué)仿真,一步一步,直到最后設(shè)計(jì)若干較為綜合的邏輯系統(tǒng)。
教程以我們自主開發(fā)的芯航線FPGA學(xué)習(xí)板為實(shí)驗(yàn)平臺,通過若干基礎(chǔ)和綜合的系統(tǒng)設(shè)計(jì)講解,一步一步掌握FPGA設(shè)計(jì)與驗(yàn)證的思想和方法。
以下為整理總結(jié)的每節(jié)課的知識點(diǎn):
01、科學(xué)的開發(fā)流程
本集是視頻教程第一講,主要通過一個實(shí)例簡單演示FPGA開發(fā)的基本流程。本人也是自學(xué)過兩年FPGA,并參加了國內(nèi)某專業(yè)的FPGA培訓(xùn)機(jī)構(gòu)100天就業(yè)培訓(xùn),并最終留任授課3個月。因此十分清楚了解各位學(xué)習(xí)者在剛開始學(xué)習(xí)FPGA時的各種苦悶。因此希望通過這樣一個視頻教程,把較為科學(xué)的FPGA學(xué)習(xí)方法和思想傳遞給大家。
如果大家所認(rèn)為的FPGA開發(fā)流程就是編碼、下載、調(diào)試,那么你就該好好的看下這個視頻教程了,因?yàn)槲乙舱潜贿@種錯誤的學(xué)習(xí)方式耽誤了好久好久,直到參加了培訓(xùn)學(xué)習(xí)才知道,仿真驗(yàn)證才是FPGA開發(fā)的重中之重,現(xiàn)在的我進(jìn)行FPGA開發(fā),板級調(diào)試時間占不到整個開發(fā)過程的5%,并不是我不重視板級調(diào)試,而是因?yàn)橥ㄟ^完整的理論驗(yàn)證之后,下載到板級上基本不會出現(xiàn)任何問題??茖W(xué)的學(xué)習(xí)方法尤為重要,希望大家一定要注意這一點(diǎn)。我也曾在工作中遇到很多人,就算是我手把手的教他仿真、寫testbench,他也不愿意弄的情況,因此我只想在這里說,不仿真,永遠(yuǎn)無法掌握FPGA時序設(shè)計(jì)的要點(diǎn),做設(shè)計(jì)永遠(yuǎn)是事倍功半。
02、3-8譯碼器設(shè)計(jì)驗(yàn)證
本集是視頻教程第二講,主要通過3-8譯碼器的設(shè)計(jì)實(shí)現(xiàn)與驗(yàn)證,講解Verilog基礎(chǔ)語法,并復(fù)習(xí)FPGA開發(fā)的基本流程。希望通過這樣一個視頻教程,帶領(lǐng)大家進(jìn)一步熟悉FPGA的開發(fā)流程。
課程以實(shí)現(xiàn)3-8譯碼器的設(shè)計(jì)為起點(diǎn),手把手演示工程創(chuàng)建,設(shè)計(jì)輸入以及仿真驗(yàn)證,讓每一個0基礎(chǔ)的朋友都能快速跟上節(jié)奏。另外,有一定基礎(chǔ)的朋友,其實(shí)也可以觀看,因?yàn)樵谠O(shè)計(jì)中,我已經(jīng)將很多的設(shè)計(jì)小技巧穿插在視頻中了。請明白:實(shí)現(xiàn)3-8譯碼器不是目的,目的是學(xué)習(xí)開發(fā)流程和基本技巧。
03、二進(jìn)制計(jì)數(shù)器設(shè)計(jì)驗(yàn)證
本集是視頻教程第三講,主要通過FPGA數(shù)字邏輯設(shè)計(jì)中最常用的一個模塊——二進(jìn)制計(jì)數(shù)器的設(shè)計(jì)實(shí)現(xiàn)與驗(yàn)證,講解Verilog基礎(chǔ)語法,并復(fù)習(xí)FPGA開發(fā)的基本流程。希望通過這樣一個視頻教程,帶領(lǐng)大家進(jìn)一步熟悉FPGA的開發(fā)流程,并體會計(jì)數(shù)器在FPGA系統(tǒng)中的重要地位。
課程以實(shí)現(xiàn)二進(jìn)制計(jì)數(shù)器的設(shè)計(jì)為起點(diǎn),手把手演示工程創(chuàng)建,設(shè)計(jì)輸入以及仿真驗(yàn)證,讓每一個0基礎(chǔ)的朋友都能快速跟上節(jié)奏。另外,有一定基礎(chǔ)的朋友,其實(shí)也可以觀看,因?yàn)樵谠O(shè)計(jì)中,我已經(jīng)將很多的設(shè)計(jì)小技巧穿插在視頻中了。請明白:實(shí)現(xiàn)二進(jìn)制計(jì)數(shù)器不是目的,目的是學(xué)習(xí)開發(fā)流程和基本技巧,并體會FPGA數(shù)字系統(tǒng)設(shè)計(jì)中常用的時間控制方式。
04、高性能計(jì)數(shù)器IP核使用
本集是視頻教程第四講,主要通過演示FPGA數(shù)字邏輯設(shè)計(jì)中除Verilog代碼方式設(shè)計(jì)外另外一種最常用的設(shè)計(jì)方式——使用IP核進(jìn)行系統(tǒng)設(shè)計(jì)。本教程講解了如何在Quartus II軟件中調(diào)用一個基本的免費(fèi)IP核——計(jì)數(shù)器IP核,并編寫Testbench對IP核進(jìn)行仿真驗(yàn)證,以教會大家如何正確科學(xué)的使用一個成熟的IP核。希望大家通過這樣一個視頻教程,感受到使用IP核進(jìn)行系統(tǒng)設(shè)計(jì)的便捷性。
課程以學(xué)習(xí)使用計(jì)數(shù)器IP核為起點(diǎn),手把手演示工程創(chuàng)建,IP核調(diào)用、Testbench編寫以及仿真驗(yàn)證,讓每一個0基礎(chǔ)的朋友都能快速跟上節(jié)奏。另外,有一定基礎(chǔ)的朋友,其實(shí)也可以觀看,因?yàn)樵谠O(shè)計(jì)中,我已經(jīng)將很多的設(shè)計(jì)小技巧穿插在視頻中了。請明白:學(xué)會使用計(jì)數(shù)器IP核不是不是目的,目的是感受使用IP核進(jìn)行設(shè)計(jì)的便捷性。
05、BCD碼計(jì)數(shù)器設(shè)計(jì)驗(yàn)證
本集是視頻教程第五講,主要講解數(shù)字系統(tǒng),尤其是時鐘系統(tǒng)中非常常見的一個模塊——BCD碼計(jì)數(shù)器的設(shè)計(jì)實(shí)現(xiàn)與驗(yàn)證,講解Verilog基礎(chǔ)語法,了解BCD碼技術(shù)器與普通二進(jìn)制計(jì)數(shù)器的區(qū)別。BCD碼計(jì)數(shù)器經(jīng)常用在需要十進(jìn)制計(jì)數(shù),十進(jìn)制格式輸出的場合。希望通過這樣一個視頻教程,帶領(lǐng)大家了解除二進(jìn)制計(jì)數(shù)器以外的另一種計(jì)數(shù)實(shí)現(xiàn)方式。該BCD碼計(jì)數(shù)器將在綜合實(shí)驗(yàn)如數(shù)字鐘、秒表、簡易數(shù)字頻率計(jì)中發(fā)揮強(qiáng)大作用,簡化系統(tǒng)設(shè)計(jì)。
課程以實(shí)現(xiàn)BCD碼計(jì)數(shù)器的設(shè)計(jì)為起點(diǎn),手把手演示工程創(chuàng)建,設(shè)計(jì)輸入以及仿真驗(yàn)證,讓每一個0基礎(chǔ)的朋友都能快速跟上節(jié)奏。另外,有一定基礎(chǔ)的朋友,其實(shí)也可以觀看,因?yàn)樵谠O(shè)計(jì)中,我已經(jīng)將很多的設(shè)計(jì)小技巧穿插在視頻中了。
06、例解阻塞賦值與非阻塞賦值
本集是視頻教程第六講,主要通過簡單的例子對比了Verilog語法中阻塞賦值和非阻塞賦值的區(qū)別,通過證明非阻塞賦值多種賦值順序生產(chǎn)電路的唯一性,與非阻塞賦值多種賦值書序生成電路的不確定性,來展示使用非阻塞賦對設(shè)計(jì)可預(yù)測性的重要意義。
07、例說狀態(tài)機(jī)
本集是視頻教程第七講,主要通過簡單的例子介紹了FPGA設(shè)計(jì)中最常見的設(shè)計(jì)思想——狀態(tài)機(jī),通過狀態(tài)機(jī),可以實(shí)現(xiàn)很復(fù)雜的時序控制內(nèi)容,學(xué)好狀態(tài)機(jī),是掌握FPGA技術(shù)的重中之重。
08、基于狀態(tài)機(jī)的獨(dú)立按鍵消抖
本集是視頻教程第八講,主要通過獨(dú)立按鍵消抖這樣一個實(shí)驗(yàn),來進(jìn)一步舉例講解狀態(tài)機(jī)的設(shè)計(jì)思想,獨(dú)立按鍵消抖有多種方式可以實(shí)現(xiàn),這里采用狀態(tài)機(jī)的方式,既能方便大家理解按鍵消抖的整個過程,又能進(jìn)一步領(lǐng)會狀態(tài)機(jī)的設(shè)計(jì)思想。
09、獨(dú)立按鍵控制LED與亞穩(wěn)態(tài)問題引入
本集是視頻教程第九講,主要通過獨(dú)立按鍵控制LED燈狀態(tài)變化這樣一個實(shí)驗(yàn),來驗(yàn)證獨(dú)立按鍵消抖是否成功,另外,由于獨(dú)立按鍵作為一個外部異步輸入信號,因此借此機(jī)會剛好給大家詳細(xì)介紹了亞穩(wěn)態(tài)的原理和應(yīng)對策略。希望大家在觀看學(xué)習(xí)時,重點(diǎn)體會亞穩(wěn)態(tài)的物理原理并掌握這種簡單外部輸入信號的亞穩(wěn)態(tài)應(yīng)對方法。
10、數(shù)碼管動態(tài)掃描設(shè)計(jì)與實(shí)現(xiàn)
本集是視頻教程第十講,主要通過講解數(shù)碼管動態(tài)掃描原理,并提取出實(shí)現(xiàn)的電路結(jié)構(gòu),從電路結(jié)構(gòu)入手編寫代碼,仿真對設(shè)計(jì)進(jìn)行驗(yàn)證,最終板級調(diào)試時,使用In system sources and probes editor調(diào)試工具設(shè)置需要顯示的內(nèi)容,則數(shù)碼管顯示對應(yīng)的數(shù)值。本節(jié)課與前面課程的風(fēng)格稍有不同,本節(jié)課代碼不再是核心,核心是電路結(jié)構(gòu),電路結(jié)構(gòu)確定后編寫代碼只是照圖施工的過程。這也是越來越接近FPGA設(shè)計(jì)的底層思維。希望大家仔細(xì)體會。
11、UART串口發(fā)送模塊設(shè)計(jì)與驗(yàn)證
本集是視頻教程第十一講,主要講解UART串口發(fā)送模塊的設(shè)計(jì)與實(shí)現(xiàn),教程同數(shù)碼管驅(qū)動的講解方法一致,也是從結(jié)構(gòu)到電路,最后寫代碼照圖施工,仿真對設(shè)計(jì)進(jìn)行驗(yàn)證,最終板級調(diào)試時,使用In system sources and probes editor調(diào)試工具設(shè)置需要發(fā)送的內(nèi)容,按下按鍵,則串口發(fā)送模塊將需要發(fā)送的數(shù)據(jù)對應(yīng)發(fā)送出去,在PC機(jī)上使用串口調(diào)試工具即可接收顯示,驗(yàn)證設(shè)計(jì)的正確性。該模塊將作為后期很多設(shè)計(jì)的基礎(chǔ)模塊進(jìn)行使用,希望大家都能夠自己編寫并調(diào)試通過,為后面的學(xué)習(xí)做好準(zhǔn)備。
12、UART串口接收模塊設(shè)計(jì)與驗(yàn)證
本集是視頻教程第十二講,主要講解UART串口接收模塊的設(shè)計(jì)與實(shí)現(xiàn),教程同數(shù)碼管驅(qū)動的講解方法一致,也是從結(jié)構(gòu)到電路,最后寫代碼照圖施工,仿真對設(shè)計(jì)進(jìn)行驗(yàn)證,最終板級調(diào)試時,在PC機(jī)上使用串口調(diào)試工具發(fā)送測試數(shù)據(jù),使用In system sources and probes editor調(diào)試工具查看串口接收模塊接收到的數(shù)據(jù)內(nèi)容。通過比對發(fā)送和接收到的數(shù)據(jù)是否一致,驗(yàn)證設(shè)計(jì)的正確性。該模塊將作為后期很多設(shè)計(jì)的基礎(chǔ)模塊進(jìn)行使用,希望大家都能夠自己編寫并調(diào)試通過,為后面的學(xué)習(xí)做好準(zhǔn)備。
13、嵌入式塊RAM應(yīng)用之雙口RAM
本集是視頻教程第十三講,主要講解FPGA芯片中提供的專用嵌入式塊RAM的應(yīng)用實(shí)例之一,也就是RAM IP核的使用。課程首先簡單介紹了Altera Cyclone 系列FPGA器件的內(nèi)部結(jié)構(gòu),然后介紹了RAM IP核的調(diào)用方法和配置窗口中的一些參數(shù)含義,然后通過仿真的方式對RAM IP核的接口時序進(jìn)行了分析,為下一節(jié)課,RAM IP的具體應(yīng)用實(shí)例打下了基礎(chǔ)。希望大家仔細(xì)體會這種使用仿真來探索驗(yàn)證IP核接口時序的方法。
14、搭建串口收發(fā)與存取雙口RAM簡易應(yīng)用系統(tǒng)
本集是視頻教程第十四講,主要通過將前面三講(串口發(fā)送、串口接收、嵌入式塊RAM)綜合起來,設(shè)計(jì)了一個簡易的小系統(tǒng),通過電腦以串口發(fā)送數(shù)據(jù)給FPGA,F(xiàn)PGA接收后存儲在RAM中,再在按鍵的控制下,讀取RAM中的數(shù)據(jù),通過串口發(fā)送出去。來體現(xiàn)模塊化設(shè)計(jì)的巨大優(yōu)勢。同時,視頻花了相當(dāng)?shù)臅r間來演示使用Visio繪制系統(tǒng)架構(gòu)圖,一個好的架構(gòu)圖,不僅能夠讓設(shè)計(jì)者思維更清晰,也更加有利于設(shè)計(jì)在工程師間的交互,方便后期的升級和維護(hù)。希望大家仔細(xì)體會我這種模塊化拼接的設(shè)計(jì)思想。
15、ROM的搭建與Signaltap II 工具使用
本集是視頻教程第十五講,主要介紹了嵌入式塊RAM的另一個具體應(yīng)用——ROM。在很多電子系統(tǒng)中,總有一部分?jǐn)?shù)據(jù)是從始至終不需要改變,只需要在使用的時候讀取即可。在FPGA中,我們可以使用嵌入式塊RAM搭建具有ROM屬性的存儲器,用來存放某些需要永久保存的數(shù)據(jù)。本節(jié)課,通過使用ROM存儲器存儲三角波數(shù)據(jù),外建簡易地址發(fā)生器,搭建了一個簡易的信號發(fā)生器系統(tǒng)。并使用Quartus II軟件提供的強(qiáng)大的調(diào)試工具Signaltap II來對ROM的輸出信號進(jìn)行抓取,以模擬波形的顯示出來,從而驗(yàn)證設(shè)計(jì)的正確性,同時,本課程還介紹了使用In-System memory content editor在線更改ROM中的數(shù)據(jù),將三角波的波形數(shù)據(jù)更改為正弦波,然后再次在Signaltap II工具上觀察抓取到的信號,以驗(yàn)證數(shù)據(jù)確實(shí)被更改。本節(jié)課程,內(nèi)容并不復(fù)雜,但是卻使用了多種調(diào)試工具,希望大家學(xué)有所獲。
16、FIFO介紹與時序驗(yàn)證
本集是視頻教程第十六講,主要介紹了嵌入式塊RAM的另一個具體應(yīng)用——FIFO。FIFO的完整英文拼寫為First In First Out,即先進(jìn)先出。FPGA或者ASIC中使用到的FIFO一般指的是對數(shù)據(jù)的存儲具有先進(jìn)先出特性的一個存儲器,常被用于數(shù)據(jù)的緩存或者高速異步數(shù)據(jù)的交互。本節(jié)課程,理論講解較為細(xì)致,望大家仔細(xì)理解體會,祝大家學(xué)有所獲。
17、使用PLL進(jìn)行設(shè)計(jì)+Verilog參數(shù)化設(shè)計(jì)介紹
本集是視頻教程第十七講,主要介紹了Altera FPGA器件中提供的專用時鐘管理單元PLL的一些基本特性,并通過一個簡單的實(shí)例:PLL輸出的多路頻率不同的時鐘驅(qū)動同一個LED閃爍模塊,通過比較LED閃爍的頻率來驗(yàn)證PLL對時鐘信號的正確管理。另外,視頻還介紹了Verilog語法中非常有用的一種技巧——參數(shù)化設(shè)計(jì)。參數(shù)化設(shè)計(jì)能給我們的功能模塊帶來最大的靈活性,使我們在不修改原本代碼內(nèi)容的前提下,修改其中某些關(guān)鍵參數(shù),從而適應(yīng)于不同的應(yīng)用。本節(jié)課程,即講解了PLL 的有關(guān)內(nèi)容,又講解了參數(shù)化設(shè)計(jì)的語法,希望大家學(xué)習(xí)過程中仔細(xì)體會參數(shù)化設(shè)計(jì)的好處。
18、基于線性序列機(jī)設(shè)計(jì)思想的串行DAC(TLC5620)驅(qū)動
本集是視頻教程第十八講,主要介紹了FPGA設(shè)計(jì)中除狀態(tài)機(jī)的設(shè)計(jì)思想外另外一種常見的設(shè)計(jì)方式——線性序列機(jī)。線性序列機(jī)和狀態(tài)機(jī)比較相似,確更加容易規(guī)劃實(shí)現(xiàn),對于信號變化與時間一一對應(yīng)的時序設(shè)計(jì),采用線性序列機(jī)往往更加快捷高效。本課首先介紹了線性序列機(jī)的設(shè)計(jì)思想,然后針對芯航線FPGA套件中配套的多通道串行ADDA模塊,介紹了其DAC電路和參考源電路,DAC芯片使用TLC5620芯片,該芯片的控制時序就是每個控制信號的變化時間與時間一一對應(yīng),因此非常適合使用線性序列機(jī)進(jìn)行設(shè)計(jì)。接著,在Quartus II軟件中設(shè)計(jì)并使用modelsim仿真驗(yàn)證依據(jù)線性序列機(jī)的設(shè)計(jì)思想設(shè)計(jì)的TLC5620控制器,最后,在芯航線FPGA學(xué)習(xí)套件上進(jìn)行板級驗(yàn)證,以驗(yàn)證設(shè)計(jì)的正確性。驗(yàn)證時,使用In system sources and probes editor工具,輸入希望輸出的電壓值對應(yīng)的數(shù)字值,則芯航線FPGA開發(fā)板控制DAC模塊輸出正確的電壓值。本節(jié)課程,引入了新的一種設(shè)計(jì)方式——線性序列機(jī),希望學(xué)習(xí)者自己體會,感受這種方式在應(yīng)對具有串行執(zhí)行特征的時序電路設(shè)計(jì)中的優(yōu)勢。
19、基于線性序列機(jī)設(shè)計(jì)思想的串行ADC驅(qū)動
課程目標(biāo):學(xué)會使用線性序列機(jī)的思想設(shè)計(jì)常見的有串行執(zhí)行特征的時序邏輯
實(shí)驗(yàn)平臺:芯航線FPGA學(xué)習(xí)套件主板,芯航線串行ADDA模塊
實(shí)驗(yàn)現(xiàn)象:將串行多通道ADDA模塊接在芯航線FPGA開發(fā)板上,使用In system sources and probes editor設(shè)置DAC模塊輸出電壓信號,然后使用ADC采樣DAC的輸出電壓,將DAC輸出值和ADC采樣值進(jìn)行比較,同時使用萬用表測量DAC輸出電壓以驗(yàn)證ADC控制邏輯的正確性。
知識點(diǎn):
1.復(fù)習(xí)線性序列機(jī)設(shè)計(jì)思想與實(shí)現(xiàn)
2.TLV1544型ADC芯片驅(qū)動設(shè)計(jì)
20、HT6221紅外遙控解碼
本集是視頻教程第二十講,具體課程內(nèi)容如下所示:
課程目標(biāo):學(xué)會使用FPGA來對脈沖編碼的數(shù)字序列進(jìn)行解碼
實(shí)驗(yàn)平臺:芯航線FPGA學(xué)習(xí)套件主板,基于HT6221的紅外遙控器
實(shí)驗(yàn)現(xiàn)象:按下紅外遙控上的按鍵,然后在Quartus II軟件中使用In system sources and probes editor中觀察解碼結(jié)果,根據(jù)解碼結(jié)果與紅外遙控實(shí)際發(fā)出的數(shù)值進(jìn)行比較從而判斷解碼的正確性。
本節(jié)課知識點(diǎn):
1.脈沖編碼的數(shù)字解析
2.HT6221型紅外遙控編碼的解碼實(shí)現(xiàn)