版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 1 緒論</b></p><p> 1.1 FPGA背景</p><p> 目前以硬件描述語言(Verilog或VHDL)描述的邏輯電路,可以利用邏輯綜合和布局、布線工具軟件,快速地?zé)浿罠PGA上進行測試,這一過程是現(xiàn)代集成電路設(shè)計驗證的技術(shù)主流。這些可編程邏輯元件可以被用來實現(xiàn)一些基本的邏輯門數(shù)字電路(比如與門、或門、異或門、非門
2、)或者更復(fù)雜一些的組合邏輯功能,比如譯碼器等。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件,例如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊,從而構(gòu)成時序邏輯電路。</p><p> 系統(tǒng)設(shè)計師可以根據(jù)需要,通過可編輯的連接,把FPGA內(nèi)部的邏輯塊連接起來。這就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計者的需要而改變,所以FPGA可以完成所需要的
3、邏輯功能。</p><p> FPGA一般來說比專用集成電路(ASIC)的速度要慢,無法完成更復(fù)雜的設(shè)計,并且會消耗更多的電能。但是,F(xiàn)PGA具有很多優(yōu)點,比如可以快速成品,而且其內(nèi)部邏輯可以被設(shè)計者反復(fù)修改,從而改正程序中的錯誤,此外,使用FPGA進行除錯成本較低。廠商也可能會提供便宜、但是編輯能力有限的FPGA產(chǎn)品。因為這些芯片有的可編輯能力較差,所以這些設(shè)計的開發(fā)是在普通的FPGA上完成的,然后將設(shè)計轉(zhuǎn)移
4、到一個類似于專用集成電路的芯片上。在一些技術(shù)更新比較快的行業(yè),F(xiàn)PGA幾乎是電子系統(tǒng)中的必要部件,因為在大批量供貨前,必須迅速搶占市場,這時FPGA方便靈活的優(yōu)勢就顯得很重要。</p><p> 1.2 FPGA發(fā)展前景</p><p> 通常來說半導(dǎo)體產(chǎn)業(yè)是周期性行業(yè),其周期一般為4到5年。但是隨著新技術(shù)和應(yīng)用的快速發(fā)展,現(xiàn)今半導(dǎo)體周期越來越短,且每一個周期都有典型應(yīng)用作為拉動點,比
5、如過去的PC、后來的通信行業(yè)。FPGA也明顯符合這種規(guī)律。但不同的是,當(dāng)ASIC和ASSP蕭條的時候,往往迎來FPGA的大發(fā)展。2008年以來的金融危機使得半導(dǎo)體行業(yè)平均跌幅大于10%,但是市場數(shù)據(jù)卻顯示FPGA行業(yè)依然強勁增長。危機和低迷使ASIC和ASSP制造者為謹(jǐn)慎起見,不敢貿(mào)然推出新產(chǎn)品,避免巨大的NRE費用。而FPGA恰好能迎合這一需求。</p><p> 當(dāng)今,半導(dǎo)體市場格局已成三足鼎立之勢,F(xiàn)PG
6、A,ASIC和ASSP三分天下。市場統(tǒng)計數(shù)據(jù)表明,F(xiàn)PGA已經(jīng)逐步侵蝕ASIC和ASSP的傳統(tǒng)市場,并處于快速增長階段。</p><p> 在全球市場中,Xilinx、Altera兩大公司對FPGA的技術(shù)與市場仍然占據(jù)絕對壟斷地位。兩家公司占有將近90%市場份額,專利達6000余項之多,而且這種壟斷仍在加強。同時,美國政府對我國的FPGA產(chǎn)品與技術(shù)出口進行苛刻的審核和禁運,使得國家在航天、航空乃至國家安全領(lǐng)域都
7、受到嚴(yán)重制約。因此,研發(fā)具有自主知識產(chǎn)權(quán)的FPGA技術(shù)與產(chǎn)品對打破美國企業(yè)和政府結(jié)合構(gòu)成的壟斷,及國家利益意義深遠。</p><p> 作為一種可編程邏輯器件,F(xiàn)PGA在短短二十多年中從電子設(shè)計的外圍器件逐漸演變?yōu)閿?shù)字系統(tǒng)的核心。伴隨半導(dǎo)體工藝技術(shù)的進步,F(xiàn)PGA器件的設(shè)計技術(shù)取得了飛躍發(fā)展及突破。通過FPGA器件的發(fā)展歷程來看,今后仍將朝下以下幾個方向發(fā)展:</p><p> ? 高
8、密度、高速度、寬頻帶、高保密;</p><p> ? 低電壓、低功耗、低成本、低價格;</p><p> ? IP軟/硬核復(fù)用、系統(tǒng)集成;</p><p> ? 動態(tài)可重構(gòu)以及單片集群;</p><p> ? 緊密結(jié)合應(yīng)用需求,多元化發(fā)展。</p><p> 此外,集成了FPGA 架構(gòu)、硬核CPU 子系統(tǒng)(A
9、RM/MIPS/MCU)及其他硬核IP 的芯片已經(jīng)發(fā)展到了一個“關(guān)鍵點”,它將在今后數(shù)十年中得到廣泛應(yīng)用,為系統(tǒng)設(shè)計人員提供更多的選擇。例如,以應(yīng)用為導(dǎo)向,在受專利保護的FPGA平臺架構(gòu)上無縫集成特定功能模塊,以形成具備行業(yè)競爭優(yōu)勢(高性價比)的獨特產(chǎn)品。Altera、Cypress®半導(dǎo)體、Intel®和Xilinx®公司等供應(yīng)商相繼在最近一年發(fā)布或者開始發(fā)售SoC FPGA器件。</p>
10、<p> 在FPGA領(lǐng)域,Xilinx和Altera長期穩(wěn)坐第一第二的位置。根據(jù)最新Form-10K數(shù)據(jù)顯示,其分別占有48%和41%的市場份額。其中Xilinx凈銷售額為23.1億美元,凈收入為6.3億美元;Altera凈銷售額為19.5億美元,凈收入為7.8億美元。這兩家公司一直以來是市場和技術(shù)的領(lǐng)頭羊,而剩余的市場份額被Lattice占據(jù)多數(shù)。</p><p> 為了在競爭中占據(jù)主動,Xili
11、nx與Altera新近分別宣布其下一代FPGA產(chǎn)品都將采用高k金屬柵技術(shù)的 28nm工藝,以滿足諸如云計算、移動互聯(lián)網(wǎng)和3G應(yīng)用等領(lǐng)域所不斷增長的帶寬需求。由于PLD器件采用更高技術(shù)的工藝節(jié)點制造,無疑可以降低成本、提升性能,尤其是能夠改進一直以來為ASIC所詬病的功耗水平,以適應(yīng)更廣闊的設(shè)計應(yīng)用。</p><p> Xilinx和Altera雖然控制世界將近90%的FPGA市場,但是他們的產(chǎn)品是大多以純FPG
12、A為主。“平臺化”已成為FPGA一個發(fā)展趨勢,盡管Xilinx和Altera在FPGA“平臺化”方面在最近幾年也有涉及,但概念和特點比較簡單,沒有完全形成氣候。</p><p> 權(quán)威市場調(diào)研機構(gòu)Gartner 2010年初的預(yù)測數(shù)據(jù)表明,F(xiàn)PGA正處于一個加速增長的市場勢態(tài)中。未來5年,市場平均增長幅度超過12.6%,這種增長幅度遠大于ASIC和ASSP市場。同時,市場數(shù)據(jù)表明其行業(yè)平均毛利大于60%。FPG
13、A行業(yè)需要更大的市場規(guī)模,以吸引更多的使用者。預(yù)計未來5年,隨著產(chǎn)量增加,成本進一步降低,F(xiàn)PGA市場份額將會持續(xù)增大。</p><p> 1.3 課程設(shè)計任務(wù)</p><p> 在本課程設(shè)計中使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35開發(fā)板設(shè)計一個直流電機測控儀控制和測量開發(fā)板上的直流電機,設(shè)計模塊要求能產(chǎn)生可調(diào)占空比的PWM波以對
14、直流電機進行速度控制,并能通過開發(fā)板上直流電機模塊的霍爾器件反饋的信息,計算直流電機轉(zhuǎn)速,并顯示電機的信息。</p><p> ?。?)基本技能掌握:</p><p> 1 掌握時鐘作用下頻率的控制</p><p> 2 掌握十進制計數(shù)器的設(shè)計</p><p> 3 掌握16位的鎖存器的設(shè)計</p><p>
15、4 掌握顯示譯碼功能的設(shè)計</p><p><b> ?。?)基本功能要求</b></p><p> 1 利用旋轉(zhuǎn)電位器實現(xiàn)轉(zhuǎn)速的控制</p><p> 2 利用PWM信號實現(xiàn)轉(zhuǎn)速的控制</p><p> ?。?)擴展功能選擇性要求</p><p> 1 利用4×4鍵盤陣列實現(xiàn)鍵盤
16、轉(zhuǎn)速的控制</p><p> 2 利用16*16點陣顯示實現(xiàn)轉(zhuǎn)速的顯示</p><p><b> 2 設(shè)計原理</b></p><p> 2.1 直流電機測控總原理</p><p> 直流電機測控儀總體設(shè)計硬件由圖2.1所示,F(xiàn)PGA為Altera公司的EP2C35系列,輸入設(shè)備有時鐘、4*4鍵盤、霍爾器件。時
17、鐘采用1MHZ,4*4鍵盤給FPGA輸入一個4位數(shù)組信號,霍爾器件輸入計數(shù)脈沖。輸出設(shè)備有直流電機、16*16點陣LED,直流電機可采用直接由旋鈕控制轉(zhuǎn)速或者PWM控制轉(zhuǎn)速,16*16點陣LED顯示每分鐘轉(zhuǎn)速以及設(shè)計者名字。</p><p> 圖2.1總體設(shè)計硬件框架圖</p><p> 2.2 直流電機與霍爾器件工作原理</p><p> 直流電機是我們生活
18、當(dāng)中常用的一種電子設(shè)備。其內(nèi)部結(jié)構(gòu)如下圖2.2所示:</p><p> 圖2.2直流電機結(jié)構(gòu)圖</p><p> 下面就上圖來說明直流電機的工作原理。將直流電源通過電刷接通電樞繞組,使電樞導(dǎo)體有電流流過, 由于電磁作用,這樣電樞導(dǎo)體將會產(chǎn)生磁場。同時產(chǎn)生的磁場與主磁極的的磁場產(chǎn)生電磁力,這個電磁力作用于轉(zhuǎn)子,使轉(zhuǎn)子以一定的速度開始旋轉(zhuǎn)。這樣電機就開始工作。</p><
19、;p> 為了能夠測定出電機在單位時間內(nèi)轉(zhuǎn)子旋轉(zhuǎn)了多少個周期,我們在電機的外部電路中加入了一個開關(guān)型的霍爾原件(44E),同時在電子轉(zhuǎn)子上的轉(zhuǎn)盤上加入了一個能夠使霍爾原件產(chǎn)生輸出的帶有磁場的磁鋼片。當(dāng)電機旋轉(zhuǎn)時,帶動轉(zhuǎn)盤是的磁鋼片一起旋轉(zhuǎn),當(dāng)磁鋼片旋轉(zhuǎn)到霍爾器件的上方時,可以導(dǎo)致霍爾器件的輸出端高電平變?yōu)榈碗娖?。?dāng)磁鋼片轉(zhuǎn)過霍爾器件上方后,霍爾器件的輸出端又恢復(fù)高電平輸出。這樣電機每旋轉(zhuǎn)一周,則會使霍爾器件的輸出端產(chǎn)生一個低脈沖,
20、我們就可以通過檢測單位時間內(nèi)霍爾器件輸出端低脈沖的個數(shù)來推算出直流電機在單位時間內(nèi)的轉(zhuǎn)速。直流電機和開關(guān)型霍爾器件的電路原理圖如下圖2.3所示:</p><p> 圖2.3直流電機、霍爾器件電路圖</p><p> 直流電機驅(qū)動有兩種方式,其一是可以由模擬電平來驅(qū)動,把電路圖上4與3短接,可以旋轉(zhuǎn)實驗箱左邊的旋鈕,調(diào)節(jié)旋鈕的可以控制速度;其二是通過PWM控制,把電路圖的6與5短接,PW
21、M信號高電位選通三極管,讓直流電機轉(zhuǎn)動,不過為了讓直流電機獲得較大的轉(zhuǎn)速,同樣要把電機左邊的旋鈕調(diào)到比較大的位置。</p><p> 2.3 4*4鍵盤驅(qū)動</p><p> 對鍵盤的電位掃描,就可以確定當(dāng)前的鍵有沒有被按下。單個按鍵電路如圖2.4所示,在按鍵沒有被按下時,在判斷電位點可以獲取高電位,在鍵被按下時,在判斷電位為低電位,這樣可以通過判斷點電位的高低即可確定按鍵有沒有被按下
22、。</p><p> 圖2.4單個按鍵電路圖</p><p> 4*4的鍵盤與FPGA連接圖如下圖2.5所示,掃描鍵盤由FPGA的8個控制端口確定,控制行端口設(shè)置為buffer模式,控制列端口設(shè)置為in模式,掃描鍵盤的方法為先給第一行鍵盤為低電平,其余行列為高電平,讀取縱列的電位值,如果沒鍵被按下,在電位判斷端口獲取的為高電位,如果有鍵按下,電位判斷點的電平不全為零,由電位值的第幾位為
23、零就可以確定當(dāng)前行那個鍵被按下,依次對四行鍵盤掃描,掃描結(jié)束輸出4位數(shù)組的信號,以告訴那個鍵被按下。</p><p> 圖2.5 4*4矩陣鍵盤電路原理圖</p><p> 2.4 16*16點LED陣列驅(qū)動</p><p> 16*16點陣由此256個LED通過排列組合而形成16行*16列的一個矩陣式的LED陣列,俗稱16*16點陣。單個的LED的電路如下圖
24、20-1所示:</p><p> 圖2.6單個LED電路圖</p><p> 由上圖可知,對于單個LED的電路圖當(dāng)Rn輸入一個高電平,同時Cn輸入一個低電平時,電路形成一個回路,LED發(fā)光。也就是LED點陣對應(yīng)的這個點被點亮。16*16點陣也就是由16行和16列的LED組成,其中每一行的所有16個LED的Rn端并聯(lián)在一起,每一列的所有16個LED的Cn端并聯(lián)在一起。通過給Rn輸入一個高
25、電平,也就相當(dāng)于給這一列所有LED輸入了一個高電平,這時只要某個LED的Cn端輸入一個低電平時,對應(yīng)的LED就會被點亮。具體的電路如下圖2.7所示:</p><p> 圖2.7 16*16點陣電路原理圖</p><p> 16*16點陣LED驅(qū)動時,依次選通LED點陣行端口,每次只能選通一個端口(Cn),字符譯碼的第N列結(jié)果在列端口(Rn)輸入,通過高速依次點亮led點陣就可看到led
26、點陣上顯示的數(shù)字和文字。</p><p> 2.5 PWM控制原理</p><p> PWM控制就是對脈沖的寬度進行調(diào)制的技術(shù)。即通過對一系列脈沖的寬度進行調(diào)制來等效地獲得所需要的波形。</p><p> 如下圖2.8所示,設(shè)定值計數(shù)器設(shè)置PWM信號的占空比。當(dāng)U\D=1,輸入CLK2,使設(shè)定值計數(shù)值的輸出值增加,PWM的占空比增加,電機轉(zhuǎn)速加快;當(dāng)U\D=0
27、,輸入CLK2使設(shè)定值計算器的輸出值減小,PWM的占空比減小,電機轉(zhuǎn)速變慢。在CLK0的作用下,鋸齒波計數(shù)器輸出周期性線性增加的鋸齒波。當(dāng)計數(shù)值小于設(shè)定值時,數(shù)字比較器輸出低電平;當(dāng)計數(shù)值大于設(shè)定值時,數(shù)字比較器輸出高電平,由此產(chǎn)生周期性的PWM波形。旋轉(zhuǎn)反向控制電路控制直流電動機轉(zhuǎn)向和啟/停,該電路由兩個2選1多路選擇器組成,Z\F鍵控制選擇PWM波形從正端Z進入H橋,還是從負(fù)端進入H橋,以控制電機的旋轉(zhuǎn)方向。START鍵通過“與”門
28、控制PWM的輸出,實現(xiàn)對電機的工作/停止控制。H橋電路由大功率晶體管組成,PWM波形通過方向控制電路送到H橋,經(jīng)功率放大以后驅(qū)動電機轉(zhuǎn)動。</p><p> 圖2.8 PWM控制電路原理圖</p><p><b> 3 程序設(shè)計</b></p><p> 3.1 總體程序設(shè)計思路</p><p> 程序總體設(shè)
29、計分為時鐘控制信號模塊、十進制計數(shù)模塊、顯示模塊、鍵盤模塊、pwm控制模塊、十六位鎖存模塊。設(shè)計思路為十進制計數(shù)器對霍爾器件的脈沖數(shù)計數(shù),時鐘控制在到了六秒時將計數(shù)值鎖存到16位鎖存器,顯示模塊的點陣LED顯示鎖存器所鎖存的值以及設(shè)計者名字,同時鍵盤模塊送出鍵盤所按得鍵值控制直流電機轉(zhuǎn)速的增減。</p><p> 3.2 時鐘控制信號程序設(shè)計</p><p> 時鐘控制信號中要為下級
30、鎖存模塊提供鎖存控制型號,同時為計數(shù)模塊提使能和清零信號。設(shè)計當(dāng)中由Cnttemp對1MHZ的上升緣計數(shù)來產(chǎn)生1HZ的信號(Cnttemp<5000送出高電平,Cnttemp>5000送出低電平),Count對秒信號計數(shù),鎖存控制信號在第六秒結(jié)束時送出,清零信號在第7秒送出,所以要先產(chǎn)生秒脈沖。</p><p><b> 1M的時鐘 </b></p><
31、;p><b> 是否</b></p><p><b> 小于等于大于</b></p><p><b> 輸出 </b></p><p> 圖3.1時鐘控制信號流程圖</p><p> 注:Enal為輸出控制計數(shù)器的使能信號。</p><
32、p> Clr為輸出控制計數(shù)器的清零信號。</p><p> Load為輸出控制鎖存器的鎖存信號。</p><p> 圖3.2 時鐘控制信號模塊</p><p> 3.3 十進制計數(shù)器程序設(shè)計</p><p> 設(shè)計當(dāng)中要顯示當(dāng)前直流電機的轉(zhuǎn)速,因而要4位十進制的計數(shù)器,對轉(zhuǎn)速脈沖計數(shù)。設(shè)計當(dāng)中只需要設(shè)計一位十進制的計數(shù)器,設(shè)計
33、當(dāng)中特別注意對進位脈沖的處理。</p><p><b> 設(shè)計流程如下:</b></p><p><b> 計數(shù)脈沖</b></p><p><b> 是否</b></p><p> 圖3.3 十進制計數(shù)器程序設(shè)計流程圖</p><p> 注
34、:CLR為外部輸入的清零信號。</p><p> ENA為外部輸入的計數(shù)使能信號。</p><p> 十進制計數(shù)器對計數(shù)脈沖計數(shù),當(dāng)計數(shù)值到了9時,計數(shù)值重新到零,同時在歸零的同時輸出進位脈沖。</p><p> 圖3.4十進制計數(shù)模塊</p><p> 3.4 鎖存模塊程序設(shè)計</p><p> 16位鎖
35、存模塊設(shè)計較為簡單,只有在控制信號為高電平時鎖存當(dāng)前輸入的信號值,在低電平時保持鎖存被鎖存的輸入信號。</p><p><b> 是否</b></p><p> 圖3.5 16位鎖存器設(shè)計流程</p><p> 注:IN為16位輸入信號,OUT為16位輸出信號,LOAD為輸入鎖存信號。</p><p> 信號D
36、IN對IN信號進行保存,只有在LOAD=’1’時才把IN信號保存到DIN,DIN再傳遞給OUT。</p><p> 圖3.6 16位鎖存模塊</p><p> 3.5 PWM控制信號程序設(shè)計</p><p> PWM控制信號為驅(qū)動直流電機轉(zhuǎn)速的使能信號,PWM控制由四個輸入信號控制pwm的占空比,本設(shè)計當(dāng)中最高為15/16,由控制信號”1111”獲得,最低為0
37、,由控制信號”0000”獲得。</p><p><b> 流程如:</b></p><p><b> 時鐘1MHZ</b></p><p><b> 是</b></p><p><b> 否</b></p><p><
38、b> 輸出pwm控制信號</b></p><p> 圖3.7 PWM控制流程圖</p><p> 注:KEY為輸入數(shù)據(jù)大小</p><p> CYCLE對時鐘從0到16000循環(huán)計數(shù),當(dāng)CYCLE=0時把輸出電平置為高電平,CYCLE=輸入值*1000時把輸出電平置為低電平,這樣就可以通過外部輸入控制占空比,從而控制直流電機的轉(zhuǎn)速。<
39、/p><p> 圖3.8 PWM控制模塊</p><p> 3.6 鍵盤掃描程序設(shè)計</p><p> PWM控制直流電機是通過掃描鍵盤的按鍵來控制方波的占空比,所按得鍵值越來,方波的占空比越大,最高可達15/16,最低為0。鍵盤掃描輸出為一個4為的數(shù)組。掃描簡單的來所就是給行低電平,看列獲得的電位就可確定在此行所按下的鍵。大體流程如下:</p>
40、<p><b> 時鐘1MHZ輸入</b></p><p> 圖3.9鍵盤掃描流程圖</p><p> 鍵盤模塊大體設(shè)計思路為,由信號COUNT對時鐘0到3循環(huán)計數(shù),在CONT=N時對第N列掃描,判斷列端電位,確定當(dāng)前按鍵的鍵位,輸出鍵值。</p><p><b> 圖3.10鍵盤模塊</b></p
41、><p> 3.7 顯示模塊程序設(shè)計</p><p> 顯示模塊為16*16點陣LED。大體流程如下:</p><p><b> 時鐘1KHZ</b></p><p><b> 是否</b></p><p> 圖3.11 顯示模塊程序流程</p><
42、;p> 顯示程序中,我們把十進制計數(shù)器的百、十、個位數(shù)輸入,設(shè)計當(dāng)中,只記錄六秒鐘的轉(zhuǎn)速,顯示的為每分鐘的轉(zhuǎn)速。點陣LED顯示需要譯碼,按每列譯碼。點陣LED每次點亮一列,高速點亮就可以在陣面上看到顯示漢字或者數(shù)字。</p><p> 圖3.12 點陣顯示模塊</p><p><b> 設(shè)計過程介紹</b></p><p><
43、b> 4.1 設(shè)計過程</b></p><p><b> ?。?)測速顯示</b></p><p> 當(dāng)電機旋轉(zhuǎn)時,帶動轉(zhuǎn)盤是的磁鋼片一起旋轉(zhuǎn),當(dāng)磁鋼片旋轉(zhuǎn)到霍爾器件的上方時,可以導(dǎo)致霍爾器件的輸出端高電平變?yōu)榈碗娖?。?dāng)磁鋼片轉(zhuǎn)過霍爾器件上方后,霍爾器件的輸出端又恢復(fù)高電平輸出。這樣電機每旋轉(zhuǎn)一周,則會使霍爾器件的輸出端產(chǎn)生一個低脈沖,我們就可以
44、通過檢測單位時間內(nèi)霍爾器件輸出端低脈沖的個數(shù)來推算出直流電機在單位時間內(nèi)的轉(zhuǎn)速。</p><p> 電機的轉(zhuǎn)速通常是指每分鐘電機的轉(zhuǎn)速,也就是單位為rpm,實際測量過程中,為了減少轉(zhuǎn)速刷新的時間,通常都是5~10秒刷新一次。如果每6秒鐘刷新一次,那么相當(dāng)于只記錄了6秒鐘內(nèi)的電機轉(zhuǎn)數(shù),把記錄的數(shù)據(jù)乘10即得到一分鐘的轉(zhuǎn)速。最后將這個數(shù)據(jù)在點陣上顯示出來。為了使顯示的數(shù)據(jù)能夠在點陣上顯示穩(wěn)定,在這個數(shù)據(jù)的輸出時加入
45、了一個16位的鎖存器,把鎖存的數(shù)據(jù)送給點陣顯示,這樣就來會因為在計數(shù)過程中,數(shù)據(jù)的變化而使點陣顯示不斷變化。</p><p> ?。?)pwm產(chǎn)生控制</p><p> 通過控制占空比,從而達到控制直流電機控制。用按鍵先預(yù)設(shè)一個速度值,讓電動機的實際轉(zhuǎn)速與預(yù)設(shè)值比較,如果不相等,就調(diào)節(jié)占空比使之達到預(yù)設(shè)值。</p><p><b> 4.2設(shè)計體會&l
46、t;/b></p><p> EDA技術(shù)對于我們電子信息工程專業(yè)的學(xué)生來說是一本很重要的專業(yè)技術(shù)課程,EDA技術(shù)極大地提高了電路設(shè)計的效率和可操作性,減輕了設(shè)計者的勞動強度,是一門實際應(yīng)用很廣泛的技術(shù)?,F(xiàn)在對EDA的概念或范疇用得很寬。包括在機械、電子、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個領(lǐng)域,都有EDA的應(yīng)用。目前EDA技術(shù)已在各大公司、企事業(yè)單位和科研教學(xué)部門廣泛使用。例如在飛機制造過程
47、中,從設(shè)計、性能測試及特性分析直到飛行模擬,都可能涉及到EDA技術(shù)。</p><p> 所以,EDA課程的學(xué)習(xí)對于我們自身素質(zhì)和能力的提高有十分重要的積極作用,應(yīng)該很認(rèn)真的學(xué)習(xí)。</p><p> 本次課程設(shè)計為期2周,在這兩周中,我們經(jīng)歷了從什么都不懂,到有些了解,到逐漸熟悉EDA各軟件使用,及VHDL語言的運用幾個過程。在此過程中我學(xué)到了很多書本上學(xué)不到的東西,同時也鞏固了以前所學(xué)
48、的知識。在做子模塊編寫的時候遇到了很多問題,開始時什么都不知道,就到網(wǎng)上搜集資料,查看老師給的資料,再不懂的就問老師,后來弄清了其中的原理后,經(jīng)過多次練習(xí),逐漸能夠解決編寫程序中的問題,把模塊編寫出來。然而,在仿真時,也遇到了一點困難,想要的結(jié)果不能得到正確的顯示,但是經(jīng)過對結(jié)果的一點點分析,從錯誤中思考產(chǎn)生錯誤的原因,修改電路圖,最終得到想要的結(jié)果,完成了本次課程設(shè)計。</p><p> 通過這次課程設(shè)計使我
49、懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,從而提高自己的實際動手能力和獨立思考的能力,才能真正為社會服務(wù)。</p><p> 在此,也要感謝同組的成員,我基礎(chǔ)不好,很多都不懂,感謝他在這兩周的無私幫助,細(xì)心講解,還要感謝給予我們悉心指導(dǎo)的老師,在這兩周中,多虧您們不厭其煩的指教。謝謝!</p><p><b&
50、gt; 參考文獻</b></p><p> [1] 《SOPCIIEDA實驗指導(dǎo)書》(第二版)</p><p> [2] 《SOPCII使用手冊》(第二版)</p><p> [3] 《EDA技術(shù)與應(yīng)用》(第4版). 江國強編著. 電子工業(yè)出版社,2013</p><p> [4] 《EDA技術(shù)實用教程(第二版),潘松
51、、黃繼業(yè)編著 ,科學(xué)出版社 ,2005</p><p><b> 附錄A:設(shè)計程序</b></p><p> 時鐘控制信號模塊程序</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee
52、.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> --------------------------------------------------------------------</p><p> entity teltcl is</p>&l
53、t;p> port( Clk : in std_logic; --時鐘輸入1Mhz</p><p> ena : out std_logic; --允許計數(shù)</p><p> clr : out std_logic; --計數(shù)器清零信號產(chǎn)生</p><p> load
54、 : out std_logic --鎖存、顯示輸出允許</p><p><b> ); </b></p><p> end teltcl;</p><p> --------------------------------------------------------------------</p>
55、<p> architecture behave of teltcl is</p><p> signal clk1hz :std_logic;--1HZ時鐘信號</p><p> signal count : std_logic_vector(2 downto 0);--6秒計數(shù)</p><p> signal clr1
56、 :std_logic;--清零信號</p><p> signal ena1 :std_logic;--允許計數(shù)信號</p><p> signal load1 :std_logic;--允許計數(shù)信號</p><p> signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15;--計數(shù)數(shù)據(jù)<
57、/p><p><b> begin</b></p><p> process(clk) --1HZ信號產(chǎn)生</p><p> variable cnttemp : INTEGER RANGE 0 TO 999999;</p><p><b> begin</b></p>&l
58、t;p> IF clk='1' AND clk'event THEN </p><p> IF cnttemp=999999 THEN cnttemp:=0; </p><p><b> ELSE </b></p><p> IF cnttemp<500000 THEN clk1hz<='
59、;1'; </p><p> ELSE clk1hz<='0'; </p><p><b> END IF; </b></p><p> cnttemp:=cnttemp+1; </p><p><b> END IF; </b></p><
60、p><b> end if;</b></p><p> end process;</p><p> process(Clk1hz)--6秒計數(shù)</p><p><b> begin</b></p><p> if(Clk1hz'event and Clk1hz='1
61、') then</p><p> count<=count+1;</p><p> if count<6 then</p><p> ena1<='1';load1<='0';clr1<='0';</p><p> elsif count=6
62、 then</p><p> load1<='1';ena1<='0';clr1<='0';</p><p> elsif count=7 then</p><p> ena1<='0';load1<='0';clr1<='1
63、39;;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> ena<=ena1; load<=load1;clr<=clr1;</p><p> end process;</p><
64、p> end behave;</p><p> 十進制計數(shù)器模塊程序 </p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL; </p><p> ENTITY CNT10 IS</p><p> PORT (CLK:IN S
65、TD_LOGIC; --計數(shù)時鐘信號</p><p> CLR:IN STD_LOGIC; --清零信號</p><p> ENA:IN STD_LOGIC; --計數(shù)使能信號</p><p> CQ :OUT INTEGER RANGE 0 TO 15;--4位計數(shù)結(jié)果輸出</p><p> CARRY
66、_OUT:OUT STD_LOGIC); --計數(shù)進位</p><p> END CNT10;</p><p> ARCHITECTURE ART OF CNT10 IS </p><p> SIGNAL CQI :INTEGER RANGE 0 TO 15;</p><p><b> BEGIN</b>
67、;</p><p> PROCESS(CLK,ENA) IS</p><p><b> BEGIN</b></p><p> IF CLR= '1' THEN CQI<= 0; ----計數(shù)器異步清零</p><p> elsIF CLK'EVENT AND CLK=
68、'1' THEN </p><p> IF ENA= '1' THEN </p><p> iF CQI=10 THEN cqi<=1;</p><p> ELSE CQI<=cqi+1;</p><p> END IF; ----等于9,則計數(shù)器清零</p
69、><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS (CQI) IS</p><p><b> BEGIN</b></p&
70、gt;<p> IF CQI=10 THEN CARRY_OUT<= '1'; ----進位輸出</p><p> ELSE CARRY_OUT<= '0';</p><p><b> END IF;</b></p><p> END PROCESS;</p>
71、<p><b> CQ<=CQI;</b></p><p><b> END ART;</b></p><p><b> 鍵盤掃描程序</b></p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1
72、164.ALL;</p><p> use IEEE.STD_LOGIC_ARITH.ALL;</p><p> use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p><b> PORT (</b></p><p> clk : IN std_l
73、ogic; </p><p> rst : IN std_logic; </p><p> row : OUT std_logic_vector(3 DOWNTO 0); -- 行線 </p><p> column : IN std_lo
74、gic_vector(3 DOWNTO 0); -- 列線</p><p> pwm : out integer range 0 to 15 ); --電機控制信號</p><p><b> END ck;</b></p><p> ARCHITECTURE arch OF ck IS</p><p>
75、 SIGNAL div_cnt : std_logic_vector(24 downto 0);</p><p> SIGNAL scan_key : std_logic_vector(3 DOWNTO 0); --掃描碼寄存器 </p><p> SIGNAL key_code : integer range 0
76、to 15; </p><p> signal keynum : integer range 0 to 15;</p><p><b> BEGIN</b></p><p> row <= scan_key;</p><p> pwm <= key_code;</p><p&g
77、t; PROCESS(clk,rst)</p><p><b> BEGIN</b></p><p> IF (NOT rst = '1') THEN</p><p> div_cnt <= "0000000000000000000000000"; </p><p>
78、; ELSIF(clk'EVENT AND clk = '1')THEN</p><p> div_cnt <= div_cnt + 1; </p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(div
79、_cnt(20 downto 19))</p><p><b> BEGIN</b></p><p> CASE div_cnt(20 downto 19) IS</p><p> WHEN "00"=> scan_key<="1110";</p><p> W
80、HEN "01"=> scan_key<="1101";</p><p> WHEN "10"=> scan_key<="1011";</p><p> WHEN "11"=> scan_key<="0111";</p>
81、<p><b> END CASE;</b></p><p> END PROCESS;</p><p> PROCESS(clk,rst)</p><p><b> BEGIN</b></p><p> IF (NOT rst = '1') THEN<
82、/p><p> key_code <= 0; </p><p> ELSIF(clk'EVENT AND clk='1')THEN</p><p> CASE scan_key IS --檢測何處有鍵按下</p><p> WHEN "1110" =></p>
83、<p> CASE column IS</p><p> WHEN "1110" =></p><p> key_code <= 13; </p><p> WHEN "1101" =></p><p> key_code <= 12; <
84、;/p><p> WHEN "1011" =></p><p> key_code <= 11; </p><p> WHEN "0111" =></p><p> key_code <= 10; </p><p> WHEN OTH
85、ERS =></p><p><b> NULL;</b></p><p><b> END CASE;</b></p><p> WHEN "1101" =></p><p> CASE column IS</p><p> WHE
86、N "1110" =></p><p> key_code <= 15; </p><p> WHEN "1101" =></p><p> key_code <= 9; </p><p> WHEN "1011" =></
87、p><p> key_code <= 6; </p><p> WHEN "0111" =></p><p> key_code <= 3; </p><p> WHEN OTHERS =></p><p><b> NULL;</b&g
88、t;</p><p><b> END CASE;</b></p><p> WHEN "1011" =></p><p> CASE column IS</p><p> WHEN "1110" =></p><p> key_cod
89、e <= 0; </p><p> WHEN "1101" =></p><p> key_code <= 8; </p><p> WHEN "1011" =></p><p> key_code <= 5; </p><
90、;p> WHEN "0111" =></p><p> key_code <= 2; </p><p> WHEN OTHERS =></p><p><b> NULL;</b></p><p><b> END CASE;</b>&l
91、t;/p><p> WHEN "0111" =></p><p> CASE column IS</p><p> WHEN "1110" =></p><p> key_code <= 14; </p><p> WHEN "1101&
92、quot; =></p><p> key_code <= 7; </p><p> WHEN "1011" =></p><p> key_code <= 4; </p><p> WHEN "0111" =></p><p&g
93、t; key_code <= 1; </p><p> WHEN OTHERS =></p><p><b> NULL;</b></p><p><b> END CASE;</b></p><p> WHEN OTHERS =></p><
94、;p> key_code <= 15; </p><p><b> END CASE;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END arch;</b><
95、;/p><p> 16*16點陣顯示程序</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned
96、.all;</p><p> --------------------------------------------------------------------</p><p> entity asd is</p><p> port( clk : in std_logic; --時鐘輸入</p><p> i
97、n3,in2,in1,in0:in std_logic_vector(3 downto 0);</p><p> keyc : out std_logic_vector(15 downto 0); --點陣列控制</p><p> keyr : out std_logic_vector(15 downto 0) --點陣行顯示</p><
98、p><b> ); </b></p><p><b> end asd;</b></p><p> --------------------------------------------------------------------</p><p> architecture behave of
99、 asd is</p><p> signal cdount : std_logic_vector(3 downto 0);</p><p> signal dount : std_logic_vector(8 downto 0);</p><p> signal S : std_logic_vector(3 downto 0);</p>
100、;<p> signal a : std_logic_vector(3 downto 0);</p><p> signal b : std_logic_vector(3 downto 0);</p><p> signal c : std_logic_vector(3 downto 0);</p><p> si
101、gnal d : std_logic_vector(3 downto 0);</p><p><b> begin</b></p><p><b> a<=in2;</b></p><p><b> b<=in1;</b></p><p><b
102、> c<=in0;</b></p><p><b> d<=in3;</b></p><p> process(clk) --顯示時序控制 </p><p><b> begin</b></p><p> if clk'event and
103、 clk='1' then</p><p> dount<=dount+1;</p><p> if dount=255 then</p><p> if S=15 then</p><p> S<="0000";</p><p><b>
104、 else</b></p><p><b> s<=S+1;</b></p><p><b> end if;</b></p><p><b> s<=s+1;</b></p><p><b> else</b><
105、/p><p><b> s<=S;</b></p><p><b> end if;</b></p><p> if cdount<15 then</p><p> cdount<=cdount+1;</p><p><b> els
106、e</b></p><p> cdount<="0000";</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p>
107、 process(cdount,s)</p><p><b> begin</b></p><p> case cdount is</p><p> when "0000"=>keyc<="0000000000000001"; --列選擇(lg7088Ah)</p><
108、;p> when "0001"=>keyc<="0000000000000010";</p><p> when "0010"=>keyc<="0000000000000100";</p><p> when "0011"=>keyc<=&qu
109、ot;0000000000001000";</p><p> when "0100"=>keyc<="0000000000010000";</p><p> when "0101"=>keyc<="0000000000100000";</p><p>
110、; when "0110"=>keyc<="0000000001000000";</p><p> when "0111"=>keyc<="0000000010000000";</p><p> when "1000"=>keyc<="00
111、00000100000000";</p><p> when "1001"=>keyc<="0000001000000000";</p><p> when "1010"=>keyc<="0000010000000000";</p><p> wh
112、en "1011"=>keyc<="0000100000000000";</p><p> when "1100"=>keyc<="0001000000000000";</p><p> when "1101"=>keyc<="0010000
113、000000000";</p><p> when "1110"=>keyc<="0100000000000000";</p><p> when "1111"=>keyc<="1000000000000000";</p><p> when ot
114、hers=>keyc<="0000000000000000";</p><p><b> end case;</b></p><p> if s="0000" then</p><p> if a="0000" then</p><p>
115、; case cdount is</p><p> when "0000"=>keyr<="1111111111111111" ; </p><p> when "0001"=>keyr<="1111111111111111" ; </p><p> wh
116、en "0010"=>keyr<="1111111111111111" ; </p><p> when "0011"=>keyr<="1100000000000011" ; </p><p> when "0100"=>keyr<="110
117、0000000000011" ; </p><p> when "0101"=>keyr<="1100111111110011" ; </p><p> when "0110"=>keyr<="1100111111110011" ; </p><p>
118、; when "0111"=>keyr<="1100111111110011" ; </p><p> when "1000"=>keyr<="1100111111110011" ; </p><p> when "1001"=>keyr<=&quo
119、t;1100111111110011" ; </p><p> when "1010"=>keyr<="1100111111110011" ; </p><p> when "1011"=>keyr<="1100000000000011" ; </p><
120、;p> when "1100"=>keyr<="1100000000000011" ; </p><p> when "1101"=>keyr<="1111111111111111" ; </p><p> when "1110"=>keyr<
121、="1111111111111111" ; </p><p> when "1111"=>keyr<="1111111111111111" ; </p><p> when others=>keyr<="1111111111111111" ; </p><p>
122、; end case; </p><p><b> else</b></p><p> if a="0001" then</p><p> case cdount is</p><p> when "0000"=>keyr<="11111111
123、11111111" ;</p><p> when "0001"=>keyr<="1111111111111111" ;</p><p> when "0010"=>keyr<="1111111111111111" ;</p><p> when
124、"0011"=>keyr<="1111111111111111" ;</p><p> when "0100"=>keyr<="1111111111111111" ;</p><p> when "0101"=>keyr<="11100111
125、11111111" ;</p><p> when "0110"=>keyr<="1110011111110011" ;</p><p> when "0111"=>keyr<="1110011111110011" ;</p><p> when
126、"1000"=>keyr<="1110000000000011" ;</p><p> when "1001"=>keyr<="1110000000000011" ;</p><p> when "1010"=>keyr<="11100111
127、11111111" ;</p><p> when "1011"=>keyr<="1110011111111111" ;</p><p> when "1100"=>keyr<="1110011111111111" ;</p><p> when
128、"1101"=>keyr<="1111111111111111" ;</p><p> when "1110"=>keyr<="1111111111111111" ;</p><p> when "1111"=>keyr<="11111111
129、11111111" ;</p><p> when others=>keyr<="1111111111111111" ; </p><p> end case; </p><p><b> else</b></p><p> if a="0010"
130、 then</p><p> case cdount is</p><p> when "0000"=>keyr<="1111111111111111" ;</p><p> when "0001"=>keyr<="1111111111111111" ;&
131、lt;/p><p> when "0010"=>keyr<="1111111111111111" ;</p><p> when "0011"=>keyr<="1111111111111111" ;</p><p> when "0100"=
132、>keyr<="1100000000111001" ;</p><p> when "0101"=>keyr<="1100000000111001" ;</p><p> when "0110"=>keyr<="1100111100111001" ;&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計--直流電機測控儀
- eda實驗直流電機測控系統(tǒng)設(shè)計
- 直流電機課程設(shè)計--直流電機控制系統(tǒng)設(shè)計
- 直流電機調(diào)速課程設(shè)計
- 課程設(shè)計---直流電機速度控制
- 直流電機閉環(huán)調(diào)速課程設(shè)計
- 直流電機測速系統(tǒng)課程設(shè)計
- 直流電機順序控制課程設(shè)計報告
- 直流電機串電阻啟動課程設(shè)計
- 單片機課程設(shè)計-直流電機
- 微機接口課程設(shè)計--直流電機控制
- 直流電機無極調(diào)速系統(tǒng)課程設(shè)計
- 電力電子課程設(shè)計-直流電機調(diào)速
- 直流電機雙閉環(huán)系統(tǒng)課程設(shè)計
- 課程設(shè)計--直流電機調(diào)速控制的設(shè)計
- 直流電機轉(zhuǎn)速測量與控制課程設(shè)計
- 電機拖動課程設(shè)計--直流電機調(diào)速系統(tǒng)的設(shè)計
- 直流電機
- 電子課程設(shè)計報告(直流電機轉(zhuǎn)速測量)
- 基于ppga的直流電機控制課程設(shè)計
評論
0/150
提交評論