久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9678|回復: 0
打印 上一主題 下一主題
收起左側

CPLD多波形信號發生器

[復制鏈接]
跳轉到指定樓層
樓主
ID:111475 發表于 2016-3-30 21:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
      
摘    要
直接數字頻率合成(Direct Digital Synthesis,DDS)是20世紀60年代末出現的第三代頻率合成技術,該技術從相位概念出發,以時域采樣定理為基礎,在時域中進行頻率合成,它以可編程邏輯器件(CPLD)作為控制及數據處理的核心,可將波形數據用D/A轉換器快速恢復。基于CPLD和DDS技術的函數發生器可以實現信號波形的多樣化,同時大大提高輸出信號的帶寬。
整個設計采用MAX+ plus II開發平臺,VHDL編程實現,基于可編程邏輯器件CPLD設計多波形信號發生器。用VHDL編程實現,其設計過程簡單,極易修改,可移植性強。系統以CPLD為核心,采用直接數字合成技術,輔以必要的模擬電路,構成一個波形穩定,精度較高的函數信號發生器。系統的特色在于除晶體振蕩器和A/D轉換外,全部集成在一片CPLD芯片上,使系統大大簡化。它可輸出頻率、幅度可調的正弦波、三角波、方波。另外由于CPLD具有可編程重置特性,因而可以方便地更換波形數據,且簡單易行,帶來極大方便。
     
關鍵詞:信號發生器設計;三相;VHDL;CPLD;MAX+ plus II
ABSTRACT
Direct digital frequency synthesize(DDFS) is a recently and rapidly developed technology which features high frequency resolution.This paper briefly introduces the basic principle of DDS. The basic principle and performance of CPLD chip.Then it mainly describes how to use CPLD chip to design a function generator of high accuracy.The principle of three-phase multi-signal generator based on CPLD and DDS technology is introduced.Based on these,the modules of CPLD design are given.
The multi-wave signal generator is designed based on program-mable logical component CPLD.The VHDL programming realization and the MAX+ plus II development platform. Besides the crystal oscillator and the A/D transformation,the entire system completely integrates on the CPLD chip.The multi-wave signal generator may output the sine-wave,the triangle-wave,the square-wave.Then downloaded under the situation which the entire system hardware connects do not change,and finally output the special profile which user needs.The multi-wave signal generator generates wave which the conventional function signal generators can’t make.Moreover because of the programmable reset feature of the CPLD,the generator can change the wave data conveniently and practice easily.The whole design realizes by the VHDL  programmer.Its design process has simple feature,easy modification and high transportation.
Keywords:Signal Generator Design;Three-phase;VHDL;CPLD;MAX+ plus II
目    錄
1       1
2基于CPLD的三相多波形函數發生器設計      3
2.1 波形發生器系統的設計方法及其技術指標   3
2.1.1設計方式概述      3
2.1.2 三相函數多波形發生器技術指標      5
2.1.3三相波形發生器設計方法概述      5
2.2 設計方案   6
2.2.1 三相函數發生器設計原理      6
2.2.2 多波形發生器的各個波形模塊設計方式簡介      9
2.3 調試部分   12
2.3.1  CPLD在使用中遇到的問題      12
2.3.2 控制電路的調試      13
2.3.3 DAC電路的調試      13
2.3.4  程序的調試      13
2.3.5 硬件電路的調試      13
      15
參考文獻      16
附錄1 三相多波形函數發生器各模塊的程序      17
附錄2 元件介紹      23
1 DAC0832   23
2 LM324   24
3 PM7128SLC84-15芯片   25
附錄3電路原理圖      26
附錄4 英文資料及譯文      27
1英文資料   27
2英文譯文   36
      43

      
1 引 言
現代電子技術的核心技術是EDA(Electronic Design Automation)。EDA技術就是依賴強大的電子計算機在EDA開發平臺上,對硬件描述語言HDL(Hardware Description Language)系統邏輯描述手段完成的設計文件,自動的完成邏輯編譯、邏輯化簡、邏輯分割、邏輯綜合、結構綜合(布局布線),以及邏輯優化和仿真測試,直至實現既定的電子線路系統功能。EDA技術使得設計者的工作僅限于利用軟件的方式,即利用硬件描述語言和EDA軟件來完成對系統硬件功能的實現。
EDA使得電子技術領域各學科的界限更加模糊,更加護為包容:模擬與數字、軟件與硬件、系統與器件、行為與結構、ASIC(Application Specific Integrated Circuit,專用集成電路)與FPGA(Field Programmable Gate Array)等。
EDA技術在21世紀得到的很大進步,例如更大規模的FPGA和CPLD(Complex Programmable Logic Device)器件的不斷推出;軟硬件IP核(Intellectual Property)在電子行業的產業領域、技術領域和設計應用領域得到進一步的確認;系統級、行為驗證級硬件描述語言(System C)的出現,使復雜電子系統和驗證趨于簡單。
硬件描述語言VHDL[全名是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language]是EDA技術的重要組成部分,由美國國防部發起創建,由IEEE (The Institute of Electrical and Electronics Engineers)進一步發展并發布,是硬件描述語言的業界標準之一。
VHDL語言具有很強的電路描述和建模能力,能從多個層次對數字系統進行建模和描述,從而大大簡化了硬件設計任務,提高了設計效率和可靠性。
VHDL具有與具體硬件電路無關和與設計平臺無關的特性,并且具有良好的電路行為描述和系統描述的能力,VHDL支持各種模式的設計方法:自頂向下與自頂向上或混合方法,在面對當今電子產品生命周期縮短,需要多次重新設計以融入最新技術、改變工藝等方面,VHDL具有良好的適應性。
向器件作編程或適配習慣上叫做下載,這要通過下載軟件平臺或者下載電纜實現。這是設計過程中的重要步驟,可以利用MAX+PLUSⅡ軟件在計算機上完成設計并下載到目標器件中。EDA工具軟件大致可以分為5個模塊:設計輸入編輯器,仿真器,HDL綜合器,適配器,下載器等。
Direct Digital Synthesis(DDS)是20世紀60年代末出現的第三代頻率合成技術。該技術從相位概念出發,以時域采樣定理為基礎,在時域中進行頻率合成,它以可編程邏輯器件(CPLD)作為控制及數據處理的核心,將存于Flash ROM的波形數據用D/A轉換器快速恢復。DDS頻率轉換速度快,頻率分辨率高,并在頻率轉換時可保持相位的連續,因而易于實現多種調制功能。DDS是全數字化技術,其幅度、相位、頻率均可實現程控,并可通過更換波形數據靈活實現任意波形。此外,DDS易于單片集成,體積小,價格低,功耗小,因此DDS技術近年來得到了飛速發展,其應用也越來越廣泛。基于CPLD和DDS技術的函數發生器可以實現信號波形的多樣化,而且方便可靠,簡單經濟,系統易于擴展,同時可大大提高輸出信號的帶寬。
CPLD為連續式互連結構,器件引腳到內部邏輯單元,以及各邏輯單元之間,是通過全局互連總線中的多路選擇器或交叉矩陣選通構成信號通路。其主要特點是內部時間延時與器件邏輯結構等無關,各模塊之間提供了具有固定時延的快速互連通道,因此可以預測時間延時,容易消除競爭冒險等現象,便于各種邏輯電路設計。
本文的DDS系統以CPLD為核心,采用直接數字合成技術,輔以必要的模擬電路,構成一個波形穩定,精度較高的函數信號發生器。本系統的特色在于CPLD中集成了大部分電路,使系統大大簡化,除輸出所需的正弦波、方波、三角波,還可進行波形存儲,三種波形之間的相位差均為120°,是三相的CPLD系統。
DDS的理論依據是奈奎斯特抽樣定理。根據該定理,對于一個周期正弦波連續信號,可以沿其相位軸方向,以等量的相位間隔對其進行相位/幅度抽樣,得到一個周期性的正弦信號的離散相位的幅度序列,并且對模擬幅度進行量化,量化后的幅值采用相應的二進制數據編碼。這樣就把一個周期的正弦波連續信號轉換成為一系列離散的二進制數字量,然后通過一定的手段固化在只讀存儲器ROM 中,每個存儲單元的地址即是相位取樣地址,存儲單元的內容是已經量化了的正弦波幅值。這樣的一個只讀存儲器就構成了一個與2π周期內相位取樣相對應的正弦函數表,因它存儲的是一個周期的正弦波波形幅值,因此又稱其為正弦波形存儲器。此時,正弦波形信號的相位與時間成線性關系。根據這一基本關系,在一定頻率的時鐘信號作用下,通過一個線性的計數時序發生器所產生的取樣地址對已得到的正弦波波形存儲器進行掃描,進而周期性地讀取波形存儲器中的數據,其輸出通過數模轉換器及低通濾波器就可以合成一個完整的、具有一定頻率的正弦波信號。DDS電路一般包括系統時鐘、相位累加器、相位調制器、ROM 查找表、D/A轉換器和低通濾波器(LPF)。
基于CPLD和DDS技術的函數發生器可以實現信號波形的多樣化,而且方便可靠,簡單經濟,系統易于擴展,同時可大大提高輸出信號的帶寬。
  
