數(shù)字邏輯電路設(shè)計(jì)實(shí)驗(yàn)教案趙蕙_第1頁
數(shù)字邏輯電路設(shè)計(jì)實(shí)驗(yàn)教案趙蕙_第2頁
數(shù)字邏輯電路設(shè)計(jì)實(shí)驗(yàn)教案趙蕙_第3頁
數(shù)字邏輯電路設(shè)計(jì)實(shí)驗(yàn)教案趙蕙_第4頁
數(shù)字邏輯電路設(shè)計(jì)實(shí)驗(yàn)教案趙蕙_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)一 半加器和全加器I實(shí)驗(yàn)平臺實(shí)驗(yàn)要求使用TTL小規(guī)模集成電路芯片74LS00搭建半加器電路和全加器電路,電路的輸入接實(shí)驗(yàn)平臺開關(guān),電路輸出接實(shí)驗(yàn)平臺的發(fā)光管。希望同學(xué)們能夠通過實(shí)驗(yàn)掌握使用基本門電路設(shè)計(jì)實(shí)現(xiàn)數(shù)字電路的方法。實(shí)驗(yàn)原理在數(shù)字電路中,門電路就是用來實(shí)現(xiàn)基本邏輯關(guān)系的電路,比如這個實(shí)驗(yàn)中的半加器和全加器。最基本的門電路是與門、或門和非門,由這些門可以組合成其它的邏輯電路。門電路最初由分立元件組成,集成電路出現(xiàn)后,我們現(xiàn)在使用的門電路都是集成門電路。半加器:完成兩個一位二進(jìn)制數(shù)的相加而求得“和”及“進(jìn)位”。全加器:當(dāng)多位二進(jìn)制數(shù)相加時,高位的相加運(yùn)算除了要將本位的加數(shù)和被加數(shù)相加以外

2、,還要考慮低位是否有向該位的進(jìn)位。全加器完成將兩個一位的二進(jìn)制數(shù)相加,并考慮低位來的進(jìn)位,相當(dāng)于三個一位二進(jìn)制數(shù)相加的電路。實(shí)驗(yàn)步驟1 設(shè)計(jì)根據(jù)半加器和全加器列出真值表,寫出輸出函數(shù),因?yàn)閷?shí)驗(yàn)要求使用“與非門”實(shí)現(xiàn),將輸出函數(shù)轉(zhuǎn)換為“與非門”形式,畫出使用與非門實(shí)現(xiàn)半加器和全加器的電路圖。&&&&1ABSHCH&&&&&AiBiSHiCi&&&&Ci-1Si半加器與非門電路 全加器與非門電路2 連線請?zhí)貏e注意VCC和GND的連接,不要接錯,以免芯片燒毀!所用芯片的Vcc連起來接+5V;所用芯

3、片的GND連起來接地(GND)。電路的輸入接實(shí)驗(yàn)平臺開關(guān),電路的輸出接實(shí)驗(yàn)平臺的發(fā)光管。實(shí)驗(yàn)提供的74LS00芯片邏輯與引腳圖如下。每塊芯片中有四組 2 輸入端與非門(正邏輯),根據(jù)步驟1設(shè)計(jì)的電路圖,搭建半加器電路需要5個與非門( 可使用2塊74LS00芯片),搭建全加器電路需要9個與非門(可使用3塊74LS00芯片)。雙列直插封裝74LS00芯片邏輯圖和引腳圖3 驗(yàn)證開關(guān)向上撥為“1”,向下?lián)転椤?”;發(fā)光管為“1”時點(diǎn)亮, 為“0”時熄滅。根據(jù)真值表,檢驗(yàn)?zāi)闼罱ǖ陌爰悠骱腿悠麟娐罚欠駶M足設(shè)計(jì)要求。教你一招:實(shí)驗(yàn)平臺上可能有個別開關(guān)、發(fā)光管故障,可以將導(dǎo)線一端接開關(guān),一端接發(fā)光管,如

4、果開關(guān)向上撥時,發(fā)光管點(diǎn)亮;開關(guān)向下?lián)軙r,發(fā)光管熄滅, 說明開關(guān)、發(fā)光管、導(dǎo)線都是好的。完成連線后的電路可能有誤,在沒有萬用表的情況下,此法也可幫你檢查電路故障。實(shí)驗(yàn)報(bào)告要求1 填妥姓名、班級外,必須填寫完成報(bào)告的日期(年月日),以后的實(shí)驗(yàn)報(bào)告要求里不再冗述。2 寫出使用TTL小規(guī)模集成電路芯片74LS00完成半加器的設(shè)計(jì)和實(shí)現(xiàn)的完整過程(根據(jù)功能要求列真值表->寫輸出函數(shù)->將輸出函數(shù)變換成“與非門”形式->畫出電路圖->根據(jù)芯片引腳連線->驗(yàn)證結(jié)果)3 結(jié)合實(shí)驗(yàn)中接觸和使用的小規(guī)模集成電路,請說說什么是集成電路?常用的中小規(guī)模集成電路產(chǎn)品有哪些? 4 實(shí)驗(yàn)過程

5、中你遇到了哪些問題?實(shí)驗(yàn)剛開始時,你覺得計(jì)算機(jī)硬件課程的實(shí)驗(yàn)最難理解的地方在哪里?5 實(shí)驗(yàn)一和實(shí)驗(yàn)二使用兩種不同的方式(小規(guī)模集成電路,可編程器件)實(shí)現(xiàn)全加器電路,就兩種方式談?wù)勀銓?shí)驗(yàn)的體會。實(shí)驗(yàn)二 FPGA設(shè)計(jì)流程 全加器II實(shí)驗(yàn)平臺EDA/SOPC實(shí)驗(yàn)開發(fā)平臺,實(shí)驗(yàn)二以后的所有實(shí)驗(yàn)都使用此開發(fā)平臺。實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)平臺提供的Altera公司可編程器件FPGA(現(xiàn)場可編程門陣列),使用Altera公司的EDA設(shè)計(jì)開發(fā)工具QuartusII,用原理圖方式設(shè)計(jì)實(shí)現(xiàn)全加器電路,電路的輸入接實(shí)驗(yàn)平臺開關(guān),電路輸出接實(shí)驗(yàn)平臺的發(fā)光管。希望同學(xué)們能夠通過實(shí)驗(yàn)掌握使用可編程器件設(shè)計(jì)實(shí)現(xiàn)數(shù)字電路的方法。實(shí)驗(yàn)

