3.6秒表功能--明德?lián)P科教(mdy-edu.com)
本文的文檔編號:001600000018
需要看對應的視頻,請點擊視頻編號:001600000100
1.至簡原理與應用配套的案例文檔
2.設計中只需要使用開發(fā)板上的一個數(shù)碼管0來實現(xiàn)秒表功能,具體為:復位后,數(shù)碼管0顯示數(shù)字0并持續(xù)1秒;隨后顯示數(shù)字1并持續(xù)2秒;然后顯示數(shù)字2并持續(xù)3秒;以此類推,最后顯示數(shù)字9并持續(xù)10秒。之后再次回到顯示數(shù)字0并持續(xù)1秒的循環(huán)。
3. ALTERA入門學習案例文檔
第三篇?FPGA至簡設計項目實踐? ?
? ???第六章 秒表功能
第1節(jié) 項目背景
上一章節(jié)中詳細的講解了數(shù)碼管的顯示原理和控制方式,本章不再進行贅述。通過相關原理可知FPGA通過控制數(shù)碼管的對應管腳,從而實現(xiàn)數(shù)碼管顯示的控制。在這一結論的基礎上,本章將進行更深一步的數(shù)碼管顯示設計。
第2節(jié) 設計目標
在正式學習本設計之前先來確定一下設計的功能目標。在這里再次強調明確設計目標的重要性,至簡設計法旨在用最直接簡潔的方法來進行工程設計,想要達到這一效果,設計中的每一個步驟和代碼都應是有用的。只有每一步操作都是為了最終的設計目標,才可以做到“最直接”,才能少走彎路,而這也是至簡設計法的特別之處。因此在進行設計前需要徹底理清每一個設計目標,圍繞這個設計目標展開后續(xù)的每一個步驟設計。如果最終想要達到的效果都無法確定,那么后續(xù)的討論就沒有任何的意義。
開發(fā)板上有?8?位數(shù)碼管,在本次設計中只需要使用1個數(shù)碼管(數(shù)碼管0)來實現(xiàn)秒表功能,其具體設計效果為:復位后,數(shù)碼管0顯示數(shù)字0并持續(xù)1秒;隨后顯示數(shù)字1并持續(xù)2秒;然后顯示數(shù)字2并持續(xù)3秒;以此類推,最后顯示數(shù)字9并持續(xù)10秒。之后再次回到顯示數(shù)字0并持續(xù)1秒的循環(huán)中。
秒表功能的上板效果如下圖所示,想要觀看上板演示視頻效果可以登陸至簡設計法官方網站進行學習:www.mdy-edu.com/xxxx。