2基于CPLD的三相多波形函數發生器設計
2.1 波形發生器系統的設計方法及其技術指標
2.1.1設計方式概述
在電子工程設計與測試中,常常需要一些具有特殊要求的信號,要求其波形產生多,頻率方便可調。通常的信號產生器難以滿足要求,市場上出售的任意信號產生器價格昂貴。在老師指導下,結合實際要求,我設計了一種基于CPLD的三相多波形函數發生器,能輸出正弦波、三角波、方波等波形信號,波形信號之間的相位差均為120˚。
復雜可編程邏輯器件CPLD器件可以代替許多分立元器件,從而大大降低了電路板的復雜程度。對于CPLD器件的設計一般可以分為設計輸入、設計實現和器件編程三個設計步驟以及相應的功能仿真、時序仿真和器件測試三個設計驗證過程。
設計輸入有多種方式,目前最常用的有電路圖和硬件描述語言兩種,對于簡單的設計,可采用原理圖的方式設計,對于復雜的設計可使用原理圖或硬件描述語言(Verilog, AHDL, VHDL語言),或者兩者混用,采用層次化設計方法,分模塊層次地進行描述。
原理圖設計方法主要是按照數字系統的功能采用具體的邏輯器件組合來實現的把這些由具體器件實現邏輯功能的電路圖輸入到軟件當中。這種設計方法比較直觀。      
硬件描述語言設計方法主要把數字系統的邏輯功能用硬件語言來描述,采用VHDL語言描述的數字系統大致有三種;其一稱為行為描述,它用幾個包含著若干順序語句的進程描述輸入與輸出之間的轉換關系;其二是數據流描述,用一系列的并發信號賦值語句描述輸入與輸出之間的關系;其三為結構描述方式,是通過元件之間的互聯關系描述輸出電路的結構。無論是原理圖輸入還是描述語言輸入都各有其優點,原理圖設計適合于對器件比較熟悉,元件之間的互聯清楚,并且需要的設計比較簡單的情況,而對于器件不熟悉,設計復雜的情況來說,使用硬件描述語言要方便一些。
設計實現:設計實現是指從設計輸入文件到熔絲圖文件(CPLD)的編譯過程。在該過程中,編譯軟件自動地對設計文件進行綜合、優化,并針對所選中的器件進行映射、布局、布線、產生相應的熔絲圖或位流數據文件,在此過程中,由于編譯軟件給系統管腳的分配是比較雜亂的,為了電路板布線的方便,用戶可以對輸入/輸出管腳進行管腳鎖定。
器件編程:器件編程就是將熔絲圖文件或位流數據文件下載到相應的CPLD器件中,并與CPLD器件的管腳相對應,所用的軟件是ALTARE公司提供的CPLDDN4,這是ALTARE公司CPLD系列的專用下載軟件。
設計校驗:對應于設計輸入、設計實現和器件編程,設計驗證分為了功能仿真、時序仿真、器件測試三個部分。功能仿真驗證設計的邏輯功能,在設計輸入過程中,對部分功能或整個設計均可進行仿真;時序仿真是在設計實現以后,針對器件的布局、布線方案進行時延仿真,分析定時關系:器件測試是在器件編程后,通過實驗或借助測試工具,測試器件最終的功能和性能指標。
在設計中系統的接口電路、信號源的大多數邏輯控制都在CPLD中實現。
在該流程中仿真是重點。仿真又可分為功能仿真(前仿真)與時序仿真(后仿真)。根據電路設計編制仿真文件,在文件被綜合前進行仿真,可驗證電路功能;在保證電路已實現設計的功能后,進行綜合并對綜合的結果進行時序仿真,可驗證電路的時序是否滿足要求。當電路的前仿真與后仿真都滿足要求,則電路的設計是成功的。然后設置器件類型并進行引腳鎖定,再對文件進行適合于所加配置的邏輯綜合;通過后即完成設計。最后結合系統中的其它部分進行連調,如發現問題可修改設計。
本設計中使用了ALTERA公司提供的配套軟件MAX+PLUSII進行文件的輸入、編譯和下載。MAX+PLUSII的軟件設計主要由設計輸入、項目編譯、項目校驗和器件編程等四部分構成。

圖2.1-1 CPLD設計流程圖

圖2.1-2 MUS+PLUSⅡ設計的主要組成部分
2.1.2 三相函數多波形發生器技術指標
三種波形之間的相位差均為120°,可以同時輸出,具有三相的功能。對以下三種波形的頻率均要求:產生的頻率都可以預置;輸出的信號幅值能在100mv~3V的范圍內調整。
對正弦波信號的要求為:信號頻率范圍:20Hz-20kHz之間可調,步長為10Hz;
非線性失真系數≤3%。
對方波信號的要求是:信號頻率范圍:20Hz-20kHz;上升和下降時間<1μs;
對三角波信號的要求為:信號頻率范圍:20Hz-20kHz之間可調。
2.1.3三相波形發生器設計方法概述
Direct Digital Synthesis(DDS)是20世紀60年代末出現的第三代頻率合成技術。用DDS技術來設計制作一個基于CPLD的三相多波形函數發生器,并使它能輸出正弦波、三角波、方波等波形信號源,三種波形的相位差為120˚。
波形發生器中的CPLD芯片是DDS的控制及數據處理的核心,電路系統主要由時鐘信號發生器、波形數據產生器和A/D轉換電路組成。波形數據產生器由數控分頻器、三角波產生模塊、正弦波產生模塊、方波產生模塊等構成。在時鐘信號發生器作用下,波形數據產生器生成頻率可變的波形數據數字信號,由 A/D轉換電路放大處理后輸出最終所需要的波形信號。
    各個模塊的實現主要采用MAX+ plus II開發平臺,由VHDL編程實現。先完成外圍電路的焊接之后,用CPLD的專屬下載軟件把編寫完的程序燒錄入CPLD芯片,再對整個波形發生器進行調試,使其達到預期的效果。
2.2 設計方案
2.2.1 三相函數發生器設計原理
DDS制作的三相波形發生器主要由標準參考頻率源、相位累加器、波形存儲器、數模轉換器、低通平滑濾波器構成。在時鐘脈沖的控制下,頻率控制字K由相位累加器得到相應的相碼,相碼尋址波形存儲器進行相碼——幅碼變換輸出不同的幅度編碼,再經過數模變換器得到相應的階梯波,最后經低通濾波器對階梯波進行平滑,即得到由頻率控制字決定的連續變化的輸出波形。其中,參考頻率源一般是一個高穩定的晶體振蕩器,其輸出信號用于DDS中各部件同步工作。因此,DDS輸出的合成信號的頻率穩定度與晶體振蕩器是一樣的。
DDS系統核心是N位相位累加器。相位累加器的結構一般N位字長的二進制加法器與一個由時鐘觸發的N位二進制相位累加寄存器級聯構成,加法器的一個輸入端與相位寄存器的輸出端相連,另一個輸入端是外部的頻率控制字K。在每一個參考時鐘脈沖輸入時,把頻率字累加一次,并把相加后的結果送至累加寄存器的數據輸出端。由于相位累加器的輸出連接在波形存儲器的地址線上。因此其輸出的改變就相當于進行查表。系統中的參考時鐘通常是一個高穩定性的晶體振動器,用來作為系統時鐘同步整個系統的各組成部分。在系統時鐘脈沖的作用下,相位累加器不停地累加.也即不停地查表,不停地把波形重新合成出來,當相位累加器累加滿時就會產生一次溢出,完成一個周期性的動作,這個周期就是DDS合成信號的一個頻率周期,累加器的溢出頻率就是DDS輸出的信號頻率。。濾波器則進一步平滑D/A轉換器輸出的近似所需波形的鋸齒階梯波.同時濾出不必要的雜波。

   
圖2.2-1 DDS的原理圖

圖2.2-2 相位累加器的結構示意圖
若頻率控制字設為M,相位累加器為N位,參考時鐘頻率fс,則輸出頻率為Mfс/2a(a=N)。DDS的輸出頻率下限對應于頻率控制字M=0的情形,即輸出頻率為f。=0。根據Nyquist采樣定理,DDS的輸出上限頻率為時鐘頻率的一半,即f。=½fс。但由于實際輸出低通濾波器的非理想特性,可實現的頻率上限為-2/5fo。即若參考頻率為 ,DDS的輸出頻率范圍是0—2/5fc。由于DDS的模塊化結構,其輸出波形由波形查找表中的數據來決定,因此,只需改變查找表中的數據,即可以方便地利用DDS產生出正弦波之外的其他波形,如余弦波、方波、三角波。鋸齒波甚至調頻、調相波以及帶限的噪聲信號。
三相分時復用原理:分時復用的原理是各路信號只占用同一信道的不同時間間隙進行信號傳輸。具體到本電路就是利用對正弦表尋址的高速度,使一個正弦表在不同時間段查尋不同相的正弦波的幅值,以達到減少正弦表所占用的CPLD資源的目的。
電路的具體實現:三路在相位上互差120。的地址數據并行輸入通過一個三選一的選擇器來進行選擇,選擇器的控制端接三進制的計數器。如,計數器為0時,輸出的是A相的地址。計數器為1時,輸出的是B相的地址.計數器為2時,輸出的是C相的地址。因此只要使輸入的三相地址周期性變化,就實現了并行輸入的三相地址數據在時間上形成了連續,也就實現了三相地址數據的合成。這樣就可以利用一個正弦表來得到三相的正弦值,把正弦表減少到沒有采樣分時復用時的1/3。數據的分離:通過分時復用,使得通過查尋一個正弦表得到在相位上互差的三相正弦波的幅值,但是由于輸入的三相地址在時間上是連續的,即對ROM表尋址的地址只有一路,因此,雖然得到了三相正弦波的幅值,可是他們是按ADDRESS中各相之間的關系混合在一起的,因此,必需對所得到的幅值進行分離。才能得到三相正弦波。由波形ADDRESS中各相地址的相互關系可知,分離數據只要把分時復用的合成部分反接即可。
參數選擇:相位累加器的字長決定了頻率分辨率.設計中取N=16。由于CPLD中硬件資源(主要是存儲器EAB容量)所限,需對相位累加器輸出的16位相位進行截斷,這里取16位相位的前l0位進入相位,幅度轉換電路,即A=10,輸出數字幅度序列定位10位(D=10)。