6、原理使用可編程器件進(jìn)行數(shù)字電路設(shè)計(jì),將傳統(tǒng)的“設(shè)計(jì)à硬件搭試à焊接”過程變?yōu)椤霸O(shè)計(jì)à編譯à下載”的過程,其主要工作都在計(jì)算機(jī)內(nèi)完成,先將設(shè)計(jì)輸入計(jì)算機(jī),再由開發(fā)系統(tǒng)將其轉(zhuǎn)換成編程文件下載到可編程器件中。全加器電路圖的設(shè)計(jì)同實(shí)驗(yàn)一。實(shí)驗(yàn)步驟1 新建工程實(shí)驗(yàn)室機(jī)器安裝的設(shè)計(jì)環(huán)境為:Quartus II Version 9.0。雙擊桌面圖標(biāo),運(yùn)行Quartus II軟件。用New Project Wizard工具選項(xiàng)創(chuàng)建此設(shè)計(jì)的工程,并設(shè)計(jì)相關(guān)信息。點(diǎn)擊菜單項(xiàng)File-> new project wizard,出現(xiàn)introduction對話框,如圖 1

7、。圖 1單擊next,進(jìn)入Directory,name,Top-Level Entity設(shè)置對話框,選擇工程存放路徑(請?jiān)贓盤或F盤新建一個工程相文件夾,實(shí)驗(yàn)室的C盤、D盤及桌面被保護(hù))、工程名稱和頂層模塊名稱(本例工程名和頂層模塊名均設(shè)為fadder。)注意:所有的名稱和路徑均不能包含空格和漢字。如圖 2。圖 2跳過圖 3所示Add Files對話框,該對話框設(shè)置用來將已存在的設(shè)計(jì)文件加入到工程中。圖 3點(diǎn)擊next,進(jìn)入Family & devices settings對話框,指定FPGA器件為Cyclone系列的EP1C12F324C8,如圖 4。Cyclone 系 列

8、FPGA是Altera公司最初(2002年)的低成本FPGA。2004年和2006年,Altera公司又推出了更新的,密度更高的Cyclone II和Cyclone III系列 FPGA,進(jìn)一步鞏固它在大批量、低成本應(yīng)用解決方案中的地位。圖 4圖 5圖 5對話框用來設(shè)置第三方EDA工具,包括綜合工具,仿真工具和時序分析工具,這里我們點(diǎn)擊Next跳過。圖 6信息顯示區(qū)編譯狀態(tài)區(qū)資源管理區(qū)工程工作區(qū)標(biāo)題欄菜單欄工具欄圖 7最后,新建工程向?qū)鶕?jù)你之前一步一步的設(shè)置,給出一個工程設(shè)置概述頁如圖 6,單擊finish完成工程創(chuàng)建。完成后,QuartusII界面如圖 7所示。所有在新建工程向

9、導(dǎo)中進(jìn)行的設(shè)置,在工程建立完成后,都可以通過QuartusII菜單項(xiàng)進(jìn)行修改。2 設(shè)計(jì)輸入點(diǎn)擊菜單項(xiàng)File-> new,出現(xiàn)新建源文件對話框如圖 8,數(shù)字電路的設(shè)計(jì)文件總的來說有兩種方式,原理圖方式和硬件描述語言方式,這次實(shí)驗(yàn)我們使用原理圖方式設(shè)計(jì)電路,所以選擇新建一個“Block Diagram/Schematic File”文件,圖 8,點(diǎn)擊“OK”按鈕,打開原理圖編輯器。圖 8原理圖編輯器的工具欄如圖 10所示,工具欄上的按鈕作用依次分別是“分離窗口切換”、“選擇”,“添加文字”、“符號工具”、“塊工具”、“正交結(jié)點(diǎn)工具”、“正交總線工具”、“正交管道工具”、“橡皮筋工具”、“部

10、分線選擇工具”、“放大縮小工具”、“全屏”、“查找工具”、“水平翻轉(zhuǎn)”、“垂直翻轉(zhuǎn)”、“逆時針90度翻轉(zhuǎn)”、“矩形工具”、“橢圓工具”、“直線工具”、“弧線工具”。圖 9QuartusII提供了許多基本庫元件給用戶使用,根據(jù)實(shí)驗(yàn)一全加器的設(shè)計(jì),共需要9個“2輸入與非門電路”模塊。在原理圖編輯區(qū)的空白處雙擊鼠標(biāo),或點(diǎn)擊符號工具打開Symbol對話框如圖 9。在Symbol對話框中,設(shè)計(jì)全加器電路需要的“與非門”可以通過選擇 “Primitives->logic”基本原件庫中的“nand2”模塊,點(diǎn)擊“OK”,將該模塊加入原理圖中。 重復(fù)該過程,或在原理圖編輯區(qū)選中已經(jīng)添加好的nand2模塊

11、,使用Ctrl+C和Ctrl+V繼續(xù)添加。全加器電路的輸出端口和輸入端口,在Symbol對話框中,使用 “Primitives->pin”庫中的“input”模塊和“output”模塊,添加到原理圖中。添加完成后,可以在原理圖中雙擊各個輸入輸出模塊,為它們改名,盡量讓端口名稱具有可讀性,本例可改為Ai、Bi、Ci-1、SHi、Si、Ci如圖 11。與非門、輸入端口、輸出端口之間的連接使用“正交結(jié)點(diǎn)工具”完成。完成后的原理圖如圖 11。圖 10圖 11設(shè)計(jì)輸入完成后,保存文件,將模塊名命名為頂層模塊名,即新建工程時指定的頂層模塊名,本例為:fadder.bdf。新建的文件默認(rèn)情況下會自動加

