四則運算小計算器設計過程實錄-Verilog FPGA數(shù)字系統(tǒng)設計入門學習日記
本書以日記的形式記錄了一個可實現(xiàn)四則運算計算器的設計過程,從而達到學習FPGA 設計的目的.全書共10章,講述了從設計開始到完成的全過程,其中包括數(shù)碼管顯示、鍵盤掃描、狀態(tài)
機等基礎模塊的設計,以及設計中需要注意的問題等,每一章的最后還有夏宇聞老師對本章內容的點評及給讀者的學習建議.希望讀者按順序閱讀本書,同時進行實踐操作,并與書中的進度保持一致,最終完成整個設計.讀者也可以根據(jù)自己的想法來實現(xiàn)想要的功能,做到舉一反三,以達到好的學習效果.書中使用的硬件為至芯科技的四代開發(fā)板、AlteraCycloneIV的芯片,軟件為uartusII13.0sp1.
本書可作為電子工程類、自動控制類、計算機類的大學本科高年級學生及研究生設計實驗參考用書,亦可供其他工程人員自學與參考.
在仔細閱讀這本書之前,請讀者務必先看這本書的目錄?吹剿呐c眾不同了嗎?
《四則運算小計算器設計過程實錄——Verilog FPGA數(shù)字系統(tǒng)設計入門學習日記》一書*神奇的地方就在于它記錄的完全是作者趙然的學習體會,書中沒有華麗的辭藻,沒有過多的修飾,有的是完全的、毫無保留的探索過程中的經驗分享。四則運算小計算器的設計不是什么大型設計,但讀者們透過這個設計,可以掌握FPGA系統(tǒng)設計的精髓,它雖然只是“一塊磚”,但哪座大廈不是由一塊塊平淡無奇的“磚”蓋起來的呢?
如果您想10天就跨入FPGA系統(tǒng)設計的大門,這本書可以帶您實現(xiàn)理想。準備好您的板子,跟著趙然和夏宇聞教授的講解,動手吧!
我大學本科學的是測控專業(yè),2012年考取首都師范大學物理系研究生.我從未學習過數(shù)字電路設計,對FPGA 和Verilog語言沒有任何概念,更沒有設計數(shù)字電路系統(tǒng)的基礎和經驗,也從未自己動手裝配和完成過一臺能實際運行的電子系統(tǒng).但我從小就對電子設計有濃厚的興趣.為什么小小的計算器按幾下就能完成非常復雜的數(shù)學計算,一直困惑著我,激起我年輕的好奇心.大學四年里,雖然學習過“數(shù)字電路”和“模擬電路”課程,考試成績也很不錯,但對我而言,計算器是如何設計的,仍舊是一頭霧水.
聽同學們說,如果掌握了FPGA 設計,這個謎就能找到答案.我用關鍵字“FPGGA 培訓”在百度搜索,發(fā)現(xiàn)一個公司正在開設FPGA 就業(yè)培訓(100天)班,也知道這個班由北京航空航天大學的夏宇聞教授親自講授和管理.于是下定決心抽出3個月時間,認真學習一下FPGA.經過100天的學習和練習,我初步掌握了如何用FPGGA芯片設計和搭建復雜數(shù)字系統(tǒng).現(xiàn)在我有充分的信心,只要設計需求明確,我完全有能力獨立設計并完成一個較復雜的數(shù)字系統(tǒng),并能可靠地完成預先設定的數(shù)據(jù)處理任務.這個階段的學習給了我很多啟發(fā),也增強了我的信心,很想把自己的感受和學習心得編寫成小冊子與大家分享.我的想法得到夏宇聞教授的支持.于是我把學習期間的心路歷程和學到的知識、經驗略加整理,以日記的形式寫出來,與大家分享,希望能給打算學習Verilog和FPGA 設計的初學者一些幫助和啟發(fā),起到拋磚引玉的作用.
本書內容及閱讀建議
全書共10章,每一章記錄的都是一個模塊的設計或者改進過程,包括數(shù)碼管顯示、鍵盤掃描、狀態(tài)機等簡單的模塊.全書是按照整個設計流程的順序編排的,各個章節(jié)的內容及工作量大致相同,所以讀者也最好順序閱讀此書,在完成上一章內容的基礎上進行下一章節(jié)的工作,跟隨書中的進度循序漸進,邊做邊學,最終完成整個設計,從中獲取知識.
讀者對象
希望通過實踐來學習FPGA 設計的初學者.高等院校通信工程、電子工程、計算機、微電子與半導體等專業(yè)的老師和學生.
致老師和學生
實踐是檢驗真理的唯一標準.本書完整地記錄了一次FPGA 的小實驗,該實驗工作量小,內容基礎,適合作為高等院校電子設計的實驗教材.學生通過自學此書,可完成書上的實驗.相信期間會不斷地遇到問題,但在解決問題的過程中一定會積累很多的設計經驗,同時對FPGA 設計的基本知識和設計流程會有更深的理解.
致謝
這本書的完成并不是我一個人的勞動成果,夏宇聞老師從始至終給予我莫大的幫助.夏老師已年過七旬,仍心系國內電子設計技術的發(fā)展并傾情培養(yǎng)下一代優(yōu)秀人才,花費大量時間和精力在這本書上,不斷地幫忙校對和修改本書,同時在每章的最后給FPGA 的初學者提出了寶貴的學習建議,特在此向默默奉獻和付出的夏宇聞老師表示深深的敬意和感謝!
同時還要感謝我讀研究生時的導師張存林教授以及趙源萌老師對我這次培訓學習的大力支持,感謝實驗室的鄧朝、段國騰、辛濤、梁美彥、張鏡水、劉婧、李晨毓、武阿妮、張磊巍、韓雪、寇寬、王洪昌等人不遺余力地給予我大量幫助,感謝201404期FPGGA就業(yè)培訓班的老師和同學們的相伴,當然也要感謝父母對我這個小作者的肯定.感謝北京航空航天大學的編輯們對本書的付出.感謝所有幫助過我的朋友們.由于時間和學識原因,書中錯誤在所難免,不當之處,懇請讀者指正。
趙 然
2015.8.20
2014年3月,首都師范大學物理系碩士研究生趙然同學報名參加了由我執(zhí)教的FPGA設計就業(yè)培訓班。在培訓班上,他仔細聆聽老師的講解,積極提問、思考,按照老師建議的進度要求,認真設計并驗證每個小模塊,并逐步把它們整合成可以在FPGA上運行的實際電路結構,終于在十天內用純數(shù)字邏輯電路在培訓班提供的小開發(fā)板上實現(xiàn)了一臺能做4位整數(shù)加、減、乘、除運算的計算器。這臺計算器的實現(xiàn)過程是他學習Verilog數(shù)字系統(tǒng)設計第一階段的全過程。
在我的鼓勵和幫助下,趙然花了半年時間把他的學習日記整理成一本值得一讀的小冊子。我讀后認為本書對于想學習Verilog數(shù)字設計、有志進入FPGA和集成電路設計行業(yè)的年輕人定會有很大的幫助,所以鄭重地推薦給每一位想掌握Verilog數(shù)字系統(tǒng)設計的同學。
以后我們還將繼續(xù)整理其他同學的學習日記,把在培訓班學習期間由學員們獨立完成的其他小項目設計的全過程和分階段代碼陸續(xù)介紹給各位讀者。這些小冊子將按照完成的先后順序出版,希望它們能成為理工類學生自學Verilog數(shù)字設計、參加課程設計和畢業(yè)設計時的最好參考資料。同學們只要購買一塊開發(fā)板,利用暑假、寒假、課設或畢設時間段,按這些小冊子中介紹的步驟,走一遍設計的全過程,認真思考作者提出的每個問題,通過自己動腦又動手,來解決這些問題,就能真正掌握這門技術。這一過程對想進入高技術數(shù)字系統(tǒng)設計行業(yè)的同學是十分必要的。
趙然同學在本書中用日記的形式詳細記錄了每天的學習過程。在日記中,他用生動的文字記錄了老師布置的設計要求、進度和講解、學習中遇到的困惑、解決問題的方法和過程、模塊代碼的演化過程以及每天的喜怒哀樂,真實地反映了一位聰明、勤奮、好學的年輕人在學習復雜數(shù)字系統(tǒng)的艱難過程中的思想歷程。本書不但是一本數(shù)字系統(tǒng)設計入門書籍,也是年輕人勵志的優(yōu)秀書籍。
在我看來,趙然的FPGA設計學習日記充分體現(xiàn)了“實踐是最好的老師”的真理。學習Verilog數(shù)字設計沒有捷徑可走,在掌握了基本方法后,唯有不怕困難勇于攀登,才能逐步達到別人不敢逾越的高峰。
我們貧窮多難的祖國經過三十多年的改革開放,國民經濟已有了很大的發(fā)展,但高科技產業(yè)仍非常落后,特別在集成電路工業(yè)和尖端國防工業(yè)方面更是如此。阻擋我國進入世界技術強國的主要障礙之一就是數(shù)字系統(tǒng)設計技術的落后。望有志改變我國技術落后面貌的年輕人通過閱讀這本小冊子,刻苦努力自學,加入日益壯大的數(shù)字系統(tǒng)設計師隊伍,為振興祖國的高技術產業(yè)貢獻一份力量。
本書語言通俗易懂,從實用的角度詳細介紹了設計過程的每個細節(jié)。最難能可貴的是作者的分享精神,通過簡單明了的描述,我能體會到作者想與讀者交流、分享的真誠愿望。相信各位讀者通過認真閱讀本書,認真上機操作,F(xiàn)PGA設計能力會更上一層樓。
當然,任何人都不可能只讀一本小冊子就完全掌握利用Verilog HDL的FPGA設計,但是我可以肯定地說,即將逐步推出的《Verilog FPGA數(shù)字系統(tǒng)設計自學叢書》確實是每個想進一步學習Verilog數(shù)字設計,并希望進入數(shù)字設計行業(yè)的年輕人的最好選擇。本書針對的讀者群是已有Verilog基礎知識的學生,以及想進入數(shù)字系統(tǒng)設計領域的年輕電子工程師們。相信本書和以后將陸續(xù)出版的系列叢書定會受到更多讀者的喜愛。
夏宇聞
北京航空航天大學退休教授
2015年9月10日
趙然,首都師范大學光學工程碩士,曾在夏宇聞老師指導下學習Verilog數(shù)字系統(tǒng)設計三個月,美國國家儀器(NI)認證CLAD工程師。擅長數(shù)字邏輯設計,現(xiàn)任中國科學院計算技術研究所(ICT)工程師,從事FPGA開發(fā)工作。
第1章 第一天———數(shù)碼管顯示模塊的設計………………………………………… 1
1.1 設計需求講解………………………………………………………………… 1
1.2 七段式數(shù)碼管顯示原理講解………………………………………………… 2
1.3 設計工具使用講解…………………………………………………………… 4
1.3.1 QuartusII工具的配置………………………………………………… 4
1.3.2 數(shù)碼管顯示模塊的可綜合代碼………………………………………… 6
1.3.3 顯示模塊的測試………………………………………………………… 8
1.3.4 轉到ModelSim 仿真工具進行測試…………………………………… 11
1.3.5 下載程序到開發(fā)板進行調試…………………………………………… 13
1.4 今天工作總結………………………………………………………………… 19
1.5 夏老師評述…………………………………………………………………… 19
第2章 第二天———鍵盤掃描模塊的設計………………………………………… 21
2.1 設計需求講解………………………………………………………………… 21
2.2 七段式數(shù)碼管顯示原理講解………………………………………………… 22
2.3 設計工具使用講解…………………………………………………………… 23
2.3.1 矩陣鍵盤碼掃描分析模塊的可綜合代碼……………………………… 24
2.3.2 矩陣鍵盤碼掃描分析模塊代碼解析…………………………………… 29
2.3.3 矩陣鍵盤掃描分析模塊的測試………………………………………… 35
2.3.4 轉到ModelSim 仿真工具進行測試…………………………………… 42
2.3.5 下載程序到開發(fā)板進行調試…………………………………………… 42
2.4 今天工作總結………………………………………………………………… 46
2.5 夏老師評述…………………………………………………………………… 47
第3章 第三天———輸入狀態(tài)機模塊的設計……………………………………… 48
3.1 設計需求講解………………………………………………………………… 48
3.2 我對狀態(tài)機概念的理解……………………………………………………… 48
3.3 設計工具使用講解…………………………………………………………… 49
3.3.1 范例代碼解析…………………………………………………………… 49
3.3.2 重寫狀態(tài)機代碼………………………………………………………… 61
3.3.3 轉到ModelSim 仿真工具進行測試…………………………………… 67
3.3.4 下載程序到開發(fā)板進行調試…………………………………………… 67
3.4 今天工作總結………………………………………………………………… 71
3.5 夏老師評述…………………………………………………………………… 72
第4章 第四天———BCD 碼與二進制碼轉換模塊的設計………………………… 73
4.1 設計需求講解………………………………………………………………… 73
4.2 BCD碼轉二進制碼………………………………………………………… 74
4.2.1 BCD碼轉二進制碼的可綜合代碼…………………………………… 74
4.2.2 BCD碼轉二進制碼模塊的測試代碼………………………………… 75
4.2.3 轉到ModelSim 仿真工具進行測試…………………………………… 76
4.2.4 二進制碼轉BCD碼的可綜合代碼…………………………………… 76
4.2.5 二進制碼轉BCD碼模塊的測試……………………………………… 80
4.2.6 轉到ModelSim 仿真工具進行測試…………………………………… 82
4.3 今天工作總結………………………………………………………………… 83
4.4 夏老師評述…………………………………………………………………… 83
第5章 第五天———計算模塊的設計……………………………………………… 84
5.1 設計需求講解………………………………………………………………… 84
5.2 設計工具使用講解…………………………………………………………… 84
5.2.1 計算模塊的可綜合代碼………………………………………………… 85
5.2.2 計算模塊的測試………………………………………………………… 85
5.2.3 轉到ModelSim 仿真工具進行仿真…………………………………… 87
5.2.4 模塊連接關系…………………………………………………………… 88
5.2.5 下載程序到開發(fā)板進行調試…………………………………………… 95
5.3 今天工作總結………………………………………………………………… 95
5.4 夏老師評述…………………………………………………………………… 95
第6章 第六天———可進行連續(xù)運算的狀態(tài)機改進……………………………… 97
6.1 設計需求講解………………………………………………………………… 97
6.2 狀態(tài)機設計講解……………………………………………………………… 97
6.2.1 狀態(tài)機的編碼形式……………………………………………………… 97
6.2.2 狀態(tài)機的分類…………………………………………………………… 98
6.2.3 狀態(tài)轉移圖(STD) …………………………………………………… 102
6.3 設計工具使用講解………………………………………………………… 103
6.3.1 狀態(tài)機模塊的可綜合代碼…………………………………………… 103
6.3.2 狀態(tài)機模塊的測試…………………………………………………… 107
6.3.3 轉到ModelSim 仿真工具進行仿真………………………………… 111
6.3.4 下載程序到開發(fā)板進行調試………………………………………… 111
6.4 今天工作總結……………………………………………………………… 113
6.5 夏老師評述………………………………………………………………… 114
第7章 第七天———面積優(yōu)化……………………………………………………… 115
7.1 設計需求講解……………………………………………………………… 115
7.2 面積與速度………………………………………………………………… 116
7.3 模塊改進…………………………………………………………………… 118
7.3.1 計算模塊的可綜合代碼……………………………………………… 118
7.3.2 轉到ModelSim 仿真工具進行測試………………………………… 121
7.3.3 下載程序到開發(fā)板進行調試………………………………………… 123
7.4 今天工作總結……………………………………………………………… 125
7.5 夏老師評述………………………………………………………………… 126
第8章 第八天———二進制碼轉BCD 碼模塊的優(yōu)化…………………………… 127
8.1 設計需求講解……………………………………………………………… 127
8.2 算法實現(xiàn)…………………………………………………………………… 128
8.3 模塊改進…………………………………………………………………… 129
8.3.1 二進制碼轉BCD碼模塊的可綜合代碼……………………………… 129
8.3.2 轉到ModelSim 仿真工具進行測試………………………………… 132
8.3.3 下載程序到開發(fā)板進行調試………………………………………… 134
8.4 今天工作總結……………………………………………………………… 138
8.5 夏老師評述………………………………………………………………… 140
第9章 第九天———去“0”模塊的設計…………………………………………… 141
9.1 設計需求講解……………………………………………………………… 141
9.2 算法實現(xiàn)…………………………………………………………………… 141
9.3 模塊改進…………………………………………………………………… 142
9.3.1 去“0”模塊的可綜合代碼……………………………………………… 142
9.3.2 轉到ModelSim 仿真工具進行測試………………………………… 144
9.3.3 下載程序到開發(fā)板進行調試………………………………………… 146
9.4 今天工作總結……………………………………………………………… 150
9.5 夏老師評述………………………………………………………………… 151
第10章 第十天———負數(shù)計算…………………………………………………… 152
10.1 設計需求講解……………………………………………………………… 152
10.2 二進制數(shù)表示法…………………………………………………………… 152
10.3 補碼原碼轉換模塊………………………………………………………… 153
10.3.1 補碼轉原碼模塊的可綜合代碼……………………………………… 154
10.3.2 轉到ModelSim 仿真工具進行測試………………………………… 154
10.3.3 原碼轉補碼模塊的可綜合代碼……………………………………… 155
10.3.4 轉到ModelSim 仿真工具進行測試………………………………… 155
10.4 其他模塊的修改…………………………………………………………… 156
10.4.1 顯示模塊的修改……………………………………………………… 156
10.4.2 消“0”模塊的修改…………………………………………………… 159
10.4.3 BCD碼和二進制碼轉換模塊的修改……………………………… 160
10.4.4 計算模塊的修改……………………………………………………… 163
10.4.5 按鍵狀態(tài)機模塊的修改……………………………………………… 165
10.4.6 頂層模塊的修改……………………………………………………… 169
10.5 下載程序到開發(fā)板進行調試……………………………………………… 171
10.6 今天工作總結……………………………………………………………… 171
10.7 夏老師評述………………………………………………………………… 172
參考文獻……………………………………………………………………………… 174
序言
2014年3月,首都師范大學物理系碩士研究生趙然同學報名參加了由我執(zhí)教的FPGA設計就業(yè)培訓班。在培訓班上,他仔細聆聽老師的講解,積極提問、思考,按照老師建議的進度要求,認真設計并驗證每個小模塊,并逐步把它們整合成可以在FPGA上運行的實際電路結構,終于在十天內用純數(shù)字邏輯電路在培訓班提供的小開發(fā)板上實現(xiàn)了一臺能做4位整數(shù)加、減、乘、除運算的計算器。這臺計算器的實現(xiàn)過程是他學習Verilog數(shù)字系統(tǒng)設計第一階段的全過程。
在我的鼓勵和幫助下,趙然花了半年時間把他的學習日記整理成一本值得一讀的小冊子。我讀后認為本書對于想學習Verilog數(shù)字設計、有志進入FPGA和集成電路設計行業(yè)的年輕人定會有很大的幫助,所以鄭重地推薦給每一位想掌握Verilog數(shù)字系統(tǒng)設計的同學。
以后我們還將繼續(xù)整理其他同學的學習日記,把在培訓班學習期間由學員們獨立完成的其他小項目設計的全過程和分階段代碼陸續(xù)介紹給各位讀者。這些小冊子將按照完成的先后順序出版,希望它們能成為理工類學生自學Verilog數(shù)字設計、參加課程設計和畢業(yè)設計時的最好參考資料。同學們只要購買一塊開發(fā)板,利用暑假、寒假、課設或畢設時間段,按這些小冊子中介紹的步驟,走一遍設計的全過程,認真思考作者提出的每個問題,通過自己動腦又動手,來解決這些問題,就能真正掌握這門技術。這一過程對想進入高技術數(shù)字系統(tǒng)設計行業(yè)的同學是十分必要的。
趙然同學在本書中用日記的形式詳細記錄了每天的學習過程。在日記中,他用生動的文字記錄了老師布置的設計要求、進度和講解、學習中遇到的困惑、解決問題的方法和過程、模塊代碼的演化過程以及每天的喜怒哀樂,真實地反映了一位聰明、勤奮、好學的年輕人在學習復雜數(shù)字系統(tǒng)的艱難過程中的思想歷程。本書不但是一本數(shù)字系統(tǒng)設計入門書籍,也是年輕人勵志的優(yōu)秀書籍。
在我看來,趙然的FPGA設計學習日記充分體現(xiàn)了“實踐是最好的老師”的真理。學習Verilog數(shù)字設計沒有捷徑可走,在掌握了基本方法后,唯有不怕困難勇于攀登,才能逐步達到別人不敢逾越的高峰。
我們貧窮多難的祖國經過三十多年的改革開放,國民經濟已有了很大的發(fā)展,但高科技產業(yè)仍非常落后,特別在集成電路工業(yè)和尖端國防工業(yè)方面更是如此。阻擋我國進入世界技術強國的主要障礙之一就是數(shù)字系統(tǒng)設計技術的落后。望有志改變我國技術落后面貌的年輕人通過閱讀這本小冊子,刻苦努力自學,加入日益壯大的數(shù)字系統(tǒng)設計師隊伍,為振興祖國的高技術產業(yè)貢獻一份力量。
本書語言通俗易懂,從實用的角度詳細介紹了設計過程的每個細節(jié)。最難能可貴的是作者的分享精神,通過簡單明了的描述,我能體會到作者想與讀者交流、分享的真誠愿望。相信各位讀者通過認真閱讀本書,認真上機操作,F(xiàn)PGA設計能力會更上一層樓。
當然,任何人都不可能只讀一本小冊子就完全掌握利用Verilog HDL的FPGA設計,但是我可以肯定地說,即將逐步推出的《Verilog FPGA數(shù)字系統(tǒng)設計自學叢書》確實是每個想進一步學習Verilog數(shù)字設計,并希望進入數(shù)字設計行業(yè)的年輕人的最好選擇。本書針對的讀者群是已有Verilog基礎知識的學生,以及想進入數(shù)字系統(tǒng)設計領域的年輕電子工程師們。相信本書和以后將陸續(xù)出版的系列叢書定會受到更多讀者的喜愛。
夏宇聞
北京航空航天大學退休教授
2015年9月10日