圖2.2-3 正弦波波形數據產生模塊
這樣確定的基本參數如下:
(1)時鐘頻率和輸出帶寬根據已知的外部時鐘源的頻率fс=12MHz.那么本系統最高輸出頻率位2/5fo=4.8 MHz。
(2)頻率范圍由于要求輸出的信號頻率范圍比較大.因此在12MHz時鐘源引入CPLD后,在相位累加器之前增加了一個時鐘分頻器,可實現10、100、1000、10000次分頻。根據輸出信號的頻率和精度要求,選擇不同的分頻比將50MHz時鐘頻率降低,再作位相位累加器和波形產生電路的參考時鐘。
相位/幅度變換用CPLD實現相位/幅度變換電路是設計的一個難點。根據DDS原理,將不同波形的量化數據存儲于波形查找表中,即可完成多波形發生的功能。ROM 的功能在本方案選用的Altera公司生產的CPLD芯片中實現,因此在實際設計中,要充分考慮表格數據的優化問題。根據上面的參數選擇,取相位累加器字長M=16,截取前10位有效位,輸出幅度序列定位l0位。這樣直接實現正弦波形存儲需要210xl0bitROM。正弦查找表可調用Maxplux2軟件中的“lpm_rom”宏模塊實現。
CPLD器件選擇ALTERA公司的——EPM7128S84-15。它有128個宏單元、2500個等效邏輯門、15ns的速度、PLCC84封裝形式。除電源引腳、地線引腳、全局控制引腳和JTAG引腳外,共提供了64個可用I/O腳,這些引腳可以任意配置為輸入、輸出和雙向方式。該器件的特點如下:
l是 一 種高性能的CM0SE EPROM器件。
l器 件 可通過JTAG接口實現在線編程。
l內 置 JTAG BST電路。
l可 編 程宏單元觸發器具有專用清除、置位、時鐘和時鐘使能控制。
l 可 配 置的擴展乘積項分配,允許向每個宏單元提供多達32個乘積項。
EPM7128S器件是通過4個引腳的JTAG接口進行在線編程(ISP)的。ISP允許快速、有效地在設計開發過程中重復編程。JTAG(Joint Test Action Group)是歐洲的JETAG組織提出的邊界掃描標準,即IEEE1149. 1標準。該標準提供了板級和芯片級的測試,所有JTAG測試功能僅需一條四線或五線的接口及相應的軟件即能完成,利用JTAG能測試電路板的連接情況以及電路板的正確性。JTAG的接口信號為:
lTCK (Test Clock):用于控制狀態機及傳遞數據。
lTMS( Test Mode Select):選擇邊界掃描模式,控制狀態機測試操作。
lDI ( Test Data Input):在TCK的一升沿,接受串行數據。
lTDO( Test Data Output):在TCK的下降沿,輸出串行數據。
  我們采用的是并口下載電纜ByteBlaster,它可以對MAX7000S系列進行在線編程。該下載電纜具有以下幾個部分:與PC機并行口相連的25針插頭、與PCB板插座相連的10針插頭以及25針到10針的變換電路。可用于實現波形相位、幅度變換查找表(ROM)結構。DDS主要分為相位累加器、相位/幅度轉換單元(含ROM)、數模變換器以及低通濾波等幾個部分。
相位累加器和相位/幅度轉換單元用CPLD實現,再將輸出外接至DAC器件,最后通過低通濾波器即可得到所需波形。
圖2.2-4 CPLD的外圍電路連接圖
2.2.2 多波形發生器的各個波形模塊設計方式簡介
數控分頻器:數控分頻器的功能是在輸入端輸入不同數據時,對輸入時鐘產生不同的分頻比,輸出不同頻率的時鐘,以改變輸出信號的頻率。設計時利用并行預置數的減法計數器實現,他的工作原理是:減法計數器在并行預置數的基礎上,在時鐘的作用下進行減計數,當計數值為零時產生溢出信號,加載預置數據,并且將溢出信號作為分頻器的輸出信號,實現分頻信號輸出。其分頻系數N為預置數的值。為了得到占空比為50 的矩形時鐘信號,將輸出再進行二分頻。由此,該分頻器的總分頻系數為2N。
三角波波形數據產生模塊:該模塊可設計一個可逆計數器實現。設計時設置一變量作為工作狀態標志,在此變量為全0時,當檢測到時鐘的上升沿時進行加同一個數操作,為全1時,進行減同一個數操作。由于A/D轉換采用8位的DAC0832芯片,且設64個時鐘為一個三角波周期,則輸出Q每次加8/減8。
正弦波波形數據產生模塊:用加法計數器和譯碼電路完成。首先對幅度為1的正弦波的一個周期分為64個采樣點,根據正弦波的函數關系計算得到每一點對應的幅度值,然后量化為8位二進制數據,最大值為255,最小值為0,以此得到正弦波波表。加法計數器生成譯碼電路的64個輸入值,譯碼電路查波表輸出。無論是相位累加器波形合成法還是基于RAM查詢的波形合成法,都可以表示為合成信號的幅度與時間或是相位的關系,信號的幅度坐標存放在波形存儲器中,通過地址發生器讀取波形數據,完成數字波形。
方波波形數據產生模塊:設計一個比較器,經過低通濾波器后的正弦波通過它后才能產生方波。通過交替送出全0和全1,并給以32個時鐘延時實現,64個時鐘為一個周期。
數據選擇器:用CASE語句設計完成。在CORTROL的控制下選擇輸出一種波形數據輸出,同時完成兩種波形的線性組合。波形組合是將波形每一時刻的數值相加,為了不超出DAC0832的輸出范圍,做相應的除2操作。
首先由控制寄存器將外部控制器送入的數據轉換為頻率和幅度控制字;然后再由分頻器根據頻率控制字進行分頻并將輸出作為尋址計數器的時鐘;尋址計數器的尋址空間為360字節,可對ROM中的查找表進行尋址;而通過模360加法器可以產生120o的相位差。
控制寄存器的設計:控制寄存器設計主要是將外部控制器輸入的數據轉換為頻率和幅度控制字。
分頻比可變的分頻器模塊設計:該設計主要是根據頻率控制字決定分頻倍數,從而輸出與頻率控制字相對應的頻率時鐘,此模塊的輸出可作為尋址計數器的時鐘。
尋址計數器:主要用于產生對ROM尋址輸出波形數據的尋址信號,尋址空間為360字節。
模360加法器設計:此模塊用來產生120°的相移,以形成三相相差為120°的輸出波形。由于尋址空間為360字節,故在輸出尋址數大于360時,須對360取模。
查找表ROM設計:此模塊主要用于存儲各種波形數據,以便通過尋址計數器尋址輸出并經D/ A轉換來輸出各種波形,其中包括正弦波、三角波、方波。
CPLD幅度控制字經D/A轉換輸出后,可作為查找表輸出DAC的參考電壓,該參考電壓可通過改變幅度控制字來進行改變,從而改變輸出信號的幅度。
圖2.2-5 CPLD的內部結構設計框圖
A/D轉換采用了8位的DAC0832芯片。波形的產生是采用直接數字頻率合成技術DDFS按照不同頻率要求以頻率控制字n為步進對相位增量進行累加,以累加相位值作為地址碼讀取存放于ROM內的波形數據,經D/A轉換和幅度控制,再濾波即可得到波形。輸出波形頻率與尋址脈沖頻率成正比,因此改變脈沖頻率就可以改變輸出波形頻率。D/A轉換電路的電路連接圖主要由DAC0832和 LM324構成,附加了一些電容和電阻增加了其穩定性,它先通過DAC0832信號對信號進行數模轉換,恢復為模擬信號后再由LM324構成的放大電路進行放大處理,使波形發生器達到預期的效果。
圖2.2-6  DAC0832外圍連接圖
邏輯時序仿真:利用MAX+PLUXⅡ進行系統仿真。在時序波形中,clk為系統的時鐘,這里設定仿真的時鐘為200ns(晶振為12Mhz);freqin為頻率字輸入,它可以在1-1024取任意值,這里取freqin=l(即相位累加增量∆θ=360˚ /1024=0.35˚), 則f。 = 4.88kHz;pha-seina、phaseinb、phaseinc分別為三相互差120˚的相位字的輸入, 取值分別為:phaseina=0、phaseinb=341、phaseinc=683;romadddr_a、romadddr_b、ro-madddr c分別為三相分時復用電路中的A相、B相和C相的相位值(三相互差),romadddr_abc為合成一路后的相位值。
為了便于在同一波形中可以同時看清輸出數據中的各項,對仿真波形進行截取,為約3.5us-8.6US時的時序波形,ddsout_abc為查得 E弦表所得的三相混合數據,ddsout_a、ddsout_b、ddsout_c分別為數據分離后A相、B相和C相的相位對應的幅度值,由三相正弦波幅度之間的相互關系和變化趨勢得知.輸出的數據是正確的。由于DDS技術是從相位概念出發,根據確定的相位的有效字長組合,會產生相位截斷誤差。本設計的相位誤差計算:每相正弦信號輸出延時了2個系統時鐘周期,即At=2Tc。因此相位誤差為:∆θ=2π*f。*∆T,則∆θ=0.7˚。(這里設頻率字M=1,字長N=10)。
整個系統除晶體振蕩器和A/D轉換外,全部集成在一片CPLD芯片上。它可輸出三相頻率、幅度可調的正弦波、三角波、方波。任意波形模塊可由用戶自行編輯所需波形數據,下載到CPLD芯片上,在不改變整個系統硬件連接的情況下,輸出用戶所需的波形。另外由于CPLD具有可編程重置特性,因而可以方便地更換波形數據,且簡單易行,帶來極大方便。
圖2.2-7 波形仿真圖
2.3 調試部分
2.3.1  CPLD在使用中遇到的問題
CPLD芯片提供了很多個電源引腳,為了減少芯片內部的干擾,盡量在每個電源引腳處加一個退藕電容,一般一個芯片周圍不少于6個電容。
CPLD如果不能下載,可能有多種問題,先檢查芯片的各個接地腳和電源腳是否全部連接正確,然后看四個JTAG引腳是否連接正確,可在下載時觀測四個引腳上的信號。
對于不使用的全局變量,最好連接到地線。在編譯的時候可能會出現所用的門數不多,但是編譯通不過的情況,可以把邏輯綜合的選項重新設置一下。
在邏輯綜合的時候最好選擇設計環境中對于特定的芯片所提供的綜合條件,以免造成不必要的麻煩。
2.3.2 控制電路的調試
對控制電路進行時序仿真,在仿真圖中幾乎總會出現我們所不需要的毛刺,這些毛刺有時會給系統帶來致命的影響,我們必須采取措施消除這樣的毛刺。由于毛刺一般出現在信號發生電平轉換的時刻,也即輸出信號的建立時間內,而在輸出信號的保持時間內不大會出現。因此,若帶有毛刺的信號持續時間較長,我們可在輸出信號的持續時間內用一定寬度的高電平脈沖選通一個與門來獲得該信號,此時毛刺自然已被消除。高電平脈沖可由軟件控制鎖存器來得到。若帶有毛刺的信號保持時間較短,可利用D觸發器的D輸入端對毛刺不敏感的特點,在輸出信號的保持時間內用觸發器讀取輸出信號,此時毛刺自然也已被消除,觸發器的時鐘沿可由軟件控制地址譯碼器來得到。
另外 ,在某些情況下,需要對信號進行一定的延時,以完成特定的功能。利用D觸發器可在時鐘的控制下對信號進行比較精確的延時,這種方法的最小延時是半個時鐘周期。延時也是消除毛刺的手段之一。
2.3.3 DAC電路的調試
DAC電路將RAM查找表輸出的離散的數字信號變換為連續的模擬信號。所選的芯片為DAC0832,它的分辨率為12bits,建立時間為1us,差分電流輸出。輸出電流在2-20mA內可調。由于電流無法直接測量,所以在DAC0832的輸出端和地之間接有一個20歐的電阻,可將輸出的電流轉換為電壓來測,過程如下:首先向DAC輸入全1的數據,測得輸出端11腳的電壓為0.4V;12腳為0.04 V;再向DAC輸入全0的數據,測得輸出端管11腳的電壓為0.04 V;12腳為0.4V;說明DAC電路工作正常。
2.3.4  程序的調試
設計中使用了ALTERA公司提供的配套軟件MAX+PLUSII進行文件的輸入、編譯和下載。MAX+PLUSII的軟件設計主要由設計輸入、項目編譯、項目校驗和器件編程等四部分構成。
  MAX+PLUSII      File      NEW    Text Editor File/.gdf /.scf      輸入程序    保存、編譯    調試程序     編譯、仿真、運行     調試完成后用并口下載線下載程序至CPLD芯片    完成燒入程序后硬件電路的調試     修改、調試程序    完成設計。