12、入到工程中。3 邏輯綜合為工程添加好設(shè)計(jì)文件以后,下一步就是對工程設(shè)計(jì)進(jìn)行綜合,本例使用QuartusII軟件內(nèi)嵌的分析綜合工具Analysis & Synthesis進(jìn)行。點(diǎn)擊工具欄中按鈕,對設(shè)計(jì)進(jìn)行綜合。Analysis & Synthesis將檢查工程的邏輯完整性和一致性。設(shè)計(jì)如果綜合通過,編譯狀態(tài)顯示區(qū)中Analysis & Synthesis步驟前面會顯示綠色的勾,如果設(shè)計(jì)有錯誤,會顯示紅色的叉,如圖 12,出錯行號及錯誤原因會顯示在信息顯示區(qū)中,如圖 13。圖 12圖 13根據(jù)錯誤原因提示修改設(shè)計(jì),完成修改后,重新綜合,直到綜合通過,資源管理區(qū)中可以點(diǎn)擊頂層

13、模塊名稱前的號,顯示模塊間的樹形結(jié)構(gòu),編譯狀態(tài)顯示區(qū)的Analysis & Synthesis步驟前顯示綠色的勾,如圖 14。圖 14初學(xué)者往往不習(xí)慣閱讀錯誤信息。實(shí)際上學(xué)會讀懂錯誤信息是很有用的!4 功能仿真在綜合通過以后,只能夠說明設(shè)計(jì)符合語法規(guī)范,但并不能保證設(shè)計(jì)滿足功能要求,需要通過功能仿真,來驗(yàn)證電路功能是否符合設(shè)計(jì)要求,功能仿真的考察是的電路在理想環(huán)境下的行為,不考慮電路門延遲與線延遲。這里使用QuartusII自帶的波形圖仿真工具進(jìn)行。1) 新建仿真波形圖文件要使用QuartusII自帶的波形圖仿真工具進(jìn)行仿真,首先要新建一個波形圖文件。在File菜單中選擇New,出現(xiàn)如

14、圖 8中所示對話框,在Verification/Debugging Files頁中選擇Vector Waveform File,點(diǎn)擊OK按鈕,出現(xiàn)一個空的波形圖文件,如圖 15。圖 152) 添加觀察信號結(jié)點(diǎn)用菜單Edit->Insert->Insert Node or Bus,打開如圖 16所示對話框??梢灾苯釉贜ame文本框中直接輸入信號名稱,也可以通過點(diǎn)擊按鈕Node Finder,打開結(jié)點(diǎn)查詢對話框來如圖 17,來添加需要觀察的信號。圖 16本例在Node Finder對話框的Filter選項(xiàng)下拉菜單中選擇Pins:all,然后點(diǎn)擊List按鈕,在Nodes Found列表

15、中,選中Ai、Bi、Ci-1、SHi、Si、Ci信號,雙擊或使用按鈕,將它們添加到觀察信號中。最后點(diǎn)擊“OK”按鈕,完成觀察信號的添加。圖 173) 編輯輸入波形在Name欄中選中輸入信號的名稱,這組輸入信號所在的行將被高亮,如圖 18。通過菜單Edit->Value,或者直接使用工具欄按鈕對輸入信號的波形進(jìn)行設(shè)定。圖 18如圖 19工具欄上的按鈕作用分別是“分離窗口切換”、“選擇”,“添加文字”、“編輯波形”、“放大縮小”、“全屏幕切換”、“查找”、“替換”、“設(shè)置為Unknown”、“置0”、“置1”、“設(shè)置為高阻”、“設(shè)置為Weak Unknown”、“設(shè)置為Weak Low”、“

16、設(shè)置為Weak High”、“設(shè)置為Dont Care”、“設(shè)置為取反”、“設(shè)置計(jì)數(shù)值”、“設(shè)置時鐘”、“設(shè)置為任意值”、“設(shè)置隨機(jī)值”、“貼齊網(wǎng)格線”、“排序”。圖 19信號添加完成并且編輯好波形后,保存文件,本例為fadder.vwf。4) 在QuartusII中指定仿真文件用菜單Assignment->Setting在Simulator Settings中,設(shè)置Simulation mode為“Functional”,設(shè)置fadder.vwf為仿真輸入文件,仿真結(jié)束的條件可以根據(jù)需要在Simulation Period項(xiàng)中選擇,如圖 20選擇仿真運(yùn)行80ns結(jié)束。點(diǎn)擊“OK”按鈕完

17、成設(shè)置 。圖 205) 生成功能仿真網(wǎng)表用菜單Processing>Generate Functional Simulation Netlist。如果缺少這一步,在仿真運(yùn)行時,QuartusII產(chǎn)生出錯提示:“Error: Run Generate Functional Simulation Netlist (quartus_map seven_seg -generate_functional_sim_netlist) to generate functional simulation netlist for top level entity "seven_seg"

18、before running the Simulator (quartus_sim)”,無法完成仿真。6) 運(yùn)行仿真通過工具欄按鈕啟動仿真。 7) 觀察分析仿真結(jié)果仿真完成后,根據(jù)生成的仿真波形圖,對比全加器真值表,分析結(jié)果是否正確。本例結(jié)果如圖 21。圖 215 布局布線1) 約束引腳FPGA電路板與實(shí)驗(yàn)平臺上各個資源模塊(如本實(shí)驗(yàn)的LED Switches & Buttons模塊)之間的連接是固定的,應(yīng)該根據(jù)它們之間的連接關(guān)系對FPGA的引腳進(jìn)行引腳約束。約束引腳是將頂層設(shè)計(jì)文件的輸入輸出端口指定到FPGA器件的實(shí)際引腳。引腳對應(yīng)關(guān)系見附表。使用菜單項(xiàng)Assignment->

