九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

VHDL與數(shù)字電路設計.ppt

  • 資源ID:14859517       資源大小:3.22MB        全文頁數(shù):306頁
  • 資源格式: PPT        下載積分:19.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要19.9積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

VHDL與數(shù)字電路設計.ppt

VHDL與數(shù)字電路設計,主講:崔 剛 北京工業(yè)大學電控學院電工電子中心 2005年9月1,目錄,概述 第一章 VHDL的程序結(jié)構(gòu)和軟件操作 第二章 數(shù)據(jù)類型與數(shù)據(jù)對象的定義 第三章 并行賦值語句 第四章 順序賦值語句 第五章 組合邏輯電路的設計 第六章 時序邏輯電路的設計 第七章 子程序、庫和程序包 第八章 CPLD和FPGA的結(jié)構(gòu)與工作原理 第九章 數(shù)字鐘電路的設計,本節(jié)主要內(nèi)容,傳統(tǒng)數(shù)字電路設計方法 EDA設計方法 PLD器件 PLD器件設計流程 文本設計輸入VHDL程序設計,數(shù)字電子技術的基本知識回顧,組合邏輯電路 編碼器、譯碼器、數(shù)據(jù)選擇器、加法器、數(shù)值比較器等 時序邏輯電路 同步時序邏輯電路 異步時序邏輯電路 寄存器、移位寄存器、計數(shù)器、序列信號發(fā)生器,一、傳統(tǒng)設計方法,(1)首先確定可用的元器件; (2)根據(jù)這些器件進行邏輯設計,完成各模塊; (3)將各模塊進行連接,最后形成系統(tǒng); (4)而后經(jīng)調(diào)試、測量觀察整個系統(tǒng)是否達到規(guī)定的性能指標。,傳統(tǒng)的設計方法是基于中小規(guī)模集成電路器件進行設計(如74系列及其改進系列、CC4000系列、74HC系列等都屬于通用型數(shù)字集成電路),而且是采用自底向上進行設計:,EDA(Electronics Design Automation)即電子設計自動化技術,是利用計算機工作平臺,從事電子系統(tǒng)和電路設計的一項技術。 EDA技術為電子系統(tǒng)設計帶來了這樣的變化: (1)設計效率提高,設計周期縮短; (2)設計質(zhì)量提高; (3)設計成本降低; (4)能更充分地發(fā)揮設計人員的創(chuàng)造性; (5)設計成果的重用性大大提高,省去了不必要的重復勞動。,二、EDA設計方法,自頂向下的設計方法,數(shù)字電路的EDA設計是基于PLD進行設計的,支持自頂向下的設計方法: (1)首先從系統(tǒng)設計入手,在頂層進行功能劃分和結(jié)構(gòu)設計; (2)然后再逐級設計底層的結(jié)構(gòu); (3)并在系統(tǒng)級采用仿真手段驗證設計的正確性; (4)最后完成整個系統(tǒng)的設計,實現(xiàn)從設計、仿真、測試一體化。,傳統(tǒng)設計方法 vs EDA設計方法,三、PLD器件 (一)出現(xiàn)的背景,如果能把所設計的數(shù)字系統(tǒng)做成一片大規(guī)模集成電路,則不僅能減小電路的體積、重量、功耗,而且會使電路的可靠性大為提高。 為某種專門用途而設計的集成電路叫做專用集成電路,即所謂的ASIC(Application Specific Integrated Circuit的縮寫)。 在用量不大的情況下,設計和制造這樣的專用集成電路成本很高,而且設計、制造的周期也較長。 可編程邏輯器件的研制成功為解決上述問題提供了比較理想的途徑。,(二)PLD概述,PLD是可編程邏輯器件(Programmable Logic Device)的英文縮寫。 可編程邏輯器件是一種數(shù)字集成電路的半成品,在其芯片上按一定排列方式集成了大量的邏輯門和觸發(fā)器等基本邏輯元件。通過編程可以設置其邏輯功能。 PLD編程: 利用開發(fā)工具對PLD進行加工,即按設計要求將這些片內(nèi)的元件連接起來,使之完成某個邏輯電路或系統(tǒng)的功能,成為一個專用集成電路(ASICApplication Specific Integrated Circuit)。,PLD開發(fā)系統(tǒng),PLD開發(fā)系統(tǒng)包括硬件和軟件兩部分。 硬件部分:計算機、下載電纜或編程器; 軟件部分:集成開發(fā)系統(tǒng)。 Altera公司:Maxplus 、 Quartus Xilinx公司:Foundation、 ISE Lattice公司:Synario System、ispEXPERT System,四、PLD設計流程,設計準備,設計輸入,設計處理,器件編程,功能仿真,時序仿真,器件測試,PLD設計準備,在設計之前,首先要進行方案論證和器件選擇等設計準備工作。 設計者首先要根據(jù)任務要求,判斷系統(tǒng)的可行性。系統(tǒng)的可行性要受到邏輯要求合理性、成本、開發(fā)條件、器件供應等方面的約束。 若系統(tǒng)可行,則根據(jù)系統(tǒng)所完成的功能及復雜程度,對器件本身的資源和成本、工作速度及連線的可布性等方面進行權衡,選擇合適的設計方案和合適的器件類型。,設計輸入,將所設計的電路的邏輯功能按照開發(fā)系統(tǒng)要求的形式表達出來的過程稱為設計輸入。 通常,設計輸入有如下三種方式: (1)原理圖輸入方式 適用于對系統(tǒng)及各部分電路很熟悉的場合。 (2)硬件描述語言輸入方式 硬件描述語言是用文本方式描述設計,硬件描述語言有ABEL、AHDL、VHDL、Verilog等,其中VHDL和Verilog已成為IEEE標準。 (3)波形輸入方式,設計處理,邏輯優(yōu)化 把邏輯描述轉(zhuǎn)變?yōu)樽钸m合在器件中實現(xiàn)的形式,優(yōu)化使設計所占用的資源最少。 邏輯綜合 根據(jù)設計描述,對給定的硬件結(jié)構(gòu)組件,最終獲得門級電路甚至更底層的電路描述文件,即將多個模塊化設計文件合并為一個網(wǎng)表文件。 適配 確定優(yōu)化后的邏輯能否與器件中的宏單元和I/O單元適配。 分割 將大的設計分割為多個便于器件內(nèi)部資源實現(xiàn)的邏輯小塊的形式。,設計校驗,設計校驗過程包括功能仿真和時序仿真。 功能仿真 時序仿真,器件編程,器件編程就是將開發(fā)系統(tǒng)生成的目標文件下載到可編程邏輯器件中,來定義內(nèi)部模塊的邏輯功能以及它們的相互連接關系。 兩種編程方式: 編程器 下載電纜,PLD開發(fā)系統(tǒng),PLD開發(fā)系統(tǒng)包括硬件和軟件兩部分。 硬件部分:計算機、下載電纜或編程器; 軟件部分:集成開發(fā)系統(tǒng)。 Altera公司:Maxplus 、 Quartus Xilinx公司:Foundation、 ISE Lattice公司:Synario System、ispEXPERT System,設計舉例,設計內(nèi)容: 十進制計數(shù)器電路設計。,PLD器件:ACEX1K系列的EP1K30QC208。 開發(fā)系統(tǒng):MAX+plus系統(tǒng)。 編程方式:下載電纜。,實驗下載板,14:34:11,設計過程,1、設計輸入 VHDL 演示1 2、邏輯驗證 演示2 3、設計處理 引腳設定 演示3 4、器件編程 連接下載電纜 演示4,三、PLD電路設計的特點,1、設計簡單,方便; 2、電路系統(tǒng)可以集成在一片芯片上; 3、電路設計不依賴于器件進行設計; 4、電路系統(tǒng)很容易完善和升級。,器件選擇:(1)電路系統(tǒng)所完成的功能及復雜程度; (2)器件本身的資源和成本、性能參數(shù)、 器件編程工藝等方面進行權衡。,VHDL是非常高速集成電路硬件描述語言 (Very High speed Integrated Circuit Hardware Description Language)的英文縮寫。,五、文本設計輸入VHDL程序設計,語法和風格: (1)類似與現(xiàn)代高級編程語言,如C語言。 (2)VHDL描述的是硬件,它包含許多硬件特有的結(jié)構(gòu)。,VHDL設計 VS 電路圖設計,VHDL與電路圖設計電路的方式不同,和電路圖設計方式相比: (1)易于修改; (2)設計能力更強; (3)VHDL語言很方便:獨立于器件設計;相同的程序代碼可以用于不同廠家生產(chǎn)的器件。,VHDL程序的基本結(jié)構(gòu),include “stdio.h”; include “math.h”; int main(void) int a,b,c; a=8; b=9; c=a+b; return c; ,Library std; Use std.standard.all; Entity and2 is Port( a,b : in bit; c : out bit); End and2; Architecture a1 of and2 is Begin c <= a and b; End a1;,VHDL程序,C程序,VHDL程序的基本結(jié)構(gòu),(1)LIBRARY和PACHAGE聲明區(qū); (2)ENTITY定義區(qū); (3)ARCHITECTURE定義區(qū);,Library(庫)是用于存放預先編譯好的Package(程序包)。 Package (程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,元件及子程序等。 作用:聲明在實體和結(jié)構(gòu)體定義中將用到的 數(shù)據(jù)類型、元件或子程序等。 聲明格式: Library 庫名; Use 庫名. PACKAGE名.All;,(1)LIBRARY和PACKAGE聲明區(qū),作用: ENTITY(實體)用于定義電路的外觀,即I/O端口的類型和數(shù)量。 定義格式: Entity 實體名 is Port( a : in bit; b : in bit; c : out bit); End 實體名;,(2)ENTITY定義區(qū),端口名,數(shù)據(jù)類型,端口模式,端口模式(MODE)有以下幾種類型: IN ;OUT;INOUT ;BUFFER 端口模式可用下圖說明:(黑框代表一個設計或模塊) IN OUT BUFFER INOUT,(2)ENTITY定義區(qū),(3)ARCHITECTURE定義區(qū),實體的實現(xiàn)。即說明電路執(zhí)行什么動作或?qū)崿F(xiàn)功能。 定義格式: Architecture 結(jié)構(gòu)體名 of 實體名 is 聲明語句;(內(nèi)部信號、變量、常數(shù),元件,子程序聲明) Begin 并行描述語句; End 結(jié)構(gòu)體名;,二輸入與門電路設計范例,電路真值表,二輸入與門電路設計范例,Library std; Use std.standard.all; Entity and2 is Port( a : in bit; b : in bit; c : out bit); End and2; -實體定義結(jié)束。,雙減號-為VHDL程序的注釋符,類似C語言中的/注釋符。,二輸入與門電路設計范例,Architecture Na of and2 is Begin c <=0 when a=0 and b = 0 else 0 when a=1 and b = 0 else 0 when a=0 and b = 1 else 1; 符號<=為信號直接賦值符。 End Na; -結(jié)構(gòu)體Na Architecture Nb of and2 is Begin c <= a and b; -and 為邏輯與操作 End Nb; -結(jié)構(gòu)體Nb,第一章 VHDL的程序結(jié)構(gòu)和軟件操作,1-1 VHDL程序的基本結(jié)構(gòu) 1-2 Max+plus的操作,1-1 VHDL程序的基本結(jié)構(gòu),include “stdio.h”; include “math.h”; int main(void) int a,b,c; a=8; b=9; c=a+b; return c; ,Library std; Use std.standard.all; Entity and2 is Port( a,b : in bit; c : out bit); End and2; Architecture a1 of and2 is Begin c <= a and b; End a1;,VHDL程序,C程序,1-1 VHDL程序的基本結(jié)構(gòu),(1)LIBRARY和PACHAGE聲明區(qū); (2)ENTITY定義區(qū); (3)ARCHITECTURE定義區(qū); (4)CONFIGURATION定義區(qū)。,Library(庫)是用于存放預先編譯好的Package(程序包)。 Package (程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,元件及子程序等。 作用:聲明在實體和結(jié)構(gòu)體定義中將用到的 數(shù)據(jù)類型、元件或子程序等。 聲明格式: Library 庫名; Use 庫名. PACKAGE名.All;,(1)LIBRARY和PACKAGE聲明區(qū),作用: ENTITY(實體)用于定義電路的外觀,即I/O端口的類型和數(shù)量。 定義格式: Entity 實體名 is Port( a : in bit; b : in bit; c : out bit); End 實體名;,(2)ENTITY定義區(qū),端口名,數(shù)據(jù)類型,端口模式,(2)ENTITY定義區(qū),標識符的定義原則: (1)標識符由字母、數(shù)字和下劃線組成,a7_; (2)在標識符不區(qū)分大小寫,ab和AB是一樣的; (3)第一個字符必須是字母,即a666; (4)不允許有兩個連續(xù)的下劃線,a_b錯誤; (5)末尾不能是下劃線,mname_錯誤; (6)標識符不能和關鍵字相同,如Entity,is等。,端口模式(MODE)有以下幾種類型: IN ;OUT;INOUT ;BUFFER 端口模式可用下圖說明:(黑框代表一個設計或模塊) IN OUT BUFFER INOUT,(2)ENTITY定義區(qū),(3)ARCHITECTURE定義區(qū),定義了實體的實現(xiàn)。即電路的具體描述,說明電路執(zhí)行什么動作或?qū)崿F(xiàn)功能。 定義格式: Architecture 結(jié)構(gòu)體名 of 實體名 is 聲明語句;(內(nèi)部信號、變量、常數(shù),元件,子程序聲明) Begin 并行描述語句; End 結(jié)構(gòu)體名;,(4)CONFIGURATION定義區(qū),一個完整VHDL電路設計必須有一個實體和對應的結(jié)構(gòu)體,即實體和結(jié)構(gòu)體對構(gòu)成一個完整的VHDL設計。 一個實體可對應一個結(jié)構(gòu)體或多個結(jié)構(gòu)體,即一個實體可以有不同的描述方式。 作用:當實體有多個結(jié)構(gòu)體時,系統(tǒng)默認實體選用最后一個結(jié)構(gòu)體,利用CONFIGURATION語句可以任意選擇采用哪一個結(jié)構(gòu)體。,(4)CONFIGURATION定義區(qū),定義格式: Configuration 配置名 of 實體名 is for 選用的結(jié)構(gòu)體名 end for; end configuration 配置名 ;,二輸入與門電路設計范例,電路真值表,二輸入與門電路設計范例,Library std; Use std.standard.all; Entity and2 is Port( a : in bit; b : in bit; c : out bit); End and2; -實體定義結(jié)束。,雙減號-為VHDL程序的注釋符,類似C語言中的/注釋符。,二輸入與門電路設計范例,Architecture Na of and2 is Begin c <=0 when a=0 and b = 0 else 0 when a=1 and b = 0 else 0 when a=0 and b = 1 else 1; 符號<=為信號直接賦值符。 End Na; -結(jié)構(gòu)體Na Architecture Nb of and2 is Begin c <= a and b; -and 為邏輯與操作 End Nb; -結(jié)構(gòu)體Nb,二輸入與門電路設計范例,Configuration s1 of and2 is for na end for; end configuration s1; -結(jié)構(gòu)體配置結(jié)束。,1-2 Max+plus系統(tǒng)的操作,Max+plus開發(fā)工具是美國Altera公司自行設計的一種軟件工具,其全稱為Multiple Array Matrix and Programmable Logic User System。 它具有原理圖輸入和文本輸入(采用硬件描述語言)兩種輸入手段,利用該工具所配備的編輯、編譯、仿真、時序分析、芯片編程等功能,將設計電路圖或電路描述程序變成基本的邏輯單元寫入到可編程的芯片中(如CPLD或FPGA芯片),作成ASIC芯片。它是EDA設計中不可缺少的一種工具。,下面我們介紹利用Max+plus 系統(tǒng)如何實現(xiàn)如下操作: (1)如何編寫VHDL程序(使用Text Editor); (2)如何編譯VHDL程序(使用Compiler); (3)如何仿真驗證VHDL程序(使用Waveform Editor,Simulator); (4)如何進行芯片的時序分析(使用Timing Analyzer); (5)如何安排芯片腳位(使用Floorplan Editor); (6)如何下載程序至芯片(使用Programmer)。,1-2 Max+plus系統(tǒng)的操作,(1)如何編寫VHDL程序,a. 打開文本編輯器;File/new/Text editor file b. 編寫VHDL程序; c. 保存文件,文件名和定義的實體名必須相同,文件擴展名為VHD,文件存盤的目錄不應是根目錄或桌面,建議存放在Max2work或Maxplus2目錄,或其子目錄 。,(2)如何編譯VHDL程序,a. 打開需要編譯的文件; b.設置工程到目前打開的文件 ; File/Project/Set Project to Current File, c.打開編譯器; 點擊主菜單MAX+plus/Compiler選項。 d. 選定VHDL源文件的版本 ; Interfaces/VHDL Netlist Reader Settings e. 打開編譯器進行編譯。,(3)如何仿真驗證VHDL程序,a. 打開波形編輯器(Waveform Editor ) ; b. 確定仿真持續(xù)時間(File/End Time); c. 將輸入輸出端口名選入波形編輯器; d. 編輯輸入信號波形 ; e. 保存仿真波形文件 ; f. 打開仿真器MAX+plusSimulator進行仿真。在仿真結(jié)束后打開仿真波形文件(點擊右下角的Open SCF按鈕)即可以顯示仿真結(jié)果。,(4)如何進行芯片的時序分析,a. 選擇要下載的器件型號 ; 點擊主菜單的Assign/Device項得到Device對話框。在Device Family框中選擇芯片系列,在Devices選擇框下選擇具體的芯片名,最后點擊OK按鈕 。 b. 再編譯一次; c. 打開時序分析器(Timing Analyzer ); d. 點擊Start進行時序分析。,(5)如何安排芯片腳位,a.打開芯片腳位設置窗口;點擊主菜單Assign/ Pin/Location/Chip,出現(xiàn)腳位設置對話框; ; b.將實體定義的端口名字和下載芯片的管腳進行具體對應;在Node Name框中輸入我們定義的實體端口名字,然后在Pin列表選項框中輸入下載芯片的管腳序號,再點擊對話框右下角的Add按鈕,將所有端口設置完成以后,點擊Ok按鈕,則實現(xiàn)實體端口和下載芯片的管腳的對應; c. 再編譯一次,將生成可以下載的文件(And2.Sof)。,(6)如何下載程序至芯片,a. 將下載電纜與計算機并口相連,然后給芯片通電 ; b. 打開編程器Programmer ; Options/Hardware Setup,在Hardware Type選擇ByteBlaster(MV)方式,則在Parallel Port處顯示LPT1,單擊OK鈕返回Programmer窗口。 c.下載方式選擇 ; d. 選擇下載的芯片類型和要下載的文件(選擇JTAG/Muti Devic JTAG Chain Setup)。 e. 點擊Configure進行下載,將程序?qū)懭胄酒?。,第二章 數(shù)據(jù)類型與數(shù)據(jù)對象的定義,2-1 數(shù)據(jù)類型 2-2 數(shù)據(jù)對象的定義 2-3 信號運算符 2-4 信號屬性,2-1 數(shù)據(jù)類型,在VHDL程序中,我們經(jīng)常會遇到這樣的語句: Signal A : std_logic; Variable B : std_logic_vector(7 downto 0); Constant C : integer;,數(shù)據(jù)對象類型,數(shù)據(jù)類型,數(shù)據(jù)對象名,2-1-1 邏輯數(shù)據(jù)類型,(1)布爾代數(shù)(Boolean)型 ; (2)位(Bit); (3)位數(shù)組類型(Bit_Vector),在std庫的standard 程序包中進行定義。,type BIT_VECTOR is array (NATURAL range ) of BIT;,type BIT is (0, 1);,type BOOLEAN is (FALSE, TRUE) ;,(4)標準邏輯型(Std_Logic); Type STD_LOGIC is (U, -Uninialized;未初始化 X, -Forcing unknown;浮接不定 0, - Forcing 0;低電位 1, - Forcing 1;高電位 Z, - High Impedance;高阻抗 W, - Weak Unknown;弱浮接 L, - Weak 0;弱低電位 H, - Weak 1;弱高電位 -, - Dont care;不必理會 ); (5)標準邏輯數(shù)組類型(Std_Logic_vector);,在ieee庫的std_logic_1164程序包中定義。,TYPE std_logic_vector IS ARRAY ( NATURAL RANGE ) OF std_logic;,2-1-2 數(shù)值數(shù)據(jù)類型,(1)整數(shù)(Integer); a. 正整數(shù)(POSITIVE) b. 自然數(shù)(NATURAL),在std庫的standard 程序包中進行定義。,subtype POSITIVE is range 1 to INTEGERHigh;,Type INTEGER is range 2147483648 to 2147483647;,subtype NATURAL is range 0 to INTEGERHigh;,(2)實數(shù)(Real) (3)有符號數(shù)(Signed) 無符號數(shù)(Unsigned),在ieee庫的std_logic_arith程序包中定義。,type REAL is range 1.7E38 to 1.7E38;,type UNSIGNED is array (NATURAL range ) of STD_LOGIC; type SIGNED is array (NATURAL range ) of STD_LOGIC;,SIGNED 的最高位為符號位,其余位為數(shù)值位,數(shù)值位為補碼形式。如:符號數(shù)”1001”表示-7。,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity data is port(a,b: in unsigned(3 downto 0); -a,b: in signed(3 downto 0); c: out std_logic); end data; architecture m1 of data is begin c<=1 when a<b else 0; end m1;,當定義成無符號類型時,若a<=”1000”,b=0001, 即a=8,b=1則結(jié)果c=0; 當定義成有符號類型時,若a<=”1000”,b=0001, 則a=-8,b=1,則結(jié)果c=1。,2-1-3 列舉和數(shù)組數(shù)據(jù)類型,(1)列舉數(shù)據(jù)類型(Enumerated Types) 定義格式: Type 列舉名稱 is (元素1,元素2,); (2)數(shù)組數(shù)據(jù)類型(Array Types) 定義格式: Type 數(shù)組名稱 is Array(range ) of 數(shù)據(jù)類型;,2-1-4 數(shù)據(jù)類型的轉(zhuǎn)換,在VHDL語言里,不同類型的數(shù)據(jù)信號之間不能互相賦值。當需要不同類型數(shù)據(jù)之間傳遞信息時,就需要類型轉(zhuǎn)換函數(shù)將其中的一種類型數(shù)據(jù)轉(zhuǎn)換為另一中數(shù)據(jù)類型后,再進行信號的傳遞。 例如:Signal Y : Std_logic_vector(7 downto 0); Signal X : Integer range 0 to 255; Y<= CONV_STD_LOGIC_VECTOR(X,8); 轉(zhuǎn)換函數(shù)有兩個參數(shù),被轉(zhuǎn)換的對象和轉(zhuǎn)換后的位數(shù)。,常用的數(shù)據(jù)類型轉(zhuǎn)換函數(shù),CONV_INTEGER 將數(shù)據(jù)類型 UNSIGNED, SIGNED轉(zhuǎn)換為INTEGER 類型. CONV_UNSIGNED 將數(shù)據(jù)類型INTEGER, SIGNED轉(zhuǎn)換為UNSIGNED 類型. CONV_SIGNED 將數(shù)據(jù)類型INTEGER, UNSIGNED轉(zhuǎn)換為SIGNED類型. CONV_STD_LOGIC_VECTOR 將數(shù)據(jù)類型INTEGER, UNSIGNED, SIGNED, STD_LOGIC轉(zhuǎn)換為STD_LOGIC_VECTOR 類型.,在庫ieee的程序包 std_logic_arith中定義,2-2 數(shù)據(jù)對象的定義,常用的數(shù)據(jù)對象有三種: 常數(shù)(Constant) 信號(Signal) 變量(Variable),2-2-1 常數(shù)的定義,(1)將數(shù)據(jù)對象定義為常數(shù),一方面希望該數(shù)據(jù)對象的值不會被改變;另一方面,為了提高程序的可讀性。 (2)常數(shù)為全局量。 (3)常數(shù)在程序包說明、實體說明、結(jié)構(gòu)體描述、過程說明、函數(shù)調(diào)用中使用。 (4)常數(shù)的定義格式: Constant 常數(shù)名:數(shù)據(jù)類型 :=常數(shù)值; 如:Constant D1: Integer := 3; 注意!常數(shù)定義的同時進行賦初值。,常數(shù)的應用示例,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; -必需定義+ entity exam1 is port (ip : in std_logic_vector(3 downto 0); op : out std_logic_vector(3 downto 0); end exam1; architecture m1 of exam1 is constant num : integer := 6; begin op <= ip + num; end m1;,2-2-2 信號的定義,(1)“信號”數(shù)據(jù)對象,代表電路內(nèi)部信號或連接線路,其在元件之間起互連作用。,注意!信號定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。 建議信號對象定義后再進行賦值。,(2)信號為全局量。,(3)在實體說明、結(jié)構(gòu)體描述和程序包說明中使用。,(4)信號的定義格式: Signal 信號名:數(shù)據(jù)類型 ;,(5)信號賦值的語法格式為:信號名 <= 表達式; 如:Signal S1 : Std_logic_vector(3 Downto 0); S1 <= “0000”;,2-2-3 變量的定義,(1)“變量”數(shù)據(jù)對象,它用于對中間數(shù)據(jù)的臨時存儲,并不一定代表電路的某一組件。,注意!變量定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。 建議變量對象定義后再進行賦值。,(2)變量為局部量。,(3)僅限于進程(Process)或子程序中使用。,(4)變量的定義格式: Variable 變量名:數(shù)據(jù)類型 ;,(5)變量賦值的語法格式為:目標信號值:=表達式; 如:Variable S1 : Std_logic_vector(3 Downto 0); S1 := “0000”;,library ieee; use ieee.std_logic_1164.all; entity bcv is port (a,b,c : in std_logic; x,y : out std_logic); end bcv;,architecture m2 of bcv is begin process(a,b,c) variable d:std_logic; begin d:=a; x<=c xor d; d:=b; y<=c xor d; end process; end m2;,例一,結(jié)果:x<=c xor b, y<=c xor b,x<=c xor a, y<=c xor b,architecture m1 of bcv is signal d:std_logic; begin process(a,b,c) begin d<=a; -ignored x<=c xor d; d<=b; y<=c xor d; end process; end m1;,library ieee; use ieee.std_logic_1164.all; Entity cmp is port( cp,ip : in std_logic; -cp為時鐘脈沖 op,oq: out std_logic); -ip為輸入信號 end cmp; Architecture m1 of cmp is signal d:std_logic; begin process(cp) variable e:std_logic; begin if cpevent and cp=1 then d <= ip; op <= d; e := ip; oq <= e ; end if; end process; end m1;,例二 D觸發(fā)器,在進程中,信號賦值只有在過程結(jié)束時起作用,而變量賦值是立即進行的。,2-2-4 信號和變量的比較,(1)信號和變量的對應關系不同:信號代表電路內(nèi)部信號或連接線路;而變量則不是。,(2)信號和變量聲明的位置不同:信號聲明在子程序、進程的外部;而變量聲明在子程序、進程的內(nèi)部。,(3)信號為全局量,而變量只在定義它的域中才可見。因此,變量不能在兩個進程之間傳遞信息。,(4)在一個進程中多次為一個信號賦值時,只有最后一個值會起作用;而變量則不同,每次賦值都會改變它的值。,(5)賦值不同。在進程中,信號賦值只有在進程結(jié)束時起作用,而變量賦值是立即進行的。而且賦值符號不同:信號賦值為“<=”,變量賦值為“:=”。,Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all;,一位BCD碼的加法器,Entity bcdadder is Port( a,b : in std_logic_vector(3 downto 0); result : out std_logic_vector(4 downto 0); End bcdadder;,Architecture Na of bcdadder is constant adjnum : integer:=6; -常數(shù)定義 signal binadd : std_logic_vector(4 downto 0); -信號 Begin binadd9 then tmp:=adjnum; else tmp:=0; end if; result<= binadd+tmp; end process; End Na;,2-3 信號運算符,VHDL提供了四種類型運算符號: 邏輯運算符 關系運算符 算術運算符 連接運算符,VHDL運算符邏輯運算符,and 邏輯與or邏輯或nand與非nor 或非xor 異或xnor同或not 邏輯非,上述邏輯運算在庫ieee的程序包std_logic_1164中定義。,VHDL運算符關系運算符,=等于/=不等于大于=大于或等于 注:其中<=操作符也用于表示信號的賦值操作。 上述運算在庫ieee的程序包std_logic_arith中定義。,VHDL運算符算術運算符,+加-減*乘/除*乘方mod求模 rem求余 abs求絕對值 在庫ieee的程序包std_logic_arith中定義。,VHDL運算符連接運算符, Signal B : std_logic_vector(0 to 3); 則這兩個信號的屬性值分別為: Aleft=7; Aright=0; Alow=0; Ahigh=7; Alength=8; Bleft=0; Bright=3; Blow=0; Bhigh=3; Blength=4;,left表示數(shù)組的左邊界; right表示數(shù)組的右邊界; low表示數(shù)組的下邊界; high表示數(shù)組的上邊界; length表示數(shù)組的長度。,(2)event屬性: event屬性,它的值為布爾型,如果剛好有事件發(fā)生在該屬性所附著的信號上(即信號有變化),則其取值為Ture,否則為False。 利用此屬性可決定時鐘信號的變化情況,即時鐘是否發(fā)生。,2-4 數(shù)據(jù)對象屬性,(2)Event屬性: 例如:時鐘邊沿表示 signal clk : in std_logic;則clkevent and clk=1表示時鐘的上升沿。即時鐘變化了,且其值為1。 clkevent and clk=0表示時鐘的下降沿。即時鐘變化了,且其值為0。 此外,還可利用兩個函數(shù)來表示時鐘的邊沿。rising_edge(clk) 表示時鐘的上升沿falling_edge(clk) 表示時鐘的下降沿 這兩個函數(shù)分別在庫ieee的程序包Std_logic_1164中定義。,2-4 數(shù)據(jù)對象屬性,并行語句一般處于進程(PROCESS)的外部。所有并行語句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無關。 并行語句有三個特點: a. 所有語句的執(zhí)行是并行的; b. 每條語句的執(zhí)行和其所在的位置無關; c. 并行語句的輸出僅僅依賴于輸入,沒有其它的限制條件。,第三章 并行賦值語句,第三章 并行賦值語句,(1)直接賦值語句:<= 賦值運算符 (2)條件式信號設置語句:When-Else (3)選擇式信號設置語句:With-Select-When (4) Process(進程)語句 (5) Block(塊)語句 (6) 函數(shù)調(diào)用語句(后面章節(jié)講) (7) Component(元件)例化語句 (8)For-Generate語句 Generic的使用,(1)直接賦值語句:<=,直接賦值語句的格式:Signal_name0); 結(jié)果信號A的每一位的值都為0。 B0); 信號對象的位數(shù)很多時,采用others來賦值很方便。,<=示例,library ieee; use ieee.std_logic_1164.all; Entity test1 Is Port ( a, b : in std_logic; c, d : out std_logic); end test1; architecture test1_body of test1 is begin 同時執(zhí)行 d <= a or b; c <= a and b; end test1_body;,輸出僅僅依賴于輸入, 沒有其它的限制條件。,每條語句的執(zhí)行和 其所在的位置無關。,(2) When-Else條件式信號設置語句,它的語法格式為: label: Signal_name<= expression1 When logic_expression1 Else expression2 When logic_expression2 Else expressionn; 例如:f<=1 when x1=x2 else 0;,When-Else語句示例,Library ieee; Use ieee.std_logic_1164.all; Entity xor2 is Port(x,y : in std_logic; z : out std_logic); End xor2; Architecture a of xor2 is Begin z<= 1 when(x= 0 and y= 1 ) else 1 when(x= 1 and y= 0 ) else 0; End a;,(3) With-Select-When選擇式信號設置語句,label: With expression Select Signal_name<=expression When constant_value , expression When constant_value ;,With-Select-When示例,Library ieee; Use ieee.std_logic_1164.all; Entity xor2 is Port(x,y : in std_logic; z : out std_logic); End xor2; Architecture a of xor2 is signal tmp : std_logic_vector(1 downto 0); Begin tmp<=x,When-else和With-select-When語句的區(qū)別,(1)With-select-When語句中When后的constant_value必須是互不相同的; (2)而When-else語句中When后的logic_expression則不需要這樣的嚴格條件; (3)When-else語句中When后的logic_expression的優(yōu)先權次序為由先到后排列。,優(yōu)先編碼器示例,Library ieee; Use ieee.std_logic_1164.all; Entity priority is Port(r1,r2,r3 : in std_logic; f : out std_logic_vector(1 downto 0); End priority; Architecture a of priority is Begin f<= 01 when(r1= 1 ) else 10 when(r2= 1 ) else 11 when(r3= 1 ) else 00; End a;,If r1=1,f=”01”; If r2=1 and r1/=1,f=”10”; If r3=1 and r1/=1 and r2/=1, f=”11”; 如果三個輸入都為0,f=”00”。,(4) Process語句,(1)一個結(jié)構(gòu)體當中可以有多個Process 語句,Process 語句是同時執(zhí)行的并行語句。 (2)Process內(nèi)的語句卻是順序執(zhí)行的順序語句。 (3)多進程之間的信息通過信號對象來傳遞。 Process 語句的格式為: Process label: Process(Sensitivity list) Variable declarations Begin 順序語句; End Process Process label;,(4) Process語句,敏感表(Sensitivity list)包括進程的一些信號,當敏感表中的某個信號變化時進程才被激活,進程內(nèi)的順序語句被執(zhí)行。 當進程結(jié)束時,進程內(nèi)的輸出信號值被更新,進程進入等待(睡眠)狀態(tài),直到敏感表中的某一信號發(fā)生變化,進程被再次激活。 對于上述電路,我們同樣可以采用Process語句來進行描述。,Process語句示例,architecture m2 of exam1 is Signal tmp: std_logic; begin process begin tmp<=a and b; end process; d<=tmp; process begin e<= tmp or c ; end process; end m2;,(5) Block(塊)語句,當我們設計一個比較復雜的電路時,為了使設計簡單化,可以將其分為幾個部分分別進行設計,每個部分設計完成后,再將其組合成我們需要的電路。這種方法稱為模塊化設計方法。這樣,使得整個設計工作更加容易實現(xiàn),同時程序代碼的維護性、糾錯性都能得到提高。 采用模塊化設計時,當設計一個模塊時,我們就要用到Block語句。,語法格式: Block Label : Block 數(shù)據(jù)對象定義部分 Begin End Block;,(5) Block(塊)語句,library ieee; use ieee.std_logic_1164.all; entity exam1 is port (a,b,c : in std_logic; d,e : out std_logic); end exam1; architecture m1 of exam1 is begin Block_1: Block Begin d<=a and b; end block; Block_2: Block Begin e<=(a and b) or c ; end block; end m1;,Block語句示例,Component(元件)例化語句,(1)Block語句可以使VHDL程序更加模塊化、功能化。但這樣的做法要求在同一程序中,若是重復使用時,必須重寫一次。 Block語句解決了這樣的重復編寫問題。 (2)元件也是完整的VHDL設計,作為底層設計,通過元件聲明,使之可在其他模塊中被調(diào)用。 (3)元件聲明可放在程序包中,也可在某個設計的結(jié)構(gòu)體中聲明。,語法格式: Component 元件名 Port (端口定義) ; -同元件實現(xiàn)時的實體的port部分 End Component; 元件例化指元件的調(diào)用,它的語法格式為: Label : 元件名 Port Map(端口映射);,Component(元件)例化語句,元件例化時端口映射或關聯(lián)有兩種方式: a.位置對應方式 直接由輸入信號和元件信號的對應位置進行映射。即: 元件標號:元件名 Port Map(信號A1, 信號B1,); b.名字直接對應 我們使用=映射符號進行輸入信號和元件信號之間的映射,那么位置可以不對應。即: 元件標號:元件名 Port Map(元件信號A=信號A1,元件信號B=信號B1,); 注意!元件標號是必需的。,Component例化語句,Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity fulladder is Port(Ci : in std_logic; a,b : in std_logic; s : out std_logic; Co : out std_logic); End fulladder; Architecture m1 of fulladder is Signal tmp: std_logic_vector(1 downto 0); Begin tmp<=(0 ,一位全加器,Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity adder is Port(Cin : in std_logic; x,y : in std_logic_vector(3 downto 0); sum : out std_logic_vector(3 downto 0); Cout : out std_logic); End adder;,四位加法器,Architecture a of adder is Signal c: std_logic_vector(0 to 4); Component fulladder Port(ci,a,b : in std_logic; s,co : out std_logic); end component; Begin c(0)c(0),a=x(0),b=y(0), s=sum(0),co=c(1); U2: fulladder Port map(c(1),x(1),y(1),sum(1),c(2); U3: fulladder Port map(c(2),x(2),y(2),sum(2),c(3); U4: fulladder Port map(c(3),x(3),y(3),sum(3),c(4); Cout<=c(4); End a;,Component例化示例,For-Generate語句,For-Generate語句用于生成一組信號賦值或元件例化語句。 語法格式: generate_label: -必須的 for index_variable In range generate statement; statement; end generate;,則上面的四位加法器可以這樣來實現(xiàn): 其它相同,上面四條賦值語句可以這樣來代替: Generate_label: For i In 0 to 3 Generate Bitadder: fulladder Port map(c(i),x(i),y(i),sum(i),c(i+1); End generate;,For-Generate語句,Generic語句,通過引入一個參數(shù)n使得我們設計的加法器更加具有通用性,參數(shù)n代表加法器中相加的位數(shù),在VHDL中,這樣的參數(shù)稱為Generic(類屬)。 通常定義在實體描述和元件聲明中。 定義格式: Generic(參數(shù)名 : 數(shù)據(jù)類型 := 表達式 ); 例如:Generic( m : integer:=7);,Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity adder is Generic(n:integer:=4); Port(Cin : in std_logic; x,y : in std_logic_vector(n-1 downto 0); sum : out std_logic_vector(n-1 downto 0); Cout : out std_logic); End adder;,Generic語句示例N位全加器,Architecture a of adder is Signal c: std_logic_vector(0 to n); Component fulladder Port(ci,a,b : in std_logic; s,co : out std_logic); End component; Begin c(0)<=cin; Generate_label: For i In 0 to n-1 Generate Bitadder: fulladder Port map(c(i),x(i),y(i),sum(i),c(i+1); End generate; Cout<=c(n); End a;,Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity nadder is Port(Cin1 : in std_logic; x1,y1 : in std_logic_vector(7 downto 0); Sum1 : out std_logic_vector(7 downto 0); Cout1 : out std_logic); End nadder;,帶Generic的元件例化N位全加器,Architecture a of nadder is Component adder Generic(n:integer); -也可在此進行影射Generic(n:integer:=8); Port(cin : in std_logic; x,y : in std_logic_vector(n-1 downto 0); sum : out std_logic_vector(n-1 downto 0); cout: out std_logic); end component; Begin Nadder: adder Generic map(n=8) Port map(cin1,x1,

注意事項

本文(VHDL與數(shù)字電路設計.ppt)為本站會員(xt****7)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!