2.3.5 硬件電路的調試
在硬件電路調試中,要注意焊接的藝術和元件的布局,讓整體顯得美觀。不能出現漏焊、錯焊等現象。在燒錄入程序之后,對電路進行測試,看電路是否能達到預期的功能。如果不能,則要進行程序的調試,并檢測電路連接、元件使用等方面的問題,努力排除故障,讓系統功能實現。
結 論
論文中基于CPLD的波形信號發生器方面進行了設計,建立了包含三角波、正弦波、方波等三類信號的波形庫,為波形的選擇提供了較好的操作平臺;把DDS技術與CPLD技術相結合來設計三相波形發生器,使三種信號的輸出相位差均為120o。對電路數字部分完成了分步功能仿真和波形仿真,努力改善數字波形發生器的基帶信號帶寬,實現電路的集成化,采用雙RAM雙通道使設計出的數字波形發生器有更大的適用范圍。本設計能應用到教學和科研試驗中。
在分析了DDS及CPLD技術的基礎上,設計了一種基于CPLD的三相數字波形發生器。利用CPLD開發工具對電路進行了設計和仿真,從分離器件到系統分布,每一步都經過了嚴格的波形仿真驗證,以確保功能正常。
本文結合任意波形發生器的發展狀況,對直接數字波形合成技術的理論、設計方法、電路實現以及信號的調理電路進行了深入的研究,歸納起來主要做了如下幾方面的工作:1、采用CPLD自行設計了直接數字合成技術芯片,通過了實驗驗證;2、設計了內調幅電路;3、設計調試信號調理電路;4、編寫了實驗機主程序,波形數據輸出程序。
從整體上看來,儀器所實現的指標基本上滿足課題要求,但同時也存在著不足和需要進一步改進的工作,主要體現在:1、調頻及任意波頻率電路需要進一步改進,采用高位的鎖相環器件;2、軟件和硬件電路設計工作沒有全部完成;3、由于技術限制,希望以后能使波形輸出頻率上一個更高臺階。
但是,也存在著某些不足。比如:當時由于開發周期和技術水平等原因,DDS技術均采用了國外成型的集成芯片,不僅代價高,而且許多性能沒有充分利用,調幅波性能也不夠高。
通過畢業課題設計,掌握了直接波形合成技術的原理及設計要領,學習了并掌握可編程邏輯器件電路的設計,掌握了MAX+PLUSII軟件、CPLD元件等的應用,受益匪淺,為我今后的工作和學習奠定了堅實的基礎。

參考文獻
[1]沈明山.EDA技術及可編程器件應用時訓[M].北京:科學出版社.2003
[2]付慧生.復雜可編程邏輯器件與應用設計[M].北京:中國礦業大學出版社.2003
[3]李國洪,沈明山等.可編程器件EDA技術與實踐[M].北京:機械工業出版社.2004
[4]陳賾.CPLD/FPGA與ASIC設計實踐教程[M].北京:科學出版社.2004
[5]蔡明生.電子設計[M].北京:高等教育出版社.2003
[6]李東升.電子設計自動化與IC設計[M].北京:高等教育出版社.2004
[7]李洋.EDA技術實用教程[M].北京:機械工業出版社.2005
[8]張秀娟,陳新華等.EDA設計與仿真實踐[M].北京:機械工業出版社.2004
[9]尹常永.EDA技術與數字系統設計[M].陜西:西安電子科技大學出版社.2003
[10]潭會生,張昌凡等.EDA技術與應用(第二版)[M].陜西:西安電子科技大學出版社.2004
[11]王祖強.電子實際自動化(EDA)技術實驗教程[M].山東:山東大學出版社.2003
[12]朱正偉.EDA技術及應用[M].北京:清華大學出版社.2004
[13]劉艷萍,高振斌等.EDA實用技術及應用[M].北京:國防工業出版社.2005
[14]焦素敏.EDA應用技術[M].北京:清華大學出版社.2004
[15]潘松,黃繼業等.EDA技術與VHDL[M].北京:清華大學出版社.2003
[16]孔冬蓮.基于CPLD的函數信號發生器[J].湖北鄂州.沙祥高等師范專科學院學報. 2006,(5).15-18
[17]郭海青.基于CPLD的多波形函數信號發生器設計[J].現代電子技術.2006,(17).70-72
[18] Wu Tao,Wang Jian Hua et al. Application study of DSP and CPLD technology on the star sensor[J].Journal of Harbin Institute of Technology(New Series),Vo1.13,No.3,2006.289-293
[19]任緒科,趙俊渭等. 基于CPLD和單片機的任意波形發生器設計[J].電子產品世界.2005,(1).118-119
[20] 尹佳喜,尹仕.CPLD的三相多波形函數發生器設計[J].國外電子元器件.2006,
(4).23-25

附錄1 三相多波形函數發生器各模塊的程序
LIBRARY ieee ; -----初值模塊
use ieee.std_logic_1164.all;
entity chuzhi is
  port(a:in std_logic_vector(3 downto 0);
       q:out integer range 0 to 312);
end chuzhi;
architecture chu_arc of chuzhi is
begin
  process(a)
  begin
    case a is
      when"0001"=>q<=313;
      when"0010"=>q<=156;
      when"0011"=>q<=104;
     when"0100"=>q<=78;
      when"0101"=>q<=63;
      when"0110"=>q<=52;
      when"0111"=>q<=45;
      when"1000"=>q<=39;
      when"1001"=>q<=35;
      when"1010"=>q<=31;
      when others=>null;
    end case;
  end process;
end chu_arc;
LIBRARY ieee ; ----分頻模塊
use ieee.std_logic_1164.all;
entity fana is
  port(a:in integer range 0 to 312;
       clk:in std_logic;
       q:out std_logic);
end fana;
architecture fan_arc of fana is
begin
  process(clk)
  variable b,d:std_logic;
  variable c:integer range 0 to 312;
  begin
    if clk'event and clk='1'then
      if b='0'then
         c:=a-1;
         b:='1';
      else
        if c=1 then
           b:='0';
           d:=not d;
        else
          c:=c-1;
        end if;
      end if;
    end if;
    q<=d;
  end process;
end fan_arc;
LIBRARY ieee; -----方波模塊
use ieee.std_logic_1164.all;
entity square is
  port(clk,clr:in std_logic;
       q:out integer range 0 to 255);
end square;
architecture sq_arc of square is
signal a:bit;
begin
  process(clk,clr)
  variable cnt:integer;
  begin
    if clr='0'then
       a<='0';
    elsif clk'event and clk='1'then
      if cnt<7 then
         cnt:=cnt+1;
      else
         cnt:=0;
         a<=not a;
       end if;
     end if;
   end process;
   process(clk,a)
   begin
     if clk'event and clk='1'then
        if a='1'then
           q<=255;
        else
           q<=0;
        end if;
      end if;
    end process;
end sq_arc;
LIBRARY ieee;------三角波模塊
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity delta is
  port(clk,reset:in std_logic;
       q:out std_logic_vector(7 downto 0));
end delta;
architecture delta_arc of delta is
begin
  process(clk,reset)
  variable tmp:std_logic_vector(7 downto 0);
  variable a:std_logic;
  begin
    if reset='0' then
       tmp:="00000000";
    elsif clk'event and clk='1' then
      if a='0'then
         if tmp="11111000"then
            tmp:="11111111";
            a:='1';
         else
           tmp:=tmp+8;
         end if;
      else
         if tmp="00000111"then
            tmp:="00000000";
            a:='0';
         else
           tmp:=tmp-8;
         end if;
       end if;
     end if;
     q<=tmp;
   end process;
end delta_arc;
LIBRARY ieee; ------正弦波模塊
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity delta is
  port(clk,reset:in std_logic;
       q:out std_logic_vector(7 downto 0));
