數(shù)字邏輯電路設(shè)計實驗教案_第1頁
數(shù)字邏輯電路設(shè)計實驗教案_第2頁
數(shù)字邏輯電路設(shè)計實驗教案_第3頁
數(shù)字邏輯電路設(shè)計實驗教案_第4頁
數(shù)字邏輯電路設(shè)計實驗教案_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗一半加器和全加器I實驗平臺實驗要求使用TTL小規(guī)模集成電路芯片74LS00搭建半加器電路和全加器電路,電路的輸入接實驗平臺開關(guān),電路輸出接實驗平臺的發(fā)光管。希望同學(xué)們能夠通過實驗掌握使用基本門電路設(shè)計實現(xiàn)數(shù)字電路的方法。實驗原理在數(shù)字電路中,門電路就是用來實現(xiàn)基本邏輯關(guān)系的電路,比如這個實驗中的半加器和全加器。最基本的門電路是與門、或門和非門,由這些門可以組合成其它的邏輯電路。門電路最初由分立元件組成,集成電路出現(xiàn)后,我們現(xiàn)在使用的門電路都是集成門電路。半加器:完成兩個一位二進(jìn)制數(shù)的相加而求得“和”及“進(jìn)位”。全加器:當(dāng)多位二進(jìn)制數(shù)相加時,高位的相加運算除了要將本位的加數(shù)和被加數(shù)相加以外,還要考慮低位是否有向該位的進(jìn)位。全加器完成將兩個一位的二進(jìn)制數(shù)相加,并考慮低位來的進(jìn)位,相當(dāng)于三個一位二進(jìn)制數(shù)相加的電路。實驗步驟設(shè)計根據(jù)半加器和全加器列出真值表,寫出輸出函數(shù),因為實驗要求使用“與非門”實現(xiàn),將輸出函數(shù)轉(zhuǎn)換為“與非門”形式,畫出使用與非門實現(xiàn)半加器和全加器的電路圖。&&&&&1ABSHCH&&&&&AiBiSHiCi&&&&Ci-1Si半加器與非門電路全加器與非門電路連線請?zhí)貏e注意VCC和GND的連接,不要接錯,以免芯片燒毀!所用芯片的Vcc連起來接+5V;所用芯片的GND連起來接地(GND)。電路的輸入接實驗平臺開關(guān),電路的輸出接實驗平臺的發(fā)光管。實驗提供的74LS00芯片邏輯與引腳圖如下。每塊芯片中有四組2輸入端與非門(正邏輯),根據(jù)步驟1設(shè)計的電路圖,搭建半加器電路需要5個與非門(可使用2塊74LS00芯片),搭建全加器電路需要9個與非門(可使用3塊74LS00芯片)。雙列直插封裝74LS00芯片邏輯圖和引腳圖驗證開關(guān)向上撥為“1”,向下?lián)転椤?”;發(fā)光管為“1”時點亮,為“0”時熄滅。根據(jù)真值表,檢驗?zāi)闼罱ǖ陌爰悠骱腿悠麟娐?,是否滿足設(shè)計要求。教你一招:實驗平臺上可能有個別開關(guān)、發(fā)光管故障,可以將導(dǎo)線一端接開關(guān),一端接發(fā)光管,如果開關(guān)向上撥時,發(fā)光管點亮;開關(guān)向下?lián)軙r,發(fā)光管熄滅,說明開關(guān)、發(fā)光管、導(dǎo)線都是好的。完成連線后的電路可能有誤,在沒有萬用表的情況下,此法也可幫你檢查電路故障。實驗報告要求填妥姓名、班級外,必須填寫完成報告的日期(年月日),以后的實驗報告要求里不再冗述。寫出使用TTL小規(guī)模集成電路芯片74LS00完成半加器的設(shè)計和實現(xiàn)的完整過程(根據(jù)功能要求列真值表->寫輸出函數(shù)->將輸出函數(shù)變換成“與非門”形式->畫出電路圖->根據(jù)芯片引腳連線->驗證結(jié)果)結(jié)合實驗中接觸和使用的小規(guī)模集成電路,請說說什么是集成電路?常用的中小規(guī)模集成電路產(chǎn)品有哪些?實驗過程中你遇到了哪些問題?實驗剛開始時,你覺得計算機(jī)硬件課程的實驗最難理解的地方在哪里?實驗一和實驗二使用兩種不同的方式(小規(guī)模集成電路,可編程器件)實現(xiàn)全加器電路,就兩種方式談?wù)勀銓嶒灥捏w會。

實驗二FPGA設(shè)計流程——全加器II實驗平臺 EDA/SOPC實驗開發(fā)平臺,實驗二以后的所有實驗都使用此開發(fā)平臺。實驗要求根據(jù)實驗平臺提供的Altera公司可編程器件FPGA(現(xiàn)場可編程門陣列),使用Altera公司的EDA設(shè)計開發(fā)工具QuartusII,用原理圖方式設(shè)計實現(xiàn)全加器電路,電路的輸入接實驗平臺開關(guān),電路輸出接實驗平臺的發(fā)光管。希望同學(xué)們能夠通過實驗掌握使用可編程器件設(shè)計實現(xiàn)數(shù)字電路的方法。實驗原理 使用可編程器件進(jìn)行數(shù)字電路設(shè)計,將傳統(tǒng)的“設(shè)計硬件搭試焊接”過程變?yōu)椤霸O(shè)計編譯下載”的過程,其主要工作都在計算機(jī)內(nèi)完成,先將設(shè)計輸入計算機(jī),再由開發(fā)系統(tǒng)將其轉(zhuǎn)換成編程文件下載到可編程器件中。 全加器電路圖的設(shè)計同實驗一。實驗步驟新建工程實驗室機(jī)器安裝的設(shè)計環(huán)境為:QuartusIIVersion9.0。雙擊桌面圖標(biāo),運行QuartusII軟件。用NewProjectWizard工具選項創(chuàng)建此設(shè)計的工程,并設(shè)計相關(guān)信息。點擊菜單項File->newprojectwizard…,出現(xiàn)introduction對話框,如REF_Ref243204036\h圖1。圖SEQ圖\*ARABIC1單擊next,進(jìn)入Directory,name,Top-LevelEntity設(shè)置對話框,選擇工程存放路徑(請在E盤或F盤新建一個工程相文件夾,實驗室的C盤、D盤及桌面被保護(hù))、工程名稱和頂層模塊名稱(本例工程名和頂層模塊名均設(shè)為fadder。)注意:所有的名稱和路徑均不能包含空格和漢字。如REF_Ref243204122\h圖2。圖SEQ圖\*ARABIC2跳過REF_Ref243205439\h圖3所示AddFiles對話框,該對話框設(shè)置用來將已存在的設(shè)計文件加入到工程中。圖SEQ圖\*ARABIC3點擊next,進(jìn)入Family&devicessettings對話框,指定FPGA器件為Cyclone系列的EP1C12F324C8,如REF_Ref243205547\h圖4。Cyclone