第3節(jié) 設計實現(xiàn)
本節(jié)會分享詳細的步驟與解析,以便初學者可以在學會原理的情況下掌握設計方法。在學會每一個案例的基礎上希望同學們將設計思想融會貫通,最終可以掌握完成獨立完成工程設計的能力,可以將至簡設計法運用到今后的工作中去。如果已經掌握了原理、只想復習回顧設計步驟,也可以選擇直接閱讀第五節(jié)簡化版步驟進行實操練習。請各位根據(jù)個人的實際情況進行選擇。
3.1 頂層信號
新建目錄:D:mdy_bookmy_time,并在此目錄中,新建一個名為my_time.v的文件。用GVIM打開后開始編寫代碼。在這里建議初學者按照本書提供的路徑名以及文件名進行設置,不要自行進行修改。因為在更改后可能會出現(xiàn)中文路徑、空格路徑等非法路徑的問題,也可能會出現(xiàn)文件名更改后報錯的現(xiàn)象。而對于初學者來說,并不能很好的發(fā)現(xiàn)并解決問題。因此建議初學者先按照要求更名保存,在進行多個工程設計,熟悉了各個步驟后再進行更名的操作。在此不要想當然,一時的細心可以避免后續(xù)問題的出現(xiàn)。
分析設計目標可知,本次設計要實現(xiàn)的功能是控制數(shù)碼管0根據(jù)不同時間顯示不同的數(shù)字并持續(xù)一定的時間。在這個過程中,8個數(shù)碼管中只有數(shù)碼管0進行顯示變換,其他數(shù)碼管不亮。上一章中對數(shù)碼管的控制方法進行了講解,如果有需要可以回到上一章復習。FPGA通過控制位選信號來控制8個數(shù)碼管,即應輸出一個8位的位選信號,將其設定為seg_sel。其中seg_sel[0]對應數(shù)碼管0,seg_sel[1]對應數(shù)碼管1,以此類推,seg_sel[7]對應數(shù)碼管7。而實現(xiàn)數(shù)碼管上的不同數(shù)字顯示則需控制每個數(shù)碼管上的7個子段,即控制段選信號使數(shù)碼管上顯示相應的數(shù)字。本設計中不需要用到h子段,共需要7個子段,因此FPGA要輸出一個7位的段選信號來控制數(shù)碼管顯示,將段選信號設為seg_ment。其中seg_ment[6]~segm_ment[0]分別對應數(shù)碼管的abcdefg(注意對應順序)。當然,除位選信號和段選信號外,設計中進行工程控制的時鐘信號和復位信號也同樣必不可少。
綜上所述,本設計一共需要4個信號:時鐘信號clk,復位信號rst_n,輸出的位選信號seg_sel和輸出的段選信號seg_ment。信號和硬件的對應關系如下表所示。
表3.6 - 1信號和管腳關系

將module的名稱定義為my_time,已知該模塊有4個信號:clk、rst_n、seg_sel和seg_ment。在頂層信號代碼中需要將與外部相連接的輸入/輸出信號列出,從而實現(xiàn)信號與管腳的連接,其具體代碼如下:

隨后對信號輸入輸出屬性進行聲明,指出這一信號對于FPGA來說屬于輸入信號還是輸出信號,若為輸入信號則聲明其為input,若為輸出信號則聲明其為output。在本設計中,由于clk是外部的晶振輸送給FPGA,因此在FPGA中clk為1位的輸入信號input;同樣地,rst_n是外部按鍵給FPGA的,因此在FPGA中rst_n也是1位的輸入信號input;seg_sel是FPGA控制數(shù)碼管亮滅情況的信號,因此seg_sel是8位的輸出信號output,seg_ment是FPGA控制數(shù)碼管顯示數(shù)字內容的信號,因此seg_ment是7位的輸出信號output。綜上所述,完成輸入輸出端口定義,其具體代碼如下:

3.2 信號設計
在設計信號之前,先按照至簡設計法的思路來進行架構設計。根據(jù)設計目標先來分析要實現(xiàn)的功能,8個數(shù)碼管中數(shù)碼管0顯示數(shù)字,其余數(shù)碼管不顯示。數(shù)碼管0的具體顯示順序為:顯示數(shù)字“0”持續(xù)1秒;顯示數(shù)字“1”持續(xù)2秒;顯示數(shù)字“2”持續(xù)3秒;顯示數(shù)字“3”持續(xù)4秒;顯示數(shù)字“4”持續(xù)5秒;顯示數(shù)字“5”持續(xù)6秒;顯示數(shù)字“6”持續(xù)7秒;顯示數(shù)字“7”持續(xù)8秒顯示數(shù)字“8”持續(xù)9秒;顯示數(shù)字“9”持續(xù)10秒。至此一個循環(huán)結束,再從顯示數(shù)字“0”開始進入下一個循環(huán)。
將現(xiàn)象翻譯成信號表示如下:
數(shù)碼管0顯示數(shù)字“0”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b000_0001,持續(xù)1秒;
數(shù)碼管0顯示數(shù)字“1”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b100_1111,持續(xù)2秒;
數(shù)碼管0顯示數(shù)字“2”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b001_0010,持續(xù)3秒;
數(shù)碼管0顯示數(shù)字“3”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b000_0110,持續(xù)4秒;
數(shù)碼管0顯示數(shù)字“4”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b100_1100,持續(xù)5秒;
數(shù)碼管0顯示數(shù)字“5”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b010_0100,持續(xù)6秒;
數(shù)碼管0顯示數(shù)字“6”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b010_0000,持續(xù)7秒;
數(shù)碼管0顯示數(shù)字“7”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b000_1111,持續(xù)8秒;
數(shù)碼管0顯示數(shù)字“8”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b 0000000,持續(xù)9秒;
數(shù)碼管0顯示數(shù)字“9”,即seg_sel的值為8’b1111_1110,seg_ment的值為7’b000_0100,持續(xù)10秒。
隨后從顯示數(shù)字“0”開始循環(huán)往復。
總結規(guī)律可以發(fā)現(xiàn)seg_sel信號的值不發(fā)生變化,始終為8’hfe;seg_ment隔一段時間后會變化,其波形示意圖如下圖所示:

圖3.6-2秒表的波形圖
根據(jù)設計目標可以發(fā)現(xiàn)數(shù)碼管0每隔一段時間發(fā)生變化,即seg_ment信號每隔一段時間后會變化,且變化的間隔時間不同。第一次顯示時,信號seg_sel=8’hfe,seg_ment=7’h01,持續(xù)1秒;在第二次顯示時,seg_sel=8’hfe,seg_ment=7’h4f,持續(xù)2秒;以此類推,第十次顯示,seg_sel=8’hfe,seg_ment=7’h04,持續(xù)10秒。以此為規(guī)律在波形圖上補充時間信息,補充后的波形圖如下圖所示:

圖3.6-3秒表的實現(xiàn)架構圖
根據(jù)波形圖的分析可以得到本設計的計數(shù)器架構:本設計一共需要兩個計數(shù)器,一個計數(shù)器用來計算時間,如1秒、2秒等;另一個計數(shù)器用來計算在目前處在第幾次的顯示階段。
來思考一下:為什么不能只采用一個時間計數(shù)器,按照1秒、3秒、6秒、10秒……這樣增加秒數(shù)的方法來計數(shù)呢?實際上增加計數(shù)器的操作正是運用了至簡設計法的道理,讓信號代碼更加有條理并便于設計師確定位置。如果采用一個計數(shù)器的計數(shù)方法,雖然減少了一個計數(shù)器,但在實際的代碼操作中卻非常麻煩。
舉個生活中常見的例子,如下圖所示,將每一次的循環(huán)看做樓層,每一次的數(shù)碼管顯示數(shù)字的持續(xù)時間記作門牌號,即1秒、2秒、3秒在一樓中對應1號2號3號,以此類推。如果只用一個計數(shù)器的話,那么一樓的門牌號為1、2、3、4、5、6、7、8,二樓的則為9、10、11、12、13、14、15、16、17、18,三樓以此類推。這種只有用一種計數(shù)單位的方法,開始確實沒有太大問題,但是隨著樓層的變高,這種計數(shù)方式的弊端就會顯露出來。比如在這種情況下,如果想要找76號,就可能需要很久才能找到。

圖3.6-4單一門牌號計數(shù)模式
如果在一個計數(shù)單位的基礎上再加一個計數(shù)單位,即采用兩種技術模式,一個記樓層,一個記門牌號,如下圖所示。在同樣的門牌號計數(shù)中,可以記為一樓的1、2、3、4、5、6、7、8號,二樓的1、2、3、4、5、6、7、8、9、10號,以此類推,每一層都有對應的房間號。在這種計數(shù)模式下,如果想要找到七層6號房間,不需要多做思考就可以一下定位到正確位置。