end delta;
architecture delta_arc of delta is
begin
  process(clk,reset)
  variable tmp:std_logic_vector(7 downto 0);
  variable a:std_logic;
  begin
    if reset='0' then
       tmp:="00000000";
    elsif clk'event and clk='1' then
      if a='0'then
         if tmp="11111000"then
            tmp:="11111111";
            a:='1';
         else
           tmp:=tmp+8;
         end if;
      else
         if tmp="00000111"then
            tmp:="00000000";
            a:='0';
         else
           tmp:=tmp-8;
         end if;
       end if;
     end if;
     q<=tmp;
   end process;
end delta_arc;
LIBRARY ieee;------控制模塊
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity chpro31 is
  port(dlt,sqr,sin:in std_logic;
       dlta,sqra,sina:in std_logic_vector(7 downto 0);
       q:out std_logic_vector(7 downto 0));
end chpro31;
architecture ch_arc of chpro31 is
begin
  process(dlt,dlta,sqr,sqra,sin,sina)
  variable tmp:std_logic_vector(2 downto 0);
  variable a,b:std_logic_vector(9 downto 0);
  variable c,d,e:std_logic_vector(9 downto 0);
  begin
    tmp:=dlt&sqr&sin;
    case tmp is
      when "100"=>q<=dlta;
      when "010"=>q<=sqra;
      when "001"=>q<=sina;
      when "110"=>a:="00"&dlta+sqra;
                  q<=a(8 downto 1);
      when "101"=>a:="00"&dlta+sina;
                  q<=a(8 downto 1);
      when "011"=>a:="00"&sqra+sina;
                  q<=a(8 downto 1);
      when "111"=>a:="00"&dlta+sqra;
                  b:=a+sina;
                  c:="00"&b(9 downto 2);
                  d:="0000"&a(9 downto 4);
                  e:="000000"&a(9 downto 6);
                  a:=c+d;
                  b:=a+e;
                  q<=b(7 downto 0);
      when others=>null;
    end case;
  end process;
end ch_arc;


附錄2 元件介紹
1 DAC0832
DAC0832 是一種相當普遍且成本較低的數/模轉換器,該器件是一個8位D/A轉換器,其轉換時間為1s,工作電壓為+5V~+15V,基準電壓為±10V,它將一個8位的二進制數轉換成模擬電壓,可產生256種不同的電壓值,由于其內部有兩個8位寄存器和一個8位D/A轉換器,故可進行兩級緩沖操作,使操作有很大的靈活性(本設計中采用的是單緩沖方式).
DAC0832具有以下主要特性:①滿足TTL電平規范的邏輯輸入;②分辨率為8位; ③建立時間為1us;④功耗20mw;⑤是電流型輸出型D/A轉換器,在應用時外接運放使之成為電壓型輸出。DAC0832的片選地址為7FFFH,當P27有效時,若P0口向其送的數據為00H,則U 的輸出電壓為0V;若P0口向其送的數據為0FFH時,則的輸出電壓為-5V.故當輸出電壓為0V時,Vo:-5V.當輸出電壓為-5V時,可得:Vo =+5V,所以輸出波形的電壓變化范圍為-5V ~+5V.連接硬件電路時將兩級寄存器的控制信號并接輸入數據,在控制信號作用下直接送入DAC寄存器中。經D/A轉換和幅度控制,再濾波即可得到波形。
圖1 DAC0832內部結構如圖所示
圖2 DAC0832
2 LM324
LM324四運放是美國national公司的產品。LM324是四運放集成電路,它采用14腳雙列直插塑料封裝。它的內部包含四組形式完全相同的運算放大器, 除電源共用外,四組運放相互獨立。每一組運算放大器可用圖1所示的符號來表示,它有5個引出腳,其中“+”、“-”為兩個信號輸入端,“V+”、“V-”為正、負電源端,“Vo”為輸出端。兩個信號輸入端中,Vi-(-)為反相輸入端,表示運放輸出端Vo的信號與該輸入端的位相反;Vi+(+)為同相輸入端,表示運放輸出端Vo的信號與該輸入端的相位相同。
由于LM324四運放電路具有電源電壓范圍寬,靜態功耗小,可單電源使用,價格低廉等優點,因此被廣泛應用在各種電路中。
    在本系統中,LM324被作為放大器和濾波器來使用。它可以選出各個不同頻段的信號,指示出信號幅度的大小,對信號進行放大后再輸出,提供給使用者需要的波形信號。
圖3 LM324管腳圖
3 PM7128SLC84-15芯片
EPM7128S84-15是CPLD芯片,有128個宏單元、2500個等效邏輯門、15ns的速度、PLCC84封裝形式。除電源引腳、地線引腳、全局控制引腳和JTAG引腳外,共提供了64個可用I/O腳,這些引腳可以任意配置為輸入、輸出和雙向方式。該器件的特點如下:
l是 一 種高性能的CM0SE EPROM器件。
l器 件 可通過JTAG接口實現在線編程。
l內 置JTAG BST電路。
l可 編 程宏單元觸發器具有專用清除、置位、時鐘和時鐘使能控制。
l 可 配 置的擴展乘積項分配,允許向每個宏單元提供多達32個乘積項。

圖4EPM7128SLC84-15

附錄3電路原理圖
附錄4 英文資料及譯文
1英文資料
(From DIGITAL DESIGN principles & practices ,John  F. Wakerly)
Language Overview
What is VHDL?
VHDL is a programming language that has been designed and optimized for describing the behavior of digital systems.
VHDL has many features appropriate for describing the behavior of electronic components ranging from simple logic gates to complete microprocessors and custom chips. Features of VHDL allow electrical aspects of circuit behavior (such as rise and fall times of signals, delays through gates, and functional operation) to be precisely described. The resulting VHDL simulation models can then be used as building blocks in larger circuits (using schematics, block diagrams or system-level VHDL descriptions) for the purpose of simulation.
VHDL is also a general-purpose programming language: just as high-level programming languages allow complex design concepts to be expressed as computer programs, VHDL allows the behavior of complex electronic circuits to be captured into a design system for automatic circuit synthesis or for system simulation. Like Pascal, C and C++, VHDL includes features useful for structured design techniques, and offers a rich set of control and data representation features. Unlike these other programming languages, VHDL provides features allowing concurrent events to be described. This is important because the hardware described using VHDL is inherently concurrent in its operation.
One of the most important applications of VHDL is to capture the performance specification for a circuit, in the form of what is commonly referred to as a test bench. Test benches are VHDL descriptions of circuit stimuli and corresponding expected outputs that verify the behavior of a circuit over time. Test benches should be an integral part of any VHDL project and should be created in tandem with other descriptions of the circuit.
A standard language
One of the most compelling reasons for you to become experienced with and knowledgeable in VHDL is its adoption as a standard in the electronic design community. Using a standard language such as VHDL virtually guarantees that you will not have to throw away and recapture design concepts simply because the design entry method you have chosen is not supported in a newer generation of design tools. Using a standard language also means that you are more likely to be able to take advantage of the most up-to-date design tools and that you will have access to a knowledge base of thousands of other engineers, many of whom are solving problems similar to your own.
A brief history of VHDL
VHDL, which stands for VHSIC (Very High Speed Integrated Circuit) Hardware Description Language, was developed in the early 1980s as a spin-off of a high-speed integrated circuit research project funded by the U.S. Department of Defense. During the VHSIC program, researchers were confronted with the daunting task of describing circuits of enormous scale (for their time) and of managing very large circuit design problems that involved multiple teams of engineers. With only gate-level design tools available, it soon became clear that better, more structured design methods and tools would be needed.
To meet this challenge, a team of engineers from three companies ?IBM, Texas Instruments and Intermetrics ?were contracted by the Department of Defense to complete the specification and implementation of a new, language-based design description method. The first publicly available version of VHDL, version 7.2, was released in 1985. In 1986, the Institute of Electrical and Electronics Engineers, Inc. (IEEE) was presented with a proposal to standardize the language, which it did in 1987 after substantial enhancements and modifications were made by a team of commercial, government and academic representatives. The resulting standard, IEEE 1076-1987, is the basis for virtually every simulation and synthesi product sold today. An enhanced and updated version of the language, IEEE 1076-1993, was released in 1994, and VHDL tool vendors have been responding by adding these new language features to their products.
Although IEEE Standard 1076 defines the complete VHDL language, there are aspects of the language that make it difficult to write completely portable design descriptions (descriptions that can be simulated identically using different vendors?tools). The problem stems from the fact that VHDL supports many abstract data types, but it does not address the simple problem of characterizing different signal strengths or commonly used simulation conditions such as unknowns and high-impedance.
Soon after IEEE 1076-1987 was adopted, simulator companies began enhancing VHDL with new, non-standard types to allow their customers to accurately simulate complex electronic circuits. This caused problems because design descriptions entered into one simulator were often incompatible with other simulation environments. VHDL was quickly becoming a nonstandard.
To get around the problem of nonstandard data types, another standard was developed by an IEEE committee. This standard, numbered 1164, defines a standard package (a VHDL feature that allows commonly used declarations to be collected into an external library) containing definitions for a standard nine-valued data type. This standard data type is called std_logic, and the IEEE 1164 package is often referred to as the Standard Logic package.
The IEEE 1076-1987 and IEEE 1164 standards together form the complete VHDL standard in widest use today. (IEEE 1076-1993 is slowly working its way into the VHDL mainstream, but it does not add significant new features for synthesis users.)
Standard 1076.3(often called the Numeric Standard or Synthesis Standard) defines standard packages and interpretations for VHDL data types as they relate to actual hardware. This standard, which was released at the end of 1995, is intended to replace the many custom (nonstandard) packages that vendors of synthesis tools have created and distributed with their products.
IEEE Standard 1076.3 does for synthesis users what IEEE 1164 did for simulation users: increase the power of Standard 1076, while at the same time ensuring compatibility between different vendors?tools. The 1076.3 standard includes, among other things:
1)   A documented hardware interpretation of values belonging to the bit and boolean types defined by IEEE Standard 1076, as well as interpretations of the std_ulogic type defined by IEEE Standard 1164.
2)   A function that provides "don&care" or "wild card" testing of values based on the std_ulogic type. This is of particular use for synthesis, since it is often helpful to express logic in terms of "don抰 care" values.
3)   Definitions for standard signed and unsigned arithmetic data types, along with arithmetic, shift, and type conversion operations for those types.
The annotation of timing information to a simulation model is an important aspect of accurate digital simulation. The VHDL 1076 standard describes a variety of language features that can be used for timing annotation. However, it does not describe a standard method for expressing timing data outside of the timing model itself.
The ability to separate the behavioral description of a simulation model from the timing specifications is important for many reasons. One of the major strengths of Verilog HDL (VHDL抯 closest rival) is the fact that Verilog HDL includes a feature specifically intended for timing annotation. This feature, the Standard Delay Format, or SDF, allows timing data to be expressed in a tabular form and included into the Verilog timing model at the time of simulation.
The IEEE 1076.4 standard, published by the IEEE in late 1995, adds this capability to VHDL as a standard package. A primary impetus behind this standard effort (which was dubbed VITAL, for VHDL Initiative Toward ASIC Libraries) was to make it easier for ASIC vendors and others to generate timing models applicable to both VHDL and Verilog HDL. For this reason, the underlying data formats of IEEE 1076.4 and Verilog SDF are quite similar.
When should you use VHDL?
Why choose to use VHDL for your design efforts? There are many likely reasons. If you ask most VHDL tool vendors this question, the first answer you will get is, "It will improve your productivity." But just what does this mean? Can you really expect to get your projects done faster using VHDL than by using your existing design methods?
The answer is yes, but probably not the first time you use it, and only if you apply VHDL in a structured manner. VHDL (like a structured software design language) is most beneficial when you use a structured, top-down approach to design. Real increases in productivity will come later, when you have climbed higher on the VHDL learning curve and have accumulated a library of reusable VHDL components.
Productivity increases will also occur when you begin to use VHDL to enhance communication between team members and when you take advantage of the more powerful tools for simulation and design verification that are available. In addition, VHDL allows you to design at a more abstract level. Instead of focusing on a gate-level implementation, you can address the behavioral function of the design.
How will VHDL increase your productivity? By making it easy to build and use libraries of commonly-used VHDL modules. VHDL makes design reuse feel natural. As you discover the benefits of reusable code, you will soon find yourself thinking of ways to write your VHDL statements in ways that make them general purpose. Writing portable code will become an automatic reflex.
Another important reason to use VHDL is the rapid pace of development in electronic design automation (EDA) tools and in target technologies. Using a standard language such as VHDL can greatly improve your chances of moving into more advanced tools (for example, from a basic low-cost simulator to a more advanced one) without having to re-enter your circuit descriptions. Your ability to retarget circuits to new types of device targets (for example, ASICs, FPGAs, and complex PLDs) will also be improved by using a standard design entry method.
Most of the VHDL features that are needed to support sequential-circuit design, in particular, processes, were already introduced in section 4.7 and were used in the VHDL sections in chapter 5. This section introduces just a couple more features and gives simple examples of how they are used .Larger examples appear in the VHDL sections of chapter
8. feedback sequential circuits
A VHDL process and the simulator’s event-list mechanism for tracking signal changes form the sequential circuits may change state in response to input changes , and these state changes are manifested by changes propagating in a feedback loop until the feedback loop stabilizes. In simulation, this is manifested by the simulator putting signal changes on the event list and scheduling processes to return in “delta time” and propagating these signal changes until to no more signal changes are scheduled.
    Table 7-36 dataflow VHDL for an S-R latch.