19、Pins進(jìn)入引腳分配編輯窗口,完成后的分配圖 22。圖 22不要忘記引腳約束! 在以后的設(shè)計(jì)中,如果忘記了導(dǎo)入引腳約束文件,編譯也不會報(bào)錯,此時由軟件自動分配未約束的引腳,但是和實(shí)際連接關(guān)系就不一致了。后果是不能通過在實(shí)驗(yàn)儀上的驗(yàn)證。2) 布局布線、生成編程文件引腳約束完成后,在QuartusII界面的工具欄中,點(diǎn)擊按鈕,對設(shè)計(jì)進(jìn)行全編譯。此外,也可以使用菜單項(xiàng)Processing->Compiler Tool打開編譯工具對話框,如圖 23,點(diǎn)擊Fitter區(qū)域中的按鈕和Assembler區(qū)域中的按鈕來執(zhí)行布局布線和生成編程文件,也可以直接點(diǎn)擊Start按鈕來完成全編譯過程。圖 23如果

20、設(shè)計(jì)文件或引腳約束有改動,一定要重新進(jìn)行全編譯。6 時序仿真(附加題,有興趣的同學(xué)選擇完成)功能仿真不考慮傳輸延遲,主要目的是檢查邏輯功能有沒有錯誤,是否符合設(shè)計(jì)要求。時序仿真包含了延時信息,它能較好地反映芯片的工作情況。用菜單Assignment->Setting在Simulator Settings中,更改設(shè)置Simulation mode為“Timming”,設(shè)置完成后重新運(yùn)行仿真,觀察結(jié)果,本例如圖 24。圖 24與功能仿真時得到的波形圖不同,在時序仿真得到的波形圖沒有那么完美,因?yàn)樾盘柦?jīng)過任何門電路和導(dǎo)線都存在一個時間延遲問題,,使得電路的輸入到達(dá)穩(wěn)定狀態(tài)時,輸出并不一定能立即

21、達(dá)到穩(wěn)定狀態(tài)。觀察電路延遲的情況。7 配置器件(或稱編程、下載)對可編程器件FPGA進(jìn)行配置(編程),俗稱下載,下載前打開實(shí)驗(yàn)平臺電源。點(diǎn)擊工具欄按鈕,或使用菜單項(xiàng)Tool->Programmer進(jìn)入器件編程話框,如圖 25。單擊按鈕,可以選擇編程電纜硬件設(shè)置,如圖 26,因?yàn)閷?shí)驗(yàn)設(shè)備使用的是USB-Blaster下載電纜,所以本例中使用USB-Blaster作為硬件接口。設(shè)置完編程硬件后,在編程界面,在Mode中選擇編程模式,本例使用JTAG模式。勾選Program/Configure選項(xiàng)框,單擊按鈕開始器件編程。在Process進(jìn)度條中會顯示編程進(jìn)度。完成后,在QuartusII的信

22、息顯示區(qū)中,會報(bào)告成功或出錯信息;注意:信息顯示在QuartusII的信息顯示區(qū)中,不在編程窗口中。編程界面左側(cè)的其它按鈕分別表示停止編程;自動檢測編程硬件是否連接;刪除編程文件;更改選中的編程文件;保存文件;添加用戶自定義的器件;更改編程文件的順序。圖 25圖 268 測試驗(yàn)證器件被成功配置后,就可以進(jìn)行驗(yàn)證了。撥動連接全加器輸入端口Ai,Bi,Ci的開關(guān),觀察連接全加器輸出端口Si,Ci的發(fā)光管顯示是否正確。實(shí)驗(yàn)三 七人表決器實(shí)驗(yàn)要求使用EDA設(shè)計(jì)開發(fā)工具QuartusII,以原理圖方式設(shè)計(jì)實(shí)現(xiàn)七人表決器電路,當(dāng)表決器的七個輸入中有4個以上(含4個)為“1”時,u表決器輸出為“1”,否則為

23、“0”。用七個開關(guān)作為表決器的七個輸入,輸入為邏輯“1”時表示表決者“贊成”,輸入為“0”代表“不贊成”。用二個發(fā)光管作為表決器的輸出,發(fā)光管點(diǎn)亮( 邏輯1)表示表決“通過”,發(fā)光管熄滅表示表決“不通過”。實(shí)驗(yàn)原理七人表決器的方案很多,這里給出一個使用多個一位全加器實(shí)現(xiàn)的電路參考,見“設(shè)計(jì)輸入”,其中的一位全加器我們利用實(shí)驗(yàn)二的設(shè)計(jì)。實(shí)驗(yàn)步驟1 實(shí)驗(yàn)準(zhǔn)備打開QuartusII環(huán)境,使用File->Open Project打開上一次的全加器實(shí)驗(yàn)工程,雙擊頂層模塊打fadder開原理圖文件,然后使用File->Create/_Update->Create Symbol Files

24、 For Current File,將頂 層原理圖方式設(shè)計(jì)的全加器模塊轉(zhuǎn)換為符號文件fadder.bsf。在E盤或F盤新建一個文件夾(所有的名稱和路徑均不能包含空格和漢字),將實(shí)驗(yàn)二全加器工程中的全加器原理圖文件fadder.bdf,以及剛才生成的全加器符號文件fadder.bsf,一起拷入新建的文件夾中。2 新建工程參考實(shí)驗(yàn)二指導(dǎo),在上一步新建的文件夾內(nèi)創(chuàng)建QuartusII工程,工程名和頂層模塊名均設(shè)為seven。3 設(shè)計(jì)輸入點(diǎn)擊菜單項(xiàng)File-> new,新建原理圖Block Diagram/Schematic文件,在空白編輯區(qū)內(nèi)雙擊鼠標(biāo)左鍵,或使用符號工具,打開symbol對話框