系列FPGA是Altera公司最初(20XX年)的低成本FPGA。20XX年和20XX年,Altera公司又推出了更新的,密度更高的CycloneII和CycloneIII系列

FPGA,進(jìn)一步鞏固它在大批量、低成本應(yīng)用解決方案中的地位。圖SEQ圖\*ARABIC4圖SEQ圖\*ARABIC5REF_Ref243205631\h圖5對話框用來設(shè)置第三方EDA工具,包括綜合工具,仿真工具和時序分析工具,這里我們點擊Next跳過。圖SEQ圖\*ARABIC6信息顯示區(qū)編譯狀態(tài)區(qū)資源管理區(qū)工程工作區(qū)標(biāo)題欄菜單欄信息顯示區(qū)編譯狀態(tài)區(qū)資源管理區(qū)工程工作區(qū)標(biāo)題欄菜單欄工具欄圖SEQ圖\*ARABIC7最后,新建工程向?qū)鶕?jù)你之前一步一步的設(shè)置,給出一個工程設(shè)置概述頁如REF_Ref243205657\h圖6,單擊finish完成工程創(chuàng)建。完成后,QuartusII界面如REF_Ref243207895\h圖7所示。所有在新建工程向?qū)е羞M(jìn)行的設(shè)置,在工程建立完成后,都可以通過QuartusII菜單項進(jìn)行修改。設(shè)計輸入點擊菜單項File->new…,出現(xiàn)新建源文件對話框如REF_Ref243207262\h圖8,數(shù)字電路的設(shè)計文件總的來說有兩種方式,原理圖方式和硬件描述語言方式,這次實驗我們使用原理圖方式設(shè)計電路,所以選擇新建一個“BlockDiagram/SchematicFile”文件,REF_Ref243207262\h圖8,點擊“OK”按鈕,打開原理圖編輯器。圖SEQ圖\*ARABIC8原理圖編輯器的工具欄如REF_Ref321058503\h圖10所示,工具欄上的按鈕作用依次分別是“分離窗口切換”、“選擇”,“添加文字”、“符號工具”、“塊工具”、“正交結(jié)點工具”、“正交總線工具”、“正交管道工具”、“橡皮筋工具”、“部分線選擇工具”、“放大縮小工具”、“全屏”、“查找工具”、“水平翻轉(zhuǎn)”、“垂直翻轉(zhuǎn)”、“逆時針90度翻轉(zhuǎn)”、“矩形工具”、“橢圓工具”、“直線工具”、“弧線工具”。圖SEQ圖\*ARABIC9 QuartusII提供了許多基本庫元件給用戶使用,根據(jù)實驗一全加器的設(shè)計,共需要9個“2輸入與非門電路”模塊。在原理圖編輯區(qū)的空白處雙擊鼠標(biāo),或點擊符號工具打開Symbol對話框如REF_Ref321060646\h圖9。在Symbol對話框中,設(shè)計全加器電路需要的“與非門”可以通過選擇“Primitives->logic”基本原件庫中的“nand2”模塊,點擊“OK”,將該模塊 全加器電路的輸出端口和輸入端口,在Symbol對話框中,使用“Primitives->pin”庫中的“input”模塊和“output”模塊,添加到原理圖中。添加完成后,可以在原理圖中雙擊各個輸入輸出模塊,為它們改名,盡量讓端口名稱具有可讀性,本例可改為Ai、Bi、Ci-1、SHi、Si、Ci如REF_Ref321061378\h圖11。 與非門、輸入端口、輸出端口之間的連接使用“正交結(jié)點工具”完成。 完成后的原理圖如REF_Ref321061378\h圖11。圖SEQ圖\*ARABIC10圖SEQ圖\*ARABIC11設(shè)計輸入完成后,保存文件,將模塊名命名為頂層模塊名,即新建工程時指定的頂層模塊名,本例為:fadder.bdf。新建的文件默認(rèn)情況下會自動加入到工程中。邏輯綜合為工程添加好設(shè)計文件以后,下一步就是對工程設(shè)計進(jìn)行綜合,本例使用QuartusII軟件內(nèi)嵌的分析綜合工具Analysis&Synthesis進(jìn)行。點擊工具欄中按鈕,對設(shè)計進(jìn)行綜合。Analysis&Synthesis將檢查工程的邏輯完整性和一致性。設(shè)計如果綜合通過,編譯狀態(tài)顯示區(qū)中Analysis&Synthesis步驟前面會顯示綠色的勾,如果設(shè)計有錯誤,會顯示紅色的叉,如REF_Ref243214259\h圖12,出錯行號及錯誤原因會顯示在信息顯示區(qū)中,如REF_Ref243214316\h圖13。圖SEQ圖\*ARABIC12圖SEQ圖\*ARABIC13根據(jù)錯誤原因提示修改設(shè)計,完成修改后,重新綜合,直到綜合通過,資源管理區(qū)中可以點擊頂層模塊名稱前的+號,顯示模塊間的樹形結(jié)構(gòu),編譯狀態(tài)顯示區(qū)的Analysis&Synthesis步驟前顯示綠色的勾,如REF_Ref243275768\h圖14。圖SEQ圖\*ARABIC14初學(xué)者往往不習(xí)慣閱讀錯誤信息。實際上學(xué)會讀懂錯誤信息是很有用的!功能仿真在綜合通過以后,只能夠說明設(shè)計符合語法規(guī)范,但并不能保證設(shè)計滿足功能要求,需要通過功能仿真,來驗證電路功能是否符合設(shè)計要求,功能仿真的考察是的電路在理想環(huán)境下的行為,不考慮電路門延遲與線延遲。這里使用QuartusII自帶的波形圖仿真工具進(jìn)行。新建仿真波形圖文件要使用QuartusII自帶的波形圖仿真工具進(jìn)行仿真,首先要新建一個波形圖文件。在File菜單中選擇New,出現(xiàn)如REF_Ref243207262\h圖8中所示對話框,在Verification/DebuggingFiles頁中選擇VectorWaveformFile,點擊OK按鈕,出現(xiàn)一個空的波形圖文件,如REF_Ref294868179\h圖15。圖SEQ圖\*ARABIC15添加觀察信號結(jié)點用菜單Edit->Insert->InsertNodeorBus…,打開如REF_Ref294868522\h圖16所示對話框。可以直接在Name文本框中直接輸入信號名稱,也可以通過點擊按鈕NodeFinder…,打開結(jié)點查詢對話框來如REF_Ref294868778\h圖17,來添加需要觀察的信號。圖SEQ圖\*ARABIC16本例在NodeFinder對話框的Filter選項下拉菜單中選擇Pins:all,然后點擊List按鈕,在NodesFound列表中,選中Ai、Bi、Ci-1、SHi、Si、Ci信號,雙擊或使用按鈕,將它們添加到觀察信號中。最后點擊“OK”按鈕,完成觀察信號的添加。圖SEQ圖\*ARABIC17編輯輸入波形在Name欄中選中輸入信號的名稱,這組輸入信號所在的行將被高亮,如REF_Ref294878695\h圖18。通過菜單Edit->Value,或者直接使用工具欄按鈕對輸入信號的波形進(jìn)行設(shè)定。圖SEQ圖\*ARABIC18如REF_Ref294879401\h圖19工具欄上的按鈕作用分別是“分離窗口切換”、“選擇”,“添加文字”、“編輯波形”、“放大縮小”、“全屏幕切換”、“查找”、“替換”、“設(shè)置為Unknown”、“置0”、“置1”、“設(shè)置為高阻”、“設(shè)置為WeakUnknown”、“設(shè)置為WeakLow”、“設(shè)置為WeakHigh”、“設(shè)置為Don’tCare”、“設(shè)置為取反”、“設(shè)置計數(shù)值”、“設(shè)置時鐘”、“設(shè)置為任意值”、“設(shè)置隨機(jī)值”、“貼齊網(wǎng)格線”、“排序”。圖SEQ圖\*ARABIC19信號添加完成并且編輯好波形后,保存文件,本例為fadder.vwf。在QuartusII中指定仿真文件用菜單Assignment->Setting…在SimulatorSettings中,設(shè)置Simulationmode為“Functional”,設(shè)置fadder.vwf為仿真輸入文件,仿真結(jié)束的條件可以根據(jù)需要在SimulationPeriod項中選擇,如REF_Ref294869860\h圖20選擇仿真運行80ns結(jié)束。點擊“OK”按鈕完成設(shè)置。圖SEQ圖\*ARABIC20生成功能仿真網(wǎng)表用菜單Processing->GenerateFunctionalSimulationNetlist。如果缺少這一步,在仿真運行時,QuartusII產(chǎn)生出錯提示:“Error:RunGenerateFunctionalSimulationNetlist(quartus_mapseven_seg--generate_functional_sim_netlist)togeneratefunctionalsimulationnetlistfortoplevelentity"seven_seg"beforerunningtheSimulator(quartus_sim)”,無法完成仿真。運行仿真通過工具欄按鈕啟動仿真。觀察分析仿真結(jié)果仿真完成后,根據(jù)生成的仿真波形圖,對比全加器真值表,分析結(jié)果是否正確。本例結(jié)果如REF_Ref294875759\h圖21。圖SEQ圖\*ARABIC21布局布線約束引腳FPGA電路板與實驗平臺上各個資源模塊(如本實驗的LEDSwitches&Buttons模塊)之間的連接是固定的,應(yīng)該根據(jù)它們之間的連接關(guān)系對FPGA的引腳進(jìn)行引腳約束。約束引腳是將頂層設(shè)計文件的輸入輸出端口指定到FPGA器件的實際引腳。引腳對應(yīng)關(guān)系見附表。使用菜單項Assignment->Pins進(jìn)入引腳分配編輯窗口,完成后的分配REF_Ref321063288\h圖22。圖SEQ圖\*ARABIC22不要忘記引腳約束!在以后的設(shè)計中,如果忘記了導(dǎo)入引腳約束文件,編譯也不會報錯,此時由軟件自動分配未約束的引腳,但是和實際連接關(guān)系就不一致了。后果是不能通過在實驗儀上的驗證。布局布線、生成編程文件引腳約束完成后,在QuartusII界面的工具欄中,點擊按鈕,對設(shè)計進(jìn)行全編譯。此外,也可以使用菜單項Processing->CompilerTool打開編譯工具對話框,如REF_Ref243221532\h圖23,點擊Fitter區(qū)域中的按鈕和Assembler區(qū)域中的按鈕來執(zhí)行布局布線和生成編程文件,也可以直接點擊Start按鈕來完成全編譯過程。圖SEQ圖\*ARABIC23如果設(shè)計文件或引腳約束有改動,一定要重新進(jìn)行全編譯。時序仿真(附加題,有興趣的同學(xué)選擇完成)功能仿真不考慮傳輸延遲,主要目的是檢查邏輯功能有沒有錯誤,是否符合設(shè)計要求。時序仿真包含了延時信息,它能較好地反映芯片的工作情況。用菜單Assignment->Setting…在SimulatorSettings中,更改設(shè)置Simulationmode為“Timming”,設(shè)置完成后重新運行仿真,觀察結(jié)果,本例如REF_Ref243292288\h圖24。圖SEQ圖\*ARABIC24與功能仿真時得到的波形圖不同,在時序仿真得到的波形圖沒有那么完美,因為信號經(jīng)過任何門電路和導(dǎo)線都存在一個時間延遲問題,,使得電路的輸入到達(dá)穩(wěn)定狀態(tài)時,輸出并不一定能立即達(dá)到穩(wěn)定狀態(tài)。觀察電路延遲的情況。配置器件(或稱編程、下載)對可編程器件FPGA進(jìn)行配置(編程),俗稱下載,下載前打開實驗平臺電源。點擊工具欄按鈕,或使用菜單項Tool->Programmer進(jìn)入器件編程話框,如REF_Ref243221030\h圖25。單擊按鈕,可以選擇編程電纜硬件設(shè)置,如REF_Ref243300802\h圖26,因為實驗設(shè)備使用的是USB-Blaster下載電纜,所以本例中使用USB-Blaster作為硬件接口。設(shè)置完編程硬件后,在編程界面,在Mode中選擇編程模式,本例使用JTAG模式。勾選Program/Configure選項框,單擊按鈕開始器件編程。在Process進(jìn)度條中會顯示編程進(jìn)度。完成后,在QuartusII的信息顯示區(qū)中,會報告成功或出錯信息;注意:信息顯示在QuartusII的信息顯示區(qū)中,不在編程窗口中。編程界面左側(cè)的其它按鈕分別表示停止編程;自動檢測編程硬件是否連接;刪除編程文件;更改選中的編程文件;保存文件;添加用戶自定義的器件;更改編程文件的順序。圖SEQ圖\*ARABIC25圖SEQ圖\*ARABIC26 測試驗證器件被成功配置后,就可以進(jìn)行驗證了。撥動連接全加器輸入端口Ai,Bi,Ci的開關(guān),觀察連接全加器輸出端口Si,Ci的發(fā)光管顯示是否正確。

