簡(jiǎn)易計(jì)算器EDA技術(shù)課程設(shè)計(jì)報(bào)告書_第1頁
簡(jiǎn)易計(jì)算器EDA技術(shù)課程設(shè)計(jì)報(bào)告書_第2頁
簡(jiǎn)易計(jì)算器EDA技術(shù)課程設(shè)計(jì)報(bào)告書_第3頁
簡(jiǎn)易計(jì)算器EDA技術(shù)課程設(shè)計(jì)報(bào)告書_第4頁
簡(jiǎn)易計(jì)算器EDA技術(shù)課程設(shè)計(jì)報(bào)告書_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

.PAGE....EDA技術(shù)課程設(shè)計(jì)題目簡(jiǎn)易計(jì)算器設(shè)計(jì)系<部>信息工程系班級(jí)姓名學(xué)號(hào)指導(dǎo)教師2013年7月8日至7月12日共1周..EDA技術(shù)課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)題目、內(nèi)容及要求設(shè)計(jì)題目:簡(jiǎn)易計(jì)算器設(shè)計(jì)內(nèi)容及要求:〔1基本設(shè)計(jì)內(nèi)容1:設(shè)計(jì)簡(jiǎn)易通用型計(jì)算器,完成對(duì)數(shù)據(jù)通路的架構(gòu),控制模塊和運(yùn)算器模塊的設(shè)計(jì),可進(jìn)行加減乘除的基本運(yùn)算?!?基本設(shè)計(jì)內(nèi)容2:加入按鍵消除抖動(dòng)的模塊,并在試驗(yàn)箱或開發(fā)板上通過數(shù)碼管顯示計(jì)算器的輸入數(shù)值與輸出結(jié)果,實(shí)現(xiàn)一個(gè)完整的計(jì)算器?!?進(jìn)階設(shè)計(jì)內(nèi)容:通過矩陣鍵盤實(shí)現(xiàn)數(shù)據(jù)的輸入?!?進(jìn)階設(shè)計(jì)內(nèi)容:實(shí)現(xiàn)有符號(hào)數(shù)的計(jì)算?!?進(jìn)階設(shè)計(jì)內(nèi)容:實(shí)現(xiàn)浮點(diǎn)數(shù)的計(jì)算。設(shè)計(jì)要求:〔1根據(jù)任務(wù)要求確定電路各功能模塊;〔2寫出設(shè)計(jì)程序;〔3分析時(shí)序仿真結(jié)果;〔4提交設(shè)計(jì)總結(jié)。二、設(shè)計(jì)原始資料QuartusⅡ軟件;EDA實(shí)驗(yàn)箱;計(jì)算機(jī)一臺(tái);三、要求的設(shè)計(jì)成果〔課程設(shè)計(jì)說明書、設(shè)計(jì)實(shí)物、圖紙等課程設(shè)計(jì)說明書1份,不少于2000字,應(yīng)包含設(shè)計(jì)原理分析、相關(guān)軟件介紹、仿真波形分析,實(shí)驗(yàn)箱下載驗(yàn)證等。四、進(jìn)程安排周1-周3:查閱資料,上機(jī)編寫并調(diào)試設(shè)計(jì)程序;周4:整理、撰寫說明書;周5:課程設(shè)計(jì)答辯并提交設(shè)計(jì)說明書。五、主要參考資料[1].VokneiA.Pedroni.《VHDL數(shù)字電路設(shè)計(jì)教程》.電子工業(yè)出版社,2008.5[2].潘松,黃繼業(yè).《EDA技術(shù)實(shí)用教程》〔第二版.科學(xué)出版社,2005.2[3].焦素敏.《EDA應(yīng)用技術(shù)》.清華大學(xué)出版社,2002.4指導(dǎo)教師〔簽名:教研室主任〔簽名:課程設(shè)計(jì)成績(jī)?cè)u(píng)定表出勤情況出勤天數(shù)缺勤天數(shù)成績(jī)?cè)u(píng)定出勤情況及設(shè)計(jì)過程表現(xiàn)〔20分課設(shè)答辯〔20分設(shè)計(jì)成果〔60分總成績(jī)〔100分提問〔答辯問題情況綜合評(píng)定指導(dǎo)教師簽名:年月日.PAGE.目錄1緒論12軟件介紹22.1QuartusII介紹22.2ModelSim介紹33設(shè)計(jì)原理54模塊化設(shè)計(jì)分析64.1鍵盤矩陣模塊64.2去抖模塊設(shè)計(jì)64.3ALU模塊設(shè)計(jì)74.4FSM模塊設(shè)計(jì)74.5OP1模塊設(shè)計(jì)84.6OP2模塊設(shè)計(jì)94.7BIN模塊設(shè)計(jì)94.8BCD模塊設(shè)計(jì)105總結(jié)11參考文獻(xiàn)12附錄13.PAGE....1緒論硬件描述語言<hardwaredescriptionlanguage,HDL>是電子系統(tǒng)硬件行為描述,結(jié)構(gòu)描述,數(shù)據(jù)流描述的語言。目前,利用硬件描述語言可以進(jìn)行數(shù)字電子系統(tǒng)的設(shè)計(jì)。隨著研究的深入,利用硬件描述語言進(jìn)行模擬電子系統(tǒng)設(shè)計(jì)或混合電子系統(tǒng)設(shè)計(jì)也正在探索中。國外硬件描述語言種類很多,有的從Pascal發(fā)展而來,也有一些從C語言發(fā)展而來。有些HDL成為IEEE標(biāo)準(zhǔn),但大部分是企業(yè)標(biāo)準(zhǔn)。VHDL來源于美國軍方,其他的硬件描述語言則多來源于民間公司??芍^百家爭(zhēng)鳴,百花齊放。這些不同的語言傳播到國內(nèi),同樣也引起了不同的影響。在我國比較有影響的有兩種硬件描述語言:VHDL語言和VerilogHDL語言。這兩種語言已成為IEEE標(biāo)準(zhǔn)語言。