25、。在Libraries中,除了QuartusIIa提供的庫元件外,由于在“實(shí)驗(yàn)準(zhǔn)備”步驟中,往工程文件夾內(nèi)中拷入了fadder.bsf符號文件, 所以在Project樹下,可以看見當(dāng)前工程路徑下自己定義的元件fadder.bsf。點(diǎn)擊“OK”按鈕,將fadder模塊加入原理圖中。 重復(fù)該過程,共添加4個一位全加器模塊。在Symbol對話框中,使用 “Primitives->pin”庫中的“input”模塊和“output”模塊,為設(shè)計(jì)添加輸入端口和輸出端口。使用“Primitives->logic”庫中的“not”模塊,,輸出端口pass取反后送給 輸出端口deny。模塊之間的連接

26、使用“正交結(jié)點(diǎn)工具”完成。完成后的原理圖如下,保存文件(本例為seven.bdf)。4 邏輯綜合參考實(shí)驗(yàn)二指導(dǎo)。5 布局布線使用菜單項(xiàng)Assignment->Pins進(jìn)行引腳分配,完成后引腳分配如下圖。引腳約束完成后,在QuartusII界面的工具欄中,點(diǎn)擊按鈕,對設(shè)計(jì)進(jìn)行全編譯。6 編程參考實(shí)驗(yàn)二指導(dǎo)。7 驗(yàn)證撥動開關(guān),觀察發(fā)光管,驗(yàn)證在所有輸入條件下的輸出結(jié)果是否正確。實(shí)驗(yàn)報(bào)告要求1 完善設(shè)計(jì):在表決通過時,用實(shí)驗(yàn)平臺上的揚(yáng)聲器報(bào)鳴提示;在原基礎(chǔ)上使用數(shù)碼管顯示贊成票數(shù),寫出設(shè)計(jì)方法。(提示:票數(shù)就是幾個一位全加器計(jì)算出來的最后的結(jié)果;想在數(shù)碼管上顯示,需要設(shè)計(jì)譯碼器電路。)2 使用

27、VHDL 語言設(shè)計(jì)七人表決器電路。附:數(shù)碼管段碼表發(fā)光二極管組成的顯示器是嵌入式應(yīng)用產(chǎn)品中最常用的廉價輸出設(shè)備。它由若干個發(fā)光二極管按一定的規(guī)律排列而成。當(dāng)某一個發(fā)光二極管導(dǎo)通時,相應(yīng)的一個或一筆畫被點(diǎn)亮,控制不同組合的二極管導(dǎo)通,就能顯示數(shù)字和少量字符。常用的七段顯示器如下圖。一位顯示器由八個發(fā)光二極管組成,其中七個發(fā)光二極管ag控制七個筆畫(段)的亮或暗,另一個控制一個小數(shù)點(diǎn)的亮和暗。實(shí)驗(yàn)平臺上的七段數(shù)碼管是共陰極的(發(fā)光二極管陽極連在一起稱為共陽極顯示器,陰極連在一起稱為共陰極顯示器),也就是輸出為高電平的時候,二極管會導(dǎo)通。例如顯示一個“0”,就是abcdef導(dǎo)通,gh截止。根據(jù)表可知

28、,段碼為3FH。實(shí)驗(yàn)平臺上有八個數(shù)碼管,它們的abcdefgh都連接在一起,由用戶控制,8個數(shù)碼管的位選信號由一片74LS138譯碼器提供, 譯碼器的輸入端(SEL0,SEL1,SEL2)由用戶控制,例如SEL0,SEL1,SEL2若為為000, 就選中最右邊的數(shù)碼管,而其余數(shù)碼管關(guān)閉。表 七段數(shù)碼管段碼表顯示16進(jìn)制hgfedcba03F001111111060000011025B0101101134F010011114660110011056D0110110167D011111017070000011187F0111111196F01101111A7701110111B7C01111100

29、C3900111001D5E01011110E7901111001F7101110001數(shù)碼管譯碼顯示設(shè)計(jì)參考實(shí)驗(yàn)平臺上的數(shù)碼管顯示模塊的電路原理,以及數(shù)碼管的輸入與與FPGA的管腳連接關(guān)系如下面的圖、表所示:信號名稱對應(yīng)FPGA管腳名說明7SEG-AH3七段碼管A段輸入信號7SEG-BH4七段碼管B段輸入信號7SEG-CK5七段碼管C段輸入信號7SEG-DL5七段碼管D段輸入信號7SEG-EK4七段碼管E段輸入信號7SEG-FL3七段碼管F段輸入信號7SEG-GL4七段碼管G段輸入信號7SEG-DPM3七段碼管dp段輸入信號7SEG-SEL0G4七段碼管位選輸入信號7SEG-SEL1G3七段

30、碼管位選輸入信號7SEG-SEL2F4七段碼管位選輸入信號如果只需要在數(shù)碼管上顯示16進(jìn)制數(shù)據(jù)0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F,可以參考下面的代碼設(shè)計(jì)一個4-7譯碼器。同學(xué)們知道1個16進(jìn)制數(shù)據(jù)可以由四個二進(jìn)制位表示,設(shè)計(jì)用四位的向量輸入端口switch來表示四個二進(jìn)制位;用7位的向量輸出端口ledaq來表示數(shù)碼管的七段(dp小數(shù)點(diǎn)段未考慮),根據(jù)七段數(shù)碼管段碼表,進(jìn)行譯碼器描述。向量輸出端口sel用來選擇點(diǎn)亮8個數(shù)碼管中的哪一個,本例中sel2:0設(shè)置為為“000”, 點(diǎn)亮最右邊的數(shù)碼管,而其余數(shù)碼管關(guān)閉,同學(xué)們也可根據(jù)自己的需要選擇點(diǎn)亮其它數(shù)碼管。librar