圖3.6-5兩種門牌號復合計數(shù)模式
通過案例可以確定兩種計數(shù)器復合計數(shù)才是最簡單的計數(shù)模式,因此本設計中使用一個計算時間的計數(shù)器,一個表示當前顯示次數(shù)(1到10)的計數(shù)器。這樣如果后續(xù)遇到問題,也可以快速的定位到相應位置,避免了很多麻煩。
此外,在以上門牌號計數(shù)案例中,如果想要尋找每一層的固定位置房間,按照兩種計數(shù)單位復合的模式,用cnt0來表示房間號,其范圍是0-9,用cnt1來表示樓層號,其范圍是0-1。通過這種方法,可以利用cnt0和cnt1來找到任何一個房間。當然,如果想找同一個位置的房間,也可以直接用cnt0來表示。例如cnt0==4可以統(tǒng)一表示每層樓的四號房間。但如果只有房間號這一計數(shù)模式而沒有樓層的話,想表示每層樓的四號房間,則表示方式為“cnt0==4”、“cnt0=12”,更高樓層以此類推。兩種表現(xiàn)形式的難易程度顯而易見。
可見兩個計數(shù)器復合計數(shù)的方式并不是多此一舉,反而是最適合本設計的計數(shù)器方案。不論是簡單的還是復雜的設計,至簡設計法都會全面的考慮設計需求,在每一個環(huán)節(jié)都會采用最適合的設計方案,盡量為后續(xù)的步驟減少不必要的麻煩。
因此,在本設計中選用了兩個計數(shù)器:一個記錄時間,一個記錄循環(huán)次數(shù),下面就分別討論兩個計數(shù)器的實現(xiàn)。首先討論表示時間的計數(shù)器,其用cnt0表示。至簡設計法的設計規(guī)則中有講過,計數(shù)器的設計只考慮兩個因素:加1條件和計數(shù)數(shù)量。只要確定相應邏輯,就能完成計數(shù)器代碼設計。
首先討論計數(shù)器cnt0的加1條件:由于該計數(shù)器在不停地計數(shù),永不停止,因此可以認為其加1條件是一直有效的,可以寫為:assign add_cnt0==1。
此處可能有同學存在疑惑加1條件的概念是什么?這里以停車位來進行比喻,一般情況下對每個停車位置會進行對應編號,但是如果某個位置上放置了一塊石頭無法作為停車位時,該位置就不能獲得對應的編號。反之則可以認為停車位編號的加1條件就是:對應位置上沒有石頭,其可以繼續(xù)的進行編號,即assign add_cnt0 = “沒有石頭”。因此如果在設計中計數(shù)器一直沒有阻礙地進行計數(shù)工作,就可以認為加1條件是一直有效的。
確定加1條件后來討論計數(shù)器cnt0的計數(shù)數(shù)量。本設計的工作時鐘是50MHz,即周期為20ns,當計數(shù)器數(shù)到第1_000_000_000/20=50_000_000個時,就代表1秒計時結束;當計數(shù)器計數(shù)到第2_000_000_000/20=100_000_000個時,就代表2秒計時結束;當計數(shù)器數(shù)到第150_000_000個時,就代表3秒計時結束;以此類推,當計數(shù)器數(shù)到第500_000_000個時,就代表10秒計時結束。由于每次計算的時間不同,因此可以考慮使用變量法。至簡設計法中選用變量法的邏輯思維非常簡單,只要循環(huán)的周期個數(shù)不同,就可以選擇變量法。設定x表示計數(shù)器cnt0的計數(shù)數(shù)量,后文中會對x的值進行詳細展開。
確定好加1條件和計數(shù)數(shù)量后開始進行代碼編寫。相信各位往常都是一行行輸入代碼,但是至簡設計法有一個小技巧,可以為大家編寫代碼省去不少時間,并且一定程度上降低了代碼的出錯率。至簡設計法將日常代碼中常用到的固定部分做成了模板,進行代碼編程時可以調用相應模板后根據(jù)邏輯輸入對應設計的變量將代碼補充完整。這里就可以用模板編寫計數(shù)器代碼,感受一下這個炫酷的功能。
打開GVIM工具,在命令模式下輸入“:Mdyjsq”后點擊回車,就調出了對應模板,如下圖所示。之后再將本案例中的變量填到模板里面,就可以得到完整正確的計數(shù)器代碼。

