版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGE26PAGE27第10章信號產生器的設計目標通過本章的學習,讀者應掌握以下知識:應用系統設計的基本步驟設計報告的撰寫目的設計報告的結構傳統信號產生器的設計方案直接數字合成(DirectDigitalSynthesis,DDS)技術利用可編程邏輯器件實現直接數字合成技術的優(yōu)點如何把一個應用系統分解成一系列基本電路單元電路技術指標對應用系統技術指標的影響如何用一系列基本電路組成應用系統系統測試方案的制定系統設計總結引言學習的目的在于應用,同時邊工作邊學習也是一種非常有效的學習方法,因為具體工作的需求將為學習提出一個明確的目標。在完成一個應用系統的設計以后,設計者還應該向用戶提供一份設計報告。設計報告詳細地描述了應用系統的設計過程。對于一個學生來說,撰寫設計報告的過程還是不斷發(fā)現問題,解決問題的過程。如果你想說服用戶,那么你必須首先說服自己。一份完整的設計報告通常包括摘要、關鍵詞、設計要求、方案論證、系統設計、單元電路設計、系統連調、實驗數據分析、總結以及參考文獻等部分。摘要部分通常利用100~200個字對所設計的系統進行介紹;關鍵詞更加簡練,它利用3~5個詞對所設計的系統特點進行描述。除過摘要和關鍵詞部分,本章通過全數字化信號產生器設計這樣一個設計實例對設計報告其它部分的撰寫方法進行介紹。在學習撰寫設計報告的同時,讀者也將學習如何使用前面的知識完成應用系統設計。本章介紹的設計報告撰寫格式為一種推薦格式。無論采用什么樣的設計報告撰寫格式,設計報告都必須清晰地描述應用系統的設計過程。引言10.1.1傳統的信號產生器設計方案在現代電子系統中,經常需要產生穩(wěn)定的重復信號,例如模擬電路中的正弦波信號或者數字電路中的方波信號。傳統的信號產生器通常是首先產生所需要頻率的正弦波信號,然后利用比較器再獲得同樣頻率的方波信號。正弦信號產生原理以及相關電路組成的內容在《高頻電子線路》課程中有詳細的介紹。按照正弦信號產生器中頻率選擇電路的構成,它們可以被劃分為LC正弦信號產生器、RC正弦信號產生器以及晶體正弦信號產生器。對于LC正弦信號產生器和RC正弦信號產生器,適當地設計頻率選擇電路中的電感、電容或者電阻的數值,信號產生器就可以產生所要求工作頻率的信號。如果頻率選擇電路中的電感、電容或者電阻使用可調電感、可調電容或者電位器來代替,通過調整這些可調器件,正弦信號產生器的工作頻率可以方便地被調整。這兩種電路結構簡單、價格便宜,它們獲得廣泛的應用,但是這兩種電路的頻率穩(wěn)定度不高,通常約為10-3量級。晶體正弦信號產生器具有較高的頻率穩(wěn)定度,通??梢赃_到10-6量級,但是它的工作頻率取決于晶體的諧振頻率。在需要改變晶體正弦信號產生器工作頻率時,電路中用于頻率選擇的晶體必須被更換。如果既要求信號產生器的工作頻率穩(wěn)定,又要求能夠通過調整電路參數的方法來調整工作頻率,傳統的方法為采用基于鎖相環(huán)(PLL)技術和非線性器件頻率變換技術的頻率合成器,但是這樣的頻率合成器的電路結構非常復雜。10.1.2基于微處理器和數字/模擬轉換器的設計方案使用微處理器控制數字/模擬轉換器也可以產生所需要的信號波形。這種方法不僅可以產生正弦波信號,而且還可以產生任意信號波形。把希望形成的信號波形通過采樣和量化可以產生波形數據,這些數據被放置在存儲器之中。工作時,利用微處理器把這些波形數據送到數字/模擬轉換器就能夠獲得所需要的信號波形。由于這時產生的信號是由微處理器的程序控制來實現,微處理器的工作又由它的時鐘電路控制,因此電路產生的信號將具有與時鐘電路同樣的頻率穩(wěn)定度,即可以達到與晶體信號產生器相同的頻率穩(wěn)定度。如果希望調整輸出信號的頻率,這時可以通過在程序中添加具有延時功能的指令或者子程序來實現。使用微處理器控制數字/模擬轉換器產生所需要的信號波形解決了輸出信號的頻率穩(wěn)定度和頻率可調整性問題,同時還能產生任意信號波形,并且電路結構也不復雜。這種方法的缺點是輸出信號的頻率較低,輸出信號頻率的調整精度也較低。例如使用MCS51系列單片機,單片機時鐘電路的頻率選為12MHz,數字/模擬轉換器使用DAC0832,采用查表的方法輸出一個函數值將需要14個機器周期,即14us。如果產生正弦信號,正弦波的數字波形表用36個點來描述一個完整的正弦波,這樣所產生的正弦信號的最小周期為504us,即最高頻率約1984Hz。系統產生的正弦信號頻率的調整可以通過在程序中添加具有延時功能的指令或者子程序來實現。在產生一個正弦函數值的過程中增加一句空操作指令NOP可以實現1us的最小延時,這時系統產生一個正弦函數值則需要15個機器周期,即15us。產生一個完整正弦波則需要540個機器周期,即540us,對應的信號頻率約1851Hz。添加1us延時前后的工作頻率變化的絕對值為:Δf=1984–1851=133(Hz)工作頻率變化的相對值為:Δf/fo=133/1984=6.7%綜上所述,采用單片機控制數字/模擬轉換器的電路結構可以提高工作頻率的穩(wěn)定度,并且可以對工作頻率進行調整,但是輸出信號最高頻率的數值以及頻率調整的精度不能令人滿意。直接數字合成技術直接數字合成(DirectDigitalSynthesis,DDS)是一種應用數字技術來產生信號波形的方法。DDS技術建立在采樣定理的基礎上,它首先對需要產生的信號波形進行采樣和量化,然后存入存儲器作為待產生信號波形的數據表。在輸出信號波形時,從數據表中依次讀出數據,產生數字化的信號,這個信號再通過DAC轉換成所需的模擬信號波形。當改變信號波形數據表中的數據,就可以產生不同的信號波形。相對于其他信號波形產生技術,DDS技術具有輸出信號的采樣頻率固定、全數字化、易于控制、可編程、輸出相位連續(xù)和信號頻率轉換時間短等優(yōu)點。基于DDS技術產生信號波形的原理圖如圖10.1所示。圖10.1DDS技術產生信號波形原理圖在圖10.1所示的DDS技術產生信號波形的原理圖中,信號波形數據表中的數據為正弦信號波形數據,因此它可以產生正弦信號波形。DDS技術的核心是相位累加器,它類似一個計數器。每來一個參考時鐘信號,相位累加器的輸出就增加一個步長的相位增加量,相位增加量的大小由頻率控制字來確定。正弦信號波形數據表包含正弦信號一個周期的幅度——相位信息。從數據表中讀出相位累加器輸出相位值對應的幅度數據,再通過數字/模擬轉換器將該數據轉換成所需的模擬信號波形輸出。相位累加器的相位累加為循環(huán)迭加,這樣使得輸出信號的相位是連續(xù)的。相位累加器進行線性相位累加,相位累加到一個周期時產生一次計數溢出,這個溢出率即為輸出信號的頻率。頻率控制字內的相位增加量越大,完成一個周期所需要的時間越短,相位累加器的溢出率越高,輸出信號的頻率越高。以上這些與使用單片機控制數字/模擬轉換器來產生正弦信號的方法類似。設相位累加器的位數為N,頻率控制字內的相位增量為K,參考時鐘頻率為fc,則DDS系統輸出信號的頻率f0為:f0=fc×K/2N (10-1)輸出信號的頻率分辨率△f0為:f0=fc/2N (10-2)如果一個相位累加器的位數N=32,參考時鐘頻率為fc=125MHz,當相位增量K=1時,輸出信號頻率f0最低,其值約為0.03Hz,這個值也是輸出信號的頻率分辨率△f0;當相位增量K=231時,輸出信號頻率f0最高,其值可達62.5MHz。由于參考時鐘頻率固定,因此輸出信號中諧波頻率固定,所以在整個頻段內只需要一個低通濾波器來濾除輸出信號中的諧波干擾。DDS系統的工作類似于數字分頻電路,輸出信號的頻率穩(wěn)定度等于參考時鐘的頻率穩(wěn)定度,即可以達到晶體的頻率穩(wěn)定度。信號波形的數據表包含以相位為地址的一個周期待產生信號數字幅度信息,每個地址對應于待產生信號中0°~360°范圍內的一個相位點。數據表中的數字幅度信息量受數字/模擬轉換器分辨率的限制,通常信號波形數據表的地址位數低于相位累加器的位數,所以取相位累加器的部分高位輸出做數據表的地址輸入。這里以相位累加器的位數N=32,數據表的地址位為12位,即信號波形的存儲點數為4096點來說明。在相位增量K選擇不同的數值時,作為數據表地址輸入的相位累加器高位輸出變化不相同,相位累加器的累加結果所產生的影響也不相同。當所選擇的相位增量K>219時,相位累加器每累加一次,用作數據表地址輸入的相位累加器輸出的高12位將發(fā)生變化,這樣輸出一個完整周期的波形點數就少于4096點。當相位增量K<219時,用作數據表地址輸入的相位累加器輸出的高12位可能不發(fā)生變化,甚至是在幾個連續(xù)時鐘作用下相位累加器輸出的高12位都不發(fā)生變化,重復輸出一個同樣的波形幅度數據,這樣輸出一個完整周期的波形點數就大于4096點。在相同參考時鐘頻率下,輸出一個完整周期的波形點數的變化使得信號輸出周期/頻率發(fā)生改變。恰當地選擇相位增量K的值,就可以獲得所需要的輸出信號頻率。使用鍵盤輸入相位增量的信息就可以實現輸出信號頻率的調整。方案論證實現一種系統功能或者技術指標一般具有多種可行的設計方案,每一種設計方案都具有它自己的優(yōu)點和缺點。方案論證的過程是一個折中的過程,設計者需要在所能實現的系統功能、技術指標的精度、成本和所需要的技術條件的支持等方面進行權衡。制作一個基于DDS技術的信號產生器可以通過購買專門的芯片、利用微處理器或者使用可編程邏輯器件等方法來完成。不同的方法具有不同的優(yōu)點。下面分別對這三種方法進行討論,通過對它們優(yōu)缺點的比較,使我們能夠更加深入地了解這個技術。10.3.1DDS信號產生器芯片目前多家公司正在生產著多種DDS信號產生器芯片,這些芯片各有特點,其中ADI公司的產品具有一定的代表性。AD9850是ADI公司生產的一種DDS信號產生器芯片,它的功能方框圖如圖10.2所示。圖10.2AD9850的功能方框圖AD9850把DDS技術和高速數字/模擬轉換器結合在一起,形成一個全數字化、可編程的信號產生器。在一個精確的參考時鐘源的控制下,它可以產生一個頻譜較純、頻率/相位可編程的模擬正弦信號。這個正弦信號可以被直接用作信號源,它也可以通過AD9850芯片內部的比較器轉換成方波信號輸出。AD9850的頻率控制字為32位;相位控制字為5位;時鐘最高頻率為125MHz;輸出頻率調節(jié)速率達每秒23M次。AD9850的相位控制字為5位,因此它的輸出信號相位能按180°、90°、45°、22.5°、11.25°和上述數值的任意組合值來變化。當采用125MHz的時鐘頻率時,AD9850的頻率分辨率為0.0291Hz,最高輸出頻率為62.5MHz。AD9850的工作電壓為3.3V~5.0V。它的包裝形式采用28腳SSOP形式,不能使用面包板來組成電路,必須專門制作印制電路板。它的管腳排列如圖10.3所示。圖10.3AD9850的管腳排列圖AD9850的工作控制可由向它送入40位控制/數據字來實現,工作控制的內容包括輸出頻率和相位的調整以及使芯片進入/退出低功耗狀態(tài)控制。控制/數據字可以通過并行或者串行裝載的方式送入AD9850。并行裝載時,AD9850利用管腳D0~D7組成8位并行數據總線輸入數據。40位控制/數據字分5次裝入,每次裝入8位。每字節(jié)的8位數據在管腳W_CLK上信號的上升沿的作用下被裝入AD9850。在5個管腳W_CLK上的脈沖信號作用下,40位控制/數據字被裝入AD9850。接著在管腳FQ_UD上的脈沖信號上升沿的作用下,AD9850的工作狀態(tài)被刷新。數據裝載的時序圖如圖10.4所示。圖10.4并行數據裝載的時序圖串行裝載時,AD9850的D7引腳和W_CLK引腳組成它的同步串行接口。40位控制/數據字通過AD9850的D7引腳在W_CLK引腳的脈沖信號上升邊沿作用下分40次裝入。W0在前,W39在后,依次裝入。完成40位控制/數據字的裝載后,FQ_UD引腳的脈沖信號上升沿刷新AD9850的工作狀態(tài),同時復位寄存器指針,準備下一次40位控制/數據字的裝入。串行數據裝載的時序圖如圖10.5所示。圖10.5AD9850的串行裝載時序圖并行裝載速度快,正弦信號產生器的輸出頻率調節(jié)速率高,40位控制/數據字的裝入只需要5個W_CLK信號周期,但是需要8根數據線。串行裝載電路簡單,AD9850與控制電路之間的連線僅3條,而且作為信號產生器通常也不需要非常高的輸出頻率調節(jié)速率,因此在設計中,AD9850常采用串行裝載。使用DDS信號產生器芯片的最大優(yōu)點是輸出信號頻率較高,缺點是用戶不能修改輸出信號波形。利用微處理器實現DDS信號產生器利用微處理器能夠實現如圖10.1所示的DDS原理圖這樣的電路結構,即實現相位累加器、希望產生波形的數據表以及數字/模擬轉換器的控制時序。輸出信號的頻率分辨率△f0為:f0=fSYS/2N (10-3)這里fSYS應該是輸出一個模擬電壓的最高頻率,N是相位累加器的位數。相位累加器的位數越多,輸出信號的頻率分辨率越好,也就是輸出信號的頻率可以被調整的越準確。如果使用的微處理器數據位數低于相位累加器的位數,這時可以通過多次運算來完成相位累加。例如使用具有8位數據位數的MCS51單片機實現32相位累加器,這時可以通過4次加法運算完成相位累加,每次完成8位數據的加法運算,高字節(jié)的加法運算還應該考慮低字節(jié)的進位如果希望產生的輸出信號為正弦信號,由奈奎斯特定律可知這時輸出信號的最高頻率f0max為:f0max=fSYS/2 (10-4)利用微處理器完成加法運算需要讀取數據、進行運算、再把運算結果送到目標單元。由于微處理器工作的順序性,因此這時的相位累加頻率將比微處理器的時鐘頻率低得多。這種情況在微處理器數據位數低于相位累加器的位數時更加嚴重,因為這時需要多次運算才能完成相位累加。綜上所述,從原理來說,利用微處理器能夠實現DDS技術的電路結構,并能產生所需要的任意信號波形,但是輸出信號的最高頻率受到很大的限制。使用具有高數據位數和高時鐘頻率的微處理器在一定程度上可以克服這個缺點,但這將導致成本提高。10.3.3利用可編程邏輯器件實現DDS信號產生器微處理器程序執(zhí)行的順序性限制了它的工作速度,可編程邏輯器件的并行工作能力使它在需要高速工作的場合非常適用。利用可編程邏輯器件也能夠實現如圖10.1所示的DDS原理圖這樣的電路結構,即實現相位累加器、希望產生波形的數據表以及數字/模擬轉換器的控制時序。相位累加器可以使用VHDL代碼非常容易地實現,具體代碼如代碼示例10.1。代碼示例10.1:--代碼示例10.1--相位累加器的VHDL語言描述LIBRARY ieee; --打開IEEE庫USE ieee.std_logic_1164.ALL; --打開STD_LOGIC_1164包集USE ieee.std_logic_unsigned.ALL; --打開STD_LOGIC_unsigned包集ENTITYl1001IS --定義實體PORT(clk:INSTD_LOGIC; --定義時鐘輸入端口 fre:INSTD_LOGIC_vector(31DOWNTO0);--定義32位頻率字 add_pio:OUTSTD_LOGIC_vector(9DOWNTO0)); --定義波形數據表10位地址端口END l1001; --實體結束語句ARCHITECTUREl1001OFl1001IS --定義結構體BEGIN --開始電路功能描述 PROCESS(clk,fre) --定義描述相位累加器的進程VARIABLEphase:STD_LOGIC_VECTOR(31DOWNTO0); --定義32位相位累加器 BEGIN --開始進程 IF(clk'EVENTANDclk='1')THEN --判斷時鐘是否有效 phase:=phase+fre; --實現相位累加 add_pio<=phase(31DOWNTO22); --截取相位累加器高10位產生波形數 --據表的10位地址 ENDIF; --條件結束語句 ENDPROCESS; --進程結束語句ENDl1001; --結構體結束語句在代碼示例10.1中,輸入端口fre代表進入相位累加器的頻率字。變量phase代表相位累加器,每來一個時鐘完成一次相位累加。相位累加器輸出的高10位用來做波形數據表的地址,由輸出管腳add_pio的輸出。如果使用EPF10K10LC84-4作為目標器件,代碼示例10.1編譯以后需要占用12%的邏輯單元(LogicElements,LE)。該代碼示例的仿真波形如圖10.6所示,完成一次相位累加以及輸出所產生的10位波形數據表地址最少需要15ns,對應的最高的參考時鐘頻率fc可達66MHz。圖10.6相位累加器工作仿真波形圖ALTERA公司的可編程邏輯器件包括復雜可編程邏輯器件(CPLD)和現場可編程門陣列(FPGA),前者例如EPM7128SLC84-15芯片,后者例如EPF10K10LC84-4芯片。對于代碼示例10.1,使用這兩種器件沒有區(qū)別。如果考慮所使用的可編程邏輯器件同時實現波形數據表,那么使用現場可編程門陣列(FPGA)更加合適,因為這種器件具有內部嵌入式陣列塊(EmbeddedArrayBlock,EAB),這些內部嵌入式陣列塊可以作為內部的各種存儲器使用。FPGA的這種特點是CPLD所不具備的,在使用CPLD時,形成存儲器是很困難的。在第8章介紹了利用QuartusⅡ開發(fā)軟件提供的參數可調整模塊(LPM)定制只讀存儲器(ROM)的方法。EPF10K10LC84-4芯片的內部嵌入式陣列塊具有6144位,如果希望產生波形的數據表需要256字節(jié),每字節(jié)10位,將需要2560位,占內部嵌入式陣列塊資源的42%。使用EPF10K10LC84-4作為目標器件,只讀存儲器的仿真波形如圖10.7所示。只讀存儲器完成一次數據讀取至少需要40ns,因此這時對應的最高參考時鐘頻率fc可達25MHz。圖10.7波形數據表仿真波形圖綜上所述,利用可編程邏輯器件也能夠實現如圖10.1所示的DDS原理圖這樣的電路結構。雖然從波形數據表讀取數據的時間大于完成一次相位累加需要的時間,但是這比常用的數字/模擬轉換器的轉換時間小得多。利用可編程邏輯器件實現DDS信號產生器所產生的最高輸出信號頻率比使用微處理器高,但是仍然低于DDS專用芯片。系統設計系統設計的目的是使復雜問題簡單化。通過系統設計這個過程,設計者可以把應用系統劃分成一系列子系統。每個子系統實現一種獨立的功能,這樣不僅可以簡化電路的設計,而且方便多個設計者合作完成設計工作。應用可編程邏輯器件的應用系統設計包括硬件電路設計和軟件程序設計兩部分,因此系統設計也對應地包括這兩個部分。10.4.1硬件電路的系統設計基于ALTERA公司的現場可編程門陣列(FPGA)器件EPF10K10LC84-4設計的正弦信號產生器硬件電路組成框圖如圖10.8所示。它包括顯示電路、鍵盤電路、DDS核電路、數字/模擬轉換器電路、模擬信號放大電路和低通濾波器。圖10.8正弦信號產生器硬件電路組成框圖圖10.8所示的正弦信號產生器的輸出頻率由鍵盤控制。由于輸出信號頻率包含多位數據,因此在使用鍵盤輸入信息的過程之中,輸出信號頻率需要保持不變。當所有信息輸入完成之后,通過按下執(zhí)行鍵(ENTER),刷新DDS核的輸入頻率字,使得輸出信號頻率發(fā)生相應的變化。顯示電路在這里也是既被用來顯示輸出信號的頻率值,也被用來顯示鍵盤電路的調整過程。小型系統的顯示電路常采用數碼管或者液晶顯示器件。前者電路簡單;后者不僅可以顯示數據,而且可以顯示字符。為簡化設計,這里采用數碼管。DDS核電路包括相位累加器和希望產生波形的數據表,這部分使用現場可編程門陣列來實現?,F場可編程門陣列不僅實現DDS核電路,而且實現鍵盤輸入的處理、顯示數據的譯碼以及數字/模擬轉換器的控制時序。由波形的數據表輸出的數據波形通過數字/模擬轉換器的控制代碼送到數字/模擬轉換器DAC7611,產生需要的正弦信號。DAC7611是一種具有串行同步接口的12位數字/模擬轉換器,使用該器件電路簡單,但是它的轉換速率對輸出信號的最高頻率有影響。數字/模擬轉換器輸出的正弦信號是由許多小臺階來模擬產生的,基于DDS原理的信號源,無論它的工作頻率如何,這些小臺階的周期都是一個確定值,因此一個上限頻率確定的低通濾波器可以被用來濾除輸出信號中的諧波分量。電路中所使用運算放大器的頻帶寬度需要被仔細考慮以滿足輸出頻率范圍的要求。由于隨著工作頻率的提高,運算放大器的放大倍數將下降,因此需要選擇具有足夠工作頻率范圍的運算放大器器件。另外,通過合適地選擇運算放大器的器件型號還可以同時實現低通濾波器的作用。由于本書的目的是介紹可編程邏輯器件的使用,因此在下一節(jié)的單元電路設計中只介紹與現場可編程門陣列器件有關的電路設計,即顯示電路、鍵盤電路、相位累加器、波形的數據表以及數字/模擬轉換器的控制,運算放大器和低通濾波器的設計將不被涉及,有興趣的讀者請參考其它資料。系統代碼框圖圖10.9正弦信號產生器的系統代碼框圖在圖10.9所示正弦信號產生器的系統代碼框圖中,鍵盤識別模塊用來完成按鍵有效的識別,并產生相應的按鍵有效信號。由于輸入的頻率包括多位有效數字,鍵盤輸入處理模塊需要識別當前正在調整的數位,并根據具體情況調整對應數位的數值。輸入的信號頻率值采用十進制,單位為Hz。這個頻率值一方面被送到顯示模塊,一方面被送到譯碼模塊。在顯示模塊中,這個頻率值也要進行譯碼,轉換成對應的顯示代碼,用來驅動多位七段數碼管。在譯碼模塊中,這個頻率值將被轉換為對應的頻率字送到相位累加器。頻率數值到對應的頻率字的轉換包括兩個過程:輸入頻率的多位有效數字被合成為一個數據;十進制數制到二進制數制的轉換??刂茣r鐘有效時,頻率字中的數據加入相位累加器。相位累加器循環(huán)累加,進位將被丟棄。它的溢出率即為輸出信號的頻率,改變頻率字就可以改變這個溢出率,從而實現輸出信號頻率的調整。為提高輸出信號頻率的分辨率,相位累加器的位數高于波形數據表的地址位數,因此需要截取相位累加器輸出的部分高數據位來產生需要的地址。波形數據表輸出其地址對應的波形數據到數字/模擬轉換器控制模塊。在數字/模擬轉換器控制模塊中,波形數據被編入控制時序中,結合其它所需要的控制信息一起以串行同步的數據傳輸方式被送到數字/模擬轉換器。單元電路設計10.5.1數字/模擬轉換器系統中的數字/模擬轉換器芯片采用美國BURR-BROWN公司生產的DAC7611數字/模擬轉換器芯片。采用該芯片并沒有特殊的理由,只是作者經常使用這種芯片。另外這里并沒有一個必須要達到的技術指標,我們的目的是通過一個完整的設計過程來學習如何進行應用系統設計。在第七章的第五節(jié)已經對DAC7611數字/模擬轉換器進行了介紹。這個介紹包括芯片管腳、電路連接、技術指標、控制時序以及實現控制時序的VHDL代碼。實現控制時序的VHDL代碼如代碼示例7.6所示。完成硬件電路設計和軟件編程,還需要對單元的工作情況進行測試。對于DAC7611數字/模擬轉換器電路的測試包括數字/模擬轉換的精度和速率兩個方面。前者的不理想將導致模擬信號的失真,后者的不理想將限制模擬信號的最高頻率?!鯠AC7611的轉換精度轉換精度的測量可以通過把代碼示例7.6下載到現場可編程門陣列(FPGA)器件EPF10K10LC84-4之中來實現。時鐘信號clock可以由信號產生器或者晶體振蕩器產生,這里時鐘信號頻率采用1MHz。復位信號reset和數據d_in由開關或者利用導線直接連接可編程邏輯器件的相關管腳到電源端或者接地端來產生。輸出信號sdi、clk、cs和ld與DAC7611數字/模擬轉換器的相關管腳連接。每次測量數據時,首先通過開關或者利用導線完成待轉換數據的設置,然后產生高電平的復位信號,取掉復位信號之后將啟動數字/模擬轉換過程,最后在DAC7611數字/模擬轉換器的輸出端測量模擬電壓。實測結果如表10.1所示。表10.1DAC7611數字/模擬轉換器的輸出電壓輸入數據輸出電壓理想值(mV)輸出電壓實測值(mV)絕對誤差(mV)相對誤差(%)000H011200H51251530.59400H1024102840.39600H1536154260.39800H2048205020.10A00H25602570100.39C00H3072308080.26E00H3584359060.17FFFH4095409720.05產生一次高電平的復位信號,代碼示例7.6將執(zhí)行一次。完成一次數字/模擬轉換,然后等待下一次的高電平復位信號。表10.1所示的實測結果可以用來分析產生信號波形的失真。由于篇幅的關系,表10.1只給出9個點的實測結果。如果希望分析所產生信號波形的失真情況,應根據分析要求的精度來決定需要測量的點數,利用給定的數字量和實測的模擬量將可以獲得數字/模擬轉換器的傳輸特性?!鯠AC7611的轉換速率由圖7.8所示的數字/模擬轉換器DAC7611的工作時序圖可以看出,它的工作可以分為兩步:接收數據和完成數字/模擬轉換。接收數據采用串行同步接口,每來一個時鐘,接收一位數據。從DAC7611的數據手冊得到,時鐘最小周期為60ns,完成12位數據需要720ns。完成數字/模擬轉換比較慢,這個過程需要7us。數據接收和數字/模擬轉換是相互獨立的,在信號產生器設計中數字/模擬轉換器需要連續(xù)工作,因此可以把數據接收需要的時間和數字/模擬轉換需要的時間設置為相等。DAC7611最大轉換速率測量可以通過向它傳送循環(huán)迭加的數據來實現,這時數字/模擬轉換器將輸出鋸齒波。逐漸加大系統的時鐘信號頻率,由觀察輸出信號的波形是否失真可以獲得完成數字/模擬轉換的最小時間,即數字/模擬轉換的速率。最大轉換速率測量代碼包括3部分:代碼示例7.6所示的DAC7611控制時序VHDL代碼模塊、DAC7611輸入數據產生代碼模塊以及控制上述兩個部分協調工作的控制代碼模塊。代碼示例7.6所示的DAC7611控制時序VHDL代碼完成一次包括發(fā)送數據和啟動數字/模擬轉換的完整過程至少需要26個狀態(tài),或者需要26個輸入時鐘。為簡化代碼設計以及測量數據的處理,控制DAC7611時序產生代碼模塊和輸入數據產生代碼模塊兩個部分協調工作的控制代碼模塊使用30個輸入時鐘為一個工作周期??刂拼a模塊在每個周期開始的前幾個時鐘產生正脈沖,這個正脈沖用作DAC7611的復位信號reset和輸入數據產生代碼模塊的計數信號。復位信號reset結束的時候,輸入數據產生代碼模塊已經完成數據調整,控制DAC7611時序產生代碼模塊把這個數據發(fā)送到數字/模擬轉換器。輸入數據產生代碼模塊包含12位加法計數器,在控制代碼模塊產生的正脈沖作用下完成加法,加數的數值取決于每個鋸齒波周期包含的階梯數??刂拼a模塊產生的正脈沖頻率就是數字/模擬轉換速率,這個速率為時鐘頻率的三十分之一。時鐘信號頻率從1MHz開始往上調,當調節(jié)到4MHz時發(fā)現示波器上顯示的鋸齒波出現失真。按照前面的描述,計算出DAC7611的最高數字/模擬轉換速率為140KHz。根據前面介紹的DDS理論,使用DAC7611數字/模擬轉換器來產生正弦波的最高頻率為70KHz。事實上,產生一個完整周期的正弦波信號至少需要30個輸出點,這樣這時產生的正弦波最高頻率約為5KHz。10.5.2波形數據表ALTERA公司的現場可編程門陣列(FPGA),例如EPF10K10LC84-4芯片,具有內部嵌入式陣列塊(EmbeddedArrayBlock,EAB),它們可以作為存儲波形數據表的存儲器使用。在第8章介紹了利用QuartusⅡ開發(fā)軟件提供的參數可調整模塊(LPM)定制只讀存儲器(ROM)的方法。這里主要討論如何選擇存儲器需要的字數和每個字的位數。由表10.1所示的DAC7611數字/模擬轉換器的輸出端模擬電壓測量結果可以看出,輸出模擬電壓的實測數值與理想數值之間存在著誤差,這個誤差的最大值為10mV。由最大絕對誤差可以確定存儲器中每個被存儲數據的位數,因為理論上數據的位數越多,數據越準確,但是實際工作中如果器件的精度達不到則并不能獲得希望的指標,同時無效的數據位將浪費存儲器的資源。DAC7611為12位數字/模擬轉換器,理想情況下,當輸入的數字量為000H時,它的模擬輸出電壓為0V;當輸入的數字量為FFFH時,它的模擬輸出電壓為4.095V,即它的最大模擬輸出電壓為4.095V。輸入的數字量每改變1位,輸出的模擬電壓改變1mV。由于輸出模擬電壓的實測數值與理想數值之間具有10mV的最大絕對誤差,所以DAC7611輸入數據的低3位對輸出模擬電壓的影響是不確定的??紤]到輸出模擬電壓的實測數值與理想數值之間存在的誤差,波形數據表中每個存儲單元采用10位。這10位數據被傳送到DAC7611數字/模擬轉換器的高10位,數字/模擬轉換器的低2位可以賦為0。合理地選擇每個數據占用的數位可以節(jié)約存儲器的資源,同樣合理地選擇波形數據表中的字數也可以在保證輸出信號波形質量的同時也盡量地節(jié)約存儲器的資源。本設計需要產生正弦信號波形,我們希望波形數據表中相鄰波形數據的變化量小于數字/模擬轉換器的最小分辨率。由于正弦信號在0°附近變化率最大,波形數據表中的數據具有10位,正弦數據的幅度值對應9位,因此利用下式可以確定最小角度分辨率。SIN△θ=1/512 (10.5)由(10.5)解得△θ為0.112°。EPF10K10LC84-4芯片的內部嵌入式陣列塊具有6144位,如果希望產生波形的數據表中每個數據具有10位,那么可以存儲610個數據,這時對應的最小角度分辨率為:360°/610=0.59°由于EPF10K10LC84-4芯片的內部嵌入式陣列塊資源的限制,它達不到需要的要求,這將影響輸出模擬信號的質量。解決這個問題的方法可以采用具有更多內部嵌入式陣列塊資源的芯片。如前所述,這里的主要目的是介紹應用系統的設計方法和設計報告的撰寫方法,因此本設計波形數據表中的字數選為256,對應的波形數據表中數據的最小角度分辨率為1.4°,需要的地址線寬度為8位。使用EPF10K10LC84-4作為目標器件,利用QuartusⅡ開發(fā)軟件提供的參數可調整模塊(LPM)定制具有256字,每字10位的只讀存儲器(ROM)。該存儲器完成一次數據讀取約需要40ns,這時的最高參考時鐘頻率fc可達25MHz,這個時鐘頻率比140KHz的DAC7611最高數字/模擬轉換速率高得多。10.5.3相位累加器代碼示例10.1給出一個具有32位的相位累加器的代碼舉例,它的輸出地址寬度為10位。本小節(jié)重點討論討論相位累加器位數的選取。相位累加器的位數決定輸出模擬信號的頻率分辨率:f0=fc/2N (10.6)如果設計的信號產生器采用3個數碼管顯示工作頻率,例如顯示的工作頻率范圍是1Hz~999Hz,那么需要的頻率分辨率只要達到0.1Hz就可以滿足要求。如前所述,DDS信號源包括相位累加器、波形數據表以及數字/模擬轉換器。使用EPF10K10LC84-4作為目標器件,參考圖10.6,完成一次相位累加需要15ns,即它的時鐘頻率最高可達66MHz。波形數據表完成數據讀取的最高參考時鐘頻率可達25MHz,DAC7611數字/模擬轉換器的最高頻率為140KHz。DAC7611數字/模擬轉換器的工作速度限制了系統的工作速度。由于普通電子器件供應商提供的晶體工作頻率種類有限,這里選取參考時鐘頻率fc為100KHz,如果選擇30個工作狀態(tài)完成一次模擬電壓輸出,那么使用3MHz的晶體即可。輸出信號的頻率分辨率△f0為0.1Hz,由式(10.6)可以計算出需要的相位累加器位數N為22位即可滿足要求。通過修改代碼示例10.1中代表頻率字、相位累加器以及輸出波形數據表地址的位數就可以獲得滿足本設計的相位累加器的VHDL代碼。10.5.4顯示電路正弦信號產生器采用數碼管來顯示工作狀態(tài)。為簡化設計,顯示電路包括3位數碼管,用來顯示1Hz~999Hz的輸出信號頻率。數碼管有共陰極和共陽極兩種類型。前者在使用時管腳COM應接低電平,當數碼管其余的某個管腳接高電平,則該管腳對應的發(fā)光段被點亮;后者在使用時管腳COM應接高電平,當數碼管其余的某個管腳接入低電平,則該管腳對應的發(fā)光段被點亮。數碼管的管腳a~g可以直接與可編程邏輯器件的輸入/輸出管腳連接或者通過一個限流電阻再與可編程邏輯器件的輸入/輸出管腳連接。如果數碼管的管腳a~g通過一個限流電阻再與可編程邏輯器件的輸入/輸出管腳連接,那么管腳COM可以直接與電源或者地連接;如果數碼管的管腳a~g直接與可編程邏輯器件的輸入/輸出管腳連接,那么管腳COM必須通過一個限流電阻再與電源或者地連接。顯示電路不使用數碼管的小數點,數碼管的管腳dp可以開路。采用數碼管的管腳a~g中的每一個管腳通過一個限流電阻再與可編程邏輯器件的輸入/輸出管腳連接的方法在顯示不同字符的時候亮度一致,但是需要7個限流電阻;采用管腳COM通過一個限流電阻與電源或者地連接的方法,只需要一個限流電阻,但是在顯示不同字符的時候亮度不一致。限流電阻被用來防止電流過大損壞電路器件。由于不同型號的發(fā)光二極管的技術參數不同,應根據具體情況來確定限流電阻的阻值,限流電阻的取值范圍是100Ω~1kΩ。為保證電路的安全,限流電阻開始可以選取大一些,如果數碼管的亮度不夠,再逐漸減小限流電阻的值,直到數碼管的亮度滿足要求。三個數碼管電路設計為獨立工作,它們各自接收需要顯示的數據。準備顯示的數據在可編程邏輯器件中進行譯碼,產生的顯示代碼被送到7段數碼管實現數據的顯示。由于三個數碼管電路完全一樣,下面給出其中一路的VHDL代碼,該代碼支持共陰極數碼管的工作。修該代碼中的顯示代碼,代碼示例10.2可以很方便地用于支持共陽極數碼管的工作。代碼示例10.2:--代碼示例10.2--共陰極7段數碼管顯示的VHDL語言描述LIBRARY ieee; --打開IEEE庫USE ieee.std_logic_1164.ALL; --打開STD_LOGIC_1164包集ENTITYl1002IS --定義實體PORT(data:INSTD_LOGIC_vector(3DOWNTO0);--定義顯示數據輸入端口 seven_seg:OUTSTD_LOGIC_vector(6DOWNTO0)); --定義顯示代碼輸出端口END l1002; --實體結束語句ARCHITECTUREl1002OFl1002IS --定義結構體BEGIN --開始電路功能描述 WITHdataSELECT --顯示數據到顯示代碼的轉換 seven_seg<=“0111111”WHEN“0000”, “0000110”WHEN“0001”, “1011011”WHEN“0010”, “1001111”WHEN“0011”, “1100110”WHEN“0100”, “1101101”WHEN“0101”, “1111101”WHEN“0110”, “0000111”WHEN“0111”, “1111111”WHEN“1000”, “1101111”WHEN“1001”, “0000000”WHENOTHERS;ENDl1002; --結構體結束語句代碼示例10.2接收準備顯示的一位數據,該數據采用BCD碼。輸入的BCD碼譯碼以后通過可編程邏輯器件的輸入/輸出管腳送到數碼管的輸入管腳。輸出端口seven_seg的7位數據按照從低到高的順序依次送到數碼管的管腳a~g。完成代碼示例10.2的調試以后,該代碼段可以形成一個符號,在原理圖編輯中利用這個符號實現三個數碼管的顯示電路。10.5.5鍵盤電路鍵盤是一組按鍵開關的集合。像數碼管一樣,鍵盤也是應用系統的一個關鍵部件。按鍵開關具有2個狀態(tài),閉合或者斷開。這2個狀態(tài)反映在電壓上就是按鍵開關呈現出高電平或者低電平。如果按鍵開關呈現高電平表示它斷開,那么按鍵開關呈現低電平表示它閉合,因此通過檢測按鍵開關呈現的電平狀態(tài)就可以確認按鍵開關是否被按下。常用的鍵盤有獨立式鍵盤和矩陣式鍵盤。前者電路結構和軟件結構都比較簡單,但是每一個按鍵開關需要占用一個輸入/輸出管腳。后者電路結構和軟件結構都比較復雜,但是占用較少的輸入/輸出管腳,例如一個3×3的矩陣式鍵盤包含9個按鍵開關,只需要6個輸入/輸出管腳;一個4×4的矩陣式鍵盤包含16個按鍵開關,只需要8個輸入/輸出管腳。在鍵盤包含的按鍵開關較少的情況下,例如只包含4個按鍵開關,獨立式鍵盤占用的輸入/輸出管腳數量是可以接受的。具有4個按鍵的獨立式鍵盤電路如圖10.10所示。圖10.10獨立式鍵盤電路在圖10.10所示的電路中,4個按鍵開關分別與4個不同的輸入/輸出管腳相連接。這里的按鍵開關采用常開開關,即在沒有執(zhí)行按鍵動作的時候,開關是斷開的。當某個開關斷開時,對應的輸入/輸出管腳通過一個限流電阻與電源VCC相連接,這時該管腳輸入高電平。合理選擇限流電阻的阻值使得流入可編程邏輯器件的電流被限制在要求的范圍之內,并且當開關閉合時對電源進行保護。限流電阻的推薦值為10kΩ。當某個按鍵開關被按下,對應的輸入/輸出管腳被接地,這時該管腳的輸入是低電平。鍵盤中的4個按鍵分別扮演2個不同的用途:輸入數據和刷新DDS的頻率狀態(tài)字。輸入數據通過按鍵KEY0、KEY1和KEY2實現,其中按鍵KEY0被用來調整輸出信號頻率的個位;按鍵KEY1被用來調整輸出信號頻率的十位;按鍵KEY2被用來調整輸出信號頻率的百位。按鍵KEY3被用來刷新DDS的頻率狀態(tài)字,因此它被稱作為執(zhí)行鍵(ENTER)。在輸入數據的過程中,輸出信號的頻率保持原數值,這時只改變對應的數據存儲單元的內容,并利用數碼管把當前內容顯示出來以方便數據調整。當按下執(zhí)行鍵(ENTER),輸入的頻率值被轉換成新的DDS的頻率狀態(tài)字。數據調整鍵KEY0、KEY1和KEY2中的每一個都對應一個存儲單元,每按一次按鍵,該按鍵對應的存儲單元的內容加一。這個過程一直到內容為9,再次按鍵將使得存儲單元的內容清零。為避免一次按鍵導致存儲單元的內容變化太大,鍵盤電路的時鐘應該選得較低,例如1Hz。在按鍵被按下,同時時鐘信號的前沿到來時,該按鍵對應的存儲單元的內容加一,利用數碼管把當前內容顯示出來。當顯示的數值為需要的數據時,釋放按鍵。輸入的頻率值與DDS的頻率狀態(tài)字之間的關系為:f0=fc×K/2N在這里,fc=100KHz;相位累加器的位數為N=21。正弦信號產生器的輸出信號頻率f0與頻率控制字K的關系如表10.2所示。表10.2輸出信號頻率f0與頻率控制字K的關系輸出信號頻率fo頻率控制字K輸出信號頻率fo頻率控制字K輸出信號頻率fo頻率控制字K1Hz1010B10Hz1101000B100Hz10000011000B2Hz10100B20Hz11010001B200Hz100000110001B3Hz11111B30Hz100111010B300Hz110001001001B4Hz101001B40Hz110100011B400Hz1000001100010B5Hz110100B50Hz1000001100B500Hz1010001111010B6Hz111110B60Hz1001110101B600Hz1100010010011B7Hz1001001B70Hz1011011110B700Hz1110010101100B8Hz1010011B80Hz1101000110B800Hz10000011000100B9Hz1011110B90Hz1110101111B900Hz10010011011101B正弦信號產生器的輸出信號頻率f0與頻率控制字K的關系表可以實現譯碼電路。當執(zhí)行鍵(ENTER)被按下時,首先分別由數據調整鍵KEY0、KEY1和KEY2中對應存儲單元中的數據通過查表獲得對應的頻率字;然后把這3個頻率字相加,獲得輸出信號頻率要求的頻率字。鍵盤部分的VHDL代碼如代碼示例10.3所示。代碼示例10.3:--代碼示例10.3--鍵盤部分的VHDL語言描述LIBRARY ieee; --打開IEEE庫USE ieee.std_logic_1164.ALL; --打開STD_LOGIC_1164包集USE ieee.std_logic_unsigned.ALL; --打開STD_LOGIC_unsigned包集ENTITYl1003IS --定義實體 PORT(clk_1hz:INSTD_LOGIC; --定義時鐘輸入端口 key_data:INSTD_LOGIC_VECTOR(3DOWNTO0); --定義按鍵輸入端口 seven_sega,seven_segb,seven_segc:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --定義顯示代碼輸出端口 fre:OUTSTD_LOGIC_VECTOR(21DOWNTO0)); --定義頻率字輸出端口END l1003; --實體結束語句ARCHITECTUREl1003OFl1003IS --定義結構體 SIGNALkey_rama,key_ramb,key_ramc:STD_LOGIC_VECTOR(3DOWNTO0); BEGIN --開始電路功能描述 PROCESS(clk_1hz,key_data) --定義鍵盤處理的進程 VARIABLEfre_a,fre_b,fre_c:STD_LOGIC_VECTOR(21DOWNTO0); --定義輸出頻率每1位對應頻率字 BEGIN --開始進程 IF(clk_1hz'EVENTANDclk_1hz='1')THEN--判斷時鐘是否有效 IF(key_data="1110")THEN --判斷按鍵key0是否按下 IF(key_rama<"1001")THEN --判斷對應的存儲器內容是否小于9 key_rama<=key_rama+1; --小于9,內容加1 ELSE key_rama<="0000"; --不小于9,內容清0 ENDIF; --條件結束語句 ENDIF; --條件結束語句 IF(key_data="1101")THEN --判斷按鍵key1是否按下 IF(key_ramb<"1001")THEN --判斷對應的存儲器內容是否小于9 key_ramb<=key_ramb+1; --小于9,內容加1 ELSE key_ramb<="0000"; --不小于9,內容清0 ENDIF; --條件結束語句 ENDIF; --條件結束語句 IF(key_data="1011")THEN --判斷按鍵key2是否按下 IF(key_ramc<"1001")THEN --判斷對應的存儲器內容是否小于9 key_ramc<=key_ramc+1; --小于9,內容加1 ELSE key_ramc<="0000"; --不小于9,內容清0 ENDIF; --條件結束語句 ENDIF; --條件結束語句 IF(key_data="0111")THEN --判斷按鍵key3是否按下 CASEkey_ramaIS --把輸入數據轉換成對應的頻率字 WHEN"0000"=>fre_a:="0000000000000000000000"; WHEN"0001"=>fre_a:="0000000000000000001010"; WHEN"0010"=>fre_a:="0000000000000000010100"; WHEN"0011"=>fre_a:="0000000000000000011111"; WHEN"0100"=>fre_a:="0000000000000000101001"; WHEN"0101"=>fre_a:="0000000000000000110100"; WHEN"0110"=>fre_a:="0000000000000000111110"; WHEN"0111"=>fre_a:="0000000000000001001001"; WHEN"1000"=>fre_a:="0000000000000001010011"; WHEN"1001"=>fre_a:="0000000000000001011110"; WHENOTHERS=>NULL; ENDCASE; --選擇結束語句 CASEkey_rambIS --把輸入數據轉換成對應的頻率字 WHEN"0000"=>fre_b:="0000000000000000000000"; WHEN"0001"=>fre_b:="0000000000000001101000"; WHEN"0010"=>fre_b:="0000000000000011010001"; WHEN"0011"=>fre_b:="0000000000000100111010"; WHEN"0100"=>fre_b:="0000000000000110100011"; WHEN"0101"=>fre_b:="0000000000001000001100"; WHEN"0110"=>fre_b:="0000000000001001110101"; WHEN"0111"=>fre_b:="0000000000001011011110"; WHEN"1000"=>fre_b:="0000000000001101000110"; WHEN"1001"=>fre_b:="0000000000001110101111"; WHENOTHERS=>NULL; ENDCASE; --選擇結束語句 CASEkey_ramcIS --把輸入數據轉換成對應的頻率字 WHEN"0000"=>fre_c:="0000000000000000000000"; WHEN"0001"=>fre_c:="0000000000010000011000"; WHEN"0010"=>fre_c:="0000000000100000110001"; WHEN"0011"=>fre_c:="0000000000110001001001"; WHEN"0100"=>fre_c:="0000000001000001100010"; WHEN"0101"=>fre_c:="0000000001010001111010"; WHEN"0110"=>fre_c:="0000000001100010010011"; WHEN"0111"=>fre_c:="0000000001110010101100"; WHEN"1000"=>fre_c:="0000000010000011000100"; WHEN"1001"=>fre_c:="0000000010010011011101"; WHENOTHERS=>NULL; ENDCASE; --選擇結束語句 ENDIF; --條件結束語句 ENDIF; --條件結束語句 fre<=fre_a+fre_b+fre_c; --產生輸出頻率對應的頻率字 ENDPROCESS; --進程結束語句 seven_sega<=key_rama; --輸出工作頻率個位數據 seven_segb<=key_ramb; --輸出工作頻率十位數據 seven_segc<=key_ramc; --輸出工作頻率百位數據ENDl1003; --結構體結束語句圖10.11為代碼示例10.3的仿真波形圖。該圖描述了逐次按下按鍵KEY0、KEY1、KEY2和KEY3代碼示例10.3的工作情況。當按下數據調整鍵時,對應的數據存儲器內容被調整,該內容以BCD碼的形式送出;當按下執(zhí)行鍵(ENTER)時,3個數據調整鍵對應的數據存儲器內容分別被轉換成頻率字,接著把這3個頻率字通過相加形成要求的輸出信號頻率對應的頻率字。如果按住數據調整鍵,每來一個時鐘信號的前沿,該數據調整鍵對應的數據存儲器內容加1,利用這種方法可以較快地調整輸出頻率。由于輸出信號的頻率是通過數碼管進行觀察,因此時鐘頻率不能太高。圖10.11代碼示例10.3仿真波形圖系統連調10.6.1各種時鐘的產生本小節(jié)設計信號產生器系統所需要的各種時鐘的產生電路。系統可以被劃分為兩個部分:包括鍵盤電路和數碼管顯示電路的人機界面;DDS核電路以及數字/模擬轉換器控制代碼的產生模塊。前者的時鐘可以直接由系統時鐘通過分頻獲得;后者不僅需要產生多種頻率的時鐘信號,而且這些信號之間還需要滿足一定的時間關系。為了更好地產生DDS核電路以及數字/模擬轉換器控制代碼的產生模塊需要的各種時鐘信號,這里再次回顧這部分的工作過程:相位累加器接收從鍵盤電路送來的頻率字,在它的時鐘信號的作用下完成相位累加;相位累加器的高8位輸出作為波形數據表的地址,在該地址信號穩(wěn)定以后,波形數據表在它的時鐘信號的作用下把地址對應的波形數據送出;在波形數據信號穩(wěn)定以后,DAC7611數字/模擬轉換器開始裝入控制信號,完成一次控制信號的裝入需要26個時鐘信號。由于DAC7611數字/模擬轉換器完成一次轉換的時間遠大于其它部分所需要的時間,這里首先確定它的工作速度。為方便晶體的選擇,這里采取100KHz的數字/模擬轉換速率。考慮到完成一次數字/模擬轉換需要26個時鐘信號,因此選擇系統時鐘clk_sys頻率為3MHz,周期為333ns。以系統時鐘為基準,30個狀態(tài)為一個循環(huán)產生各種時鐘信號。每個狀態(tài)循環(huán)的第0個狀態(tài)的1個周期產生相位累加器的時鐘信號;第1個狀態(tài)的1個周期產生波形數據表讀取數據的時鐘信號;第0個狀態(tài)到第2個狀態(tài)的3個周期產生DAC7611數字/模擬轉換器控制代碼的復位信號。當數字/模擬轉換器控制代碼的復位信號變?yōu)榈碗娖揭院?,在系統時鐘clk_sys的作用下,DAC7611數字/模擬轉換器開始裝入控制信號??刂茣r鐘產生電路的VHDL代碼如代碼示例10.4所示。代碼示例10.4:--代碼示例10.4--控制時鐘產生電路的VHDL語言描述LIBRARY ieee; --打開IEEE庫USE ieee.std_logic_1164.ALL; --打開STD_LOGIC_1164包集ENTITYl1004IS --定義實體 PORT(clk_sys:INSTD_LOGIC; --定義系統時鐘輸入端口 clk_1hz:OUTSTD_LOGIC; --定義鍵盤時鐘輸出端口 clk_phses:OUTSTD_LOGIC; --定義相位累加器時鐘輸出端口 clk_data:OUTSTD_LOGIC; --定義波形數據表讀數時鐘輸出端口 reset_dac:OUTSTD_LOGIC); --定義DAC7611復位信號輸出端口END l1004; --實體結束語句ARCHITECTUREl1004OFl1004IS --定義結構體 SIGNALaqi:INTEGERRANGE0TO29; --定義30個狀態(tài)信號 SIGNALbqi:INTEGERRANGE0TO2999999; --定義產生1Hz鍵盤時鐘的分頻信號 BEGIN --開始電路功能描述 PROCESS(clk_sys) --定義狀態(tài)產生的進程BEGIN --開始進程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判斷系統時鐘是否有效 IF(aqi<29)THEN --判斷是否產生30個狀態(tài) aqi<=aqi+1; --不到30個狀態(tài),狀態(tài)調整 ELSE --到30個狀態(tài) aqi<=0; --狀態(tài)初始化 ENDIF; --條件結束語句 ENDIF; --條件結束語句ENDPROCESS; --進程結束語句PROCESS(clk_sys,aqi) --定義相位累加器時鐘產生的進程BEGIN --開始進程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判斷系統時鐘是否有效 IF(aqi=0)THEN --判斷是否滿足輸出時鐘條件 clk_phses<=‘1’; --滿足條件,輸出時鐘 ELSE --不滿足條件 clk_phses<=‘0’; --不輸出時鐘ENDIF; --條件結束語句 ENDIF; --條件結束語句ENDPROCESS; --進程結束語句PROCESS(clk_sys,aqi) --定義波形數據表讀數時鐘產生的進程BEGIN --開始進程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判斷系統時鐘是否有效 IF(aqi=1)THEN --判斷是否滿足輸出時鐘條件 clk_data<=‘1’; --滿足條件,輸出時鐘 ELSE --不滿足條件 clk_data<=‘0’; --不輸出時鐘ENDIF; --條件結束語句 ENDIF; --條件結束語句ENDPROCESS; --進程結束語句PROCESS(clk_sys,aqi) --定義波形數據表讀數時鐘產生的進程BEGIN --開始進程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判斷時鐘是否有效 IF(aqi<2)THEN --判斷是否滿足輸出時鐘條件 reset_dac<=‘1’; --滿足條件,輸出時鐘 ELSE --不滿足條件 reset_dac<=‘0’; --不輸出時鐘ENDIF; --條件結束語句 ENDIF; --條件結束語句ENDPROCESS; --進程結束語句PROCESS(clk_sys) --定義1Hz時鐘產生的進程BEGIN --開始進程 IF(clk_sys'EVENTANDclk_sys='1')THEN --判斷系統時鐘是否有效 IF(bqi<2999999)THEN --判斷是否達到分頻數 bqi<=bqi+1; --不到分頻數,調整計數 clk_1hz<=‘0’; --不輸出時鐘 ELSE --達到分頻數 bqi<=0; --計數清零 clk_1hz<=‘1’; --輸出1Hz時鐘 ENDIF; --條件結束語句 ENDIF; --條件結束語句ENDPROCESS; --進程結束語句ENDl1004
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年瓷磚供應合同協議模板
- 《客戶投訴實務》課件
- 2024三方聯合開發(fā)餐飲配送電商平臺合同3篇
- 2024年無財產離婚協議書起草與房產分割協議合同3篇
- 2025礦山承包合同書范文
- 2025設備租賃合同大全
- 2024年度汽車牌照轉讓及環(huán)保節(jié)能服務合同樣本3篇
- 2025轉讓經營合同
- 2024年度農產品采購與綠色食品開發(fā)合同2篇
- 2024年校園講師臨時聘用合同
- 民族經濟發(fā)展政策課件
- COPD(慢性阻塞性肺病)診治指南(2023年中文版)
- 群控系統試運行及調試方案
- 校園安全教育(完美版)ppt
- 新教材《鄉(xiāng)土中國》第篇《長老統治》課件-高一語文統編版必修上冊
- 履約情況證明
- 道路用液體石油瀝青試驗檢測報告
- 水庫建設項目施工組織設計
- 外科學教案-下肢骨關節(jié)損傷
- 建設工程施工現場項目部人員委派書
- 國家開放大學實驗學院生活中的法律第三單元測驗答案
評論
0/150
提交評論