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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

數(shù)碼管譯碼顯示設(shè)計(jì)參考實(shí)驗(yàn)平臺(tái)上的數(shù)碼管顯示模塊的電路原理,以及數(shù)碼管的輸入與與FPGA的管腳連接關(guān)系如下面的圖、表所示:信號(hào)名稱(chēng)對(duì)應(yīng)FPGA管腳名說(shuō)明7SEG-AH3七段碼管A段輸入信號(hào)7SEG-BH4七段碼管B段輸入信號(hào)7SEG-CK5七段碼管C段輸入信號(hào)7SEG-DL5七段碼管D段輸入信號(hào)7SEG-EK4七段碼管E段輸入信號(hào)7SEG-FL3七段碼管F段輸入信號(hào)7SEG-GL4七段碼管G段輸入信號(hào)7SEG-DPM3七段碼管dp段輸入信號(hào)7SEG-SEL0G4七段碼管位選輸入信號(hào)7SEG-SEL1G3七段碼管位選輸入信號(hào)7SEG-SEL2F4七段碼管位選輸入信號(hào) 如果只需要在數(shù)碼管上顯示16進(jìn)制數(shù)據(jù)0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F,可以參考下面的代碼設(shè)計(jì)一個(gè)4-7譯碼器。同學(xué)們知道1個(gè)16進(jìn)制數(shù)據(jù)可以由四個(gè)二進(jìn)制位表示,設(shè)計(jì)用四位的向量輸入端口switch來(lái)表示四個(gè)二進(jìn)制位;用7位的向量輸出端口ledaq來(lái)表示數(shù)碼管的七段(dp小數(shù)點(diǎn)段未考慮),根據(jù)七段數(shù)碼管段碼表,進(jìn)行譯碼器描述。向量輸出端口sel用來(lái)選擇點(diǎn)亮8個(gè)數(shù)碼管中的哪一個(gè),本例中sel[2:0]設(shè)置為為“000”,點(diǎn)亮最右邊的數(shù)碼管,而其余數(shù)碼管關(guān)閉libraryieee;useieee.std_logic_1164.all;entityDecode4_7isport(switch :instd_logic_vector(3downto0) ;--四位輸入信號(hào)ledag :outstd_logic_vector(6downto0);--8個(gè)數(shù)碼管的7段輸出sel :outstd_logic_vector(2downto0)--8個(gè)數(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è)計(jì)?

2.如果希望8個(gè)數(shù)碼管同時(shí)點(diǎn)亮,你覺(jué)得可以怎么做?

實(shí)驗(yàn)四四位全加器實(shí)驗(yàn)要求使用EDA設(shè)計(jì)開(kāi)發(fā)工具QuartusII,以VHD語(yǔ)言方式設(shè)計(jì)實(shí)現(xiàn)組合邏輯電路四位全加器。實(shí)驗(yàn)原理四位全加器可由一位全加器以串行方式連接而成,更為高效的方式是直接用VHDL語(yǔ)言實(shí)現(xiàn)。實(shí)驗(yàn)步驟新建工程參考實(shí)驗(yàn)二指導(dǎo),,工程名和頂層模塊名均設(shè)為fadder_4。設(shè)計(jì)輸入點(diǎn)擊菜單項(xiàng)File->new…,這次實(shí)驗(yàn)我們使用VHDL描述語(yǔ)言方式設(shè)計(jì)電路,所以選擇新建一個(gè)“VHDLFile”文件,點(diǎn)擊“OK”按鈕,打開(kāi)代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實(shí)體名相同(本例為: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;邏輯綜合參考實(shí)驗(yàn)二指導(dǎo)。布局布線(xiàn)用四個(gè)開(kāi)關(guān)(K1、K2、K3、K4)作為四位全加器的a輸入,用四個(gè)開(kāi)關(guān)(K5、K6、K7、K8)作為四位全加器的b輸入,用五個(gè)發(fā)光管(D1、D2、D3、D4、D5)作為四位全加器的輸出result。使用菜單項(xiàng)Assignment->Pins進(jìn)行引腳分配,完成后引腳分配如下圖。引腳約束完成后,在QuartusII界面的工具欄中,點(diǎn)擊按鈕,對(duì)設(shè)計(jì)進(jìn)行全編譯。編程驗(yàn)證根據(jù)四位全加器真值表,撥動(dòng)開(kāi)關(guān),觀(guān)察發(fā)光管,驗(yàn)證在所有輸入條件下的輸出結(jié)果是否正確。附:VHDL知識(shí)點(diǎn)庫(kù)的引用庫(kù)一般是一些常用的VHDL代碼的集合,包括:數(shù)據(jù)類(lèi)型的定義、函數(shù)的定義、子程序的定義、元件引用聲明、常量的定義等一些可復(fù)用或是共享的VHDL代碼。程序引用了庫(kù)就可以使用該庫(kù)中的VHDL代碼。library 庫(kù)名;use 庫(kù)名.庫(kù)中程序包.程序包中的項(xiàng);實(shí)體的聲明實(shí)體的聲明用于實(shí)體與其它實(shí)體或是外部接口相關(guān)聯(lián)的說(shuō)明。實(shí)體名應(yīng)該與文件名一致。entity 實(shí)體名isgeneric (參數(shù)名:數(shù)據(jù)類(lèi)型:=值 ); port (端口名:端口模式數(shù)據(jù)類(lèi)型);end 實(shí)體名;結(jié)構(gòu)體的描述VHDL程序的所有邏輯功能都在結(jié)構(gòu)體中實(shí)現(xiàn)。architecture 結(jié)構(gòu)體名of實(shí)體名is結(jié)構(gòu)體說(shuō)明語(yǔ)句;begin 結(jié)構(gòu)體描述語(yǔ)句;end 結(jié)構(gòu)體名;實(shí)驗(yàn)報(bào)告要求畫(huà)出使用一位全加器以串行方式連接成四位全加器的原理圖。在四位全加器電路的基礎(chǔ)上,修改設(shè)計(jì),使用VHDL語(yǔ)言,設(shè)計(jì)BCD碼加法器,說(shuō)明設(shè)計(jì)方案并寫(xiě)出設(shè)計(jì)代碼。實(shí)驗(yàn)五序列檢測(cè)器實(shí)驗(yàn)要求使用EDA設(shè)計(jì)開(kāi)發(fā)工具QuartusII,以狀態(tài)圖方式設(shè)計(jì)實(shí)現(xiàn)時(shí)序邏輯電路“111”序列檢測(cè)器。實(shí)驗(yàn)原理有限狀態(tài)機(jī)(FiniteStateMachine)是一種時(shí)序邏輯,它源于人們將一個(gè)復(fù)雜的問(wèn)題分割成多個(gè)簡(jiǎn)單的部分來(lái)處理的思想。狀態(tài)機(jī)通過(guò)時(shí)鐘驅(qū)動(dòng)下的多個(gè)狀態(tài),以及狀態(tài)之間的跳轉(zhuǎn)規(guī)則來(lái)實(shí)現(xiàn)復(fù)雜的邏輯,一旦當(dāng)前的狀態(tài)確定,也就明確的相關(guān)的輸入輸出。實(shí)驗(yàn)步驟新建工程參考實(shí)驗(yàn)二指導(dǎo),工程名和頂層模塊名均設(shè)為sequencer。設(shè)計(jì)輸入點(diǎn)擊菜單項(xiàng)File->new…,這次實(shí)驗(yàn)我們使用狀態(tài)圖方式設(shè)計(jì)電路,所以選擇新建一個(gè)“StateMachineFile”文件,點(diǎn)擊“OK”按鈕,打開(kāi)狀態(tài)圖編輯器,使用工具欄完成狀態(tài)l圖的編輯。下圖工具欄上的按鈕作用分別是“分離窗口切換”、“全屏幕切換”、“選擇”、“放大縮小”、“查找”、“狀態(tài)工具”、“條件轉(zhuǎn)換工具”、“狀態(tài)表工具”、“狀態(tài)機(jī)生成向?qū)А?、“插入輸入端口”、“插入輸出端口”、“條件轉(zhuǎn)換等式顯示”、“生成HDL文件工具”、“橡皮筋工具”。完成后的序列檢測(cè)狀態(tài)圖如下,保存文件,本例為sequencer.smf。。 狀態(tài)圖完成后,使用“生成HDL文件工具”將狀態(tài)圖轉(zhuǎn)換成HDL代碼,在彈出的對(duì)話(huà)框中可以選擇生成VerilogHDL、VHDL或SystemVerilog,本例選擇生成VHDL代碼,一個(gè)sequencer.vhd文件會(huì)自動(dòng)生成并保存在你的工程文件夾里。邏輯綜合參考實(shí)驗(yàn)二指導(dǎo)。功能仿真參考實(shí)驗(yàn)二指導(dǎo),創(chuàng)建仿真波形文件,根據(jù)生成的仿真波形圖,分析結(jié)果是否正確。布局布線(xiàn)用一個(gè)開(kāi)關(guān)K1(引腳號(hào):A12)作為序列檢測(cè)器的switch輸入,用一個(gè)發(fā)光管D1(引腳號(hào):A0)作為序列檢測(cè)器的輸出lamp,時(shí)鐘信號(hào)可以使用開(kāi)發(fā)平臺(tái)的可調(diào)數(shù)字時(shí)鐘模塊CLK(引腳號(hào):J4),但是因?yàn)閷?shí)驗(yàn)平臺(tái)上沒(méi)有單拍時(shí)鐘,所以本例把時(shí)鐘信號(hào)到開(kāi)關(guān)K2(引腳號(hào):B12),通過(guò)撥動(dòng)開(kāi)關(guān)K2從0->1->0的變化,來(lái)模擬時(shí)鐘。詳細(xì)引腳對(duì)應(yīng)關(guān)系見(jiàn)附錄。使用菜單項(xiàng)Assignment->Pins進(jìn)行引腳分配,完成后點(diǎn)擊按鈕,對(duì)設(shè)計(jì)進(jìn)行全編譯。編程參考實(shí)驗(yàn)二指導(dǎo)。驗(yàn)證實(shí)驗(yàn)報(bào)告要求有限狀態(tài)機(jī)分為Moore狀態(tài)機(jī)和Mealy狀態(tài)機(jī),簡(jiǎn)述兩者的特點(diǎn),分析本例的序列檢測(cè)器狀態(tài)機(jī)應(yīng)該屬于哪一種?設(shè)計(jì)一個(gè)1010序列檢測(cè)器,畫(huà)出狀態(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í)在八個(gè)數(shù)碼管上顯示。主時(shí)鐘選擇1KHz的頻率,同時(shí)作為數(shù)碼管動(dòng)態(tài)掃描時(shí)鐘,1KHz主時(shí)鐘分頻后作為10進(jìn)制加法器的計(jì)數(shù)時(shí)鐘。實(shí)驗(yàn)原理計(jì)數(shù)器是最常見(jiàn)的時(shí)序邏輯電路,從微處理器的地址發(fā)生器到頻率計(jì)都需要用到計(jì)數(shù)器。分頻器與計(jì)數(shù)器非常類(lèi)似,時(shí)序電路設(shè)計(jì)中需要各種各樣的分頻器來(lái)獲得不同頻率的時(shí)鐘,其中以整數(shù)分頻器最為常見(jiàn),整數(shù)分頻可以簡(jiǎn)單地使用模n計(jì)數(shù)器實(shí)現(xiàn),即隨驅(qū)動(dòng)時(shí)鐘跳動(dòng)n次后就輸出一個(gè)進(jìn)位脈沖,然后立即被清零或置位,再開(kāi)始新一輪循環(huán)的計(jì)數(shù)器。實(shí)驗(yàn)步驟新建工程參考實(shí)驗(yàn)二指導(dǎo),工程名和頂層模塊名均設(shè)為counter_TOP。設(shè)計(jì)輸入計(jì)數(shù)器點(diǎn)擊菜單項(xiàng)File->new…,新建一個(gè)“VHDLFile”文件,點(diǎn)擊“OK”按鈕,打開(kāi)代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實(shí)體名相同(本例為:counter.vhd)。計(jì)數(shù)器模塊采用參數(shù)化設(shè)計(jì),從MIN_COUNT開(kāi)始加1計(jì)數(shù),計(jì)到MAX_COUNT后,重新回到MIN_COUNT開(kāi)始計(jì)數(shù)。使用參數(shù)化設(shè)計(jì)的最大特點(diǎn)在于它可以被方便地修改,所以常用來(lái)建模一些需要調(diào)整的數(shù)據(jù),以便在實(shí)例化模塊時(shí)根據(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è)置模塊庫(kù)的縮寫(xiě),LPM功能模塊內(nèi)容豐富,每一模塊的功能、參數(shù)含義、使用方法、硬件描述語(yǔ)言模塊參數(shù)設(shè)置及調(diào)用方法都可以在QuartusII中的Help中查閱到。本例使用LPM_counter模塊來(lái)實(shí)現(xiàn)分頻。點(diǎn)擊菜單項(xiàng)Tools->MegaWizardPlug-InManager…,在彈出的對(duì)話(huà)框中選擇Createanewcustom…定制一個(gè)新的模塊(如果要修改一個(gè)已經(jīng)編輯好的LPM模塊,則選擇Editanexitingcustom…項(xiàng)),點(diǎn)擊“Next”按鈕,在后續(xù)對(duì)話(huà)框中的左欄選擇Arithmetic項(xiàng)下的LPM_COUNTER,在右邊選擇Cyclone器件和VHDL語(yǔ)言方式,最后輸入定制的LPM_COUNTER存放的路徑和文件名,本例文件名為divider.vhd,路徑選擇自己創(chuàng)建工程的路徑。點(diǎn)擊“Next”,選擇計(jì)數(shù)器的位寬為10bit,加1計(jì)數(shù)。點(diǎn)擊“Next”,設(shè)置為模1000計(jì)數(shù),選擇輸出Carry-out信號(hào),則計(jì)數(shù)器會(huì)從0計(jì)數(shù)到999,再回零計(jì)數(shù),當(dāng)計(jì)數(shù)到999時(shí),會(huì)產(chǎn)生一個(gè)時(shí)鐘的Carry-out信號(hào)。后面我們就用這個(gè)Carry-out信號(hào)來(lái)做10進(jìn)制計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘。依圖完成每個(gè)對(duì)話(huà)框的設(shè)置,最后點(diǎn)擊“Finish”,完成LPM_COUNTER定制,硬件描述語(yǔ)言文件divider.vhd會(huì)自動(dòng)保存在你設(shè)置的路徑中。數(shù)碼管譯碼電路及動(dòng)態(tài)掃描在“數(shù)碼管譯碼顯示設(shè)計(jì)參考”中,我們介紹了使用譯碼電路,控制實(shí)驗(yàn)平臺(tái)中8個(gè)數(shù)碼管的段碼a-b-c-d-e-f-g,從而在數(shù)碼管上顯示16進(jìn)制數(shù)據(jù)0~F,由設(shè)計(jì)中8個(gè)數(shù)碼管的位選擇信號(hào)SEL0、SEL1、SEL2來(lái)決定到底哪個(gè)數(shù)碼管顯示,例如SEL0、SEL1、SEL2為“000”時(shí),最右邊的數(shù)碼管顯示當(dāng)前段碼,即在一個(gè)時(shí)刻,只能有一個(gè)數(shù)碼管被點(diǎn)亮。如果希望8個(gè)數(shù)碼管上分別顯示希望的數(shù)據(jù),就必須使得選通信號(hào)以較高的頻率依次選通,同時(shí)在段碼輸入口加上希望在對(duì)應(yīng)數(shù)據(jù)管上顯示的數(shù)據(jù),于是隨著選通信號(hào)的掃變,就能實(shí)現(xiàn)掃描顯示的目的。點(diǎn)擊菜單項(xiàng)File->new…,創(chuàng)建一個(gè)實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)掃描的VHDL文件,點(diǎn)擊“OK”按鈕,打開(kāi)代碼編輯器,將下面的代碼輸入空白編輯區(qū),輸入完成后,保存文件,文件名與實(shí)體名相同(本例為:Dynamic_Scan.vhd)。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityDynamic_Scanisport(clk:instd_logic;--定義動(dòng)態(tài)掃描時(shí)鐘信號(hào)switch :instd_logic_vector(3downto0);--四位輸入信號(hào)ledag :outstd_logic_vector(6downto0);--8個(gè)數(shù)碼管的7段輸出sel :outstd_logic_vector(2downto0)--8個(gè)數(shù)碼管的位選輸出);endDynamic_Scan;architecturebehaveofDynamic_Scanisbegin--三位計(jì)數(shù)器實(shí)現(xiàn)000~111計(jì)數(shù),計(jì)數(shù)器的輸出作為數(shù)碼管的SEL選通信號(hào)。process(clk)variablecount:std_logic_vector(2downto0);beginifclk'eventandclk='1'then--檢測(cè)時(shí)鐘上升沿count:=count+1;--計(jì)數(shù)器count累加endif;sel<=count;endprocess;--譯碼電路進(jìn)程參考“數(shù)碼管譯碼顯示設(shè)計(jì)參考”,此處略。endbehave;頂層模塊點(diǎn)擊菜單項(xiàng)File->new…,創(chuàng)建一個(gè)頂層模塊VHDL文件,保存,文件名與實(shí)體名相同(本例為counter_TOP.vhd)。這個(gè)設(shè)計(jì)包含計(jì)數(shù)器、分頻器、數(shù)碼管動(dòng)態(tài)掃描等多個(gè)模塊,頂層模塊的作用是把各個(gè)模塊連起來(lái),形成最后完整的數(shù)字電路,作用與同學(xué)們畫(huà)原理圖時(shí)從庫(kù)里添加元件,以及在元件與元件之間連線(xiàn)類(lèi)似。libraryieee;useieee.std_logic_1164.all;--該程序包中定義了轉(zhuǎn)換函數(shù)conv_std_loigc_vector(A,位長(zhǎng))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è)計(jì)八個(gè)數(shù)碼管顯示相同的10進(jìn)制計(jì)數(shù)值,所以段碼輸入口始終來(lái)自10進(jìn)制計(jì)數(shù)器的計(jì)數(shù)輸出endbehave;邏輯綜合當(dāng)一個(gè)工程中有多個(gè)源文件時(shí),必須告訴編譯器到底哪一個(gè)才是工程的頂層,本例的頂層文件是counter_TOP,新建工程其實(shí)已經(jīng)指定了工程的頂層文件,如果需要改動(dòng),方法一:使用菜單項(xiàng)Project->SetasTop-LevelEntitey可以將當(dāng)前正打開(kāi)的文件設(shè)置為頂層文件;方法二:使用菜單項(xiàng)Assignmengs->Settings…,在打開(kāi)的設(shè)置對(duì)話(huà)框中,選擇左邊最上面的“General”,在右邊的Top-Levelentity編輯框中選擇設(shè)計(jì)頂層。布局布線(xiàn)參考附錄FPGA引腳對(duì)應(yīng)關(guān)系,自己完成引腳的選擇和約束。編程驗(yàn)證附:VHDL知識(shí)點(diǎn)元件(模塊)聲明結(jié)構(gòu)化模型中所使用的元件事先已經(jīng)定義過(guò),在使用之前必須首先聲明。元件聲明格式如下:COMPONENT 元件名;PORT(信號(hào)列表);ENDCOMPONENT元件例化元件例化語(yǔ)句是要對(duì)所適用的元件與當(dāng)前設(shè)計(jì)實(shí)體中其他組件及端口信號(hào)的連接方法加以說(shuō)明,元件例化的格式如下:元件實(shí)例:元件名genericmap(參數(shù))portmap(端口信號(hào)1=>信號(hào)名1,……)這里使用的端口信號(hào)就是實(shí)體中port部分使用的端口名,而信號(hào)名則是加到當(dāng)前元件的實(shí)際信號(hào)的名稱(chēng)。通過(guò)端口信號(hào)映像portmap,指明了元件和外部端口信號(hào)、元件和元件中間的連接。