圖3.6-6至簡設計法調用計數(shù)器代碼模板
補充完整后得到計數(shù)器cnt0的代碼如下。

下面來設計表示第幾次顯示的計數(shù)器,將該計數(shù)器命名為cnt1。分析波形圖可以看出,每個階段完成后,該計數(shù)器的值加1。因此加1條件是cnt0結束,代碼表示為end_cnt0。該計數(shù)器一共要數(shù)10次,即計數(shù)數(shù)量為10。這里繼續(xù)選擇調用至簡設計法代碼模板,在命令模式下輸入“:Mdyjsq”,點擊回車,調出了計數(shù)器模板后將“add_cnt1”和“end_cnt1”補充完整,得到該計數(shù)器的代碼如下:

確定完兩個計數(shù)器后來思考輸出信號seg_sel的值。通過波形圖可以看出:在整個設計中,該信號始終不變一直是8’hfe,所以代碼直接寫成:

再來思考輸出信號seg_ment的變化。分析設計目標可知在第一次顯示時,seg_ment輸出值為7’h01;在第二次顯示時,輸出值為7’h4f;以此類推,在第十次顯示時,輸出值為7’h0f。計時器cnt1來表示第幾次顯示,即cnt1==0時,輸出值為7’h01;cnt1==1的時輸出值為7’h4f;以此類推,在cnt1==9時,輸出值為7’h04。再進一步翻譯成代碼,打開GVIM,在編輯模式下輸入“Shixu2”,調出至簡設計法模板,補充完整后的代碼如下所示:


最后再來思考一下變量x。
正如前文中樓房門牌號的例子,假定第一層為8個房間,第二層為10個房間,第三層為15個房間,第四層為20個房間。若用代碼將這種情況表示出來,即在編輯模式下輸入“Zuhe”后回車,可以得到至簡設計法模板,填寫相應條件后得到最終代碼如下:

同樣的道理,在討論計數(shù)器cnt0的時候曾經得出結論:“當計數(shù)器數(shù)到第1_000_000_000/20=50_000_000個時,就代表1秒計時結束;當計數(shù)器計數(shù)到第2_000_000_000/20=100_000_000個時,就代表2秒計時結束;當計數(shù)器數(shù)到第150_000_000個時,就代表3秒計時結束;以此類推,當計數(shù)器數(shù)到第500_000_000個時,就代表10秒計時結束?!笨梢钥闯觯琧nt0的計數(shù)數(shù)量與cnt1有關。即第1次顯示數(shù)50_000_000個,第2次數(shù)100_000_000個……,按照這樣的規(guī)律可以將10次對應的x表示出來。
在編輯模式下輸入“Zuhe”后回車,調出至簡設計法模板,填寫對應條件后得到表示x的代碼如下所示。這里是使用至簡設計法寫出來的代碼,需要著重學習一下,可以看到該代碼非常整潔,邏輯思維一目了然。這種寫法不會出現(xiàn)BUG,并且可以做到資源最優(yōu),在進行實操時可以使用這種寫法。