實驗三七人表決器實驗要求使用EDA設(shè)計開發(fā)工具QuartusII,以原理圖方式設(shè)計實現(xiàn)七人表決器電路,當(dāng)表決器的七個輸入中有4個以上(含4個)為“1”時,u表決器輸出為“1”,否則為“0”。用七個開關(guān)作為表決器的七個輸入,輸入為邏輯“1”時表示表決者“贊成”,輸入為“0”代表“不贊成””。用二個發(fā)光管作為表決器的輸出,發(fā)光管點亮(邏輯1)表示表決“通過”,發(fā)光管熄滅表示表決“不通過”。實驗原理七人表決器的方案很多,這里給出一個使用多個一位全加器實現(xiàn)的電路參考,見“設(shè)計輸入”,其中的一位全加器我們利用實驗二的設(shè)計。實驗步驟實驗準(zhǔn)備打開QuartusII環(huán)境,使用File->OpenProject…打開上一次的全加器實驗工程,雙擊頂層模塊打fadder開原理圖文件,然后使用File->Create/_Update->CreateSymbolFilesForCurrentFile,將頂層原理圖方式設(shè)計的全加器模塊轉(zhuǎn)換為符號文件fadder.bsf。在E盤或F盤新建一個文件夾(所有的名稱和路徑均不能包含空格和漢字),將實驗二全加器工程中的全加器原理圖文件fadder.bdf,以及剛才生成的全加器符號文件fadder.bsf,一起拷入新建的文件夾中。新建工程參考實驗二指導(dǎo),在上一步新建的文件夾內(nèi)創(chuàng)建QuartusII工程,工程名和頂層模塊名均設(shè)為seven。設(shè)計輸入點擊菜單項File->new…,新建原理圖BlockDiagram/Schematic文件,在空白編輯區(qū)內(nèi)雙擊鼠標(biāo)左鍵,或使用符號工具,打開symbol對話框。在Libraries中,除了QuartusIIa提供的庫元件外,由于在“實驗準(zhǔn)備”步驟中,往工程文件夾內(nèi)中拷入了fadder.bsf符號文件,所以在Project樹下,可以看見當(dāng)前工程路徑下自己定義的元件fadder.bsf。點擊“OK”按鈕,將fadder模塊加入原理圖中。重復(fù)該過程,共添加4個一位全加器模塊。 在Symbol對話框中,使用“Primitives->pin”庫中的“input”模塊和“output”模塊,為設(shè)計添加輸入端口和輸出端口。使用“Primitives->logic”庫中的“not”模塊,,輸出端口pass取反后送給輸出端口deny。 模塊之間的連接使用“正交結(jié)點工具”完成。完成后的原理圖如下,保存文件(本例為seven.bdf)。邏輯綜合參考實驗二指導(dǎo)。布局布線使用菜單項Assignment->Pins進(jìn)行引腳分配,完成后引腳分配如下圖。引腳約束完成后,在QuartusII界面的工具欄中,點擊按鈕,對設(shè)計進(jìn)行全編譯。編程參考實驗二指導(dǎo)。驗證撥動開關(guān),觀察發(fā)光管,驗證在所有輸入條件下的輸出結(jié)果是否正確。

