




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第1章 本課題內容1 課題目的頻率合成技術是現代通訊系統(tǒng)的重要組成局部,是對一個高精度和高穩(wěn)定度的基準頻率進行加、減、乘、除四那么運算,產生具有同樣穩(wěn)定度和基準度的頻率。分頻器是數字邏輯電路設計中經常使用的一個根本電路。通常,整數分頻可以很容易地用計數器或狀態(tài)機來實現。但在某些場合下,時鐘源與所需要的頻率并不成整數關系,此時便需要采用小數分頻器進行分頻。一般來說,小數分頻電路可以分為半整數分頻電路和非半整數分頻電路兩類。對于小數分頻的FPGA設計,目前廣泛采用的方法是雙模前置小數分頻,以及一種由雙模前置小數分頻改良而得到的小數分頻用一個半整數分頻器和一個整數分頻器代替雙模前置小數分頻中的兩個整
2、數分頻器。雖然這兩種方案輸出時鐘的占空比誤差和抖動性能方面有所差異,但其工作原理卻是一致的。雙模前置小數分頻器在理論上可以實現任意小數分頻。但在實際的電路設計中,不可能真正實現任意小數分頻。小數分頻器的精度受控制計數器的影響,而控制計數器的設計會受硬件資源的限制,盡管FPGA有相當豐富的硬件資源。另外,基于FPGA實現的雙模前置小數分頻器在兩個整數分頻時鐘之間的切換點上,有時候會出現毛刺,而時鐘是不應該有毛刺存在的。此時,就要結合脈沖刪除技術,設計出一種可以進行任意小數分頻且不會出現毛刺的小數分頻方案,并通過編程實現。本文利用VHDL硬件描述語言的設計方式,通過MAXPLUS II開發(fā)平臺,使
3、用Altera公司的FPGA器件,設計并實現了一種不同占空比的任意小數分頻器。2 小數分頻的根本原理假設時鐘源的頻率為f0 ,期望得到的頻率為f1 ,那么其分頻比X為: X= 式1-1 其中,X1。假設MXM+1,M為整數,那么有X=M+= 式1-2 其中,N1和N2均為整數。當N1和N2取不同的正整數時,從可以得到任意一個小數,就可以從理論上實現任意小數分頻比的分頻。由于0,ai =0,1,所以從工程的角度可以進一步構造出以下關系: = 式1-3 式1-3有明確的物理意義,它的右邊實際上是個多位累加器。例如,要把13MHz的時鐘信號分頻為8MHz的時鐘信號,那么=0.625,a1=1,a2=
4、0,a3,此時,盡管在理論上可以設計這樣的多位累加器,但在實際電路中卻是不可實現的。因此,實際所設計的小數分頻器的分頻比,有時候與實際期望得到的分頻比存在一個微小的偏差;當分頻器長時間工作,就會導致累計誤差。利用脈沖刪除電路,有規(guī)律地刪除時鐘源中的一些脈沖,從而實現平均意義上的小數分頻。在硬件電路的設計過程中,利用脈沖刪除電路,就不會出現上述競爭冒險和毛刺的問題,而且可以很容易地用硬件實現任意小數分頻。吞脈沖原理:吞脈沖電路通過小數分頻器實現吞食脈沖的功能。在脈沖傳輸信道上增加一個脈沖刪除控制器,脈沖刪除器在適當的時候吞掉一個脈沖,脈沖刪除時機的選擇受脈沖刪除控制器的控制。圖給出了脈沖刪除電路
5、原理。該電路主要由三局部組成:n倍頻計數累加器、余數發(fā)生器和脈沖刪除控制器。輸出脈沖溢出脈沖n倍計數累加器余數發(fā)生器脈沖刪除控制器步進預置基頻fr 圖 脈 沖 刪 除 原 理電路工作原理:首先設置n倍頻計數累加器的模m,在輸入基頻fr的作用下,每來一個基頻脈沖fr ,n倍頻計數累加器就加n。當計數值大于計數器的模m時,就產生一個刪除脈沖,并傳送給脈沖刪除控制器。從而實現了脈沖刪除。設有一個5MHz時鐘源,但電路中需要產生一個2MHz的時鐘信號,由于分頻比為2.5,因此整數分頻器將不能勝任。采用可變成邏輯器件實現分頻系數為2.5的分頻器,可采用以下方法:設計一個模3的計數器,再設計一個扣除脈沖電
6、路,加在模3計數器輸出之后,每來兩個脈沖就扣除一個脈沖,就可以得到分頻系數為2.5的小數分頻器。采用類似的方法,可以設計分頻系數為任意半整數的分頻器。小數分頻的根本原理是:采用脈沖吞吐計數,設計兩個不同的分頻比的整數分頻器,通過控制單位時間內兩種分頻比出現的不同次數,從而獲得所需的小數分頻值。例如,設計一個分頻系數為8.7的分頻器,可以將分頻器設計成3次8分頻,7次9分頻,這樣總的分頻值為: 從這種實現方法的特點可以看出,由于分頻器的分頻值在不斷改變,因此分頻后得到的信號抖動大。當分頻系數為N為整數時,可控制扣除脈沖的時間,使輸入為一個穩(wěn)定的脈沖頻率,而不是一次N分頻,一次N-1分頻。3 本課
7、題實現方法本課題以CPLD/FPGA作為可編程ASIC器件。其電路可由一個模N計數器、二分頻器和一個異或門組成。如下圖。異或門模N計數器2分頻器圖1.2 通用半整數分頻器電路組成最后結果可通過VHDL程序,在MAX+PLUS II環(huán)境中進行仿真。第2章 開發(fā)環(huán)境1 電子系統(tǒng)設計與ASIC技術隨著21世紀的到來,人類正跨入信息時代。從計算機到移動 ,從家用無了使用的VCD、HDTV、多媒體電腦到軍用雷達、醫(yī)用CT儀器等設備,無不由各種各樣的電子系統(tǒng)組成。在這些電子系統(tǒng)中,數字化技術的應用比比皆是。由于數字技術在處理和傳輸信息方面的各種優(yōu)點,數字技術與數字集成電路的使用已經成為后成現代電子系統(tǒng)的重
8、要標志。電子系統(tǒng)的設計方法現代電子系統(tǒng)一般由模擬子系統(tǒng)、數字子系統(tǒng)和微處理器子系統(tǒng)三大局部組成。從概念上講,但凡利用數字技術處理和傳輸信息的電子系統(tǒng)都可以稱為數字系統(tǒng)。像其他電子系統(tǒng)一樣,數字系統(tǒng)以往是采用傳統(tǒng)的搭積木式的方法進行設計,即由器件搭成電路板,由電路板搭成電子系統(tǒng)。數字系統(tǒng)最初的“積木塊是木頂功能的標準集成電路。用戶只要根據需要選擇適宜的器件,并按照器件推薦的電路搭成系統(tǒng)。在設計時,設計者幾乎沒有靈活性可言,搭成的電子系統(tǒng)所需的芯片種類多且數目大。隨著半導體技術、集成技術和計算機技術的開展,電子系統(tǒng)的設計方法和設計手段發(fā)生了很大的變化。特別是進入到20世紀90年代以后,EDA技術的
9、開展和普及給電子系統(tǒng)的設計帶來了革命性的變化,并已滲透到電子系統(tǒng)設計的各個領域。在半導體技術方面,可編程技術被廣泛地應用到器件的設計上,給數字系統(tǒng)的設計帶來了很大的靈活性。傳統(tǒng)的數字系統(tǒng)設計只能對電路板進行設計,通過設計電路板來實現系統(tǒng)功能。利用EDA工具,采用可編程器件,通過設計芯片來實現系統(tǒng)功能,這種方法稱為基于芯片的設計方法。新的設計方法能夠由設計者定義器件的內部邏輯和管腳,將原來由電路板設計完成的大局部工作放在芯片的設計中進行。這樣不僅可以通過芯片設計實現多種數字邏輯系統(tǒng)功能,而且由于管腳定義的靈活性,大大減輕了電路圖設計和電路板設計的工作量和難度,從而有效地增強了設計的靈活性,提高了
10、工作效率。同時,基于芯片的設計可以減少芯片的數量,縮小系統(tǒng)體積,降低能源消耗,提高系統(tǒng)的性能和可靠性。可編程邏輯器件和EDA技術給今天的硬件系統(tǒng)設計提供了強有力的工具,使得電子系統(tǒng)的設計方法發(fā)生了質的變化。傳統(tǒng)的“固定功能集成塊+連續(xù)的設計方法正逐步地退出歷史舞臺,而基于芯片的設計方法正在成為現代電子系統(tǒng)設計的主流?,F在,只要擁有一臺計算機、一套相應的EDA軟件和空白的可編程邏輯器件芯片,在實驗室就可以完成數字系統(tǒng)的設計和生產??梢哉f,當今的數字系統(tǒng)設計已經離不開可編程邏輯器件和EDA設計工具。圖2.1所示為電子系統(tǒng)的傳統(tǒng)設計方法和基于芯片的設計方法。固定功能元件電路板設計電子系統(tǒng)可編程器件芯
11、片設計電子系統(tǒng)(a) 傳統(tǒng)設計方法(b)基于芯片的設計方法圖2.1 電子系統(tǒng)的設計方法“自頂向下 與“自底向上設計方法:近10年來,電子系統(tǒng)的設計方法發(fā)生很大的變化。過去,電子產品設計的根本思路一直是先選用標準通用集成電路芯片,再由這些芯片和其他元件自下而上地構成電路、子系統(tǒng)和系統(tǒng)。這些設計出的電子系統(tǒng)所用元件的種類和數量均較多。體積與功耗大,可靠性差。隨著集成電路技術的不斷進步,現在人們可以把數以億計的進體管,幾萬門、幾十萬門、甚至幾百萬門的電路集成在一塊芯片上。半導體集成電路已由早期的單元集成、部件電路集成開展到整機電路集成和系統(tǒng)電路集成。電子系統(tǒng)的設計方法也由過去的那種集成電路廠家提供通
12、用芯片,整機系統(tǒng)用戶采用這些芯片組成電子系統(tǒng)的“自底向上設計方法改變?yōu)橐环N新的“自頂向下的設計方法。在這種新的設計方法中,由整機系統(tǒng)用戶對整個系統(tǒng)進行方案設計和功能劃分,系統(tǒng)的關鍵電路用一片或幾片專用集成電路ASIC來實現,且這些專用集成電路是由系統(tǒng)和電路設計師親自參與設計的,直至完成電路到芯片幅員的設計,再交由IC工廠投片加工,或者是用可編程ASIC 現場編程實現。在“自頂向下的設計中,首先需要進行行為設計,確定該電子系統(tǒng)或VLSI芯片的功能、性能及允許的芯片面積和本錢等。接著進行結構設計,根據該電子系統(tǒng)或芯片的特點,將其分解為接口清晰、互相關系明確、盡可能簡單的子系統(tǒng),得到一個總體結構。這
13、個結構可能包括算術運算單元、控制單元、數據通道、各種算法狀態(tài)機等。下一步是把結構轉換成邏輯圖,即進行邏輯設計。在這一步中,希望盡可能采用規(guī)那么的邏輯結構或采用自己經過考驗的邏輯單元或模塊。接著進行電路設計,邏輯圖將進一步轉換成電路圖,在很多情況下,這時需要進行硬件仿真,以最終確定邏輯設計的正確性。最后是進行幅員設計,即將電路圖轉換成幅員?!白缘紫蛏系脑O計,一般是在系統(tǒng)劃分和分解的根底上先進行單元設計,在單元的精心設計后逐步向上進行功能塊設計,然后再進行子系統(tǒng)的設計,最后完成系統(tǒng)的總體設計。圖2.2所示為電子系統(tǒng)的兩種不同設計方法的設計步驟。Top-downBottom-up行為設計結構設計邏輯
14、設計電路設計幅員設計系統(tǒng)分解單元設計功能塊劃分子系統(tǒng)設計系統(tǒng)總成圖2.2 “自頂向下與“自底向上設計方法的步驟2 EDA技術的根本特征和工具EDA可以看作是電子CAD的高級階段。在現代電子系統(tǒng)設計領域,EDA技術已經成為電子系統(tǒng)設計的重要手段。無論是設計邏輯芯片還是數字系統(tǒng),其設計作業(yè)的復雜程度都在不斷增加,現今僅僅依靠手工進行數字系統(tǒng)設計已經不能滿足要求,所有的設計工作都需要在計算機上借助于EDA軟件工具進行。在EDA軟件的支持下,設計者只需完成對系統(tǒng)功能的描述,就可以由計算機軟件進行處理得到設計結果,修改設計如同修改程序一樣方便。利用EDA設計工具,設計者可以預知設計結果,減少設計的盲目性
15、,極大地提高設計的效率。2.1 EDA技術的范疇EDA即電子設計自動化。EDA技術指的是以計算機硬件和系統(tǒng)軟件為根本工作平臺,繼承和借鑒前人在電路和系統(tǒng)、數據庫、圖形學、圖論和拓撲邏輯、計算數學、優(yōu)化理論等多學科的最新科技成果而研制成的商品化EDA通用支撐軟件和應用軟件包,旨在幫助電子設計工程師在計算機上完成電路的功能設計、邏輯設計、性能分析、時序測試直至PCB的自動設計等。 與早期的電子CAD軟件相比,EDA軟件的自動化程度更高,功能更完善,運行速度更快,而且操作界面友好,有良好的數據開放性和互換性,即不同廠商的EDA軟件可相互兼容。因此,EDA技術很快在世界各大公司、企業(yè)和科研單位得到了廣
16、泛應用,并已成為衡量一個國家電子技術開展水平的重要標志。EDA技術的范疇應包括電子工程師進行產品開發(fā)的全過程,以及電子產品生產的全過程中期望由計算機提供的各種輔助工作。從一個角度看,EDA技術可粗略分為系統(tǒng)級、電路級和物理實現級三個層次的輔助設計過程;從另一個角度來看,EDA技術應包括電子電路設計的各個領域:即從低頻電路到高頻電路、從線形電路到非線形電路、從模擬電路到數字電路、從分立電路到繼承電路的全部設計過程。EDA技術的范疇和功能如圖2.3所示。EDA工具數字系統(tǒng)模塊設計數字電路是設計FPGA設計ASIC幅員設計器件模型庫系統(tǒng)模擬電路設計混合電路是設計PCB設計圖2.3 EDA技術的范疇2
17、.2 EDA技術的根本特征現代EDA技術的根本特征是采用高級語言描述,具有系統(tǒng)級仿真和綜合能力。下面介紹與這些根本特征有關的幾個新概念。并行工程和“自頂向下設計方法根據美國防衛(wèi)分析研究所的報告中的定義,所謂并行工程是指“一種系統(tǒng)化的、集成化的、并行的產品及相關過程的開發(fā)模式。這一模式使開發(fā)者從一開始就要考慮到產品生存周期的諸多方面,包括質量、本錢、開發(fā)時間及用戶的需求,等等?!白皂斚蛳碌脑O計方法在前面已做了簡單的介紹。這種方法首先從系統(tǒng)級設計入手,在頂層進行功能方框圖的劃分和結構設計;在方框圖一級進行仿真、糾錯,并用硬件描述語言對高層次的系統(tǒng)行為進行描述;在功能一級進行驗證,然后用邏輯綜合優(yōu)化
18、工具生成具體的門級邏輯電路的網表,其對應的物理實現級可以是印刷電路板或專用集成電路?!癟op-down設計方法有利于在早期發(fā)現結構設計中的錯誤,提高設計的一次成功率,因而在現代EDA系統(tǒng)中被廣泛采用。硬件描述語言HDL用硬件描述語言進行電路與系統(tǒng)的設計是當前EDA技術的一個重要特征。與傳統(tǒng)的原理圖輸入設計方法相比擬,硬件描述語言使得設計者在筆尖抽象的層次上描述設計的結構和內部特征。它的優(yōu)點是:語言的公開可利用性;設計與工藝的無關性;寬范圍的描述能力;便于組織大規(guī)模系統(tǒng)的設計;便于設計的服用和繼承等。目前最常用的硬件描述語言有VHDL和Verilog-HDL,它們都已經成為IEEE標準。邏輯綜合
19、與優(yōu)化邏輯綜合功能將高層次的系統(tǒng)行為設計自動翻譯成門級邏輯的電子描述,做到了設計與工藝的獨立。優(yōu)化那么是對于上述綜合生成的電路網表,根據布爾方程等效的原那么,用更小、更快的綜合結果代替一些復雜的邏輯電路單元,根據指定的目標庫映射成新的網表。開放性和標準化框架是一種軟件平臺結構,它為EDA工具提供了操作環(huán)境??蚣艿年P鍵在于提供與硬件平臺無關的圖形用戶界面以及工具之間的通信、設計數據和設計流程的管理等,此外還應該包括各種與數據庫相關的效勞工程。任何一個EDA系統(tǒng)只要建立了一個符合標準的開放式框架結構,就可以接納其他廠商的EDA工具一起進行設計工作。這樣,框架作為一套使用和配置EDA軟件包的標準,就
20、可以實現各種EDA工具間的優(yōu)化組合,并集成在一個易于管理的統(tǒng)一環(huán)境之下,實現資源共享。近年來,隨著硬件描述語言等設計數據格式的逐步標準化,不同設計風格和應用的要求導致各具特色的EDA工具被集成在同一個工作站上,從而使EDA框架標準化。新的EDA系統(tǒng)不僅能夠實現高層次的自動邏輯綜合、幅員綜合和測試碼生成,而且可以使各個仿真器對同一個設計進行協(xié)同仿真,進一步提高了EDA系統(tǒng)的工作效率和設計的正確性。庫的引入EDA工具之所以能夠完成各種自動設計過程,關鍵是有各類庫的支持,如邏輯模擬時模擬庫、邏輯綜合時的綜合庫、幅員綜合時的幅員庫、測試綜合時的測試庫等,這些庫都是EDA設計公司與半導體生產廠商緊密合作
21、、共同開發(fā)的。2.3 EDA的根本工具集成電路技術的開展不斷對EDA技術提出新的要求,促進了EDA技術的開展。但是總的來說,EDA系統(tǒng)的設計能力一直難以趕上集成電路技術開展的要求。EDA工具的開展經歷了兩大階段:物理工具階段和邏輯工具階段?,F在EDA和系統(tǒng)設計工具正逐步被理解成一個整體的概念電子系統(tǒng)設計自動化。物理工具用來完成設計中的實際物理問題,如芯片布局、印刷電路板布線等,另外它還能提供一些設計的電氣性能分析,如設計規(guī)那么檢查。這些工作現在主要由集成電路廠家來完成。邏輯工具是基于網表、布爾邏輯、傳輸時序等概念的。首先由原理圖編輯器或硬件描述語言進行設計輸入,然后利用EDA系統(tǒng)完成邏輯綜合、
22、仿真、優(yōu)化等過程。最后生成物理工具可以接受的網表或VHDL、Verilog-HDL的結構化描述。在過去30多年中,人們開發(fā)了大量的計算機輔助設計工具來幫助集成電路的設計,這些設計工具的分類如圖2.4所示。ASIC設計檢查/分析工具編輯器仿真器優(yōu)化/綜合工具文字編輯器圖象編輯器統(tǒng)計型編輯器確定型仿真器圖2.4 設計工具分類編輯器:編輯器包括文字編輯器和圖形編輯器。在系統(tǒng)級設計中,文字編輯器用來編輯器硬件系統(tǒng)的自然描述語言,在其他層次用來編輯電路描述語言文本。在數字系統(tǒng)中的門級、存放器以及芯片級,所用的描述語言通常為VHDL和Veril-HDL;在模擬電路級年,硬件描述語言通常為SPICE的文本輸
23、入。圖形編輯器可用于硬件設計的各個層次。在幅員級,圖形編輯器用來編輯表示硅工藝加工過程的幾何圖形。在高于幅員層次的其他級,圖形編輯器用來編輯硬件系統(tǒng)的方法圖、原理圖等。典型的原理圖輸入工具至少包括以下3個組成局部:根本單元符號庫,主要包括根本單元的圖形符號和仿真模型。在實際應用時,硬件設計者除了采用根本單元和標準單元之外,還應該能夠使用原理圖編輯器建立自己專用的圖形符號以及相應的仿真模型,并加到根本單元符號庫中,供下次設計時使用。原理圖編輯器的編輯功能。產生網表的功能。仿真器:仿真器又稱模擬器,主要用來幫助設計者驗證設計的正確性。在硬件系統(tǒng)設計的各個層次都要用到仿真器。在數字系統(tǒng)設計中,硬件系
24、統(tǒng)由數字邏輯期間以及它們之間的互連來表示。仿真器的用途是確定系統(tǒng)的輸入/輸出關系,所采用的方法是把每一個數字邏輯器件映射為一個或幾個進程,把整個系統(tǒng)映射為由進程互連構成的進程網絡,這種由進程互連組成的網絡就是設計的仿真模型。檢查/分析工具:在集成電路設計的各個層次都會用到檢查/分析工具。在幅員級,必須用設計規(guī)那么檢查工具來保證幅員所表示的電路能被可靠地制造出來。在邏輯門級,檢查/分析工具可以用來檢查是否有違反扇出規(guī)那么的連接關系。時序分析器一般用來檢查最壞情形時電路中的最大和最小延時。優(yōu)化/綜合工具:優(yōu)化/綜合工具用來把一種硬件描述轉換過程通常伴隨著設計的某種改良。在邏輯門級,可以用邏輯最小化
25、來對布爾表達式進行簡化。在存放器級,優(yōu)化工具可以用來確定控制序列和數據路徑的最優(yōu)組合。各個層次的綜合工具可以將硬件的高層次描述轉換為低層次描述,也可以將硬件的行為描述轉換為結構描述。3 VHDL語言簡介3.1 概述硬件描述語言的開展至少已有幾十年的歷史,并已成功地應用到系統(tǒng)的仿真、驗證和設計、綜合等方面。目前常用的硬件描述語言有AHDL、ABEL、VHDL、Verilog HDL等等。20世紀80年代后期,美國國防部開發(fā)的VHDL語言是IEEE標準化的硬件描述語言,并且已經成為系統(tǒng)描述的國際公認標準,得到眾多EDA公司的支持。VHDL語言覆蓋面廣,描述能力強,能支持硬件的設計、驗證、綜合和測試
26、,是一種多層次的硬件描述語言。其設計描述可以是描述電路具體組成的結構描述,也可以是描述電路功能的行為描述。這些描述可以從最抽象的系統(tǒng)級直到最精確的邏輯級,甚至門級。運用VHDL語言還可以描述與工藝有關的信息,工藝參數可以通過設計文件語言參數來調整,不會因工藝變化與開展而使VHDL設計過時。因此,VHDL設計的生命周期與其他設計方法相比是最長的。3.2 VHDL語言的根本結構實體,構造體、配置、包集合和庫是構成一個完整的VHDL語言程序所必備的五個局部。對VHDL語言來講,字母的大小寫是不加區(qū)分的。VHDL語言根本單元及其構成:VHDL語言描述的對象稱為實體。實體代表什么幾乎沒有限制,可以將任意
27、復雜的系統(tǒng)抽象成一個試題,也可以將一塊電路板、一個芯片、一個電路單元甚至一個電路看作一個實體。如果設計時對系統(tǒng)自頂向下分層、劃分模板,那么,各層的設計模塊都可以看作為實體。頂層的系統(tǒng)模塊是頂級實體,低層次的實際模塊是低級實體。描述時,高級實體可將低級實體當作元件來調用。至于該元件內部的具體結構或功能可在低一級實體的描述中再詳細給出。在實際的硬件電路設計中,一個實體既可以是簡單的門級電路,也可以是復雜的系統(tǒng),但無論是什么電路,實體的結構是相同的。實體由兩局部組成:實體說明和構造體。A.實體說明Entity實體說明的書寫格式如下所示;ENTITY 實體名 ISGENERIC(類屬參數說明);POR
28、T(端口說明);END實體名;在實體說明中應給出實體名,并描述實體的外部接口情況。此時,實體被視為“黑盒,不管其內部結構功能如何,只給出它的輸入/輸出接口信號。例如,一個3位計數器的實體說明可以寫為:例3-1ENTITY Cnt3b ISGENERIC (m:TIME:=5ns) PORT(clock,enable:IN STD_LOGIC;qa:OUT INTEGER RANGE 0 TO 7);END Cnt3b;每個根本設計單元的實體說明必須以“ENTITY實體IS開始至“END實體名結束。例3-1中,Cnt3b是實體名,GENERIC后為類屬參數說明,PORT后為端口說明。類屬參數說明
29、語言GENERIC類屬參數說明語句必須放在端口說明語句之前,用以設定實體或元件的內部 結構和規(guī)模。其書寫格式如下: GENERIC(常數名:數據類型:=設定值;.常數名:數據類型:=設定值);例3-1的程序中GENERIC(m:TIME:=5ns)指定了構造體內m值為5ns.端口說明PORT在電路圖上,端口對應于元件符號的外部引腳。端口說明語句是對根本設計實體單元與外部接口的描述,也可以說是對引腳信號的名稱、數據類型和輸入輸出方向的描述。語句的一般格式如下:PORT(端口信號名,端口信號名:端口模式 數據類型;端口信號名是賦給每個外部引腳的名稱,通常用一個或幾個英文字,或用英文字母加數字命名之
30、。各端口信號名在實體中必須是惟一的,不能重復。端口模式用來說明信號的方向,詳細的端口方向說明見表3-1。需要指出的是,BUFFER是INOUT的子集,但作輸入用時,信號不是由外部驅動,而是從輸出反應得到。方向定義含 義IN輸入OUT輸出構造體內不能再使用INOUT雙向可以輸入,也可以輸出BUFFER輸出構造體內可再使用,可以讀或寫LINKAGE不指定方向,無論哪一個方向都可以連接表3.13 數據類型那么是端口信號的取值類型,常見的有以下幾種:BIT 位類型,取值0、1,由STANDARD程序包定義;BIT_VECTOR 位向量類型,是BIT的組合;STD_LOGIC 工業(yè)標準的邏輯類型,取值0
31、、1、X、Z,由STD_LOGIC_1164程序包定義;INTEGER 整數類型,可用作循環(huán)的指針或常數,通常不用作I/O信號;STD_LOGIC_VECTOR 工業(yè)標準的邏輯向量類型,是STD_LOGIC的組合;BOOLEAN 布爾類型,取值FALSE、TRUE。在例31中,3位計數器作為實體,其端口有2個輸入信號clock,enable和1個輸出信號qa。輸入信號和輸出信號的類型不同。B.構造體Architectre實體的名稱和外部端口已經定義,下一步就是翻開“黑盒,解釋實體內部的具體細節(jié),這就是構造體所要描述的內容。構造體是一個實體的組成局部,是對實體功能的具體描述。構造體主要是描述實體
32、的硬件結構、元件之間的互連關系、實體所完成的邏輯功能以及數據的傳輸變換等方面的內容。具體編寫構造體時,可以從其中的某一方面來描述。構造體對其實體的輸入輸出關系描述有三種方式:行為描述方式、數據流描述方式和結構描述方式。最常用的是結構描述方式。一個構造體的書寫格式如下:ARCHITECTURE 構造體名OF 實體名IS定義語句內部信號,常數,數據類型,函數等的定義;BEGIN 并行處理語句END 構造體名;一個實體中可以具有一個構造體,也可以具有幾個構造體。一個實體內部假設有幾個構造體,那么構造體名不能重復。構造體中的定義語句位于ARCHITECTURE和BRGIN之間,用于對構造體內部所使用的
33、信號SIGNAL、常數CONSTANT、數據類型、元件COMPONENT和過程PROCEDURE進行定義。例如,一個RS觸發(fā)器的構造體描述可以寫成:例32ARCHITECTURE rs_behav OF rsff ISBEGINqset, b=qb, c=q);u2:nand2 PORT MAP (a=reset, b=q, c=qb);END re_stru;該例中用到了2輸入與非門作元件,構造體中應先對元件進行說明,元件說明類似于實體說明,只需給出外部端口信息。元件的具體安裝通過元件例化語句將電路中的實際信號與元件說明中的端口信號關聯對應起來。如上所示,元件u1中信號set和qb分別對應n
34、and2的2個輸入端口a和b,信號q對應輸入端口c。符號“的含義是對應于左邊為元件端口信號,右邊為電路中的實際信號。這里需要說明能夠一點:構造體中所調用的元件實際就是最低一級的實體。所以,如果調用的元件在系統(tǒng)庫中可以找到,那么系統(tǒng)可以自己從庫中調用,否那么設計者還需對這些元件所對應的實體進行描述,包括實體說明和構造體。采用前面講過的行為描述方式編寫的VHDL程序,在一般的情況下只能用于行為層次的仿真,而不能進行邏輯綜合。對于行為描述方式的VHDL語言程序只有改寫數據流描述方式才能進行邏輯綜合,也就是說數據流描述方式才是真正可以進行邏輯綜合的描述方式,數據流描述方式又稱為存放器傳輸描述方式RTL
35、。RTL描述方式是一種明確規(guī)定存放器描述的方法。由于受邏輯綜合的限制,在采用這種描述方法時,所使用的VHDL語言的語句有一定的限制。對于一個4選1電路,用RTL描述方式編寫的程序可以寫為:例3-4LIBRARY IEEE;USE IEEE. STD_LOGIC _1164.ALL;USE IEEE. STD_LOGIC _UNSIGNED.ALL;ENTITY mux4 IS PORT(input; IN STD_LOGIC _VECTOR (3 DOWNTO 0);Set: IN STD_LOGIC _VECTOR (1 DOYNTO 0);Y: OUT STD_LOGIC); END mu
36、x;ARCHITECTURE rt1 OF mux ISBEGIN y=input(0) WHEN sel=0 ELSE input(1) WHEN se1=1 ELSE input(2) WHEN sel=2 ELSE input(3);END rt1;使用數據流描述方式時,要注意以下幾個方面的問題:X狀態(tài)的傳遞;禁止在一個進程總存在兩個存放器描述;禁止使用IF語句中的ELSE項;關聯性強的信號應放在同一個進程中等等。VHDL語言構造體的子結構描述:在實際的硬件電路設計中,當電路的規(guī)模較大時,全部電路用一個模塊來描述很不方便。一般情況下,電路設計者總希望將整個電路分成假設干相對獨立的子模塊來
37、進行描述。VHDL語言的功能描述語句結構可以是含有五種不同類型并以并行方式工作的語句結構,這也就是結構體的五個子結構。VHDL語言中常用的三種子結構描述語句為BLOCK語句結構、PROCESS語句結構和SUBPROGRAM語句結構。下面對這三種結構進行說明。(1) BLOCK塊語句結構BLOCK的應用類似于將一個原理圖分為幾個子模塊進行繪制,而其中每個子模塊都可以是一個具體的電路原理圖。也就是說,按照模塊方式對構造體進行劃分并不會改變電路的邏輯功能。設計者可以合理地將一個模塊劃分為整個區(qū)域,在每個區(qū)域中都能定義或描述局部信號、數據類型和常量。所有能在構造體的說明局部進行說明對象都可以在BLOC
38、K的說明局部進行說明。BLOCK語句的應用只是一種將結構體中的并行描述語句進行組合的方法,它的主要目的是改善并行語句及其結構的可讀性或關閉某些信號。BLOCK語句的書寫格式如下:塊結構名BLOCK塊保護表達式端口說明語句類屬參數說明語句BEGIN . . .END BLOCK 塊結構名衛(wèi)式BIOCK語句的書寫格式為:BLOCK (衛(wèi)式表達式)當衛(wèi)式表達式為真時,BLOCK語句被執(zhí)行,否那么將跳過BLOCK語句。在BLOCK塊中的信號傳送語句前都要加個一個前衛(wèi)關鍵詞GUARDED,以說明只有在條件滿足時此語句才會執(zhí)行。在實際的電路設計中,應用BLOCK語句與否,對于原構造體的邏輯功能的仿真結果不
39、會產生任何影響。從綜合的角度來看,BLOCK語句的存在沒有任何實際意義,在綜合過程中,VHDL綜合器會略去所有的塊語句。正因為如此,在劃分構造體中的功能語句時一般不采用塊結構,而是才喲經濟能夠元件例化的方式,(2)PROCESS(進程)語句結構前面的3-1中的計數器的構造體中就包含一個PROCESS。由此可以看出用PROCESS語句描述電路結構的書寫格式為: 進程名:process (信號1,信號2) 進程說明局部 BEGIN . . .END PROCESS進程名是進程的命名,并不是必需的。括號中的信號是進程的敏感信號,任意一個敏感信號改變,進程中由順序語句定義的行為就會重新執(zhí)行一遍。進程說
40、明局部對該進程所需的局部數據環(huán)境進行定義。BEGIN和END PROCESS之間是由設計者輸入描述進程行為的順序執(zhí)行語句。進程行為的結果可以賦給信號,并通過信號被其他的PROCESS或BLOCK讀取或賦值。當進程中最后一個語句執(zhí)行完成后,執(zhí)行過程將返回到進程的第一個語句,以等待下一次敏感信號變化。一個構造體中可以含有多個PROCESS結構,每個進程可以在任何時刻被激活或者啟動。而所有被激活的進程都是并行運行的,所以PROCESS結構本身是并行語句。第3章 本課題的實現方案1 任意數分頻(包括奇偶數和小數)的各種設計方法眾所周知分頻器是FPGA設計中使用頻率非常高的根本設計之一,盡管在目前大局部
41、設計中,廣泛使用芯片廠家集成的鎖相環(huán)資源,如altera的PLL,Xilinx的DLL來進行時鐘的分頻,倍頻以及相移。但是對于始終要求不高的根本設計,通過語言進行時鐘的分頻相移仍然非常流行,首先這種方法可以節(jié)省芯片內部的瑣相環(huán)資源,再者,消耗不多的邏輯單元就可以到達對時鐘操作的目的。另一方面,通過語言設計進行時鐘分頻,可以看出設計者對設計語言的理解程度。下面是介紹各種分頻系數進行分頻的方法:偶數倍分頻偶數倍分頻應該是大家都比擬熟悉的分頻,通過計數器計數完全可以實現的。如進行N倍偶數分頻的時鐘觸發(fā)計數器計數,當計數器從0計數到時,輸出時鐘進行翻轉,并給計數器一個復位信號,使得下一個始終從零開始計
42、數。以此循環(huán)下去,這種方法可以實現任意的偶數分頻。奇數倍分頻有兩種實現方法:首先,完全可以通過計數器來實現,仿佛如進行三分頻,通過待分頻時鐘上升沿觸發(fā)計數器進行模三計數,當計數器計數到鄰近值進行兩次翻轉,比方可以在計數器計數到1時,輸出時鐘進行翻轉,計數到2時再次進行翻轉。即是在計數值在鄰近的1和2進行了兩次翻轉。這樣實現的三分頻占空比為或者。如果要實現占空比為50%的三分頻時鐘,可以通過待分頻時鐘下降沿觸發(fā)計數,和上升沿同樣的方法計數進行三分頻,然后下降沿產生的三分頻時鐘和上升沿產生的時鐘進行相或運算,即可得到占空比50%的三分頻始終。這種方法可以實現任意的奇數分頻。歸類為一般的方法為:對于
43、實現占空比為50%的N倍奇數分頻,首先進行上升沿觸發(fā)進行模N計數,計數選定到某一個值進行輸出始終翻轉,然后經過再次進行翻轉得到一個占空比非50%奇數n分頻時鐘,再者同時進行下降沿觸發(fā)的模N計數,到和上升沿觸發(fā)輸出始終翻轉選定值相同值時,進行輸出時鐘翻轉,同樣經過時,輸出時鐘再次翻轉生成占空比非50%的奇數n分頻時鐘。兩個占空比非50%的n分頻時鐘相或運算,得到占空比為50%的奇數n分頻時鐘。另外一種方法:對進行奇數倍n分頻時鐘,首先進行分頻(帶小數,即等于),然后再進行二分頻得到。得到占空比50%的奇數倍分頻。2 小數分頻首先介紹如何進行分頻,這種分頻需要對輸入時鐘進行操作。根本的設計思想:對
44、于進行分頻,首先進行模n的計數,在計數到時,輸出時鐘賦為1,回到計數0時,又賦為0,因此,可以知道,當計數值為時,輸出時鐘才為1,因此,只要保持計數值為半個時鐘周期即是一個難點。從中可以發(fā)現,因為計數器是通過時鐘上升沿計數,因此可以在計數器為時對計數觸發(fā)時鐘進行翻轉,那么時鐘的下降沿變成了上升沿。即在計數值為只保持了半個時鐘周期,由于時鐘翻轉下降沿變成上升沿,因此計數值變成0。因此,每產生一個分頻時鐘的周期,觸發(fā)時鐘都是要翻轉一次。設計思路如下:輸出時鐘異或模n計數并生成輸出二分頻分頻時鐘分頻原理框圖由上述原理圖可知:觸發(fā)時鐘的翻轉通過分頻信號的二分頻,然后與輸入時鐘相或運算即可。任意整數帶小
45、數的分頻。這種分頻一般來說,可以通過不同分頻進行組合實現。比方實現分頻,可以通過兩個七分頻脈沖加上一個五分頻實現一個該分頻設計,即實現分頻,一般而言,這種分頻由于分頻輸出的始終脈沖抖動很大,在設計中使用已經非常少。但是也是可以實現的。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity deccount isport (inclk: in STD_LOGIC;preset: in STD_LOGIC_VECTOR (3 downto
46、 0);outclk: buffer STD_LOGIC);end deccount;architecture rtl of deccount issignal count:std_logic_vector(3 downto 0);signal clk:std_logic;signal divide2:std_logic;begin process(clk) begin if(clkevent and clk=1) then if (count=0000) then count=preset-1; outclk=1; else count=count-1; outclk=0; end if;e
47、nd if;end process; process(outclk) begin if(outclkevent and outclk=1) then divide2=not divide2; end if ; end process; clk=inclk xor divide2; end rtl;3 基于CPLD/FPGA的小數分頻器的設計3.1 小數分頻的根本原理:小數分頻的根本原理是采用脈沖吞吐計數器和鎖相環(huán)技術先設計兩個不同分頻比的整數分頻器,然后通過控制單位時間內兩個分頻比出現的不同次數來獲得所需要的小數分頻值。如設計一個分頻系數為8.7分頻器時,可以將分頻器設計成3次8分頻,7次9分
48、頻,這樣總的分頻值為:從這種實現方法的特點可以看出,由于分頻器的分頻值不斷改變,因此分頻后得到的信號抖動較大。當分頻系數為(N為整數)時,可控制扣除脈沖的時間,以使輸出成為一個穩(wěn)定的脈沖頻率,而不是一次N分頻,一次分頻。3.2 電路組成:分頻系數為的分頻器電路可由一個異或門、一個模N計數器和一個二分頻組成。在實現時,模N計數器可設計成帶預制的計數器,這樣可以實現任意分頻系數為的分頻器。如以下圖:異或門模N計數器2分頻器 通用半整數分頻器電路組成成控制計數器控制邏輯圖 3.3 小數分頻器的原理圖 小數分頻器設計設計半整數分頻器的一般方法和兩個分頻系數分別為2.7,2+7/13的非半整數分頻器的任
49、意小數分頻器的VHDL程序設計。 4 舉例說明 2.5分頻電路的VHDL設計程序占空比為2:3占空比為2:3的2.5分頻電路的輸出信號CLK_DIV2_5是由占空比為1:1的5分頻信號CLK_DIV5_1和CLK_DIV5_2進行異或運算得到的。其輸入端口為CLK;輸出端口為CLK_DIV2_5。:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY clk_2_5div_1 IS PORT(CLK :IN std_logic; C
50、LK_DIV2_5:OUT std_logic);END clk_2_5div_1;ARCHITECTURE rtl OF clk_2_5div_1 IS SIGNAL counter1:std_logic_vector(2 DOWNTO 0); SIGNAL counter2:std_logic_vector(2 DOWNTO 0); SIGNAL CLK_DIV5_temp1:std_logic; SIGNAL CLK_DIV5_temp2:std_logic; SIGNAL CLK_DIV5_temp3:std_logic; SIGNAL CLK_DIV5_temp4:std_logic
51、; SIGNAL CLK_DIV5_1:std_logic; SIGNAL CLK_DIV5_2:std_logic;BEGIN PROCESS(CLK) BEGIN IF(CLKevent AND CLK=1)THEN IF(counter1=100)THEN counter10); ELSE counter1=counter1+1; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=1)THEN IF(counter1=011 OR counter1=100)THEN CLK_DIV5_temp1=1;
52、ELSE CLK_DIV5_temp1=0; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=1)THEN CLK_DIV5_temp3=CLK_DIV5_temp1; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=0)THEN IF(counter2=100)THEN counter20); ELSE counter2=counter2+1; END IF; END IF; END PROCESS; PROCESS(CLK) BEG
53、IN IF(CLKevent AND CLK=0)THEN IF(counter2=011 OR counter2=100)THEN CLK_DIV5_temp2=1; ELSE CLK_DIV5_temp2=0; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=0)THEN CLK_DIV5_temp4=CLK_DIV5_temp2; END IF; END PROCESS; CLK_DIV5_1=CLK_DIV5_temp1 OR CLK_DIV5_temp2; CLK_DIV5_2=CLK_DIV5_
54、temp3 OR CLK_DIV5_temp4; CLK_DIV2_5=CLK_DIV5_1 XOR CLK_DIV5_2;END rtl;上面程序經編譯時序模擬后,在MAX+PLUS II 可得到如下圖的仿真波形。 2.7分頻電路的VHDL設計程序占空比為10:27在2.7分頻電路中,輸入端為clk_in,輸出端為clk_out。其中,architecture b是實用累加器計算分頻系數選擇的時機,architecture a是直接實用已計算好的結果。以下是代碼:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith
55、.all;use ieee.std_logic_unsigned.all;entity clk_2_7div is port(clk_in:in std_logic; clk_out:out std_logic);end clk_2_7div;architecture b of clk_2_7div is signal clkoutQ:std_logic; signal ctrl:std_logic; signal cnt1:integer range 0 to 1; signal cnt2:integer range 0 to 2;begin clk_out=clkoutQ; process
56、(clkoutQ) variable tmp:integer range 0 to 20; begin if(rising_edge(clkoutQ) then tmp:=tmp+7; if(tmp10) then ctrl=1; else ctrl=0; tmp:=tmp-10; end if; end if; end process; process(clk_in) begin if(clk_inevent and clk_in=1) then if (ctrl=1) then if(cnt11) then cnt1=cnt1+1; else cnt1=0; end if; if(cnt1
57、1) then clkoutQ=1; else clkoutQ=0; end if; else if(cnt22) then cnt2=cnt2+1; else cnt2=0; end if; if(cnt21) then clkoutQ=1; else clkoutQ=0; end if; end if; end if; end process;end b;architecture a of clk_2_7div is signal cnt:integer range 0 to 9; signal clkoutQ:std_logic; signal cnt1:integer range 0
58、to 1; signal cnt2:integer range 0 to 2;begin clk_out=clkoutQ; process(clkoutQ) begin if(clkoutQevent and clkoutQ=1) then if(cnt9) then cnt=cnt+1; else cnt if(cnt11) then cnt1=cnt1+1; else cnt1=0; end if; if(cnt11)then clkoutQ=1; else clkoutQ if(cnt22) then cnt2=cnt2+1; else cnt2=0; end if; if(cnt21)
59、 then clkoutQ=1; else clkoutQ=0; end if; end case; end if; end process;end a;configuration cfg of clk_2_7div is for a end for;end cfg; 4.3 2+7/13分頻電路的VHDL設計程序占空比為13:33 將小數分頻的方法進行擴展,可以得到形如的分數分頻的方法,例如,2分頻,只要在13次分頻中,進行7次3分頻,6次2分頻就可以得到。同樣,為了將兩種分頻均勻,將分子局部累加,小于分母的,進行M分頻,大于等于分母的,進行M+1分頻。下面給出2分頻的代碼:library
60、ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_2_7_13div is port(clk_in:in std_logic; clk_out:out std_logic);end clk_2_7_13div;architecture b of clk_2_7_13div is signal clkoutQ:std_logic; signal ctrl:std_logic; signal cnt1:integer range 0 to
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人裝修水電合同
- 2025年宜昌道路運輸從業(yè)資格證考試內容是什么
- 2025年平頂山貨運從業(yè)資格模擬考
- 2025年室外裝修承包合同8篇
- 《數據可視化技術應用》1.2 開啟數據可視化之門-教案
- 2025年陜西貨運從業(yè)資格證考試題技巧
- 旋片真空泵競爭策略分析報告
- 產品訂單合同范本
- 電安裝施工合同范本
- 出售養(yǎng)殖棚合同范本
- 建筑冷熱源素材樣本
- 胸椎小關節(jié)紊亂診斷與治療-課件
- 四川省德陽市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- Unit1Developingideaslittlewhitelies課件-高中英語外研版必修第三冊
- Unit 2 Listening and speaking 課件-高中英語人教版(2019)選擇性必修第二冊
- (參考)食品加工操作流程圖
- 員工面試登記表
- 鋼棧橋施工方案型鋼
- PySide學習教程
- 事業(yè)單位綜合基礎知識考試題庫 綜合基礎知識考試題庫.doc
- 譯林初中英語教材目錄
評論
0/150
提交評論