31、y ieee;use ieee.std_logic_1164.all;entity Decode4_7 is port( switch: in std_logic_vector(3 downto 0) ; -四位輸入信號 ledag: out std_logic_vector(6 downto 0);-8個數(shù)碼管的7段輸出 sel: out std_logic_vector(2 downto 0) - 8個數(shù)碼管的位選輸出 ); end Decode4_7;architecture behave of Decode4_7 is begin sel<=”000”; process(swit

32、ch) begin case switch is when "0000" => ledag <="0111111" when "0001" => ledag <="0000110" when "0010" => ledag <="1011011" when "0011" => ledag <="1001111" when "0100" => ledag <=

33、"1100110" when "0101" => ledag <="1101101" when "0110" => ledag <="1111101" when "0111" => ledag <="0000111" when "1000" => ledag <="1111111" when "1001" => ledag <="

34、;1101111" when "1010" => ledag <="1110111" when "1011" => ledag <="1111100" when "1100" => ledag <="0111001" when "1101" => ledag <="1011110" when "1110" => ledag <="1111

35、001" when "1111" => ledag <="1110001" when others => null; end case; end process; end behave;思考:1. 如果要求除了0F之外,還要能夠顯示H,如何修改設(shè)計(jì)?2. 如果希望8個數(shù)碼管同時點(diǎn)亮,你覺得可以怎么做? 實(shí)驗(yàn)四 四位全加器實(shí)驗(yàn)要求使用EDA設(shè)計(jì)開發(fā)工具QuartusII,以VHD語言方式設(shè)計(jì)實(shí)現(xiàn)組合邏輯電路四位全加器。實(shí)驗(yàn)原理四位全加器可由一位全加器以串行方式連接而成,更為高效的方式是直接用VHDL語言實(shí)現(xiàn)。實(shí)驗(yàn)步驟1 新建工程

36、參考實(shí)驗(yàn)二指導(dǎo),,工程名和頂層模塊名均設(shè)為fadder_4。2 設(shè)計(jì)輸入點(diǎn)擊菜單項(xiàng)File-> new,這次實(shí)驗(yàn)我們使用VHDL描述語言方式設(shè)計(jì)電路,所以選擇新建一個“VHDL File”文件,點(diǎn)擊“OK”按鈕,打開代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實(shí)體名相同(本例為:fadder_4.vhd)。library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity fadder_4 isgeneric(DATA_WIDTH : natural := 4);port (a : i

37、n unsigned (DATA_WIDTH-1) downto 0);b : in unsigned(DATA_WIDTH-1) downto 0);result : out unsigned (DATA_WIDTH downto 0) );end entity;architecture behave of fadder_4 isbeginresult <= ('0' & a) + ('0' & b);end behave;3 邏輯綜合參考實(shí)驗(yàn)二指導(dǎo)。4 布局布線用四個開關(guān)(K1、K2、K3、K4)作為四位全加器的a輸入,用四個開關(guān)(K5

38、、K6、K7、K8)作為四位全加器的b輸入,用五個發(fā)光管(D1、D2、D3、D4、D5)作為四位全加器的輸出result。使用菜單項(xiàng)Assignment->Pins進(jìn)行引腳分配,完成后引腳分配如下圖。引腳約束完成后,在QuartusII界面的工具欄中,點(diǎn)擊按鈕,對設(shè)計(jì)進(jìn)行全編譯。5 編程6 驗(yàn)證根據(jù)四位全加器真值表,撥動開關(guān),觀察發(fā)光管,驗(yàn)證在所有輸入條件下的輸出結(jié)果是否正確。附:VHDL知識點(diǎn)1 庫的引用庫一般是一些常用的VHDL代碼的 集合,包括:數(shù)據(jù)類型的定義、函數(shù)的定義、子程序的定義、元件引用聲明、常量的定義等一些可復(fù)用或是共享的VHDL代碼。程序引用了庫就可以使用該庫中的VHD

39、L代碼。library庫名 ;use庫名 . 庫中程序包 . 程序包中的項(xiàng) ;2 實(shí)體的聲明實(shí)體的聲明用于實(shí)體與其它實(shí)體或是外部接口相關(guān)聯(lián)的說明。實(shí)體名應(yīng)該與文件名一致。entity 實(shí)體名 isgeneric(參數(shù)名:數(shù)據(jù)類型 := 值) ;port(端口名 : 端口模式 數(shù)據(jù)類型) ;end 實(shí)體名 ;3 結(jié)構(gòu)體的描述VHDL程序的所有邏輯功能都在結(jié)構(gòu)體中實(shí)現(xiàn)。architecture 結(jié)構(gòu)體名 of 實(shí)體名 is結(jié)構(gòu)體說明語句;begin 結(jié)構(gòu)體描述語句;end 結(jié)構(gòu)體名;實(shí)驗(yàn)報(bào)告要求1 畫出使用一位全加器以串行方式連接成四位全加器的原理圖。2 在四位全加器電路的基礎(chǔ)上,修改設(shè)計(jì),使用V

40、HDL 語言,設(shè)計(jì)BCD碼加法器,說明設(shè)計(jì)方案并寫出設(shè)計(jì)代碼。實(shí)驗(yàn)五 序列檢測器實(shí)驗(yàn)要求使用EDA設(shè)計(jì)開發(fā)工具QuartusII,以狀態(tài)圖方式設(shè)計(jì)實(shí)現(xiàn)時序邏輯電路“111”序列檢測器。實(shí)驗(yàn)原理有限狀態(tài)機(jī)(Finite State Machine)是一種時序邏輯,它源于人們將一個復(fù)雜的問題分割成多個簡單的部分來處理的思想。狀態(tài)機(jī)通過時鐘驅(qū)動下的多個狀態(tài),以及狀態(tài)之間的跳轉(zhuǎn)規(guī)則來實(shí)現(xiàn)復(fù)雜的邏輯,一旦當(dāng)前的狀態(tài)確定,也就明確的相關(guān)的輸入輸出。實(shí)驗(yàn)步驟1 新建工程參考實(shí)驗(yàn)二指導(dǎo),工程名和頂層模塊名均設(shè)為sequencer。2 設(shè)計(jì)輸入點(diǎn)擊菜單項(xiàng)File-> new,這次實(shí)驗(yàn)我們使用狀態(tài)圖方式設(shè)計(jì)