實驗報告要求完善設(shè)計:在表決通過時,用實驗平臺上的揚聲器報鳴提示;在原基礎(chǔ)上使用數(shù)碼管顯示贊成票數(shù),寫出設(shè)計方法。(提示:票數(shù)就是幾個一位全加器計算出來的最后的結(jié)果;想在數(shù)碼管上顯示,需要設(shè)計譯碼器電路。)使用VHDL語言設(shè)計七人表決器電路。附:數(shù)碼管段碼表發(fā)光二極管組成的顯示器是嵌入式應(yīng)用產(chǎn)品中最常用的廉價輸出設(shè)備。它由若干個發(fā)光二極管按一定的規(guī)律排列而成。當(dāng)某一個發(fā)光二極管導(dǎo)通時,相應(yīng)的一個或一筆畫被點亮,控制不同組合的二極管導(dǎo)通,就能顯示數(shù)字和少量字符。常用的七段顯示器如下圖。一位顯示器由八個發(fā)光二極管組成,其中七個發(fā)光二極管a~g控制七個筆畫(段)的亮或暗,另一個控制一個小數(shù)點的亮和暗。實驗平臺上的七段數(shù)碼管是共陰極的(發(fā)光二極管陽極連在一起稱為共陽極顯示器,陰極連在一起稱為共陰極顯示器),也就是輸出為高電平的時候,二極管會導(dǎo)通。例如顯示一個“0”,就是abcdef導(dǎo)通,gh截止。根據(jù)REF_Ref278365923\h表可知,段碼為3FH。實驗平臺上有八個數(shù)碼管,它們的abcdefgh都連接在一起,由用戶控制,8個數(shù)碼管的位選信號由一片74LS138譯碼器提供,譯碼器的輸入端(SEL0,SEL1,SEL2)由用戶控制,例如SEL0,SEL1,SEL2若為為000,就選中最右邊的數(shù)碼管,而其余數(shù)碼管關(guān)閉。表七段數(shù)碼管段碼表顯示16進(jìn)制hgfedcba03F001111111060000011025B0101101134F010011114660110011056D0110110167D011111017070000011187F0111111196F01101111A7701110111B7C01111100C3900111001D5E01011110E7901111001F7101110001