電子設(shè)計(jì)自動(dòng)化<electronicdesignautomation,EDA>技術(shù)的理論基礎(chǔ),設(shè)計(jì)工具,設(shè)計(jì)器件應(yīng)是這樣的關(guān)系:設(shè)計(jì)師用硬件描述語言HDL描繪出硬件的結(jié)構(gòu)或硬件的行為,再用設(shè)計(jì)工具將這些描述綜合映射成與半導(dǎo)體工藝有關(guān)的硬件配置文件,半導(dǎo)體器件FPGA則是這些硬件配置文件的載體。當(dāng)這些FPGA器件加載,配置上不同的文件時(shí),這個(gè)器件便具有了相應(yīng)的功能。在這一系列的設(shè)計(jì),綜合,仿真,驗(yàn)證,配置的過程中,現(xiàn)代電子設(shè)計(jì)理論和現(xiàn)代電子設(shè)計(jì)方法貫穿于其中。以HDL語言表達(dá)設(shè)計(jì)意圖,以FPGA作為硬件實(shí)現(xiàn)載體,以計(jì)算機(jī)為設(shè)計(jì)開發(fā)工具,以EDA軟件為開發(fā)環(huán)境的現(xiàn)代電子設(shè)計(jì)方法日趨成熟。VHDL語言的英文全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,即超高速集成電路硬件描述語言。HDL發(fā)展的技術(shù)源頭是:在HDL形成發(fā)展之前,已有了許多程序設(shè)計(jì)語言,如匯編,C,Pascal,Fortran,Prolog等。這些語言運(yùn)行在不同硬件平臺(tái)和不同的操作環(huán)境中,它們適合于描述過程和算法,不適合作硬件描述。CAD的出現(xiàn),使人們可以利用計(jì)算機(jī)進(jìn)行建筑,服裝等行業(yè)的輔助設(shè)計(jì),電子輔助設(shè)計(jì)也同步發(fā)展起來。在從CAD工具到EDA工具的進(jìn)化過程中,電子設(shè)計(jì)工具的人機(jī)界面能力越來越高。在利用EDA工具進(jìn)行電子設(shè)計(jì)時(shí),邏輯圖,分立電子原件作為整個(gè)越來越復(fù)雜的電子系統(tǒng)的設(shè)計(jì)已不適應(yīng)。任何一種EDA工具,都需要一種硬件描述語言來作為EDA工具的工作語言。這些眾多的EDA工具軟件開發(fā)者,各自推出了自己的HDL語言。2軟件介紹2.1QuartusII介紹QuartusII是Alter公司的綜合性PLD/FPGA開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL〔AlteraHardwareDescriptionLanguage等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。QuartusII提供了完全集成且于電路結(jié)構(gòu)無關(guān)的開發(fā)環(huán)境,具有數(shù)字邏輯設(shè)計(jì)的全部特性,包括:可利用原理圖、結(jié)構(gòu)框圖、VerilogHDL、AHDL和VHDL完成電路描述,并將其保存為設(shè)計(jì)實(shí)體文件;芯片〔電路平面布局連線編輯;LogicLock增量設(shè)計(jì)方法,用戶可建立并優(yōu)化系統(tǒng),然后添加對(duì)原始系統(tǒng)的性能影響較小或無影響的后續(xù)模塊;功能強(qiáng)大的邏輯綜合工具;完備的電路功能仿真與時(shí)序邏輯仿真工具;定時(shí)/時(shí)序分析與關(guān)鍵路徑延時(shí)分析;可使用SignalTapII邏輯分析工具進(jìn)行嵌入式的邏輯分析;支持軟件源文件的添加和創(chuàng)建,并將它們鏈接起來生成編程文件;使用組合編譯方式可一次完成整體設(shè)計(jì)流程;自動(dòng)定位編譯錯(cuò)誤;高效的期間編程與驗(yàn)證工具;可讀入標(biāo)準(zhǔn)的EDIF網(wǎng)表文件、VHDL網(wǎng)表文件盒Verilog網(wǎng)表文件;能生成第三方EDA軟件使用的VHDL網(wǎng)表和Verilog網(wǎng)表文件。Max+plusII作為Altera的上一代PLD設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。目前Altera已經(jīng)停止了對(duì)Max+plusII的更新支持。QuartusII是Altera公司繼Max+plusII之后開發(fā)的一種針對(duì)其公司生產(chǎn)的系列CPLD/PGFA器件的綜合性開發(fā)軟件,它的版本不斷升級(jí),從4.0版到10.0版,這里介紹的是QuartusII8.0版,該軟件有如下幾個(gè)顯著的特點(diǎn):1、QuartusII的優(yōu)點(diǎn)該軟件界面友好,使用便捷,功能強(qiáng)大,是一個(gè)完全集成化的可編程邏輯設(shè)計(jì)環(huán)境,是先進(jìn)的EDA工具軟件。該軟件具有開放性、與結(jié)構(gòu)無關(guān)、多平臺(tái)、完全集成化、豐富的設(shè)計(jì)庫、模塊化工具等特點(diǎn),支持原理圖、VHDL、VerilogHDL以及AHDL〔AlteraHardwareDescriptionLanguage等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。2、QuartusII對(duì)器件的支持QuartusII支持Altera公司的MAX3000A系列、MAX7000系列、MAX9000系列、ACEX1K系列、APEX20K系列、APEXII系列、FLEX6000系列、FLEX10K系列,支持MAX7000/MAX3000等乘積項(xiàng)器件。支持MAXIICPLD系列、Cyclone系列、CycloneII、StratixII系列、StratixGX系列等。支持IP核,包含了LPM/MegaFunction宏功能模塊庫,用戶可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。此外,QuartusII通過和DSPBuilder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)〔SOPC開發(fā),集系統(tǒng)級(jí)設(shè)計(jì)、嵌入式軟件開發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺(tái)。3、QuartusII對(duì)第三方EDA工具的支持對(duì)第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三放EDA工具。Altera的QuartusII可編程邏輯軟件屬于第四代PLD開發(fā)平臺(tái)。該平臺(tái)支持一個(gè)工作組環(huán)境下的設(shè)計(jì)要求,其中包括支持基于Internet的協(xié)作設(shè)計(jì)。Quartus平臺(tái)與Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供應(yīng)商的開發(fā)工具相兼容。改進(jìn)了軟件的LogicLock模塊設(shè)計(jì)功能,增添了FastFit編譯選項(xiàng),推進(jìn)了網(wǎng)絡(luò)編輯性能,而且提升了調(diào)試能力。2.2ModelSim介紹Mentor公司的ModelSim是業(yè)界最優(yōu)秀的HDl語言仿真軟件,它能提供友好的仿真環(huán)境,是業(yè)界唯一的但內(nèi)核支持VHDL和Verilog混合仿真的仿真器。它采用直接優(yōu)化的編譯技術(shù)、Tcl/Tk技術(shù)、和單一內(nèi)核仿真技術(shù),編譯仿真速度快,編譯的代碼與平臺(tái)無關(guān),便于保護(hù)IP核,個(gè)性化的圖形界面和用戶接口,為用戶加快調(diào)錯(cuò)提供強(qiáng)有力的手段,是FPGA/ASIC設(shè)計(jì)的首選仿真軟件。ModelSim主要特點(diǎn):RTL和門級(jí)優(yōu)化,本地編譯結(jié)構(gòu),編譯仿真速度快,跨平臺(tái)跨版本仿真;單內(nèi)核VHDL和Verilog混合仿真;源代碼末班和助手,項(xiàng)目管理;集成了性能分析、波形比較、代碼覆蓋、數(shù)據(jù)流ChaseX、SignalSpay、虛擬對(duì)象VirualObject、Memory窗口、Assertion窗口、源碼窗口顯示信號(hào)值、信號(hào)條件斷點(diǎn)等眾多調(diào)試功能;C和Tcl/Tk接口、C調(diào)試;對(duì)SystemC的直接支持,和HDL任意混合;支持SystemVerilog的設(shè)計(jì)功能;對(duì)系統(tǒng)級(jí)描述語言的最全面支持,SystemVerilog、SystemC、PSL;可以單獨(dú)或同事進(jìn)行行為、RTL級(jí)、和門級(jí)的代碼。ModelSim分幾種不同的版本:SE、PE、LE和OEM,其中SE是最高級(jí)的版本,而集成在Actel、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設(shè)計(jì)工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有較大差別,比如對(duì)于大家都關(guān)心的仿真速度問題,以Xilinx公司提供的OEM版本ModelSimXE為例,對(duì)于代碼少于40000行的設(shè)計(jì),ModelSimSE比ModelSimXE要快10倍;對(duì)于代碼超過40000行的設(shè)計(jì),ModelSimSE要比ModelSimXE快近40倍。ModelSimSE支持PC、UNIX和LINUX混合平臺(tái);MentorGraphics公司提供業(yè)界最好的技術(shù)支持與服務(wù)。3設(shè)計(jì)原理本設(shè)計(jì)主要利用狀態(tài)機(jī)進(jìn)行整體設(shè)計(jì),分部完成,便于大家分組進(jìn)行合作,此設(shè)計(jì)要求完成對(duì)數(shù)據(jù)通路的架構(gòu),控制模塊和運(yùn)算器模塊的設(shè)計(jì),可進(jìn)行加減乘除的基本運(yùn)算。應(yīng)用上周所學(xué)知識(shí),利用狀態(tài)機(jī)進(jìn)行簡(jiǎn)易計(jì)算器的編寫。簡(jiǎn)易計(jì)算器由鍵盤輸入模塊、鍵盤去抖動(dòng)模塊、狀態(tài)機(jī)、計(jì)算模塊、OP1、OP2模塊、顯示模塊組成,結(jié)構(gòu)清晰,易于編寫。簡(jiǎn)易計(jì)算器采用自頂向下的設(shè)計(jì)原則,檢測(cè)按鍵次數(shù)時(shí),以scancode從非空到空的跳變使計(jì)數(shù)器加一,第一運(yùn)算數(shù)則在press_count=1時(shí),將scancode裝配到bcd碼最低位bcd[3:0],在press_count=2時(shí),裝配到bcd[7:4],……FSM在檢測(cè)到+-×/鍵時(shí),將bcd賦予bcd2,同時(shí)啟動(dòng)alu的操作alu_op。FSM根據(jù)scancode進(jìn)度,輸出對(duì)應(yīng)的outsel,選擇顯示不同的bcd數(shù)據(jù)。計(jì)算器模塊化設(shè)計(jì)原理圖如圖3-1所示。檢測(cè)按鍵次數(shù)檢測(cè)按鍵次數(shù)press_count第1運(yùn)算數(shù)bcdFSM第2運(yùn)算數(shù)bcdbcd2<+-*/>loadALUbcdbcd2alu_opresdisplayoutselopkeyscancode圖圖3-1簡(jiǎn)易計(jì)算器模塊化設(shè)計(jì)原理圖4模塊化設(shè)計(jì)分析4.1鍵盤矩陣模塊計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條線作為行線,四條線作為列線組成鍵盤,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4×4個(gè)。鍵盤模塊采用4×4矩陣鍵盤,4位行線接上上拉電阻后接到高電平上,列線接上上拉電阻后依次給予低電平來判斷哪個(gè)節(jié)點(diǎn)為低電平時(shí)即這個(gè)節(jié)點(diǎn)被按下,從而被讀入到下一單元。矩陣鍵盤模塊原理圖如圖4-1所示,矩陣鍵盤仿真波形如圖4-2所示。圖4-1矩陣鍵盤模塊原理圖圖4-2矩陣鍵盤仿真波形4.2去抖模塊設(shè)計(jì)作為機(jī)械開關(guān)的鍵盤,在開關(guān)開啟或關(guān)閉的瞬間會(huì)出現(xiàn)電壓抖動(dòng),消除抖動(dòng)的方法一般有硬件和惡、軟件的方法,一般進(jìn)行軟件處理,這樣實(shí)現(xiàn)簡(jiǎn)單、設(shè)計(jì)靈活、節(jié)約成本。程序設(shè)計(jì)原理:按鍵去抖動(dòng)關(guān)鍵在于提取穩(wěn)定的電平狀態(tài),濾除抖動(dòng)毛刺,對(duì)于一個(gè)按鍵信號(hào),可以用一次脈沖對(duì)其進(jìn)行取樣,如果連續(xù)三次取樣為低電平,則為低電平,如果不滿足三次取樣都為低,則認(rèn)為按鍵穩(wěn)定狀態(tài)結(jié)束。去抖模塊原理圖如圖4-3所示,仿真波形如圖4-4所示。圖4-3去抖模塊原理圖圖4-4去抖模塊仿真波形4.3ALU模塊設(shè)計(jì)ALU模塊主要實(shí)現(xiàn)數(shù)據(jù)的加減乘除運(yùn)算,用VHDL代碼描述邏輯單元、算數(shù)單元、選擇器單元,要求輸入兩組二進(jìn)制數(shù)據(jù),利用元件例化語句將設(shè)計(jì)的三個(gè)單元進(jìn)行組合,建立一個(gè)包含所有元件的包集。ALU模塊原理圖如圖4-5所示,仿真波形圖如圖4-6所示。圖4-5ALU模塊原理圖圖4-6ALU模塊仿真波形4.4FSM模塊設(shè)計(jì)狀態(tài)機(jī)由六個(gè)狀態(tài)組成,主要是判斷鍵盤輸入的是數(shù)據(jù)還是運(yùn)算符,從而來進(jìn)行不同的運(yùn)算,首先判斷第一個(gè)輸入的數(shù)據(jù)是否為數(shù)字,若不是數(shù)據(jù)則等待,若是數(shù)據(jù)則進(jìn)入下一個(gè)狀態(tài)等鍵盤彈起后判斷下一個(gè)數(shù)據(jù)為數(shù)字還是運(yùn)算符,若是數(shù)據(jù)則將數(shù)據(jù)存入OP1,若是運(yùn)算符,則將數(shù)據(jù)存入OP1和OP2,并等待下一個(gè)數(shù)據(jù)的到來,狀態(tài)機(jī)中值得注意的是在進(jìn)行數(shù)據(jù)運(yùn)算時(shí),將運(yùn)算的數(shù)據(jù)要存入OP1和OP2中。FSM模塊原理圖如圖4-7所示,FSM仿真波形圖如圖4-8所示。圖4-7FSM模塊原理圖圖4-8FSM模塊仿真波形圖4.5OP1模塊設(shè)計(jì)OP1模塊的主要功能是實(shí)現(xiàn)數(shù)據(jù)的輸入及存儲(chǔ),主要用來做被加數(shù)、被除數(shù)等,在第一次輸入數(shù)據(jù)時(shí),數(shù)據(jù)存入OP1等進(jìn)行操作后,數(shù)據(jù)會(huì)被裝載到OP1和OP2模塊中,待數(shù)據(jù)被輸入時(shí)更新OP1中的數(shù)據(jù)。OP1模塊原理圖如圖4-9所示,仿真波形圖如圖4-10所示。圖4-9OP1模塊原理圖圖4-10OP1模塊仿真波形4.6OP2模塊設(shè)計(jì)OP2模塊的主要功能是用來存儲(chǔ)運(yùn)算完成的數(shù)據(jù),使計(jì)算器有連續(xù)計(jì)算的能力。當(dāng)進(jìn)行完一次運(yùn)算后,此時(shí)OP2_LOAD為1,此時(shí)將運(yùn)算完的數(shù)據(jù)裝載到OP2模塊中。OP2模塊原理圖如圖4-11所示,仿真波形圖如圖4-12所示。圖4-11OP2模塊設(shè)計(jì)原理圖圖4-12OP2模塊仿真波形圖4.7BIN模塊設(shè)計(jì)二進(jìn)制模塊的功能是將二進(jìn)制數(shù)字轉(zhuǎn)化成BCD碼。BIN模塊原理圖如圖4-13,仿真波形圖如圖4-14。圖4-13BIN模塊原理圖圖4-14BIN模塊仿真波形4.8BCD模塊設(shè)計(jì)BCD模塊是將BCD碼轉(zhuǎn)化成二進(jìn)制數(shù)字。BCD模塊原理圖如圖4-14,仿真波形圖如圖4-15。圖4-14BCD模塊原理圖圖4-15BCD模塊仿真波形5總結(jié)這次的設(shè)計(jì),給我的印象很深,通過這次課程設(shè)計(jì),我對(duì)EDA這門課程有了很好很深的理解。通過做計(jì)算器,我對(duì)QuartusII和ModelSim應(yīng)用更加熟悉了。本次課程設(shè)計(jì),要求做一個(gè)簡(jiǎn)易計(jì)算器,第一周首先由北京至芯科技公司的老師來為我們講解相關(guān)的知識(shí),講解做計(jì)算器的方法。通過老師的講解我對(duì)本課題有了一定的了解。但是,在對(duì)該課題有一定的了解的前提下,也發(fā)現(xiàn)了很多問題。認(rèn)識(shí)到理論與實(shí)踐之間的差距,聯(lián)系實(shí)際的應(yīng)用去理解只是比一大堆理論來的直接與清晰明了。本簡(jiǎn)易計(jì)算器的設(shè)計(jì),是用QuartusII軟件進(jìn)行代碼編寫、原理圖設(shè)計(jì),用ModelSim軟件來實(shí)現(xiàn)仿真。通過對(duì)簡(jiǎn)易計(jì)算器設(shè)計(jì),熟悉了QuartusII的運(yùn)行環(huán)境,初步掌握了VHDL語言基本庫函數(shù)的調(diào)用和編寫基本程序等應(yīng)用;明白了原理圖和代碼之間的關(guān)系;學(xué)會(huì)了做一個(gè)工程的一般步驟,以及分模塊化設(shè)計(jì)的好處。最后,我要在這里對(duì)給我這次課程設(shè)計(jì)提供幫助的魏老師和王老師,還有同學(xué)們說聲誠摯的感謝。正是由于你們的幫助和支持,我才能克服一個(gè)一個(gè)的困難和疑惑,直至本次課程設(shè)計(jì)圓滿完成。在這個(gè)過程中我學(xué)到了很多知識(shí),不僅鞏固了已有知識(shí),而且強(qiáng)化了一些關(guān)于數(shù)學(xué)MATLAB軟件應(yīng)用方面的知識(shí),非常感謝你們的幫助。參考文獻(xiàn)[1]喬廬峰,王志功.數(shù)字電路設(shè)計(jì)教程[M].北京電子工業(yè)出版社,2010[2]潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程〔第二版[M].科學(xué)出版社,2005[3]焦素敏,EDA應(yīng)用技術(shù)[M].北京清華大學(xué)出版社,2002[4]譚會(huì)生,張昌凡.EDA技術(shù)及應(yīng)用[M].XXXX電子科技大學(xué)出版社,2008[5]曾繁泰,陳美金.VHDL程序設(shè)計(jì)[M].北京清華大學(xué)出版社,2007附錄鍵盤矩陣模塊程序LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;ENTITYkeysIS PORT < clk:INSTD_LOGIC; rst:INSTD_LOGIC; row:INSTD_LOGIC_VECTOR<3downto0>; col:OUTSTD_LOGIC_VECTOR<3downto0>; scancode:OUTSTD_LOGIC_VECTOR<15downto0> >;ENDkeys;ARCHITECTUREkeys_architectureOFkeysIS signalcurrent_state,next_state:std_logic_vector<1downto0>; signalenable:std_logic;BEGIN process<clk,rst,enable> begin ifrst='1'thencurrent_state<="00"; elsifclk'eventandclk='1'andenable='0' then current_state<=next_state; endif; endprocess; process<rst,current_state,row> begin ifrst='1'thencol<="1111"; else casecurrent_stateis when"00"=> col<="1110"; next_state<="01"; when"01"=> col<="1101"; next_state<="10"; when"10"=> col<="1011"; next_state<="11"; when"11"=> col<="0111"; next_state<="00"; whenothers=>col<="1111";next_state<="00"; endcase; endif; endprocess; process<current_state,row> begin ifrst='1'thenscancode<=X"0000";enable<='0'; elsif current_state="00"then caserowis when"1110"=>scancode<=X"0001";enable<='1'; when"1101"=>scancode<=X"0002";enable<='1'; when"1011"=>scancode<=X"0004";enable<='1'; when"0111"=>scancode<=X"0008";enable<='1'; whenothers=>scancode<=X"0000";enable<='0'; endcase; elsifcurrent_state="01"then caserowis when"1110"=>scancode<=X"0010";enable<='1'; when"1101"=>scancode<=X"0020";enable<='1'; when"1011"=>scancode<=X"0040";enable<='1'; when"0111"=>scancode<=X"0080";enable<='1'; whenothers=>scancode<=X"0000";enable<='0'; endcase; elsifcurrent_state="01"then caserowis when"1110"=>scancode<=X"0100";enable<='1'; when"1101"=>scancode<=X"0200";enable<='1'; when"1011"=>scancode<=X"0400";enable<='1'; when"0111"=>scancode<=X"0800";enable<='1'; whenothers=>scancode<=X"0000";enable<='0'; endcase; else caserowis when"1110"=>scancode<=X"1000";enable<='1'; when"1101"=>scancode<=X"2000";enable<='1'; when"1011"=>scancode<=X"4000";enable<='1'; when"0111"=>scancode<=X"8000";enable<='1'; whenothers=>scancode<=X"0000";enable<='0'; endcase; endif; endprocess;ENDkeys_architecture;去抖模塊程序LIBRARYieee;USEieee.std_logic_1164.all;ENTITYfilterIS PORT < clk:INSTD_LOGIC; rst:INSTD_LOGIC; scancode:INSTD_LOGIC_VECTOR<15downto0>; sc:OUTSTD_LOGIC_VECTOR<15downto0> >;ENDfilter;ARCHITECTUREfilter_architectureOFfilterIS signalcount:integerrange0to100001; signaltemp:STD_LOGIC_VECTOR<15downto0>; constantG1:integer:=100;BEGIN process<clk,rst,scancode> begin ifrst='1'thencount<=0; elsifclk'eventandclk='1'then ifscancode=X"0000"thencount<=0; elsifcount<G1thencount<=count+1; endif; endif; endprocess; process<rst,count,scancode> begin ifrst='1'thensc<=X"0000";temp<=X"0000"; else casecountis when0=> temp<=scancode; whenG1=> iftemp=scancodethen sc<=temp; elsesc<=X"0000"; endif; whenothers=>sc<=X"0000"; endcase; endif; endprocess;ENDfilter_architecture;ALU模塊程序LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;USEieee.std_logic_arith.all;ENTITYAULIS PORT < op1_in:INSTD_LOGIC_VECTOR<27downto0>; op2_in:INSTD_LOGIC_VECTOR<27downto0>; oprand:INSTD_LOGIC_VECTOR<2downto0>; AUL_OUT:OUTSTD_LOGIC_VECTOR<27downto0> >;ENDAUL;ARCHITECTUREAUL_architectureOFAULISBEGIN process<oprand,op1_in,op2_in> variabletemp,temp1,temp2:STD_LOGIC_VECTOR<27downto0>; variablet1,t2:integerrange0to268435455; variablet3:integerrange0to268435455; begin caseoprandis when"000"=>AUL_OUT<=op1_in; when"001"=> temp1:=op1_in; temp2:=op2_in; temp:=temp1+temp2; AUL_OUT<=temp; when"010"=> t1:=conv_integer<op1_in>; t2:=conv_integer<op2_in>; ift2>=t1then t3:=t2-t1; AUL_OUT<=conv_STD_LOGIC_VECTOR<t3,28>; elseAUL_OUT<=X"8888888"; endif; when"011"=>t1:=conv_integer<op1_in>; t2:=conv_integer<op2_in>; t3:=t1*t2; ift3<=99999999thenAUL_OUT<=conv_STD_LOGIC_VECTOR<t3,28>; elseAUL_OUT<=X"8888888"; endif; when"100"=> t1:=conv_integer<op1_in>; t2:=conv_integer<op2_in>; ift2=0thenAUL_OUT<=X"8888888"; elset3:=t2/t1;AUL_OUT<=conv_STD_LOGIC_VECTOR<t3,28>; endif; whenothers=>AUL_OUT<=op1_in; endcase; endprocess; ENDAUL_architecture;FSM模塊程序LIBRARYieee;USEieee.std_logic_1164.all;ENTITYFSMIS PORT < clk:INSTD_LOGIC; rst:INSTD_LOGIC; sc:INSTD_LOGIC_VECTOR<15downto0>; op1_add:OUTSTD_LOGIC; op1_clear:OUTSTD_LOGIC; op1_load:OUTSTD_LOGIC; op2_load:OUTSTD_LOGIC; oprand:OUTSTD_LOGIC_VECTOR<2downto0> >;ENDFSM;ARCHITECTUREFSM_architectureOFFSMIS signalcurrent_state,next_state:STD_LOGIC_VECTOR<2downto0>:="000"; signalkey,number:STD_LOGIC; signaloperate:STD_LOGIC:='0'; signaltemp0,temp1:STD_LOGIC_VECTOR<2downto0>:="000";BEGIN process<sc> begin casescis whenX"0000"=>key<='0';number<='0'; whenX"0001"=>key<='1';number<='0';--"/" whenX"0002"=>key<='1';number<='0';--"X" whenX"0004"=>key<='1';number<='0';--"-" whenX"0008"=>key<='1';number<='0';--"+" whenX"0010"=>key<='1';number<='0';--"clear" whenX"0020"=>key<='1';number<='1';--"9" whenX"0040"=>key<='1';number<='1';--"6" whenX"0080"=>key<='1';number<='1';--"3" whenX"0100"=>key<='1';number<='1';--"0" whenX"0200"=>key<='1';number<='1';--"8" whenX"0400"=>key<='1';number<='1';--"5" whenX"0800"=>key<='1';number<='1';--"2" whenX"1000"=>key<='1';number<='0';--"=" whenX"2000"=>key<='1';number<='1';--"7" whenX"4000"=>key<='1';number<='1';--"4" whenX"8000"=>key<='1';number<='1';--"1" whenothers=>key<='0';number<='0'; endcase; endprocess; process<clk,rst> begin if<rst='1'>then current_state<="000"; elsif<clk'eventandclk='1'>then current_state<=next_state; endif; endprocess; process<current_state,rst,sc,key,number> begin ifrst='1'then op1_add<='0'; op1_clear<='0'; op1_load<='0'; op2_load<='0'; oprand<="000"; else casecurrent_stateis when"000"=> ifkey='1'then ifnumber='1'then next_state<="001"; else operate<=notoperate; next_state<="010"; endif; elsenext_state<="000"; op1_clear<='0'; oprand<="000"; op1_load<='0'; op2_load<='0'; endif; when"001"=> --shuzicaozuo ifnumber='1'then op1_add<='1';next_state<="001"; elseop1_add<='0';next_state<="000"; endif; when"010"=> ifoperate='0'then oprand<=temp0; casescis whenX"0001"=>temp1<="100";--"/" op2_load<='1'; op1_load<='1'; ifkey='1'then next_state<="010"; else next_state<="000"; endif; whenX"0002"=>temp1<="011";--"X" ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="010"; else op2_load<='0'; next_state<="000"; endif; whenX"0004"=>temp1<="010";--"-" ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="010"; else next_state<="000"; endif; whenX"0008"=>temp1<="001";--"+" ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="010"; else next_state<="000"; endif; whenX"0010"=>op1_clear<='1'; temp0<="000"; temp1<="000"; ifkey='1'then next_state<="010"; elsenext_state<="000"; endif; whenX"1000"=>temp1<="000"; ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="010"; else next_state<="000"; endif; whenothers=>next_state<="000"; endcase; elsenext_state<="100"; endif; when"100"=> oprand<=temp1; op1_load<='1'; casescis whenX"0001"=>temp0<="100"; ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="100"; else next_state<="000"; endif; whenX"0002"=>temp0<="011"; ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="100"; else next_state<="000"; endif; whenX"0004"=>temp0<="010"; ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="100"; else next_state<="000"; endif; whenX"0008"=>temp0<="001"; ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="100"; else next_state<="000"; endif; whenX"0010"=>op1_clear<='1';temp0<="000";temp1<="000"; ifkey='1'then next_state<="100"; elsenext_state<="000"; endif; whenX"1000"=>temp0<="000"; ifkey='1'then op2_load<='1'; op1_load<='1'; next_state<="100"; else next_state<="000"; endif; whenothers=>next_state<="000"; endcase; whenothers=>next_state<="000"; endcase; endif; endprocess; ENDFSM_architecture;OP1模塊設(shè)計(jì)LIBRARYieee;USEieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;ENTITYop1IS PORT < sc:INSTD_LOGIC_VECTOR<15downto0>; add_sc:INSTD_LOGIC; clear:INSTD_LOGIC; load:INSTD_LOGIC; res_bcd:INSTD_LOGIC_VECTOR<31downto0>; rst:INSTD_LOGIC; op1_bcd:bufferSTD_LOGIC_VECTOR<31downto0> >;ENDop1;ARCHITECTUREop1_architectureOFop1IS signalcurrent_state,next_state:STD_LOGIC_VECTOR<2downto0>; signaltemp:STD_LOGIC_VECTOR<3downto0>;BEGIN process<sc> begin casescis whenX"0020"=>temp<=conv_std_logic_vector<9,4>;--"9" whenX"0040"=>temp<=conv_std_logic_vector<6,4>;--"6" whenX"0080"=>temp<=conv_std_logic_vector<3,4>;--"3" whenX"0100"=>temp<=conv_std_logic_vector<0,4>;--"0" whenX"0200"=>temp<=conv_std_logic_vector<8,4>;--"8" whenX"0400"=>temp<=conv_std_logic_vector<5,4>;--"5" whenX"0800"=>temp<=conv_std_logic_vector<2,4>;--"2" whenX"2000"=>temp<=conv_std_logic_vector<7,4>;--"7" whenX"4000"=>temp<=conv_std_logic_vector<4,4>;--"4" whenX"8000"=>temp<=conv_std_logic_vector<1,4>;--"1" whenothers =>null; endcase; endprocess; process<rst,clear,load,add_sc> begin ifload='1' thencurrent_state<="000"; elsifrst='1' thencurrent_state<="000"; elsifclear='1'thencurrent_state<="000"; elsifadd_sc'eventandadd_sc='0'then current_state<=next_state; endif; endprocess; process<rst,current_state,clear,load,temp,add_sc,res_bcd> variableop1_temp:STD_LOGIC_VECTOR<31downto0>; begin ifload='1'thenop1_temp:=X"00000000";op1_temp:=res_bcd; elsifrst='1'thenop1_bcd<=X"00000000";op1_temp:=X"00000000"; elsifclear='1'thenop1_bcd<=X"00000000";op1_temp:=X"00000000"; else casecurrent_stateis when"000"=> ifadd_sc='1'then op1_temp:=X"00000000"; op1_temp<3downto0>:=temp; op1_bcd<=op1_temp; next_state<="001"; elsenext_state<="000"; op1_bcd<=op1_temp; endif; when"001"=> ifadd_sc='1'then op1_temp<7downto4>:=temp; op1_bcd<7downto0><=op1_temp<3downto0>&op1_temp<7downto4>; next_state<="010"; elsenext_state<="001";op1_bcd<=op1_bcd; endif; when"010"=> ifadd_sc='1'then op1_temp<11downto8>:=temp; op1_bcd<11downto0><=op1_temp<3downto0>&op1_temp<7downto4>&op1_temp<11downto8>; next_state<="011"; elsenext_state<="010"; op1_bcd<=op1_bcd; endif; when"011"=> ifadd_sc='1'then op1_temp<15downto12>:=temp; op1_bcd<15downto0><=op1_temp<3downto0>&op1_temp<7downto4>&op1_temp<11downto8>&op1_temp<15downto12>; next_state<="100"; elsenext_state<="011"; op1_bcd<=op1_bcd; endif; when"100"=> ifadd_sc='1'then op1_temp<19downto16>:=temp; op1_bcd<19downto0><=op1_temp<3downto0>&op1_temp<7downto4>&op1_temp<11downto8>&op1_temp<15downto12>&op1_temp<19downto16>; next_state<="101"; elsenext_state<="100"; endif; when"101"=> ifadd_sc='1'then op1_temp<23downto20>:=temp; op1_bcd<23downto0><=op1_temp<3downto0>&op1_temp<7downto4>&op1_temp<11downto8>&op1_temp<15downto12>&op1_temp<19downto16>&op1_temp<23downto20>; next_state<="110"; elsenext_state<="101"; op1_bcd<=op1_bcd; endif; when"110"=> ifadd_sc='1'then op1_temp<27downto24>:=temp; op1_bcd<27downto0><=op1_temp<3downto0>&op1_temp<7downto4>&op1_temp<11downto8>&op1_temp<15downto12>&op1_temp<19downto16>&op1_temp<23downto20>&op1_temp<27downto24>; next_state<="111"; elsenext_state<="110"; op1_bcd<=op1_bcd; endif; when"111"=> ifadd_sc='1'then op1_temp<31downto28>:=temp; op1_bcd<31downto0><=op1_temp<3downto0>&op1_temp<7downto4>&op1_temp<11downto8>&op1_temp<15downto12>&op1_temp<19downto16>&op1_temp<23downto20>&op1_temp<27

溫馨提示

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

評(píng)論

0/150

提交評(píng)論