本書系統地論述了FPGA的設計方法,并給出了大量綜合電子系統設計項目實例。全書共11章。第1章介紹FPGA電子系統的設計方法;第2章介紹QuartusⅡ使用方法;第3-7章介紹FPGA硬件描述語言VHDL的特點、VHDL語言中常用的數據、運算符、順序描述語句和并行描述語句、時鐘信號描述、有限狀態機等基本概念和應用;第8章介紹門電路、組合邏輯電路、觸發器、時序邏輯電路(與閻石主編的《數字電子技術基礎》(第4版)一致),并對其中的各種功能芯片以及基于VHDL與FPGA的實現方法進行了講解;第9章介紹FPGA外圍電路——集成運算放大器及其各種應用;第10章和第11章給出了基于FPGA的綜合電子系統設計實例。
近年來,FPGA的生產和銷售規模以驚人的速度增長。大力發展集成電路設計與制造,是我國制定的重要發展目標,也是經濟全球化新形勢下的科技挑戰。發展集成電路行業,離不開對電子信息類專業人才的培養,尤其是對電子信息類專業人才的創新能力培養。
如何提高學生的實踐創新能力?首先,要使學生對實踐感興趣。在綜合性設計實驗中,學生能做出來就會有興趣。其次,增加練習數量,練習多了水平就會提高。最后,根據生產和生活的實際需要制作創新作品。興趣→提高→創新,不斷循環往復,學生的實踐創新能力就會不斷提高。
本書通過大量的小型電子系統設計提高學生對實踐的興趣,通過由單元電路實踐到電子系統實踐的過渡,降低學習的難度,從而起到拋磚引玉的效果。本書通過大量的FPGA設計實例,切實提高學生開發FPGA電子系統的能力。
本書特色如下:
(1)易懂、易學、易上手。
(2)覆蓋了模擬電子技術基礎、數字電子技術基礎、FPGA基本知識以及大量電子系統設計項目案例。
(3)既給出了硬件設計電路,又提供了程序代碼設計(使用VHDL語言和QuartusⅡ軟件),便于舉一反三。
(4)書中給出的每個綜合電子小系統均已經過設計實現,全部是北方工業大學學生參加全國大學生電子設計競賽的賽前訓練題目,也是電子電路類課程設計的參考題目。
本書主要由北方工業大學電子信息工程學院王振紅編著。另外,張文軒編寫了“項目24基于FPGA與nRF24L01的無線數據傳輸與應用”。張常年、張東彥、宋鵬、曲洪權、王恩成、田青、曹淑琴、黃明、范錦宏、周燕平、馮祎、康曉麓、趙徐森、李云棟、吳曉林、韓宇龍、勝智勇、殷大海等對本書的出版給予了極大的關心和支持。在此,對他們表示衷心的感謝。
本書配套提供第10章和第11章的電路及源程序,可到清華大學出版社網站的本書頁面下載。
由于編著者自身水平有限,如果書中存在錯誤和不妥之處,敬請讀者批評指正。
王振紅
2017年4月
于北方工業大學
目錄
第1章FPGA電子系統的設計方法
1.1電子系統設計
1.1.1總體方案確定
1.1.2子系統設計
1.2印制電路板設計
1.2.1準備工作
1.2.2元器件布局與布線
1.2.3印制焊盤的尺寸及形狀
1.2.4印制導線的尺寸及形狀
1.2.5印制導線的抗干擾和屏蔽
1.2.6印制電路板的對外連接
1.2.7表面貼裝技術對印制板的要求
1.3電子系統的安裝與調試
1.3.1電子系統的安裝
1.3.2元器件的引腳識別
1.3.3電子系統的調試
1.4電子系統抗干擾措施
1.4.1正確選擇器件
1.4.2正確分布元器件
1.4.3交流輸入電源增加電源濾波器
1.4.4施加屏蔽措施
1.4.5使用合理的接地方式
1.4.6電路加入濾波電容和補償電容
第2章FPGA設計軟件——QuartusⅡ及其使用方法
2.1編程存儲及編譯
2.2指定器件引腳及編譯
2.3下載
2.4存儲及編譯圖形描述(電路圖)
2.5掉電可存儲下載方法
第3章FPGA的硬件描述語言VHDL
3.1VHDL程序的特點
3.2VHDL程序的基本結構
3.2.1庫說明
3.2.2實體說明
3.2.3結構體說明
3.3VHDL的數據
3.3.1基本標志符
3.3.2數據對象
3.3.3數據類型
3.4VHDL的表達式
3.4.1邏輯運算符
3.4.2算術運算符
3.4.3關系運算符
3.4.4并置運算符
3.4.5操作符的運算優先級
第4章VHDL的順序描述語句
4.1信號賦值語句和變量賦值語句
4.2if語句
4.3case語句
4.4for loop循環語句
4.5null語句
第5章VHDL的并行描述語句
5.1進程語句
5.2并發信號賦值語句
5.3條件信號賦值語句
5.4選擇信號賦值語句
5.5元件例化語句
5.6生成語句
第6章VHDL的時鐘信號描述方法
6.1時鐘信號的VHDL描述方法
6.1.1時鐘邊沿的描述
6.1.2時序電路中進程敏感信號是時鐘信號
6.2時序電路中復位信號的VHDL描述方法
6.2.1同步復位
6.2.2異步復位
第7章VHDL的有限狀態機的設計
7.1有限狀態機的基本概念
7.2一個Moore型有限狀態機的設計方法
第8章FPGA數字電路設計實例
8.1門電路FPGA設計
8.1.1與非門電路
8.1.2二輸入或非門電路
8.1.3二輸入異或門電路
8.1.4反向器門電路
8.1.5三態門電路
8.1.6單向總線緩沖器
8.1.7雙向總線緩沖器
8.2組合邏輯電路FPGA設計
8.2.1監視交通信號燈工作狀態的邏輯電路
8.2.28線—3線編碼器
8.2.38線—3線優先編碼器
8.2.4二—十進制編碼器
8.2.5譯碼器(3線—8線)
8.2.6二—十進制譯碼器
8.2.7BCD七段顯示譯碼器
8.2.8代碼轉換電路
8.2.9四選一數據選擇器
8.2.10八選一數據選擇器
8.2.114位全加器
8.2.128位加法器
8.2.13多位數值比較器
8.3觸發器FPGA設計
8.3.1RS觸發器
8.3.2主從JK觸發器
8.3.3D觸發器
8.4時序邏輯電路FPGA設計
8.4.1寄存器
8.4.2雙向移位寄存器
8.4.3串行輸入并行輸出移位寄存器
8.4.4循環移位寄存器
8.4.54位同步二進制計數器
8.4.6單時鐘同步十六進制加/減計數器
8.4.7雙時鐘同步十六進制加/減計數器
8.4.8同步十進制加法計數器
8.4.9單時鐘同步十進制可逆計數器
8.4.10異步二進制加法計數器
8.4.11同步一百進制計數器
8.4.12同步二十九進制計數器
8.4.13順序脈沖發生器
8.4.14序列信號發生器
8.4.15用狀態機方法設計十三進制計數器
8.4.16串行數據檢測器
8.4.17能自啟動的七進制計數器
8.4.18能自啟動的三位環形計數器
8.4.19用狀態機方法設計十進制減法計數器
第9章FPGA外圍電路——集成運算放大器
9.1集成運算放大器典型電路
9.1.1反相比例運算電路
9.1.2同相比例運算電路
9.1.3反相求和運算電路
9.1.4同相求和運算電路
9.1.5加減運算電路
9.1.6積分運算電路
9.1.7微分運算電路
9.1.8壓控電壓源二階低通濾波器
9.1.9壓控電壓源二階高通濾波器
9.1.10RC橋式正弦振蕩電路
9.1.11方波發生電路
9.1.12方波和三角波發生電路
9.1.13過零比較器
9.1.14一般單限比較器
9.1.15滯回比較器
9.1.16窗口比較器
9.1.17精密整流電路
9.2單電源供電的集成運算放大器的應用
9.2.1單電源集成運放的放大電路
9.2.2單電源集成運放的正弦波發生器
9.2.3單電源集成運放的方波三角波發生器
9.2.4單電源集成運放的低通濾波器
9.2.5單電源集成運放的高通濾波器
9.2.6單電源集成運放的比較器
9.2.7單電源比較器
9.2.8單電源比較器組成的窗口比較器
9.2.9高效率音頻功率放大器
9.2.10單電源集成運放綜合設計
9.3集成運算放大器的綜合應用
9.3.1小信號功率放大器
9.3.2具有放大、濾波及繼電器控制的模擬信號檢測與控制系統
9.3.3具有放大、F/V轉換及繼電器控制的模擬信號頻率檢測與控制系統
9.3.4間歇正弦波控制路
9.3.5語音信號放大器
9.3.6程控放大器0~40dB
9.3.7寬帶放大器
9.3.8正弦交流電壓有效值控制的壓控振蕩電路
9.3.9電壓轉換恒定電流電路
9.3.10實用溫控器
9.3.11用熱釋電傳感器的報警電路
9.3.12基于PWM的LED調光電路
9.3.13具有放大、濾波器、計數功能的電子電路
第10章FPGA數字電路系統設計實例
10.1數字信號的發送和接收電路
10.2序列計數器
10.3設計一個自動售郵票的控制電路
10.4數字鎖
10.5設計一個汽車尾燈的控制電路
10.6交通燈控制器
10.7雙十字路口交通燈控制器
10.816×16的點陣顯示設計
10.9乒乓球游戲機
10.10三層電梯控制器
10.11汽車停車場停車位顯示系統
10.12智力競賽搶答計時器的設計
10.13出租車計費器
10.14定時器
10.15秒表
10.16數字鐘
10.17數字頻率計
10.18電子琴電路設計
10.19《友誼地久天長》樂曲演奏電路設計
10.20寄存序列型信號發生器
10.21正負脈寬數控調制信號發生器設計
10.22智能函數發生器設計
10.23周期可調的多波形發生器
10.24模擬信號檢測
10.25數據采集及監控系統
第11章FPGA電子系統設計項目
11.1項目1FPGA控制的數碼顯示電路
11.1.1設計要求
11.1.2設計分析
11.1.3顯示原理
11.1.4驅動8位數碼管顯示電路框圖
11.1.5模塊及模塊功能
11.2項目2鍵盤控制電路
11.2.1設計要求
11.2.2設計分析
11.2.3設計思想與源程序
11.3項目3用8×8行共陰、列共陽雙色點陣發光器件顯示漢字
11.3.1設計要求
11.3.2設計分析
11.3.3器件及硬件電路
11.3.4設計軟件的思路及源程序
11.4項目4FPGA控制的數模D/A轉換電路
11.4.1設計要求
11.4.2設計分析
11.4.3DAC0832轉換器
11.4.4數模D/A轉換電路
11.4.5FPGA控制的數模D/A轉換電路
11.5項目5FPGA控制的模數A/D轉換0809的應用
11.5.1設計要求
11.5.2設計分析
11.5.3ADC0809轉換器及其轉換電路
11.5.4FPGA控制的模數A/D轉換電路
11.5.5用數碼管顯示模數A/D轉換器的輸入電壓
11.5.6ADC0809轉換模擬輸入負電壓電路
11.6項目6數控式可逆步進調壓直流穩壓電源
11.6.1設計要求
11.6.2原理及硬件電路
11.6.3軟件設計思想及源程序
11.7項目7數控式直流電流源
11.7.1設計指標及框圖
11.7.2硬件電路圖
11.7.3軟件設計思想及源程序
11.8項目8低頻數字式相位測量儀
11.8.1低頻數字式相位測量儀設計指標及框圖
11.8.2移相網絡
11.8.3相位測量
11.9項目9多路數據采集系統
11.9.1設計內容
11.9.2現場模擬信號產生器
11.9.38路數據采集器
11.9.4主控器
11.10項目10測量放大器
11.10.1測量放大器系統
11.10.2橋式電路
11.10.3信號變換放大器
11.10.4直流電壓放大器
11.10.5程控的直流電壓放大器
11.11項目11功率放大器
11.11.1設計任務
11.11.2功率放大器
11.11.3前置放大器
11.11.4系統測試
11.11.5自制穩壓電源
11.11.6集成功率放大器
11.12項目12開關型穩壓電源
11.12.1脈沖寬度調制電路MIC2194
11.12.2MC34060控制的串聯型開關穩壓電源
11.13項目13程控濾波器
11.13.1設計要求
11.13.2設計框圖
11.13.3程控放大器
11.13.4程控低通濾波器
11.13.5程控高通濾波器
11.13.6程控濾波器的FPGA控制核心
11.14項目14信號發生器
11.14.1設計要求
11.14.2信號發生器的功能及其內部接線
11.14.3信號發生器的FPGA內部結構
11.14.4調用QuartusⅡ中的除法器件方法
11.15項目15交流電壓參數的測量
11.15.1設計要求
11.15.2給定的器件
11.15.3硬件電路
11.15.4軟件電路
11.16項目16寬帶放大器
11.16.1設計要求
11.16.2硬件電路
11.16.3軟件電路
11.17項目17高效率音頻功率放大器
11.17.1設計要求
11.17.2D類放大器的工作原理
11.17.3硬件電路
11.17.4軟件電路
11.18項目18數字化語音存儲與回放系統
11.18.1設計要求
11.18.2硬件電路
11.18.3軟件電路
11.19項目19數字式工頻有效值多用表
11.19.1硬件電路
11.19.2軟件電路
11.20項目20簡易電阻、電容和電感測量儀
11.20.1設計要求
11.20.2硬件電路
11.20.3軟件電路
11.21項目21數字幅頻均衡功率放大器
11.21.1設計要求
11.21.2設計框圖
11.21.3三級放大電路
11.21.4帶阻網絡
11.21.5低通濾波電路
11.21.6A/D轉換
11.21.7D/A轉換和功率放大器
11.21.8FPGA程序
11.22項目22紅外光通信裝置
11.22.1設計要求
11.22.2紅外光語音通信裝置
11.22.3紅外光溫度數字信號通信裝置
11.22.4紅外光通信裝置總結
11.23項目23數字頻率計
11.23.1設計要求
11.23.2系統設計方案和電路
11.23.3信號頻率測量
11.23.4時間間隔測量系統模塊
11.23.5占空比測量系統模塊
11.24項目24基于FPGA與nRF24L01的無線數據傳輸與應用
11.24.1nRF24L01無線收發器
11.24.2nRF24L01無線收發器工作模式
11.24.3nRF24L01配置
11.24.4用FPGA對nRF24L01進行配置
參考文獻
一般來說,結構體中的所有處理語句都是并行處理語句,那么結構體中是否存在順序語句呢?答案是肯定的。VHDL程序的結構體中既存在并行語句又存在順序語句。并行語句用來描述一組并發行為,它是并發執行的,與程序的書寫順序無關; 順序語句是一個接在另一個之后嚴格按照順序執行的語句,與程序的書寫順序有關。
5.1進程語句
進程語句包含在結構體中,一個結構體可以有多個進程語句,多個進程語句間是并行的,并可訪問結構體或實體中定義的信號。因此進程語句稱為并行描述語句。
進程語句結構內部所有語句都是順序執行的。
進程語句的啟動是由process后敏感信號表中所標明的敏感信號來觸發進程。
各進程之間的通信是由信號傳遞的。其語法如下:
標記: process(敏感信號表)
變量說明語句;
begin
一組順序語句;
end process 標記;
其中,標記為進程語句標號; 敏感信號表是進程語句要讀取的所有敏感信號(包括端口信號)的列表。變量說明語句主要包括變量的數據類型說明、子程序說明等。從begin開始到end process結束,是一組順序執行語句。
下面重點討論關于進程語句書寫結構中的敏感信號表的問題。
1. 進程語句的敏感信號表
所謂敏感信號表,顧名思義,就是用來存放敏感信號的列表。在進程語句中,敏感信號是指那些值發生改變后能夠引起進程語句執行的信號。一般來說,敏感信號表中可以使用一個或是多個信號,每當其中的一個或是多個信號值改變時,就在進程內部引起語句執行。敏感信號表列出了進程語句對其敏感的所有信號,所以進程語句最好有一個敏感信號表。當然,敏感信號表部分可以省略,但此時進程語句中要有其他形式的敏感信號激勵。
這里需要注意的是: 當進程語句中沒有敏感信號表時,進程語句中必須有其他形式的敏感信號激勵; 而當進程中有敏感信號表時,進程語句中不允許再顯式出現wait、wait for、wait until和wait on中的任何一種敏感信號激勵語句,否則編譯時將會給出錯誤信息。
程序5.1描述的是一個簡單的D觸發器,結構體中只有一個進程語句,敏感信號表列出了時鐘信號clk,輸入信號d。
【程序5.1】
library ieee;
use ieee.std_logic_1164.all;
entity dff1 is
port(clk,d:in std_logic;
q:out std_logic);
end dff1;
architecture rtl of dff1 is
begin
p1:process(clk,d)
begin
if(clk'event and clk='1')then
q=d;
end if;
end process p1;
end rtl;
在程序5.1中,進程語句標號p1,以process(clk,d)開始,接著是進程語句中的一組順序處理語句,用來描述d觸發器的功能,當時鐘上升沿到時,將輸入信號d賦值給輸出信號q,最后該進程語句以end process p1結束。可以看出,p1進程語句對時鐘信號clk、輸入信號d敏感,因此當時鐘信號發生變化或是輸入信號變化時將會啟動進程語句。
2. 進程語句的啟動
在VHDL中,進程語句有兩種工作狀態: 等待狀態和執行狀態。當敏感信號表中的信號沒有變化時,進程處于等待狀態; 當敏感信號表中的信號有變化時,進程處于執行狀態,這時將順序執行進程中的語句。
因此不難看出,進程語句的啟動主要取決于敏感信號表中的信號,只要敏感信號表中的信號發生了變化,進程將啟動。進程啟動以后,begin和end process間的語句將從上到下順序執行一次,當最后一個語句執行完后,就返回進程語句的開始,等待下一次敏感信號表中的信號變化。
3. 進程語句的同步
在VHDL程序中,同一個結構體中不僅可以有多個進程存在,而且同一個結構體中的多個進程之間還可以進行同步。一般來說,VHDL中通常采用時鐘信號來同步進程,其具體操作方法就是結構體中的幾個進程共用同一個時鐘信號來進行激勵,以啟動進程。
進程的同步一般是由敏感信號表來進行控制的,敏感信號表中的信號不發生變化會暫停進程的執行,直到敏感信號發生變化時才會再次啟動進程。程序5.2是一個同步進程的例子。由程序5.2產生的shizhong電路符號如圖5.1所示。
……