數(shù)碼管譯碼顯示設(shè)計參考實驗平臺上的數(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七段碼管位選輸入信號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è)計一個4-7譯碼器。同學(xué)們知道1個16進(jìn)制數(shù)據(jù)可以由四個二進(jìn)制位表示,設(shè)計用四位的向量輸入端口switch來表示四個二進(jìn)制位;用7位的向量輸出端口ledaq來表示數(shù)碼管的七段(dp小數(shù)點段未考慮),根據(jù)七段數(shù)碼管段碼表,進(jìn)行譯碼器描述。向量輸出端口sel用來選擇點亮8個數(shù)碼管中的哪一個,本例中sel[2:0]設(shè)置為為“000”,點亮最右邊的數(shù)碼管,而其余數(shù)碼管關(guān)閉libraryieee;useieee.std_logic_1164.all;entityDecode4_7isport(switch :instd_logic_vector(3downto0) ;--四位輸入信號ledag :outstd_logic_vector(6downto0);--8個數(shù)碼管的7段輸出sel :outstd_logic_vector(2downto0)--8個數(shù)碼管的位選輸出);endDecode4_7;architecturebehaveofDecode4_7isbeginsel<=”000”process(switch)begincaseswitchiswhen"0000"=>ledag<="0111111";when"0001"=>ledag<="0000110";when"0010"=>ledag<="1011011";when"0011"=>ledag<="1001111";when"0100"=>ledag<="1100110";when"0101"=>ledag<="1101101";when"0110"=>ledag<="1111101";when"0111"=>ledag<="0000111";when"1000"=>ledag<="1111111";when"1001"=>ledag<="1101111";when"1010"=>ledag<="1110111";when"1011"=>ledag<="1111100";when"1100"=>ledag<="0111001";when"1101"=>ledag<="1011110";when"1110"=>ledag<="1111001";when"1111"=>ledag<="1110001";whenothers=>null;endcase;endprocess;endbehave;思考:1.如果要求除了0~F之外,還要能夠顯示H,如何修改設(shè)計?

2.如果希望8個數(shù)碼管同時點亮,你覺得可以怎么做?

實驗四四位全加器實驗要求使用EDA設(shè)計開發(fā)工具QuartusII,以VHD語言方式設(shè)計實現(xiàn)組合邏輯電路四位全加器。實驗原理四位全加器可由一位全加器以串行方式連接而成,更為高效的方式是直接用VHDL語言實現(xiàn)。實驗步驟新建工程參考實驗二指導(dǎo),,工程名和頂層模塊名均設(shè)為fadder_4。設(shè)計輸入點擊菜單項File->new…,這次實驗我們使用VHDL描述語言方式設(shè)計電路,所以選擇新建一個“VHDLFile”文件,點擊“OK”按鈕,打開代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實體名相同(本例為:fadder_4.vhd)。libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entityfadder_4is generic ( DATA_WIDTH:natural:=4 ); port ( a :inunsigned ((DATA_WIDTH-1)downto0); b :inunsigned ((DATA_WIDTH-1)downto0); result:outunsigned (DATA_WIDTHdownto0) );endentity;architecturebehaveoffadder_4isbegin result<=('0'&a)+('0'&b);endbehave;邏輯綜合參考實驗二指導(dǎo)。布局布線用四個開關(guān)(K1、K2、K3、K4)作為四位全加器的a輸入,用四個開關(guān)(K5、K6、K7、K8)作為四位全加器的b輸入,用五個發(fā)光管(D1、D2、D3、D4、D5)作為四位全加器的輸出result。使用菜單項Assignment->Pins進(jìn)行引腳分配,完成后引腳分配如下圖。引腳約束完成后,在QuartusII界面的工具欄中,點擊按鈕,對設(shè)計進(jìn)行全編譯。編程驗證根據(jù)四位全加器真值表,撥動開關(guān),觀察發(fā)光管,驗證在所有輸入條件下的輸出結(jié)果是否正確。附:VHDL知識點庫的引用庫一般是一些常用的VHDL代碼的集合,包括:數(shù)據(jù)類型的定義、函數(shù)的定義、子程序的定義、元件引用聲明、常量的定義等一些可復(fù)用或是共享的VHDL代碼。程序引用了庫就可以使用該庫中的VHDL代碼。library 庫名;use 庫名.庫中程序包.程序包中的項;實體的聲明實體的聲明用于實體與其它實體或是外部接口相關(guān)聯(lián)的說明。實體名應(yīng)該與文件名一致。entity 實體名isgeneric (參數(shù)名:數(shù)據(jù)類型:=值 ); port (端口名:端口模式數(shù)據(jù)類型);end 實體名;結(jié)構(gòu)體的描述VHDL程序的所有邏輯功能都在結(jié)構(gòu)體中實現(xiàn)。architecture 結(jié)構(gòu)體名of實體名is結(jié)構(gòu)體說明語句;begin 結(jié)構(gòu)體描述語句;end 結(jié)構(gòu)體名;實驗報告要求畫出使用一位全加器以串行方式連接成四位全加器的原理圖。在四位全加器電路的基礎(chǔ)上,修改設(shè)計,使用VHDL語言,設(shè)計BCD碼加法器,說明設(shè)計方案并寫出設(shè)計代碼。實驗五序列檢測器實驗要求使用EDA設(shè)計開發(fā)工具QuartusII,以狀態(tài)圖方式設(shè)計實現(xiàn)時序邏輯電路“111”序列檢測器。實驗原理有限狀態(tài)機(jī)(FiniteStateMachine)是一種時序邏輯,它源于人們將一個復(fù)雜的問題分割成多個簡單的部分來處理的思想。狀態(tài)機(jī)通過時鐘驅(qū)動下的多個狀態(tài),以及狀態(tài)之間的跳轉(zhuǎn)規(guī)則來實現(xiàn)復(fù)雜的邏輯,一旦當(dāng)前的狀態(tài)確定,也就明確的相關(guān)的輸入輸出。實驗步驟新建工程參考實驗二指導(dǎo),工程名和頂層模塊名均設(shè)為sequencer。設(shè)計輸入點擊菜單項File->new…,這次實驗我們使用狀態(tài)圖方式設(shè)計電路,所以選擇新建一個“StateMachineFile”文件,點擊“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代碼,在彈出的對話框中可以選擇生成VerilogHDL、VHDL或SystemVerilog,本例選擇生成VHDL代碼,一個sequencer.vhd文件會自動生成并保存在你的工程文件夾里。邏輯綜合參考實驗二指導(dǎo)。功能仿真參考實驗二指導(dǎo),創(chuàng)建仿真波形文件,根據(jù)生成的仿真波形圖,分析結(jié)果是否正確。布局布線用一個開關(guān)K1(引腳號:A12)作為序列檢測器的switch輸入,用一個發(fā)光管D1(引腳號:A0)作為序列檢測器的輸出lamp,時鐘信號可以使用開發(fā)平臺的可調(diào)數(shù)字時鐘模塊CLK(引腳號:J4),但是因為實驗平臺上沒有單拍時鐘,所以本例把時鐘信號到開關(guān)K2(引腳號:B12),通過撥動開關(guān)K2從0->1->0的變化,來模擬時鐘。詳細(xì)引腳對應(yīng)關(guān)系見附錄。使用菜單項Assignment->Pins進(jìn)行引腳分配,完成后點擊按鈕,對設(shè)計進(jìn)行全編譯。編程參考實驗二指導(dǎo)。驗證實驗報告要求有限狀態(tài)機(jī)分為Moore狀態(tài)機(jī)和Mealy狀態(tài)機(jī),簡述兩者的特點,分析本例的序列檢測器狀態(tài)機(jī)應(yīng)該屬于哪一種?設(shè)計一個1010序列檢測器,畫出狀態(tài)圖。