Table 7-36 is a VHDL program for an S-R latch, the architecture contains two concurrent assignment statements. Each of which gives rise to a process, as discussed in section 4.7.9, these processes interact to create the simple latching behavior of a S-R latch.
The VHDL simulation is faithful enough to handle the case where both S and R are asserted simultaneously. The most interesting result in simulation occurs if you negate S and R simultaneously. Recall from the box from the page 536 that a real S-R latch may oscillate or go into a metastable state in this simulation. The simulation will potentially loop forever as each execution of one assignment statement triggers another execution of the other. After some number of repetitions, a well-designed simulator will discover the problem----delta time keeps advancing while simulated time does not----and halt the simulation.
WHAT DO ‘U’ WANT
It would be nice if the S-R latch model in table 7-36 produced a ‘u’ output whenever S and R were negated simultaneously, but it’s not that good. However, the languages is powerful enough that experienced VHDL designers can easily write a model with that behavior. Such a model would make use of VHDL’s time-modeling facilities, which we haven’t discussed, to model the latch’s “recovery time” (see box in page 537) and force a ‘u’ output if a second input change occurred too soon. It’s even possible to model a maximum assumed metastability resolution time in this way.
Table 7-37 behavioral VHDL for a positive-edge-triggered D flip-flop
Mote that if a circuit has the possibility of entering a metatable state, there’s no
guarantee that the simulation will detect it, especially in larger designs. The best way to avoid metasbgability problems in a system design is to clearly identify and protect its asynchronous boundaries, as discussed in section clocked circuits


In practice, the majority of digital designs that are modeled using VHDL are clocked, synchronous systems using edge-triggered flip-flops. In addition to what we’ve already learned about VHDL, there’s just one more feature needed to describe edge-triggered behavior. The event attribute attached to a signal name to yield a value of type Boolean that is true if an event on the signal caused the encompassing process to run in the current simulation cycle, and false otherwise.
Using the event attribute, we can model the behavior of a positive-edge-triggered D flip-flop with asynchronous clear as shown in table 7-37. here, the asynchronous clear input CLR overrides any behavior on the clock input CLK and is therefore checked first, in the “if” clause. If CLR is negated, then the “elsif” clause is checked, and its statements are executed on the rising edge of CLK. Note that “CL’event” is true for any change on CLK, and “CLK=’1’” is checked to limit triggering to just the rising edge of CLK. There are many other ways to construct processes or statements with edge-triggered behavior; table 7-38 shows two more ways to describe a D flip-flop ( without a CLR input ).
Table 7-38 two more ways to describe a positive-edge-triggered D flip-flop.
In the test bench for a clocked circuit, one of things you need to do is generate a system clock signal. This can be done quite easily with a loop inside a process, as shown in table 7-39 for a 100MHz clock with a 60% duty cycle.
*****SYNTHESIS STUFF*****
You may be wondering, how does a synthesis tool convert the edge-triggered behavior described in table 7-37 or 7-38 into an efficient flip-flop realization? Most tools recognize only a few predetermined ways of expressing edge-triggered behavior and map those into predetermined flip-flop components in the target technology.
The synopsis synthesis engine used in the xinlinx foundation series 1.5 software recognize the”clk’event and clk=’1’” expression that we use in this book. Even with that as a given, VHDL has many different ways ashenden, author of the designer’s guide to
VHDL (morgan Kaufmann, 1996) ran these statements and one other, with some modification, through several different synthesis tools. Only one of them was able to synthesize three out of the four forms, most could handle only two. So, you need to follow the method that is prescribed by the tool you use.
Table 7-39 clock process within a test bench.
reference
The problem of metastability has been around for a long time. Greek philosophers wrote about the problem of indecision thousands of years ago. A group of modem philosophers named Devon sang about metastability in the title song of their Freedom of choice album. And the u.s. congress still can’t decide how to “save” social security.
Scan capability was first deployed in latches. Not flip-flop, in IBM IC designs decades ago. Edward J.McCluskey has a very good discussion of this and other scan methods in logic design principles (prentice hall, 1986).
Most ASICs and MSI-,PLD- and FPGA-based designs use the sequential circuit types described in this chapter. However , there are other types that are use in both older discrete designs (going all the way back to vacuum-tube logic ) and as well as in modem, custom VLSI designs.
For example, clocked synchronous state machines are a special case of a more general class of pulse-mode circuits, Such circuits have one or more pulse inputs such that (a) only one pulse occurs at a time; (b) non-pulse inputs are stable when a pulse occurs; (c) only pulses can cause state changes; and (d) a pulse clock is the single pulse input, and a “pulse” is the triggering edge of the clock. However, it is also possible to build circuits with multiple pulse inputs. These possibilities are discussed very thoroughly in McCluskey’s logic Design Principle (prentice hall, 1986).
A particularly important type of pulse-mode circuit that is discussed by McCluskey and others is the two-phase latch machine. The rationale for a two phase clocking approach in VLSI circuits is discussed by Carver Mead and Lynn Conway in introduction to VLSI systems (Addison-Wesley, 1980). There machines essentially eliminate the essential hazards present in edge-triggered flip-flops by using pairs of latches that are enabled by no overlapping clocks.
Methods for reducing both completely and incompletely specified state tables are described in advanced logic design texts, including McCluskey’s 1986 book. A more mathematical discussion of these methods and other “theoretical” topics in sequential machine design appears in switching and finite automata theory, second edition, by Zvi Kohavi (McFGraw-hall, 1978).
As we showed in this chapter, improperly constructed state diagrams may idle an ambiguous description of next-state behavior. The “if-then-else” structures in HDLs like ABEL and VHDL can eliminate these ambiguities, but they were not first to do so. Algorithmic-state-machine (ASM) notation. A flowchart-like equivalent of nested if-then-else statement, has been around for over 25 years. So-called ASM charts were pioneered at Hewlett-Packard Laboratories by Thomas E. Osborne and were pioneered by Osborne’s colleague Christopher R. Clare in a book, designing logic systems using ASM charts (McGraw-hill ,1973).Design and synthesis methods using ASM charts subsequently found a home in many digital design texts. Including the art of digital design by F.P.Prosser and D.E.Winkel (prentice hall, 1987, second edition ), and digital design by M.Morris Mano (prentice hall, 1984), as well as in the fist two editions of the book you’re just reading.
Another notation for describing state machines is an extension of “traditional” state-diagram notation called the mnemonic documented state (MDS) diagram. It was developed by William I.Fletcher in an engineering approach to digital design (prentice-hall. 1980). ASM charts and MDS diagrams have now been largely replaced by HDLs and their compilers.
Many CAD environments for digital design include a graphical state diagram entry tool. Unfortunately, these typically support only traditional state diagrams, making it very easy for a designer to create an ambiguous descriptions of next-state behavior. As a result, my personal recommendation is that you stay away from state-diagram editors and instead use an HDL to describe your state machines.
We mentioned the importance of synchronizing sequences in connections with state-machine test vectors. There’s actually a very well developed but almost forgotten theory and practice of synchronizing sequences and somewhat less powerful “homing experiment” described by Frederick C.Hennie in Finite-state Models for logical machines (Wiley, 1968) Unless you’ve got this old classic on your bookshelf and know how to apply its teachings, please just remember to provide a reset input in every state machine that you design!
2英文譯文
語言概觀
   VHDL是什么?
