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