實驗六計數(shù)器和分頻器實驗要求層次化設(shè)計方法,使用VHDL方式設(shè)計實現(xiàn)10進(jìn)制加法計數(shù)器。要求計數(shù)器以1秒鐘的頻率計數(shù),具有同步計數(shù),異步清零,同步預(yù)置數(shù)功能,要求計數(shù)值同時在八個數(shù)碼管上顯示。主時鐘選擇1KHz的頻率,同時作為數(shù)碼管動態(tài)掃描時鐘,1KHz主時鐘分頻后作為10進(jìn)制加法器的計數(shù)時鐘。實驗原理計數(shù)器是最常見的時序邏輯電路,從微處理器的地址發(fā)生器到頻率計都需要用到計數(shù)器。分頻器與計數(shù)器非常類似,時序電路設(shè)計中需要各種各樣的分頻器來獲得不同頻率的時鐘,其中以整數(shù)分頻器最為常見,整數(shù)分頻可以簡單地使用模n計數(shù)器實現(xiàn),即隨驅(qū)動時鐘跳動n次后就輸出一個進(jìn)位脈沖,然后立即被清零或置位,再開始新一輪循環(huán)的計數(shù)器。實驗步驟新建工程參考實驗二指導(dǎo),工程名和頂層模塊名均設(shè)為counter_TOP。設(shè)計輸入計數(shù)器點擊菜單項File->new…,新建一個“VHDLFile”文件,點擊“OK”按鈕,打開代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實體名相同(本例為:counter.vhd)。計數(shù)器模塊采用參數(shù)化設(shè)計,從MIN_COUNT開始加1計數(shù),計到MAX_COUNT后,重新回到MIN_COUNT開始計數(shù)。使用參數(shù)化設(shè)計的最大特點在于它可以被方便地修改,所以常用來建模一些需要調(diào)整的數(shù)據(jù),以便在實例化模塊時根據(jù)需要進(jìn)行配置。libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entitycounteris generic ( MIN_COUNT:natural:=0; MAX_COUNT:natural:=9 ); port ( clk :instd_logic; reset :instd_logic; load:instd_logic; enable :instd_logic; d:inintegerrangeMIN_COUNTtoMAX_COUNT; q :outintegerrangeMIN_COUNTtoMAX_COUNT );endentity;architecturebehaveofcounterisbegin process(clk,reset) variablecnt :integerrangeMIN_COUNTtoMAX_COUNT; begin ifreset='1'then cnt:=0;elsif(rising_edge(clk))then ifload='1'then cnt:=d; elsifcnt=MAX_COUNTthencnt:=MIN_COUNT; elsifenable='1'then cnt:=cnt+1; endif; endif; q<=cnt; endprocess;endbehave;分頻器QuartusII中含有大量的功能強(qiáng)大的LPM模塊,LPM是LibraryofParameterizedModules參數(shù)可設(shè)置模塊庫的縮寫,LPM功能模塊內(nèi)容豐富,每一模塊的功能、參數(shù)含義、使用方法、硬件描述語言模塊參數(shù)設(shè)置及調(diào)用方法都可以在QuartusII中的Help中查閱到。本例使用LPM_counter模塊來實現(xiàn)分頻。點擊菜單項Tools->MegaWizardPlug-InManager…,在彈出的對話框中選擇Createanewcustom…定制一個新的模塊(如果要修改一個已經(jīng)編輯好的LPM模塊,則選擇Editanexitingcustom…項),點擊“Next”按鈕,在后續(xù)對話框中的左欄選擇Arithmetic項下的LPM_COUNTER,在右邊選擇Cyclone器件和VHDL語言方式,最后輸入定制的LPM_COUNTER存放的路徑和文件名,本例文件名為divider.vhd,路徑選擇自己創(chuàng)建工程的路徑。點擊“Next”,選擇計數(shù)器的位寬為10bit,加1計數(shù)。點擊“Next”,設(shè)置為模1000計數(shù),選擇輸出Carry-out信號,則計數(shù)器會從0計數(shù)到999,再回零計數(shù),當(dāng)計數(shù)到999時,會產(chǎn)生一個時鐘的Carry-out信號。后面我們就用這個Carry-out信號來做10進(jìn)制計數(shù)器的計數(shù)時鐘。依圖完成每個對話框的設(shè)置,最后點擊“Finish”,完成LPM_COUNTER定制,硬件描述語言文件divider.vhd會自動保存在你設(shè)置的路徑中。數(shù)碼管譯碼電路及動態(tài)掃描在“數(shù)碼管譯碼顯示設(shè)計參考”中,我們介紹了使用譯碼電路,控制實驗平臺中8個數(shù)碼管的段碼a-b-c-d-e-f-g,從而在數(shù)碼管上顯示16進(jìn)制數(shù)據(jù)0~F,由設(shè)計中8個數(shù)碼管的位選擇信號SEL0、SEL1、SEL2來決定到底哪個數(shù)碼管顯示,例如SEL0、SEL1、SEL2為“000”時,最右邊的數(shù)碼管顯示當(dāng)前段碼,即在一個時刻,只能有一個數(shù)碼管被點亮。如果希望8個數(shù)碼管上分別顯示希望的數(shù)據(jù),就必須使得選通信號以較高的頻率依次選通,同時在段碼輸入口加上希望在對應(yīng)數(shù)據(jù)管上顯示的數(shù)據(jù),于是隨著選通信號的掃變,就能實現(xiàn)掃描顯示的目的。點擊菜單項File->new…,創(chuàng)建一個實現(xiàn)數(shù)碼管動態(tài)掃描的VHDL文件,點擊“OK”按鈕,打開代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實體名相同(本例為:Dynamic_Scan.vhd)。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityDynamic_Scanisport(clk:instd_logic;--定義動態(tài)掃描時鐘信號switch :instd_logic_vector(3downto0);--四位輸入信號ledag :outstd_logic_vector(6downto0);--8個數(shù)碼管的7段輸出sel :outstd_logic_vector(2downto0)--8個數(shù)碼管的位選輸出);endDynamic_Scan;architecturebehaveofDynamic_Scanisbegin--三位計數(shù)器實現(xiàn)000~111計數(shù),計數(shù)器的輸出作為數(shù)碼管的SEL選通信號。process(clk)variablecount:std_logic_vector(2downto0);beginifclk'eventandclk='1'then--檢測時鐘上升沿count:=count+1;--計數(shù)器count累加endif;sel<=count;endprocess;--譯碼電路進(jìn)程參考“數(shù)碼管譯碼顯示設(shè)計參考”,此處略。endbehave;頂層模塊點擊菜單項File->new…,創(chuàng)建一個頂層模塊VHDL文件,保存,文件名與實體名相同(本例為counter_TOP.vhd)。這個設(shè)計包含計數(shù)器、分頻器、數(shù)碼管動態(tài)掃描等多個模塊,頂層模塊的作用是把各個模塊連起來,形成最后完整的數(shù)字電路,作用與同學(xué)們畫原理圖時從庫里添加元件,以及在元件與元件之間連線類似。libraryieee;useieee.std_logic_1164.all;--該程序包中定義了轉(zhuǎn)換函數(shù)conv_std_loigc_vector(A,位長)useieee.std_logic_ARITH.all;entitycounter_TOPis generic ( MIN_COUNT:natural:=0; MAX_COUNT:natural:=9; DATAWIDTH:natural:=4 ); port ( clk :instd_logic; reset :instd_logic; load:instd_logic; enable :instd_logic; d:inintegerrangeMIN_COUNTtoMAX_COUNT; q :bufferintegerrangeMIN_COUNTtoMAX_COUNT; ledag :outstd_logic_vector(6downto0);sel :outstd_logic_vector(2downto0) );endentity;architecturebehaveofcounter_TOPiscomponentcounter generic ( MIN_COUNT:natural:=0; MAX_COUNT:natural:=9 ); port ( clk :instd_logic; reset :instd_logic; load:instd_logic; enable :instd_logic; d:inintegerrangeMIN_COUNTtoMAX_COUNT; q :outintegerrangeMIN_COUNTtoMAX_COUNT );endcomponent;componentdivider PORT ( clock :INSTD_LOGIC; cout :OUTSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(9DOWNTO0) );endcomponent;componentDynamic_Scanport(clk:instd_logic;switch :instd_logic_vector(3downto0);ledag :outstd_logic_vector(6downto0);sel :outstd_logic_vector(2downto0));endcomponent;signalcout_sig:std_logic;signalcounter10_q:std_logic_vector(DATAWIDTH-1downto0);begindivider_inst:dividerPORTMAP(clk,cout_sig); counter_inst:countergenericmap(0,9)