至此,主體程序已經完成?;仡櫼幌略O計過程會發(fā)現(xiàn):每一步設計都圍繞設計目標逐步展開,看似在討論一個個小問題,但都是始終圍繞設計目標來進行討論,這也正是最開始提到的制定和理解設計目標的重要性。
3.3 信號定義
接下來需要將module補充完整,首先來定義信號類型。reg和wire的判斷很容易搞不清楚總會有多余的聯(lián)想,比如認為reg就是寄存器,wire是線;或者認為reg會綜合成寄存器,wire不會綜合成寄存器。但是這些其實和reg型還是wire型都并無關系,在信號類型的判斷時不需要做任何的聯(lián)想,只要記住一個規(guī)則“用always實現(xiàn)的是reg型,其他都是wire型”就可以了。
cnt0是用always產生的信號,因此類型為reg。cnt0計數(shù)的最大值為500_000_000,需要用29根線表示,即位寬是29位。
至簡設計法在這里們分享一個非常實用的位寬獲取技巧:打開計算器,點擊“查看”,選擇“程序員”模式,在“十進制”下將信號值輸入進去,就會獲得對應的信號位寬。以cnt0信號為例,在計算器中輸入500_000_000,即可得到對應的位寬29,如下圖所示。

因此cnt0的定義代碼如下:

add_cnt0和end_cnt0都是用assign方式設計的,因此類型為wire。其值是0或者1,用1根線表示即可。編輯模式下輸入“Wire1”調用至簡設計法模板,補充完整后得到代碼表示如下:

cnt1是用always產生的信號,因此類型為reg。cnt1計數(shù)的最大值為9,需要用4根線表示,即位寬是4位。編輯模式下輸入“Reg4”調用至簡設計法模板并補充完整;
add_cnt1和end_cnt1都是用assign方式設計的,因此類型為wire。其值是0或者1,用1根線表示即可。編輯模式下輸入“Wire1”調用至簡設計法模板并補充完整。
補充后的cnt1、add_cnt1和end_cnt1的定義代碼如下所示:

eg_sel是用assign方式設計的,因此類型為wire,其共有8根線,即位寬為8。編輯模式下輸入“Reg8”調用至簡設計法模板,補充完整后得到代碼表示如下:

seg_ment是用always方式設計的,因此類型為reg,其用7根線表示,即位寬為7。代碼表示如下:

x是用always方式設計的,因此類型為reg,其位數(shù)與cnt0一致,都是20位位寬。x的定義代碼表示如下:

至此,整個代碼的設計工作已經完成。整體代碼如下:






整個代碼的設計工作已經完成,接下來將新建工程并上板查看現(xiàn)象。在上板之前,建議再檢查一遍有沒有遺漏或者不懂的地方。授人以魚不如授人以漁,本書希望在此分享朋友的不止是一個設計,更想讓各位學會至簡設計法的設計方法與思路,逐漸掌握獨立思考和設計工程的技能。掌握了一個設計會帶來階段性的便捷,但是學會了這項技能可以終身受益。所以希望讀者遇到不理解的地方時一定多多鉆研,直到真正弄懂弄通為止。
第4節(jié) 綜合與上板
4.1 新建工程
打開軟件Quartus Ⅱ,點擊“File”下拉列表中的New Project Wzard...新建工程選項,如下圖所示。

圖3.6-8Quartus新建工程
隨后會出現(xiàn)Quartus新建工程介紹,如下圖所示,直接點擊“Next”。

圖3.6-9Quartus新建工程介紹
此時會出現(xiàn)工程文件夾、工程名、頂層模塊名設置界面,如圖3.6- 10所示。設置目錄為:D:/mdy_book/miaobiao,工程名和頂層名為miaobiao。再次強調,為了避免初學者在后續(xù)操作中出現(xiàn)報錯情況,強烈建議設置的文件目錄和工程名稱與本書保持一致。設置完成后點擊“Next”。

圖3.6-10QUARTUS新建工程設置名稱
新建工程類型設置選擇“Empty project”,如下圖所示,然后點擊“Next”。

圖3.6-11QUARTUS新建工程類型
文件添加界面如圖3.6- 12所示,點擊右側的“Add”按鈕,添加已經寫好的“miaobian.v”文件,可以看到界面下方會顯示出文件,隨后點擊“Next”。