VHDL是一種已經被為描述成為傳統的行為設計最佳化的規劃語言。
因為描述范圍從簡單的邏輯門到的電子成份的行為完成微處理器和習慣規定, VHDL 讓許多特征適當。VHDL的特征允許線路行為 ( 像是上升而且落下時代的信號,延遲過門, 和功能的操作) 的電氣特性精確地被描述。然后在那產生的VHDL 模擬模型為了模擬能在較大的線路 ( 使用圖表, 區段圖表或系統級的 VHDL 描述) 中被當作建電氣區段使用。
VHDL 也是一種泛用型的規劃語言:正如高階層的規劃語言允許復雜的要表示成電腦程式的設計觀念, VHDL 允許復雜電子的線路行為對于自動的線路綜合或系統模擬進入一個設計系統之內被捕獲. 像巴斯卡, C 和 C++, VHDL 包括對結構化設計技術是有用的, 而且提供一富有組的控制和數據表現特征的特征。這些不像其他的規劃語言, VHDL 提供特征允許協同的要描述的事件。因為被描述固有地使用 VHDL 的硬件在它的操作方面是協同的,所以這很重要。
VHDL 的最重要申請之一是為一個線路是以被普遍稱為一張測試長椅子的東西形式。測試長椅子是線路 stimuli 和隨著時間的過去查證線路的行為對應的預期輸出的 VHDL 描述。測試長椅子應該是一個任何 VHDL 計畫的整體部份并且應該在和其他線路的描述前后縱排的馬車中被產生。
一種標準的語言
你的最無法抗拒的理由之一是變成的經驗和聰明的在 VHDL 中是如電子的設計一個標準社區的它采用。使用一種標準的語言,像是VHDL事實上保證,只是因為你已經選擇的設計進入方法不被在比較新的世代設計工具中支援,你將不必丟棄,而且取回設計觀念。使用一種標準的語言也意味你更可能能夠利用最新設計工具而且你將會有機會接近一個數以千計其他的工程師的知識庫, 他們當中的一些人正在解決問題的多數類似你自己的。
VHDL 的簡短歷史
在1980年代早期內代表 VHSIC( 最高速集成電路) 硬件描述語言的 VHDL 被發展如被美國國防部部門贊助的高速集成電路研究計畫的一個附帶利益。在 VHSIC 計劃的時候,研究員面對描述巨大尺寸 ( 對于他們的時間) 的線路使人畏縮工作并且管理非常大的線路設計牽涉了許多工程師團隊的問題。由于唯一的門級設計可得的工具, 它很快變成清楚更,比較結構化設計方法和工具會是需要的。
為了要迎接這一挑戰, 一些來自IBM ,德克薩斯工具和 Intermetrics三家公司的工程師被國防部雇傭完成一個新的規格和以語言為基礎的設計描述方法。第一 VHDL,7.2 版的公眾可得版本,在 1985到1986年被出版,美國電氣電子工程師協會(IEEE) 與一份提議一起呈現標準化語言,它在提高和修正被做的重要部份之后在 1987 年做被一組由商業的,政府和學院的代表組成的成員定義產生了IEEE 1076-1987標準, 事實上這是今天出售的每個模擬綜合產品的基礎的語言, IEEE 1076-1993 的一個增強型版本,在1994年出版,而且VHDL工具廠商把這些新的語言特征加入他們的產品以做回應。
雖然 IEEE的1076標準定義了完整的VHDL語言, 但是使寫完全手提式的設計描述的語言方面是困難的( 能同一地被模擬使用不同的廠商描述硬件工具)。問題起源于 VHDL 支持許多摘要數據類型,但是它不如未知數和高阻抗向如此的不同信號力量或普遍使用過的模擬所表示簡單問題的特色為條件的運行。
在 IEEE 1076-1987 是采用不久后,模擬器公司開始用新又非標準提高 VHDL 類型允許他們的客戶正確地模擬合成物電子線路。因為設計參與一個模擬器時常的描述對其他的模擬環境不匹配,所以這引起了問題. VHDL 正在很快地變成一種非標準的標準。
為了要解決非標準數據類型的問題, 另外的標準被一個 IEEE 委員會發展了。這一個標準,1164 號, 定義一個標準的程序包(允許要收集的普遍使用過的公告進入類似一間外部的圖書館之內的一個VHDL特征) 包含定義為一個標準的的數據類型。這種標準的數據類型叫做std_logic,而且IEEE 1164 數據包時常被稱為標準的邏輯包。
IEEE 1076-1987和IEEE.1164標準一起在今天廣泛的使用中形成了完整的 VHDL 標準。 (IEEE 1076-1993 慢慢地使它的設計方法進 VHDL 主流之內,但是它不為綜合使用者增加重要的新特征。)
當VHDL與真實的硬件有關的時候,標準 1076.3( 時常認為數值的標準或綜合是標準) 為 VHDL 數據類型定義標準了程序包解釋。這一個在 1995 底被發布的標準預計代替許多習慣 ( 非標準的) 包裝綜合工具的廠商已經產生而且應用的產品。
IEEE的 1076.3標準為使用IEEE 1164綜合模擬使用者做什么: 增加標準 1076 的功能, 增強在不同的廠商之間的兼容性。標準的 1076.3 包括, 在其他的事物之中:
1)標準的價值被證明的硬件解釋屬于IEEE 標準的1076, 連同被 IEEE 定義的 std_ulogic 類型的解釋定義的 boolean 類型1164。
2) 一張提供以std_ulogic為基礎的通行證。這對綜合是有特別使用的, 因為它時常是有幫助的價值表達邏輯。
3)為標準的定義簽署并且不簽署算術數據類型,連同算術,變化和類型轉變行動一起對于那些類型。
時間安排數據的注解對一個模擬模型是一個正確數據的重要方面模擬。VHDL 1076 標準描述多種語言能作為時間安排注解的特征。然而,它為在時間安排模型本身的外部表達時間安排數據不描述一個標準的方法。
區隔模擬模型的動作描述和時間安排規格的能力的許多理由是重要的。Verilog 高密度( VHDL抯最靠近的對手) 的主要力量之一是Verilog 高密度為時間安排注解明確地包括一個特征想要的事實。這一個特征,標準的延遲格式,或 SDF, 允許時間安排數據在一種制成表的形式中被表達而且在模擬的時候進入 Verilog 時間安排模型之內。
IEEE 1076.4 標準, 在1995后期中由IEEE 出版,把這一個能力加入一個標準的程序包。VHDL在這個標準的努力 (被配音重要的, 為VHDL 向ASIC圖書館的率先) 后面的一種主要的動力是讓 ASIC廠商和其它使它變成更容易產生時間安排模型適用于VHDL 和Verilog高密度芯片。因為這一個理由, IEEE 1076.4 和Verilog 抯SDF 的在下面數據格式相當相似。
你應該使用 VHDL?
為什么選擇使用 VHDL 作為你的設計? 有許多有可能的理由。如果你問大多數的 VHDL工具廠商這一個問題,你將會拿的第一個答案是“資訊科技將會改善你的生產力”。 但是究竟這意謂什么呢? 你能真的期待拿完成了快速的使用 VHDL 為你設計而超過使用你的現有設計方法?
答案是的肯定,但是或許不是你使用它第一目的,而且只有當如果你以結構化樣子應用 VHDL。當你使用結構化又由上而下的方式設計的時候,VHDL( 像一種結構化軟件設計語言) 是最有益的。生產力的真正增加稍后將會受到的影響,當你已經在 VHDL上更高地攀登學習曲線而且已經累積一間可以再度使用 VHDL 成份的圖書館的時候。
當你開始使用VHDL 提高生產力的時候,生產力增加也將會發生在隊成員之間的溝通而且當你為模擬和設計可得的確認利用比較有力的工具時候。除此之外, VHDL允許你在一個較多的抽象水平設計。代替把重心集中在門級的落實,你能向設計的動作功能發表演說。
VHDL將會如何增加你的生產力? 借VHDL建立并且使用圖書館數據是容易普遍的。VHDL組件使設計重復使用讓你覺得自然。就如你發現可以再度使用密碼的利益,你將會很快找你自己方法思考使他們成為一般用途的方法。你對VHDL 陳述,寫手提式的密碼將會變成一個自動的反射。
使用 VHDL 的另外重要的理由是電子設計自動化 (EDA) 的工具和在目標技術方面的發展速度很快。使用一種標準的語言,像是 VHDL 能有效改善你無需再進入你的線路描述的更先進的工具 ( 舉例來說,從一個基本的廉價模擬器到一個更先進的) 機會。也再對準對裝置目標 ( 舉例來說ASICs , FPGAs 和合成物 PLDs) 的新類型的線路讓你由能力將會使用標準的設計進入方法改良。
  VHDL時序電路設計特征:
