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