圖3.6-12QUARTUS添加文件
芯片型號選擇界面如圖3.6- 13所示,選擇“Cyclone ⅣE”,在芯片型號選擇處選擇“EP4CE15F23C8”后點擊“Next”。

圖3.6-13QUARTUS選擇芯片型號
圖3.6- 14為QUARTUS設置工具界面,不必做任何修改,直接點擊“Next”。

圖3.6-14QUARTUS設置工具界面
新建工程匯總情況如下圖所示,點擊“Finish”后完成新建工程。

圖3.6-15QUARTUS新建工程匯總界面
4.2 綜合
新建工程步驟完成后會出現(xiàn)如下所示的QUARTUS界面。

圖3.6-16QUARTUS新建工程后界面
點擊編譯按鈕,可以對整個工程進行編譯。編譯成功的界面如圖3.6- 17所示。

圖3.6-17QUARTUS編譯后界面
4.3 配置管腳
下面需要對相應管腳進行配置。如下圖所示,在菜單欄中選中“Assignments”,然后選擇“Pin Planner”,隨后會彈出配置管腳的窗口。

圖3.6-18QUARTUS配置管腳選項
在配置窗口最下方中的“l(fā)ocation”一列,參考信號和管腳關系,按照表3.6- 1中最右兩列配置好FPGA管腳。配置管理來源參見管腳配置環(huán)節(jié),最終配置的結果如圖3.6- 19。配置完成后,關閉“Pin Planner”,軟件自動會保存管腳配置信息。


4.4 再次綜合
再次打開“QUARTUS”軟件,在菜單欄中選中“Processing”,然后選擇“Start Compilation”,再次對整個工程進行編譯和綜合,如下圖所示。

圖3.6-20QUARTUS編譯選項
當出現(xiàn)如下所示的編譯成功標志時則說明編譯綜合成功。

圖3.6-21QUARTUS編譯成功標志
4.5 連接開發(fā)板
完成編譯后開始進行上板調試操作,按照下圖的方式,將下載器接入電腦USB接口,接上開發(fā)板電源后按下開發(fā)板下方藍色開關,硬件連接完畢。

圖3.6-22開發(fā)板連接圖
4.6 上板
打開QUARTUS界面,單擊界面中的“ ”,會彈出配置界面。在界面中點擊“add file”添加“.sof”文件后點擊“Start”,會在“Progress”出現(xiàn)顯示進度。

圖3.6-23QUARTUS界面
當進度條到100%時提示成功,如下圖所示,此時即可在開發(fā)板上觀察到相應的現(xiàn)象。

圖3.6-24QUARTUS下載程序界面
如果操作沒有錯誤,此時可以觀察到數(shù)碼管像秒表計時一樣顯示數(shù)字,如果顯示的時間間隔或者數(shù)字發(fā)生錯誤,則需要從頭開始進行錯誤排查。如果無法自己完成錯誤排查的話,可以重新按照步驟操作一遍,相信一定會有更多的收獲。
第5節(jié) 簡化版步驟分享
這里依舊會分享簡化版的步驟,方便掌握基礎原理后進行反復操作復習。
5.1 設計實現(xiàn)
5.1.1 頂層信號
新建目錄:D:mdy_bookmy_time。在該目錄中,新建一個名為my_time.v的文件,用GVIM打開后開始編寫代碼。
確定頂層信號。工程信號和硬件的對應關系如下表所示:

寫出頂層信號代碼:

聲明輸入輸出屬性:

5.1.2 信號設計
進行架構設計。根據(jù)設計目標,得出波形圖示意如下:

圖3.6-3 秒表的實現(xiàn)架構圖
設計計數(shù)器架構,表示時間的計數(shù)器cnt0的代碼如下:

表示顯示次數(shù)的計數(shù)器cnt1的代碼如下:

設計輸出信號seg_sel,其代碼如下:

設計輸出信號seg_ment,其代碼如下:


設計變量x,其代碼如下:


至此,主體程序已經完成,下面將module補充完整。
5.1.3 信號定義
首先定義信號類型,cnt0的信號定義如下:

add_cnt0和end_cnt0的信號定義如下:

cnt1、add_cnt1和end_cnt1的信號定義如下:

seg_sel的信號定義如下:

seg_ment的信號定義表示如下:

x的信號定義表示如下:

至此,整個代碼的設計工作已經完成。整體代碼如下:






5.2 綜合與上板
5.2.1 新建工程
接下來新建工程并上板查看現(xiàn)象。首先打開軟件Quartus Ⅱ,點擊“File”下拉列表中的New Project Wzard...新建工程選項。

圖3.6-8Quartus新建工程
直接點擊“Next”。

圖3.6- 9 Quartus新建工程介紹
此時出現(xiàn)的是工程文件夾、工程名、頂層模塊名設置界面,設置目錄為:D:/mdy_book/miaobiao,工程名和頂層名為miaobiao,完成設置后點擊“Next”。

圖3.6- 10 QUARTUS新建工程設置名稱
選擇“Empty project”后點擊“Next”。

圖3.6- 11 QUARTUS新建工程類型
點擊右側的“Add”按鈕,選擇“miaobian.v”文件,添加文件后點擊“Next”。

圖3.6- 12 QUARTUS添加文件
對芯片型號進行選擇:“Device family”選項中選擇“Cyclone ⅣE”,“Available devices”選項下選擇“EP4CE15F23C8”,隨后點擊“Next”。

圖3.6- 13 QUARTUS選擇芯片型號
直接點擊“Next”。

圖3.6- 14 QUARTUS設置工具界面
點擊“Finish”,完成新建工程。

圖3.6- 15 QUARTUS新建工程匯總界面
5.2.2 綜合
新建工程后界面如下圖所示,點擊“編譯”。

圖3.6- 16 QUARTUS新建工程后界面
編譯成功界面如下圖。

圖3.6- 17QUARTUS編譯后界面
5.2.3 配置管腳
在菜單欄點擊“Assignments”后點擊“Pin Planner”,此時會彈出配置管腳的窗口。

圖3.6- 18 QUARTUS配置管腳選項
在配置窗口“l(fā)ocation”根據(jù)信號和管腳關系配置管腳,配置完成關閉“Pin Planner”即可自動保存配置信息。

圖3.6- 18 QUARTUS配置管腳
5.2.4 再次綜合
打開“QUARTUS”軟件,在菜單欄中選擇“Processing”,點擊“Start Compilation”。

圖3.6- 19 QUARTUS編譯選項
出現(xiàn) QUARTUS 編譯成功標志則表示此次編譯成功。

圖3.6- 20 QUARTUS編譯成功標志
5.2.5 連接開發(fā)板
下載器接入電腦 USB 接口,開發(fā)板接上電源后按下藍色開關。

5.2.6 上板
打開 QUARTUS 界面,單擊“?

?”圖標。

圖3.6- 22 QUARTUS界面
點擊“add file”,添加.sof文件,隨后點擊“Start”。在“Progress”中會顯示進度,當進度條顯示“100%”表示成功,可在開發(fā)板上觀察現(xiàn)象。

圖3.6- 23 QUARTUS下載程序界面
第6節(jié) 擴展練習
至此,通過數(shù)碼管實現(xiàn)秒表功能的設計已經分享完畢,相信讀者朋友已經可以完全掌握這一工程。在掌握工程的基礎上可以多做一些思考,在工程原理不變的基礎上進行一定的數(shù)據(jù)調整,比如對計數(shù)時間進行改變或嘗試改變顯示數(shù)碼管個數(shù)等,挑戰(zhàn)獨立完成多個設計。也歡迎有更好思路和想法的同學前往至簡設計法論壇上進行討論。