41、電路,所以選擇新建一個“State Machine File”文件,點(diǎn)擊“OK”按鈕,打開狀態(tài)圖編輯器,使用工具欄完成狀態(tài)l圖的編輯。下圖工具欄上的按鈕作用分別是“分離窗口切換”、“全屏幕切換”、“選擇”、“放大縮小”、 “查找”、“狀態(tài)工具”、“條件轉(zhuǎn)換工具”、“狀態(tài)表工具”、“狀態(tài)機(jī)生成向?qū)А?、“插入輸入端口”、“插入輸出端口”、“條件轉(zhuǎn)換等式顯示”、“生成HDL文件工具”、“橡皮筋工具”。完成后的序列檢測狀態(tài)圖如下,保存文件,本例為sequencer.smf。狀態(tài)圖完成后,使用“生成HDL文件工具”將狀態(tài)圖轉(zhuǎn)換成HDL代碼,在彈出的對話框中可以選擇生成Verilog HDL、VHDL或S

42、ystem Verilog,本例選擇生成VHDL代碼,一個sequencer.vhd文件會自動生成并保存在你的工程文件夾里。3 邏輯綜合參考實(shí)驗(yàn)二指導(dǎo)。4 功能仿真參考實(shí)驗(yàn)二指導(dǎo),創(chuàng)建仿真波形文件,根據(jù)生成的仿真波形圖,分析結(jié)果是否正確。5 布局布線用一個開關(guān)K1(引腳號:A12)作為序列檢測器的switch輸入, 用一個發(fā)光管D1(引腳號:A0)作為序列檢測器的輸出lamp,時鐘信號可以使用開發(fā)平臺的可調(diào)數(shù)字時鐘模塊CLK(引腳號:J4),但是因?yàn)閷?shí)驗(yàn)平臺上沒有單拍時鐘,所以本例把時鐘信號到開關(guān)K2(引腳號:B12),通過撥動開關(guān)K2從0->1->0的變化,來模擬時鐘。詳細(xì)引腳對

43、應(yīng)關(guān)系見附錄。使用菜單項(xiàng)Assignment->Pins進(jìn)行引腳分配,完成后點(diǎn)擊按鈕,對設(shè)計(jì)進(jìn)行全編譯。6 編程參考實(shí)驗(yàn)二指導(dǎo)。7 驗(yàn)證實(shí)驗(yàn)報(bào)告要求1 有限狀態(tài)機(jī)分為Moore狀態(tài)機(jī)和Mealy狀態(tài)機(jī),簡述兩者的特點(diǎn),分析本例的序列檢測器狀態(tài)機(jī)應(yīng)該屬于哪一種?2 設(shè)計(jì)一個1010序列檢測器,畫出狀態(tài)圖。實(shí)驗(yàn)六 計(jì)數(shù)器和分頻器實(shí)驗(yàn)要求層次化設(shè)計(jì)方法,使用VHDL方式設(shè)計(jì)實(shí)現(xiàn)10進(jìn)制加法計(jì)數(shù)器。要求計(jì)數(shù)器以1秒鐘的頻率計(jì)數(shù),具有同步計(jì)數(shù),異步清零,同步預(yù)置數(shù)功能,要求計(jì)數(shù)值同時在八個數(shù)碼管上顯示。主時鐘選擇1KHz的頻率,同時作為數(shù)碼管動態(tài)掃描時鐘,1KHz主時鐘分頻后作為10進(jìn)制加法器的計(jì)

44、數(shù)時鐘。實(shí)驗(yàn)原理計(jì)數(shù)器是最常見的時序邏輯電路,從微處理器的位置發(fā)生器到頻率計(jì)都需要用到計(jì)數(shù)器。分頻器與計(jì)數(shù)器非常類似,時序電路設(shè)計(jì)中需要各種各樣的分頻器來獲得不同頻率的時鐘,其中以整數(shù)分頻器最為常見,整數(shù)分頻可以簡單地使用模n計(jì)數(shù)器實(shí)現(xiàn),即隨驅(qū)動時鐘跳動n次后就輸出一個進(jìn)位脈沖,然后立即被清零或置位,再開始新一輪循環(huán)的計(jì)數(shù)器。實(shí)驗(yàn)步驟1 新建工程參考實(shí)驗(yàn)二指導(dǎo),工程名和頂層模塊名均設(shè)為counter_TOP。2 設(shè)計(jì)輸入1) 計(jì)數(shù)器點(diǎn)擊菜單項(xiàng)File-> new,新建一個“VHDL File”文件,點(diǎn)擊“OK”按鈕,打開代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名

45、與實(shí)體名相同(本例為:counter.vhd)。計(jì)數(shù)器模塊采用參數(shù)化設(shè)計(jì),從MIN_COUNT開始加1計(jì)數(shù),計(jì)到MAX_COUNT后,重新回到MIN_COUNT開始計(jì)數(shù)。使用參數(shù)化設(shè)計(jì)的最大特點(diǎn)在于它可以被方便地修改,所以常用來建模一些需要調(diào)整的數(shù)據(jù),以便在實(shí)例化模塊時根據(jù)需要進(jìn)行配置。library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity counter isgeneric(MIN_COUNT : natural := 0;MAX_COUNT : natural := 9);port(clk : in

46、std_logic;reset : in std_logic;load : in std_logic;enable : in std_logic;d : in integer range MIN_COUNT to MAX_COUNT;q : out integer range MIN_COUNT to MAX_COUNT);end entity;architecture behave of counter isbeginprocess (clk,reset)variable cnt : integer range MIN_COUNT to MAX_COUNT;beginif reset = &