portmap(cout_sig,reset,load,enable,d,q);counter10_q<=conv_std_logic_vector(q,DATAWIDTH); Dynamic_Scan_inst:Dynamic_ScanPORTMAP(clk,counter10_q,ledag,sel);--本設(shè)計八個數(shù)碼管顯示相同的10進(jìn)制計數(shù)值,所以段碼輸入口始終來自10進(jìn)制計數(shù)器的計數(shù)輸出endbehave;邏輯綜合當(dāng)一個工程中有多個源文件時,必須告訴編譯器到底哪一個才是工程的頂層,本例的頂層文件是counter_TOP,新建工程其實已經(jīng)指定了工程的頂層文件,如果需要改動,方法一:使用菜單項Project->SetasTop-LevelEntitey可以將當(dāng)前正打開的文件設(shè)置為頂層文件;方法二:使用菜單項Assignmengs->Settings…,在打開的設(shè)置對話框中,選擇左邊最上面的“General”,在右邊的Top-Levelentity編輯框中選擇設(shè)計頂層。布局布線參考附錄FPGA引腳對應(yīng)關(guān)系,自己完成引腳的選擇和約束。編程驗證附:VHDL知識點元件(模塊)聲明結(jié)構(gòu)化模型中所使用的元件事先已經(jīng)定義過,在使用之前必須首先聲明。元件聲明格式如下:COMPONENT 元件名;PORT(信號列表);ENDCOMPONENT元件例化元件例化語句是要對所適用的元件與當(dāng)前設(shè)計實體中其他組件及端口信號的連接方法加以說明,元件例化的格式如下:元件實例:元件名genericmap(參數(shù))portmap(端口信號1=>信號名1,……)這里使用的端口信號就是實體中port部分使用的端口名,而信號名則是加到當(dāng)前元件的實際信號的名稱。通過端口信號映像portmap,指明了元件和外部端口信號、元件和元件中間的連接。