實(shí)驗(yàn)七數(shù)字鐘實(shí)驗(yàn)要求使用VHDL語(yǔ)言,利用層次化設(shè)計(jì)方法,設(shè)計(jì)實(shí)現(xiàn)具有時(shí)、分、秒計(jì)時(shí)的簡(jiǎn)易數(shù)字鐘。實(shí)驗(yàn)原理分計(jì)時(shí)和秒計(jì)時(shí)可以設(shè)計(jì)60進(jìn)制計(jì)數(shù)器實(shí)現(xiàn),小時(shí)計(jì)時(shí)可以設(shè)計(jì)24進(jìn)制計(jì)數(shù)器實(shí)現(xiàn)。秒計(jì)時(shí)器從0開(kāi)始計(jì)數(shù)滿(mǎn)59時(shí),回零,此時(shí)分計(jì)時(shí)器計(jì)數(shù)一次;分計(jì)時(shí)計(jì)數(shù)器從0開(kāi)始計(jì)數(shù)滿(mǎn)59時(shí),回零,此時(shí)小時(shí)計(jì)數(shù)器計(jì)數(shù)一次,從0計(jì)到23時(shí),回零。將秒、分、時(shí)計(jì)數(shù)器的計(jì)數(shù)值,在數(shù)碼管上顯示出來(lái)。實(shí)驗(yàn)步驟新建工程設(shè)計(jì)輸入?yún)?shù)化方法設(shè)計(jì)任意進(jìn)制計(jì)數(shù)器參考實(shí)驗(yàn)六計(jì)數(shù)器修改設(shè)計(jì),在計(jì)數(shù)到最大值時(shí)輸出計(jì)數(shù)滿(mǎn)標(biāo)志。數(shù)碼管動(dòng)態(tài)掃描電路參考實(shí)驗(yàn)六。頂層模塊計(jì)數(shù)器模塊實(shí)例化6次,每次參數(shù)不同,實(shí)例成3個(gè)10進(jìn)制計(jì)數(shù)器(時(shí)鐘計(jì)數(shù)個(gè)位,分鐘計(jì)數(shù)個(gè)位,秒鐘計(jì)數(shù)個(gè)位),1個(gè)二進(jìn)制計(jì)數(shù)器(時(shí)鐘計(jì)數(shù)十位),2個(gè)6進(jìn)制計(jì)數(shù)器(秒鐘計(jì)數(shù)十位,分鐘計(jì)數(shù)十位)。秒鐘個(gè)位計(jì)數(shù)器計(jì)滿(mǎn)標(biāo)志作為秒計(jì)十位計(jì)數(shù)器的計(jì)數(shù)使能(enable),秒鐘十位計(jì)數(shù)器計(jì)滿(mǎn)標(biāo)志作為分鐘個(gè)位計(jì)數(shù)器的計(jì)數(shù)使能(enable),分鐘個(gè)位計(jì)數(shù)器計(jì)滿(mǎn)標(biāo)志作為分鐘十位計(jì)數(shù)器的計(jì)數(shù)使能,分鐘十位計(jì)數(shù)器計(jì)滿(mǎn)標(biāo)志作為時(shí)鐘個(gè)位計(jì)數(shù)器的計(jì)數(shù)使能,時(shí)鐘個(gè)位計(jì)數(shù)器的計(jì)滿(mǎn)標(biāo)志作為時(shí)鐘十位計(jì)數(shù)器的計(jì)數(shù)使能。libraryieee;useieee.std_logic_1164.all;--該程序包中定義了轉(zhuǎn)換函數(shù)conv_std_loigc_vector(A,位長(zhǎng))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;計(jì)數(shù)器模塊較以往增加進(jìn)位輸出信號(hào)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論