VHDL的大部分特征是為它支持時序電路而設計的,特別地,對“進程”,我們已經在4.7節里介紹過了,我們還將在第五章的VHDL部分利用它。本部分介紹一些其他的特征并給出一些如何利用的例子。更大得更全面的例子將在第八章的VHDL部分給出。
反饋時序電路:
一個VHDL進程和跟蹤信號變化的模擬事件列表機制構成了在VHDL中處理反饋時序電路的基礎。別忘了,反饋時序電路會隨著輸入信號的變化產生變化,而這些狀態的變化在一個反饋環中用狀態圖顯示出來,除非反饋環穩定下來。在模擬中,這將用在事件列表中的模擬輸入信號的變化來顯示,而且,預定的進程會在δ時間段后返回,并且傳播這些變化直到不再有變化信號出現。
表7-36就是一個用VHDL語言編寫的S-R鎖存器的程序,其結構體包括兩個并發語句,每一句都可以引發一個進程,如同在4.7.9種討論的一樣。這些進程互相地產生一個簡單的S-R鎖存器的功能行為。
VHDL仿真器足夠真實地處理當S-R同時變化的情況。會有很多的有趣的仿真結果在現在仿真過程中,只要你同時啟動S和R。回憶在536頁上的圖,那是一個真正的S-R鎖存器,在上述情況下會引起振蕩或進入不可測狀態。這個狀態將會潛在永久地鎖定。每個語句的執行將會啟動另一個語句的執行,經過一些重復,一個設計得非常好的仿真器就將顯示問題——在仿真時間到來時,δ延遲保持在先——并停止仿真。
看起來,表7-36所顯示的S-R鎖存器在S和R同時復位時會產生一個‘U’輸出似乎很好,但事實上并非一定如此美妙。別忘了,對一個VHDL的編程者而言,語言是足夠強大的,以至可以輕松地描述一個具備某行為的模型,這個模型將利用VHDL的時間模型,這部分我們還沒有探討,在輸出變化太快的情況下,還未對所存器模型的復位時間和產生‘U’輸出進行模擬。
記住,如果一個電路有可能進入不定狀態,就不能保證仿真器能檢測到,尤其是在大型的設計中,一個系統的設計最好地避免不定態的方式是仔細辨認并保護它的不同步邊沿,就如同在8.9部分討論的那樣。
表7-37
****‘U’想要什么****
7.12.2 時鐘電路
在實際設計時,用VHDL語言進行模擬的大多數數字設計是時序的、用邊沿觸發器的同步系統。除了我們所學的VHDL特征,還有一個特征需要描述邊沿觸發器的行為,而“事件屬性”可以被連接到一個信號,來產生一種布爾代數值,如果信號引發的事件能引起一個進程去執行當前的模擬循環,那么就對了,否則,就是錯誤的。
用“事件屬性”,我們能模擬一個動態邊沿D觸發器的行為,如同在表7-37中描述的那樣。
這里,同步清零CLR比時鐘電路的其他任何行為都優先,因此在設計語句時,最先被檢測,如果滿足IF條件,那么就檢測ELSIF語句,在CLK的邊沿時,狀態語句將被執行,記住,“CLK’EVENT”對CLK的任何變化都起作用,但“CLK=1”表示只在CLK上升沿才起作用,還有一些其他方式來構建具有觸發器行為的進程和狀態。表7-38顯示了兩種方式來描述一個D觸發器(沒有CLR輸入)。
表7-38
在一個時鐘電路的測試平臺有一件你需要做的事是產生一個系統時鐘信號,這可以輕松地完成,靠的是在一個進程中用一個循環。圖表7-39所示,其為一個100MHz的而且有60%是零值的循環時鐘信號。
綜合工具
你可能想知道一個分析工具是如何實現將表7-37或表7-38中的邊沿觸發器行為變成一個高效的觸發器行為的?大多數工具僅辨識少許穩定的描述觸發行為的方式,而且在面向對象技術中把他們作為一個觸發器元件。
在XILINX基本系列1。5版本軟件中的綜合分析工具能辨識“CLK’EVENT”和“CLK=1”的描述。也就是我們書中所描述的。除了給出的描述VHDL有許多不同的方式描述同一個功能,如在表7-38中所示。《VHDL讀者指南》的作者Peter ashden(morgan kanfmann,1996)描述過這些內容,并通過某些修改,在不同的工具中運行過。僅僅一種能綜合四種格式中的三種,大多數只能處理兩個。因此,你需要去學習你所用工具適合的描述方法。
參考:

表7-39
不定現象長期存在,而且很久以前就有。古希臘哲學家們在幾千年前就描述過不定現象。一些現代哲學家在他們所謂自由相冊的標題中稱Devo sang為不定現象。美國國會今天仍然不能決定如何去拯救社會安全。
在鎖存器中IBM集成電路設計首要注重的是掃描功能,不是觸發器,埃德華J.Mc克拉斯科列FPGA的設計利用了這章中描述時序電路類型。然而,還有其他類型也被應用在其它舊式的分離的設計中(如果完全回到真空管邏輯時代)同樣,在現代的傳統VLSI設計中也用到。舉個例子,同步時序狀態機是通常的幾種脈沖模式電路的一個特殊例子。這種電路擁有一個或多個脈沖輸入,或某個時刻只有一個脈沖或是一個脈沖在多數狀態變化時產生或僅僅有脈沖才產生狀態變化或當一個脈沖產生時,非脈沖輸入是穩定的。在同步時許狀態機中,一個脈沖是指一個時鐘的觸發邊沿,然而用多脈沖輸入也可以設計電路,不僅是用通用邊沿觸發器甚至用存儲器元件也能設計,這些可能性在Mc克拉斯克的《邏輯設計原理》中有很好地描述。
一種脈沖電路中特別重要的類型在Mc克拉斯克的書中也被討論到,其他的是二相鎖存機。一種在VLSI中可行的二相鎖存方式在卡瓦米德和寧·康威合著的書《VLSI系統導論》(1980年,愛迪生-為斯里出版社)有討論過。
這些狀態機基本上減少了在邊沿觸發器中的潛在危險,方式是用一對待非重疊時鐘的有使能端的鎖存器來實現。
在高級邏輯是教材中討論過專業或半專業的狀態圖的化簡方法,包括Mc克拉斯克1986年寫的書,更多的數學上的關于這些方式的討論和其他時序機的理論上的觀點在《開關轉換及有限自動化理論》(1978,第二版)中有過描述,如同在本章中討論的,不正常的狀態圖會產生一個模糊的次態行為的描述。“IF-THEN-ELSE”是VHDL中的結構,如ABEL和VHDL能減少這種模糊。但它們不是最先完成這任務的。“數字狀態機”(ASM)標注即一種與“IF-THEN-ELSE”等同的流圖式的描述方法。在25年前就出現過,因此,ASM圖在Hewlett-Packard實驗室被首先開發,發明者是托馬斯•E•奧本,繼而由奧本的大學同學克里斯特法R克拉爾的書《用狀態機設計邏輯系統》中被深入地發展了。
用ASM圖設計和綜合的方法很快在各種教材中出現,包括F.P波拉薩和D.E維克爾的書《數字設計藝術》及M.莫瑞斯馬洛德《數字設計》,同樣在你正在讀的書的前兩版中也寫入了。
另外一個需要說明的關于描述狀態機的是傳統狀態圖的擴展,被稱為MDS圖,他由威廉.I.法拉奇在書《數字設計的工程方法》中發明。ASM圖和MDS圖現在絕大部分被HDL語言和他們的編譯器代替。
許多數字設計適合各種CAD環境,包括電路圖設計工具,不幸地是,這些環境只支持傳統的狀態圖,是一個設計者很容易設計一個產生次態模糊行為的設計。因此,我個人建議是,你最好遠離狀態圖設計而堅持用HDL來設計你的狀態機。
我們這里提過同步時序與狀態機測試矢量結合的重要性,確實,有一種關于同步時序的發展很完備但又幾乎被忘記的理論和實踐,其稍遜于“家庭實驗室”,這被傅立德瑞克C亨利在書《邏輯機的有限狀態模式》(1968年出版)中講述過。
除非在你的書架上有這本經典的書,而且知道如何利用它,請要記住在你設計的每個狀態機的輸入端加一個復位輸入。
  
致 謝
首先我要感謝指導我的閆舒靜老師,在我的課題設計和論文撰寫期間,他給予了悉心的指導。在選題、方案的優選及軟硬件的實現方面,閆老師不僅給予了寶貴的意見,而且進行了耐心的啟迪,這樣不但開闊了我的視野,還大大激發了我的積極性。同時,閆老師治學嚴謹、精益求精、待人謙和,給我樹立了做人、治學的榜樣,對我今后的學習和工作都將產生長期的影響。在此,謹向閆老師致以最誠摯的謝意!
    同時還要感謝實驗室的其他老師:李廣輝老師、劉老師等,他們在我做設計期間給予了無私的幫助和指導!
    同時還要感謝幫助過我的同學們,在本次論文課題的實驗過程中,得到了張華夏、田永貴、李睿濤等同學的幫助,在這里像他們表示深深的謝意!
    另外還要感謝所有關心和幫助過我的朋友們!

   


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天干狠狠干 | 亚洲国产高清免费 | 51ⅴ精品国产91久久久久久 | 国产精成人 | 亚洲一区 | 日韩精品久久久久久 | 免费在线观看av | 日韩视频三区 | 亚洲欧美中文日韩在线v日本 | 91精品国产乱码久久久久久久久 | 一区二区高清 | 91在线网站 | 欧美一级欧美三级在线观看 | 久久精品国产一区二区电影 | 久久夜色精品国产 | 99精品亚洲国产精品久久不卡 | 日韩久久综合 | 国产色网站 | 99久久精品免费看国产高清 | 欧美一区二区成人 | h视频在线免费 | 自拍偷拍中文字幕 | 精品国产精品三级精品av网址 | 中文字幕一级 | 成人二区| 国产成人jvid在线播放 | 日日碰碰 | 欧美激情在线精品一区二区三区 | 亚洲欧美日韩激情 | 国产清纯白嫩初高生视频在线观看 | 色视频在线播放 | 国产免费拔擦拔擦8x高清 | 夜夜骑首页 | 亚洲国产精品久久 | 亚洲精品国产精品国自产在线 | 免费的av网站 | 国产精品亚洲综合 | 久久久国产一区二区三区 | 黄色一级视频免费 | 99在线精品视频 | 欧美日韩在线精品 |