實驗七數(shù)字鐘實驗要求使用VHDL語言,利用層次化設(shè)計方法,設(shè)計實現(xiàn)具有時、分、秒計時的簡易數(shù)字鐘。實驗原理分計時和秒計時可以設(shè)計60進(jìn)制計數(shù)器實現(xiàn),小時計時可以設(shè)計24進(jìn)制計數(shù)器實現(xiàn)。秒計時器從0開始計數(shù)滿59時,回零,此時分計時器計數(shù)一次;分計時計數(shù)器從0開始計數(shù)滿59時,回零,此時小時計數(shù)器計數(shù)一次,從0計到23時,回零。將秒、分、時計數(shù)器的計數(shù)值,在數(shù)碼管上顯示出來。實驗步驟新建工程設(shè)計輸入?yún)?shù)化方法設(shè)計任意進(jìn)制計數(shù)器參考實驗六計數(shù)器修改設(shè)計,在計數(shù)到最大值時輸出計數(shù)滿標(biāo)志。數(shù)碼管動態(tài)掃描電路參考實驗六。頂層模塊計數(shù)器模塊實例化6次,每次參數(shù)不同,實例成3個10進(jìn)制計數(shù)器(時鐘計數(shù)個位,分鐘計數(shù)個位,秒鐘計數(shù)個位),1個二進(jìn)制計數(shù)器(時鐘計數(shù)十位),2個6進(jìn)制計數(shù)器(秒鐘計數(shù)十位,分鐘計數(shù)十位)。秒鐘個位計數(shù)器計滿標(biāo)志作為秒計十位計數(shù)器的計數(shù)使能(enable),秒鐘十位計數(shù)器計滿標(biāo)志作為分鐘個位計數(shù)器的計數(shù)使能(enable),分鐘個位計數(shù)器計滿標(biāo)志作為分鐘十位計數(shù)器的計數(shù)使能,分鐘十位計數(shù)器計滿標(biāo)志作為時鐘個位計數(shù)器的計數(shù)使能,時鐘個位計數(shù)器的計滿標(biāo)志作為時鐘十位計數(shù)器的計數(shù)使能。libraryieee;useieee.std_logic_1164.all;--該程序包中定義了轉(zhuǎn)換函數(shù)conv_std_loigc_vector(A,位長)useieee.std_logic_ARITH.all;entitycounter_TOPisgeneric(MIN_COUNT:natural:=0;MAX_COUNT:natural:=9;DATAWIDTH:natural:=4);port(clk:instd_logic;reset:instd_logic;loadHOUR:instd_logic;loadMIN:instd_logic;loadSEC:instd_logic;enable:instd_logic;d:inintegerrangeMIN_COUNTtoMAX_COUNT;ledag:outstd_logic_vector(7downto0);sel:outstd_logic_vector(2downto0));endentity;architecturebehaveofcounter_TOPiscomponentcountergeneric(MIN_COUNT:natural:=0;MAX_COUNT:natural:=9);port(clk:instd_logic;reset:instd_logic;load:instd_logic;enable:instd_logic;carry_out:outstd_logic;d:inintegerrangeMIN_COUNTtoMAX_COUNT;q:outintegerrangeMIN_COUNTtoMAX_COUNT);endcomponent;componentdividerPORT(clock:INSTD_LOGIC;cout:OUTSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(9DOWNTO0));endcomponent;componentDynamic_Scanport(clk:instd_logic;HOUR10:instd_logic_vector(3downto0);HOUR1:instd_logic_vector(3downto0);MIN10:instd_logic_vector(3downto0);MIN1:instd_logic_vector(3downto0);SEC10:instd_logic_vector(3downto0);SEC1:instd_logic_vector(3downto0);ledag:outstd_logic_vector(7downto0);sel:outstd_logic_vector(2downto0));endcomponent;signalclk_sig:std_logic;signalcarry_hour,carry_min,carry_sec:std_logic;signalHOUR:integerrange0to23;signalMIN:integerrange0to59;signalSEC:integerrange0to59;signalHOUR10:std_logic_vector(DATAWIDTH-1downto0);signalHOUR1:std_logic_vector(DATAWIDTH-1downto0);signalMIN10:std_logic_vector(DATAWIDTH-1downto0);signalMIN1:std_logic_vector(DATAWIDTH-1downto0);signalSEC10:std_logic_vector(DATAWIDTH-1downto0);signalSEC1:std_logic_vector(DATAWIDTH-1downto0);begindivider_inst:dividerPORTMAP(clk,clk_sig);counter_HOUR:countergenericmap(0,23)portmap(clk_sig,reset,loadHOUR,carry_min,carry_hour,d,HOUR);counter_MIN:countergenericmap(0,59)portmap(clk_sig,reset,loadMIN,carry_sec,carry_min,d,MIN);counter_SEC:countergenericmap(0,59)portmap(clk_sig,reset,loadSEC,enable,carry_sec,d,SEC);HOUR10<=conv_std_logic_vector(HOUR/10,DATAWIDTH);HOUR1<=conv_std_logic_vector(HOURmod10,DATAWIDTH);MIN10<=conv_std_logic_vector(MIN/10,DATAWIDTH);MIN1<=conv_std_logic_vector(MINmod10,DATAWIDTH);SEC10<=conv_std_logic_vector(SEC/10,DATAWIDTH);SEC1<=conv_std_logic_vector(SECmod10,DATAWIDTH);Dynamic_Scan_inst:Dynamic_ScanPORTMAP(clk,HOUR10,HOUR1,MIN10,MIN1,SEC10,SEC1,ledag,sel);endbehave;計數(shù)器模塊較以往增加進(jìn)位輸出信號libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entitycounterisgeneric(MIN_COUNT:natural:=0;MAX_COUNT:natural:=9);port(clk:instd_logic;reset:instd_logic;load:instd_logic;enable:instd_logic;carry_out:outstd_logic;d:inintegerrangeMIN_COUNTtoMAX_COUNT;q:outintegerrangeMIN_COUNTtoMAX_COUNT);endentity;architecturebehaveofcounterisbeginprocess(clk,reset)variablecnt:integerrangeMIN_COUNTtoMAX_COUNT;beginifreset='1'thencnt:=0;carry_out<='0';elsif(rising_edge(clk))thenifload='1'thencnt:=d;carry_out<='0';elsifcnt=MAX_

溫馨提示

  • 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

提交評論