47、#39;1' thencnt := 0; elsif (rising_edge(clk) then if load ='1' then cnt:= d;elsif cnt=MAX_COUNT then cnt:= MIN_COUNT;elsif enable = '1' thencnt := cnt + 1;end if;end if;q <= cnt;end process;end behave;2) 分頻器QuartusII中含有大量的功能強(qiáng)大的LPM模塊,LPM是Library of Parameterized Modules參數(shù)可設(shè)置模塊庫

48、的縮寫,LPM功能模塊內(nèi)容豐富,每一模塊的功能、參數(shù)含義、使用方法、硬件描述語言模塊參數(shù)設(shè)置及調(diào)用方法都可以在QuartusII中的Help中查閱到。本例使用LPM_counter模塊來實(shí)現(xiàn)分頻。點(diǎn)擊菜單項(xiàng)Tools-> MegaWizard Plug-In Manager,在彈出的對話框中選擇Create a new custom定制一個新的模塊(如果要修改一個已經(jīng)編輯好的LPM模塊,則選擇Edit an exiting custom項(xiàng)),點(diǎn)擊“Next”按鈕,在后續(xù)對話框中的左欄選擇Arithmetic項(xiàng)下的LPM_COUNTER,在右邊選擇Cyclone器件和VHDL語言方式,最后

49、輸入定制的LPM_COUNTER存放的路徑和文件名,本例文件名為divider.vhd,路徑選擇自己創(chuàng)建工程的路徑。 點(diǎn)擊“Next”,選擇計(jì)數(shù)器的位寬為10bit,加1計(jì)數(shù)。點(diǎn)擊“Next”,設(shè)置為模1000計(jì)數(shù),選擇輸出Carry-out信號,則計(jì)數(shù)器會從0計(jì)數(shù)到999,再回零計(jì)數(shù),當(dāng)計(jì)數(shù)到999時,會產(chǎn)生一個時鐘的Carry-out信號。后面我們就用這個Carry-out信號來做10進(jìn)制計(jì)數(shù)器的計(jì)數(shù)時鐘。依圖完成每個對話框的設(shè)置,最后點(diǎn)擊“Finish”,完成LPM_COUNTER定制,硬件描述語言文件divider.vhd會自動保存在你設(shè)置的路徑中。 3) 數(shù)碼管譯碼電路及動態(tài)掃描在“

50、數(shù)碼管譯碼顯示設(shè)計(jì)參考”中,我們介紹了使用譯碼電路,控制實(shí)驗(yàn)平臺中8個數(shù)碼管的段碼a-b-c-d-e-f-g,從而在數(shù)碼管上顯示16進(jìn)制數(shù)據(jù)0F,由設(shè)計(jì)中8個數(shù)碼管的位選擇信號SEL0、SEL1、SEL2來決定到底哪個數(shù)碼管顯示,例如SEL0、SEL1、SEL2為“000”時,最右邊的數(shù)碼管顯示當(dāng)前段碼,即在一個時刻,只能有一個數(shù)碼管被點(diǎn)亮。如果希望8個數(shù)碼管上分別顯示希望的數(shù)據(jù),就必須使得選通信號以較高的頻率依次選通,同時在段碼輸入口加上希望在對應(yīng)數(shù)據(jù)管上顯示的數(shù)據(jù),于是隨著選通信號的掃變,就能實(shí)現(xiàn)掃描顯示的目的。點(diǎn)擊菜單項(xiàng)File-> new,創(chuàng)建一個實(shí)現(xiàn)數(shù)碼管動態(tài)掃描的VHDL文件

51、,點(diǎn)擊“OK”按鈕,打開代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實(shí)體名相同(本例為:Dynamic_Scan.vhd)。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Dynamic_Scan is port(clk : in std_logic; -定義動態(tài)掃描時鐘信號 switch: in std_logic_vector(3 downto 0); -四位輸入信號 ledag: out std_logic_vector(6 downto 0); -8

52、個數(shù)碼管的7段輸出 sel: out std_logic_vector(2 downto 0) -8個數(shù)碼管的位選輸出 ); end Dynamic_Scan;architecture behave of Dynamic_Scan is begin-三位計(jì)數(shù)器實(shí)現(xiàn)000111計(jì)數(shù),計(jì)數(shù)器的輸出作為數(shù)碼管的SEL選通信號。 process(clk) variable count : std_logic_vector(2 downto 0); begin if clk'event and clk='1' then-檢測時鐘上升沿 count:=count+1;-計(jì)數(shù)器cou

53、nt累加 end if; sel<=count; end process;-譯碼電路進(jìn)程參考“數(shù)碼管譯碼顯示設(shè)計(jì)參考”,此處略。 end behave;4) 頂層模塊點(diǎn)擊菜單項(xiàng)File-> new,創(chuàng)建一個頂層模塊VHDL文件,保存,文件名與實(shí)體名相同(本例為counter_TOP.vhd)。這個設(shè)計(jì)包含計(jì)數(shù)器、分頻器、數(shù)碼管動態(tài)掃描等多個模塊,頂層模塊的作用是把各個模塊連起來,形成最后完整的數(shù)字電路,作用與同學(xué)們畫原理圖時從庫里添加元件,以及在元件與元件之間連線類似。library ieee;use ieee.std_logic_1164.all; -該程序包中定義了轉(zhuǎn)換函數(shù)co

54、nv_std_loigc_vector(A,位長)use ieee.std_logic_ARITH.all; entity counter_TOP isgeneric(MIN_COUNT : natural := 0;MAX_COUNT : natural := 9;DATAWIDTH : natural := 4);port(clk : in std_logic;reset : in std_logic;load : in std_logic;enable : in std_logic;d : in integer range MIN_COUNT to MAX_COUNT;q : buffer integer range MIN_COUNT to MAX_COUNT;ledag: out std_logic_vector(6 downto 0); sel: out std_logic_vector(2 downto 0) );end entity;architecture behave of counter_TOP iscomponent counter generic(MIN_COUNT : natural := 0;MAX_COUNT : natural :

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論