VHDL與數(shù)字電路設(shè)計(jì)(專業(yè)技術(shù))課件_第1頁(yè)
VHDL與數(shù)字電路設(shè)計(jì)(專業(yè)技術(shù))課件_第2頁(yè)
VHDL與數(shù)字電路設(shè)計(jì)(專業(yè)技術(shù))課件_第3頁(yè)
VHDL與數(shù)字電路設(shè)計(jì)(專業(yè)技術(shù))課件_第4頁(yè)
VHDL與數(shù)字電路設(shè)計(jì)(專業(yè)技術(shù))課件_第5頁(yè)
已閱讀5頁(yè),還剩607頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VHDL與數(shù)字電路設(shè)計(jì)主講:崔

北京工業(yè)大學(xué)電控學(xué)院電工電子中心2005年9月11高級(jí)教學(xué)VHDL與數(shù)字電路設(shè)計(jì)主講:崔剛1高級(jí)教學(xué)目錄

概述第一章

VHDL的程序結(jié)構(gòu)和軟件操作

第二章

數(shù)據(jù)類型與數(shù)據(jù)對(duì)象的定義第三章

并行賦值語(yǔ)句第四章順序賦值語(yǔ)句第五章組合邏輯電路的設(shè)計(jì)第六章時(shí)序邏輯電路的設(shè)計(jì)第七章子程序、庫(kù)和程序包第八章CPLD和FPGA的結(jié)構(gòu)與工作原理第九章數(shù)字鐘電路的設(shè)計(jì)

2高級(jí)教學(xué)目錄概述2高級(jí)教學(xué)本節(jié)主要內(nèi)容傳統(tǒng)數(shù)字電路設(shè)計(jì)方法EDA設(shè)計(jì)方法PLD器件

PLD器件設(shè)計(jì)流程文本設(shè)計(jì)輸入—VHDL程序設(shè)計(jì)3高級(jí)教學(xué)本節(jié)主要內(nèi)容傳統(tǒng)數(shù)字電路設(shè)計(jì)方法3高級(jí)教學(xué)數(shù)字電子技術(shù)的基本知識(shí)回顧組合邏輯電路

編碼器、譯碼器、數(shù)據(jù)選擇器、加法器、數(shù)值比較器等時(shí)序邏輯電路同步時(shí)序邏輯電路異步時(shí)序邏輯電路寄存器、移位寄存器、計(jì)數(shù)器、序列信號(hào)發(fā)生器4高級(jí)教學(xué)數(shù)字電子技術(shù)的基本知識(shí)回顧組合邏輯電路4高級(jí)教學(xué)一、傳統(tǒng)設(shè)計(jì)方法(1)首先確定可用的元器件;(2)根據(jù)這些器件進(jìn)行邏輯設(shè)計(jì),完成各模塊;(3)將各模塊進(jìn)行連接,最后形成系統(tǒng);(4)而后經(jīng)調(diào)試、測(cè)量觀察整個(gè)系統(tǒng)是否達(dá)到規(guī)定的性能指標(biāo)。傳統(tǒng)的設(shè)計(jì)方法是基于中小規(guī)模集成電路器件進(jìn)行設(shè)計(jì)(如74系列及其改進(jìn)系列、CC4000系列、74HC系列等都屬于通用型數(shù)字集成電路),而且是采用自底向上進(jìn)行設(shè)計(jì):5高級(jí)教學(xué)一、傳統(tǒng)設(shè)計(jì)方法(1)首先確定可用的元器件;傳統(tǒng)的設(shè)計(jì)方法是EDA(ElectronicsDesignAutomation)即電子設(shè)計(jì)自動(dòng)化技術(shù),是利用計(jì)算機(jī)工作平臺(tái),從事電子系統(tǒng)和電路設(shè)計(jì)的一項(xiàng)技術(shù)。EDA技術(shù)為電子系統(tǒng)設(shè)計(jì)帶來(lái)了這樣的變化:(1)設(shè)計(jì)效率提高,設(shè)計(jì)周期縮短;(2)設(shè)計(jì)質(zhì)量提高;(3)設(shè)計(jì)成本降低;(4)能更充分地發(fā)揮設(shè)計(jì)人員的創(chuàng)造性;(5)設(shè)計(jì)成果的重用性大大提高,省去了不必要的重復(fù)勞動(dòng)。二、EDA設(shè)計(jì)方法

6高級(jí)教學(xué)EDA(ElectronicsDesignAutomat自頂向下的設(shè)計(jì)方法數(shù)字電路的EDA設(shè)計(jì)是基于PLD進(jìn)行設(shè)計(jì)的,支持自頂向下的設(shè)計(jì)方法:(1)首先從系統(tǒng)設(shè)計(jì)入手,在頂層進(jìn)行功能劃分和結(jié)構(gòu)設(shè)計(jì);(2)然后再逐級(jí)設(shè)計(jì)底層的結(jié)構(gòu);(3)并在系統(tǒng)級(jí)采用仿真手段驗(yàn)證設(shè)計(jì)的正確性;(4)最后完成整個(gè)系統(tǒng)的設(shè)計(jì),實(shí)現(xiàn)從設(shè)計(jì)、仿真、測(cè)試一體化。7高級(jí)教學(xué)自頂向下的設(shè)計(jì)方法數(shù)字電路的EDA設(shè)計(jì)是基于PLD進(jìn)行設(shè)計(jì)的傳統(tǒng)設(shè)計(jì)方法vsEDA設(shè)計(jì)方法

傳統(tǒng)設(shè)計(jì)方法EDA設(shè)計(jì)方法自底向上手動(dòng)設(shè)計(jì)軟硬件分離原理圖設(shè)計(jì)方式系統(tǒng)功能固定不易仿真難測(cè)試修改模塊難移植共享設(shè)計(jì)周期長(zhǎng)自頂向上自動(dòng)設(shè)計(jì)打破軟硬件屏障原理圖、HDL等設(shè)計(jì)方式系統(tǒng)功能易改易仿真易測(cè)試修改模塊可移植共享設(shè)計(jì)周期短8高級(jí)教學(xué)傳統(tǒng)設(shè)計(jì)方法vsEDA設(shè)計(jì)方法傳統(tǒng)設(shè)計(jì)方法EDA設(shè)計(jì)三、PLD器件(一)出現(xiàn)的背景

如果能把所設(shè)計(jì)的數(shù)字系統(tǒng)做成一片大規(guī)模集成電路,則不僅能減小電路的體積、重量、功耗,而且會(huì)使電路的可靠性大為提高。為某種專門用途而設(shè)計(jì)的集成電路叫做專用集成電路,即所謂的ASIC(ApplicationSpecificIntegratedCircuit的縮寫)。

在用量不大的情況下,設(shè)計(jì)和制造這樣的專用集成電路成本很高,而且設(shè)計(jì)、制造的周期也較長(zhǎng)。

可編程邏輯器件的研制成功為解決上述問(wèn)題提供了比較理想的途徑。

9高級(jí)教學(xué)三、PLD器件(一)出現(xiàn)的背景(二)PLD概述PLD是可編程邏輯器件(ProgrammableLogicDevice)的英文縮寫??删幊踢壿嬈骷且环N數(shù)字集成電路的半成品,在其芯片上按一定排列方式集成了大量的邏輯門和觸發(fā)器等基本邏輯元件。通過(guò)編程可以設(shè)置其邏輯功能。PLD編程:利用開(kāi)發(fā)工具對(duì)PLD進(jìn)行加工,即按設(shè)計(jì)要求將這些片內(nèi)的元件連接起來(lái),使之完成某個(gè)邏輯電路或系統(tǒng)的功能,成為一個(gè)專用集成電路(ASIC—ApplicationSpecificIntegratedCircuit)。

10高級(jí)教學(xué)(二)PLD概述PLD是可編程邏輯器件(ProgrammabPLD開(kāi)發(fā)系統(tǒng)PLD開(kāi)發(fā)系統(tǒng)包括硬件和軟件兩部分。硬件部分:計(jì)算機(jī)、下載電纜或編程器;軟件部分:集成開(kāi)發(fā)系統(tǒng)。

Altera公司:MaxplusⅡ、QuartusⅡXilinx公司:Foundation、ISELattice公司:SynarioSystem、ispEXPERTSystem11高級(jí)教學(xué)PLD開(kāi)發(fā)系統(tǒng)PLD開(kāi)發(fā)系統(tǒng)包括硬件和軟件兩部分。11高級(jí)教四、PLD設(shè)計(jì)流程設(shè)計(jì)準(zhǔn)備設(shè)計(jì)輸入設(shè)計(jì)處理器件編程功能仿真時(shí)序仿真器件測(cè)試12高級(jí)教學(xué)四、PLD設(shè)計(jì)流程設(shè)計(jì)準(zhǔn)備設(shè)計(jì)輸入設(shè)計(jì)處理器件編程功能仿真時(shí)PLD設(shè)計(jì)準(zhǔn)備在設(shè)計(jì)之前,首先要進(jìn)行方案論證和器件選擇等設(shè)計(jì)準(zhǔn)備工作。設(shè)計(jì)者首先要根據(jù)任務(wù)要求,判斷系統(tǒng)的可行性。系統(tǒng)的可行性要受到邏輯要求合理性、成本、開(kāi)發(fā)條件、器件供應(yīng)等方面的約束。若系統(tǒng)可行,則根據(jù)系統(tǒng)所完成的功能及復(fù)雜程度,對(duì)器件本身的資源和成本、工作速度及連線的可布性等方面進(jìn)行權(quán)衡,選擇合適的設(shè)計(jì)方案和合適的器件類型。13高級(jí)教學(xué)PLD設(shè)計(jì)準(zhǔn)備在設(shè)計(jì)之前,首先要進(jìn)行方案論證和器件選擇等設(shè)計(jì)設(shè)計(jì)輸入

將所設(shè)計(jì)的電路的邏輯功能按照開(kāi)發(fā)系統(tǒng)要求的形式表達(dá)出來(lái)的過(guò)程稱為設(shè)計(jì)輸入。通常,設(shè)計(jì)輸入有如下三種方式:(1)原理圖輸入方式適用于對(duì)系統(tǒng)及各部分電路很熟悉的場(chǎng)合。(2)硬件描述語(yǔ)言輸入方式硬件描述語(yǔ)言是用文本方式描述設(shè)計(jì),硬件描述語(yǔ)言有ABEL、AHDL、VHDL、Verilog等,其中VHDL和Verilog已成為IEEE標(biāo)準(zhǔn)。(3)波形輸入方式14高級(jí)教學(xué)設(shè)計(jì)輸入將所設(shè)計(jì)的電路的邏輯功能按照開(kāi)發(fā)系統(tǒng)要求的形設(shè)計(jì)處理邏輯優(yōu)化把邏輯描述轉(zhuǎn)變?yōu)樽钸m合在器件中實(shí)現(xiàn)的形式,優(yōu)化使設(shè)計(jì)所占用的資源最少。邏輯綜合根據(jù)設(shè)計(jì)描述,對(duì)給定的硬件結(jié)構(gòu)組件,最終獲得門級(jí)電路甚至更底層的電路描述文件,即將多個(gè)模塊化設(shè)計(jì)文件合并為一個(gè)網(wǎng)表文件。適配確定優(yōu)化后的邏輯能否與器件中的宏單元和I/O單元適配。分割將大的設(shè)計(jì)分割為多個(gè)便于器件內(nèi)部資源實(shí)現(xiàn)的邏輯小塊的形式。15高級(jí)教學(xué)設(shè)計(jì)處理邏輯優(yōu)化15高級(jí)教學(xué)設(shè)計(jì)校驗(yàn)設(shè)計(jì)校驗(yàn)過(guò)程包括功能仿真和時(shí)序仿真。

功能仿真時(shí)序仿真16高級(jí)教學(xué)設(shè)計(jì)校驗(yàn)設(shè)計(jì)校驗(yàn)過(guò)程包括功能仿真和時(shí)序仿真。16高級(jí)教學(xué)器件編程器件編程就是將開(kāi)發(fā)系統(tǒng)生成的目標(biāo)文件下載到可編程邏輯器件中,來(lái)定義內(nèi)部模塊的邏輯功能以及它們的相互連接關(guān)系。

兩種編程方式:編程器下載電纜17高級(jí)教學(xué)器件編程器件編程就是將開(kāi)發(fā)系統(tǒng)生成的目標(biāo)文件下載到可編程邏PLD開(kāi)發(fā)系統(tǒng)PLD開(kāi)發(fā)系統(tǒng)包括硬件和軟件兩部分。硬件部分:計(jì)算機(jī)、下載電纜或編程器;軟件部分:集成開(kāi)發(fā)系統(tǒng)。

Altera公司:MaxplusⅡ、QuartusⅡXilinx公司:Foundation、ISELattice公司:SynarioSystem、ispEXPERTSystem18高級(jí)教學(xué)PLD開(kāi)發(fā)系統(tǒng)PLD開(kāi)發(fā)系統(tǒng)包括硬件和軟件兩部分。18高級(jí)教設(shè)計(jì)舉例設(shè)計(jì)內(nèi)容:十進(jìn)制計(jì)數(shù)器電路設(shè)計(jì)。PLD器件:ACEX1K系列的EP1K30QC208。開(kāi)發(fā)系統(tǒng):MAX+plusⅡ系統(tǒng)。編程方式:下載電纜。實(shí)驗(yàn)下載板19高級(jí)教學(xué)設(shè)計(jì)舉例設(shè)計(jì)內(nèi)容:PLD器件:ACEX1K系列的EP1K30設(shè)計(jì)過(guò)程1、設(shè)計(jì)輸入VHDL演示12、邏輯驗(yàn)證演示23、設(shè)計(jì)處理引腳設(shè)定演示34、器件編程連接下載電纜演示420高級(jí)教學(xué)設(shè)計(jì)過(guò)程1、設(shè)計(jì)輸入VHDL演示120高級(jí)教學(xué)三、PLD電路設(shè)計(jì)的特點(diǎn)1、設(shè)計(jì)簡(jiǎn)單,方便;2、電路系統(tǒng)可以集成在一片芯片上;3、電路設(shè)計(jì)不依賴于器件進(jìn)行設(shè)計(jì);4、電路系統(tǒng)很容易完善和升級(jí)。器件選擇:(1)電路系統(tǒng)所完成的功能及復(fù)雜程度;(2)器件本身的資源和成本、性能參數(shù)、器件編程工藝等方面進(jìn)行權(quán)衡。21高級(jí)教學(xué)三、PLD電路設(shè)計(jì)的特點(diǎn)1、設(shè)計(jì)簡(jiǎn)單,方便;器件選擇:(1)

VHDL是非常高速集成電路硬件描述語(yǔ)言(VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage)的英文縮寫。五、文本設(shè)計(jì)輸入—VHDL程序設(shè)計(jì)語(yǔ)法和風(fēng)格:(1)類似與現(xiàn)代高級(jí)編程語(yǔ)言,如C語(yǔ)言。(2)VHDL描述的是硬件,它包含許多硬件特有的結(jié)構(gòu)。22高級(jí)教學(xué)VHDL是非常高速集成電路硬件描述語(yǔ)言(VeryHiVHDL設(shè)計(jì)VS電路圖設(shè)計(jì)VHDL與電路圖設(shè)計(jì)電路的方式不同,和電路圖設(shè)計(jì)方式相比:(1)易于修改;(2)設(shè)計(jì)能力更強(qiáng);(3)VHDL語(yǔ)言很方便:獨(dú)立于器件設(shè)計(jì);相同的程序代碼可以用于不同廠家生產(chǎn)的器件。

23高級(jí)教學(xué)VHDL設(shè)計(jì)VS電路圖設(shè)計(jì)VHDL與電路圖設(shè)計(jì)電路的方式VHDL程序的基本結(jié)構(gòu)include“stdio.h”;include“math.h”;intmain(void){inta,b,c;a=8;b=9;c=a+b;returnc;}Librarystd;Usestd.standard.all;Entityand2isPort(a,b:inbit;c:outbit);Endand2;Architecturea1ofand2isBeginc<=aandb;Enda1;VHDL程序C程序24高級(jí)教學(xué)VHDL程序的基本結(jié)構(gòu)include“stdio.h”;VHDL程序的基本結(jié)構(gòu)(1)LIBRARY和PACHAGE聲明區(qū);(2)ENTITY定義區(qū);(3)ARCHITECTURE定義區(qū);25高級(jí)教學(xué)VHDL程序的基本結(jié)構(gòu)(1)LIBRARY和PACHAGE聲Library(庫(kù))是用于存放預(yù)先編譯好的Package(程序包)。Package(程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,元件及子程序等。

作用:聲明在實(shí)體和結(jié)構(gòu)體定義中將用到的數(shù)據(jù)類型、元件或子程序等。聲明格式:

Library

庫(kù)名;

Use

庫(kù)名.PACKAGE名.All;(1)LIBRARY和PACKAGE聲明區(qū)26高級(jí)教學(xué)Library(庫(kù))是用于存放預(yù)先編譯好的Package(程

作用:ENTITY(實(shí)體)用于定義電路的外觀,即I/O端口的類型和數(shù)量。定義格式:Entity

實(shí)體名

is

Port(a:

inbit;

b:inbit;

c:outbit);End

實(shí)體名;(2)ENTITY定義區(qū)端口名數(shù)據(jù)類型端口模式27高級(jí)教學(xué)作用:ENTITY(實(shí)體)用于定義電路的外觀,即I/端口模式(MODE)有以下幾種類型:

IN;OUT;INOUT;BUFFER

端口模式可用下圖說(shuō)明:(黑框代表一個(gè)設(shè)計(jì)或模塊)

INOUTBUFFERINOUT(2)ENTITY定義區(qū)28高級(jí)教學(xué)端口模式(MODE)有以下幾種類型:(2)ENTITY定義區(qū)(3)ARCHITECTURE定義區(qū)

實(shí)體的實(shí)現(xiàn)。即說(shuō)明電路執(zhí)行什么動(dòng)作或?qū)崿F(xiàn)功能。定義格式:

Architecture結(jié)構(gòu)體名of實(shí)體名

is

[聲明語(yǔ)句;(內(nèi)部信號(hào)、變量、常數(shù),元件,子程序聲明)]Begin并行描述語(yǔ)句;End

結(jié)構(gòu)體名;29高級(jí)教學(xué)(3)ARCHITECTURE定義區(qū)實(shí)體的實(shí)現(xiàn)。即說(shuō)明電二輸入與門電路設(shè)計(jì)范例

abc電路真值表abc00010001011130高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例abc電路真值表abc0001000二輸入與門電路設(shè)計(jì)范例Librarystd;Usestd.standard.all;Entityand2is

Port(a:inbit;b:inbit;c:outbit);Endand2;--實(shí)體定義結(jié)束。

雙減號(hào)--為VHDL程序的注釋符,類似C語(yǔ)言中的//注釋符。31高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例Librarystd;雙減號(hào)--二輸入與門電路設(shè)計(jì)范例ArchitectureNaofand2isBegin

c<=’0’whena=’0’andb=‘0’else

’0’whena=’1’andb=‘0’else

’0’whena=’0’andb=‘1’else

‘1’;符號(hào)<=為信號(hào)直接賦值符。

EndNa;--結(jié)構(gòu)體NaArchitectureNbofand2is

Beginc<=aandb;--and

為邏輯與操作EndNb;

--結(jié)構(gòu)體Nb32高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例ArchitectureNaof第一章

VHDL的程序結(jié)構(gòu)和軟件操作

1-1VHDL程序的基本結(jié)構(gòu)1-2Max+plusⅡ的操作33高級(jí)教學(xué)第一章VHDL的程序結(jié)構(gòu)和軟件操作1-1VHDL程序的1-1VHDL程序的基本結(jié)構(gòu)include“stdio.h”;include“math.h”;intmain(void){inta,b,c;a=8;b=9;c=a+b;returnc;}Librarystd;Usestd.standard.all;Entityand2isPort(a,b:inbit;c:outbit);Endand2;Architecturea1ofand2isBeginc<=aandb;Enda1;VHDL程序C程序34高級(jí)教學(xué)1-1VHDL程序的基本結(jié)構(gòu)include“stdio.1-1VHDL程序的基本結(jié)構(gòu)(1)LIBRARY和PACHAGE聲明區(qū);(2)ENTITY定義區(qū);(3)ARCHITECTURE定義區(qū);(4)CONFIGURATION定義區(qū)。35高級(jí)教學(xué)1-1VHDL程序的基本結(jié)構(gòu)(1)LIBRARY和PACHLibrary(庫(kù))是用于存放預(yù)先編譯好的Package(程序包)。Package(程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,元件及子程序等。

作用:聲明在實(shí)體和結(jié)構(gòu)體定義中將用到的數(shù)據(jù)類型、元件或子程序等。聲明格式:

Library

庫(kù)名;

Use

庫(kù)名.PACKAGE名.All;(1)LIBRARY和PACKAGE聲明區(qū)36高級(jí)教學(xué)Library(庫(kù))是用于存放預(yù)先編譯好的Package(程

作用:ENTITY(實(shí)體)用于定義電路的外觀,即I/O端口的類型和數(shù)量。定義格式:Entity

實(shí)體名

is

Port(a:

inbit;

b:inbit;

c:outbit);End

實(shí)體名;(2)ENTITY定義區(qū)端口名數(shù)據(jù)類型端口模式37高級(jí)教學(xué)作用:ENTITY(實(shí)體)用于定義電路的外觀,即I/(2)ENTITY定義區(qū)標(biāo)識(shí)符的定義原則:(1)標(biāo)識(shí)符由字母、數(shù)字和下劃線組成,a7_;(2)在標(biāo)識(shí)符不區(qū)分大小寫,ab和AB是一樣的;(3)第一個(gè)字符必須是字母,即a666;(4)不允許有兩個(gè)連續(xù)的下劃線,a__b錯(cuò)誤;(5)末尾不能是下劃線,mname_錯(cuò)誤;(6)標(biāo)識(shí)符不能和關(guān)鍵字相同,如Entity,is等。38高級(jí)教學(xué)(2)ENTITY定義區(qū)標(biāo)識(shí)符的定義原則:38高級(jí)教學(xué)端口模式(MODE)有以下幾種類型:

IN;OUT;INOUT;BUFFER

端口模式可用下圖說(shuō)明:(黑框代表一個(gè)設(shè)計(jì)或模塊)

INOUTBUFFERINOUT(2)ENTITY定義區(qū)39高級(jí)教學(xué)端口模式(MODE)有以下幾種類型:(2)ENTITY定義區(qū)(3)ARCHITECTURE定義區(qū)

定義了實(shí)體的實(shí)現(xiàn)。即電路的具體描述,說(shuō)明電路執(zhí)行什么動(dòng)作或?qū)崿F(xiàn)功能。定義格式:

Architecture結(jié)構(gòu)體名of實(shí)體名

is

[聲明語(yǔ)句;(內(nèi)部信號(hào)、變量、常數(shù),元件,子程序聲明)]Begin并行描述語(yǔ)句;End

結(jié)構(gòu)體名;40高級(jí)教學(xué)(3)ARCHITECTURE定義區(qū)定義了實(shí)體的實(shí)現(xiàn)。即(4)CONFIGURATION定義區(qū)

一個(gè)完整VHDL電路設(shè)計(jì)必須有一個(gè)實(shí)體和對(duì)應(yīng)的結(jié)構(gòu)體,即實(shí)體和結(jié)構(gòu)體對(duì)構(gòu)成一個(gè)完整的VHDL設(shè)計(jì)。一個(gè)實(shí)體可對(duì)應(yīng)一個(gè)結(jié)構(gòu)體或多個(gè)結(jié)構(gòu)體,即一個(gè)實(shí)體可以有不同的描述方式。作用:當(dāng)實(shí)體有多個(gè)結(jié)構(gòu)體時(shí),系統(tǒng)默認(rèn)實(shí)體選用最后一個(gè)結(jié)構(gòu)體,利用CONFIGURATION語(yǔ)句可以任意選擇采用哪一個(gè)結(jié)構(gòu)體。

41高級(jí)教學(xué)(4)CONFIGURATION定義區(qū)(4)CONFIGURATION定義區(qū)定義格式:Configuration配置名

of實(shí)體名

isfor選用的結(jié)構(gòu)體名endfor;endconfiguration配置名;42高級(jí)教學(xué)(4)CONFIGURATION定義區(qū)定義格式:42高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例

abc電路真值表abc00010001011143高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例abc電路真值表abc0001000二輸入與門電路設(shè)計(jì)范例Librarystd;Usestd.standard.all;Entityand2is

Port(a:inbit;b:inbit;c:outbit);Endand2;--實(shí)體定義結(jié)束。

雙減號(hào)--為VHDL程序的注釋符,類似C語(yǔ)言中的//注釋符。44高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例Librarystd;雙減號(hào)--二輸入與門電路設(shè)計(jì)范例ArchitectureNaofand2isBegin

c<=’0’whena=’0’andb=‘0’else

’0’whena=’1’andb=‘0’else

’0’whena=’0’andb=‘1’else

‘1’;符號(hào)<=為信號(hào)直接賦值符。

EndNa;--結(jié)構(gòu)體NaArchitectureNbofand2is

Beginc<=aandb;--and

為邏輯與操作EndNb;

--結(jié)構(gòu)體Nb45高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例ArchitectureNaof二輸入與門電路設(shè)計(jì)范例Configurations1ofand2isfornaendfor;endconfigurations1;--結(jié)構(gòu)體配置結(jié)束。46高級(jí)教學(xué)二輸入與門電路設(shè)計(jì)范例Configurations1of1-2Max+plusⅡ系統(tǒng)的操作

Max+plusⅡ開(kāi)發(fā)工具是美國(guó)Altera公司自行設(shè)計(jì)的一種軟件工具,其全稱為MultipleArrayMatrixandProgrammableLogicUserSystem。它具有原理圖輸入和文本輸入(采用硬件描述語(yǔ)言)兩種輸入手段,利用該工具所配備的編輯、編譯、仿真、時(shí)序分析、芯片編程等功能,將設(shè)計(jì)電路圖或電路描述程序變成基本的邏輯單元寫入到可編程的芯片中(如CPLD或FPGA芯片),作成ASIC芯片。它是EDA設(shè)計(jì)中不可缺少的一種工具。

47高級(jí)教學(xué)1-2Max+plusⅡ系統(tǒng)的操作Ma下面我們介紹利用Max+plusⅡ

系統(tǒng)如何實(shí)現(xiàn)如下操作:(1)如何編寫VHDL程序(使用TextEditor);(2)如何編譯VHDL程序(使用Compiler);(3)如何仿真驗(yàn)證VHDL程序(使用WaveformEditor,Simulator);(4)如何進(jìn)行芯片的時(shí)序分析(使用TimingAnalyzer);(5)如何安排芯片腳位(使用FloorplanEditor);(6)如何下載程序至芯片(使用Programmer)。1-2Max+plusⅡ系統(tǒng)的操作48高級(jí)教學(xué)下面我們介紹利用Max+plusⅡ系統(tǒng)如何實(shí)現(xiàn)如下操作:1(1)如何編寫VHDL程序a.打開(kāi)文本編輯器;File/new/Texteditorfileb.編寫VHDL程序;c.保存文件,<1>文件名和定義的實(shí)體名必須相同,<2>文件擴(kuò)展名為VHD,<3>文件存盤的目錄不應(yīng)是根目錄或桌面,建議存放在Max2work或Maxplus2目錄,或其子目錄。49高級(jí)教學(xué)(1)如何編寫VHDL程序a.打開(kāi)文本編輯器;File/(2)如何編譯VHDL程序a.打開(kāi)需要編譯的文件;b.設(shè)置工程到目前打開(kāi)的文件;

File/Project/SetProjecttoCurrentFile,c.打開(kāi)編譯器;點(diǎn)擊主菜單MAX+plusⅡ/Compiler選項(xiàng)。

d.選定VHDL源文件的版本

;Interfaces/VHDLNetlistReaderSettings…e.打開(kāi)編譯器進(jìn)行編譯。50高級(jí)教學(xué)(2)如何編譯VHDL程序a.打開(kāi)需要編譯的文件;50高(3)如何仿真驗(yàn)證VHDL程序a.打開(kāi)波形編輯器(WaveformEditor);b.確定仿真持續(xù)時(shí)間(File/EndTime);c.將輸入輸出端口名選入波形編輯器;d.編輯輸入信號(hào)波形;e.保存仿真波形文件

;f.打開(kāi)仿真器MAX+plusⅡ\Simulator進(jìn)行仿真。在仿真結(jié)束后打開(kāi)仿真波形文件(點(diǎn)擊右下角的OpenSCF按鈕)即可以顯示仿真結(jié)果。51高級(jí)教學(xué)(3)如何仿真驗(yàn)證VHDL程序a.打開(kāi)波形編輯器(Wav(4)如何進(jìn)行芯片的時(shí)序分析a.選擇要下載的器件型號(hào);點(diǎn)擊主菜單的Assign/Device項(xiàng)得到Device對(duì)話框。在DeviceFamily框中選擇芯片系列,在Devices選擇框下選擇具體的芯片名,最后點(diǎn)擊OK按鈕。b.再編譯一次;c.打開(kāi)時(shí)序分析器(TimingAnalyzer);d.點(diǎn)擊Start進(jìn)行時(shí)序分析。52高級(jí)教學(xué)(4)如何進(jìn)行芯片的時(shí)序分析a.選擇要下載的器件型號(hào);(5)如何安排芯片腳位a.打開(kāi)芯片腳位設(shè)置窗口;點(diǎn)擊主菜單Assign/Pin/Location/Chip,出現(xiàn)腳位設(shè)置對(duì)話框;;b.將實(shí)體定義的端口名字和下載芯片的管腳進(jìn)行具體對(duì)應(yīng);在NodeName框中輸入我們定義的實(shí)體端口名字,然后在Pin列表選項(xiàng)框中輸入下載芯片的管腳序號(hào),再點(diǎn)擊對(duì)話框右下角的Add按鈕,將所有端口設(shè)置完成以后,點(diǎn)擊Ok按鈕,則實(shí)現(xiàn)實(shí)體端口和下載芯片的管腳的對(duì)應(yīng);

c.再編譯一次,將生成可以下載的文件(And2.Sof)。53高級(jí)教學(xué)(5)如何安排芯片腳位a.打開(kāi)芯片腳位設(shè)置窗口;點(diǎn)擊主菜單A(6)如何下載程序至芯片a.將下載電纜與計(jì)算機(jī)并口相連,然后給芯片通電;b.打開(kāi)編程器Programmer

;

Options/HardwareSetup,在HardwareType選擇ByteBlaster(MV)方式,則在ParallelPort處顯示LPT1,單擊OK鈕返回Programmer窗口。

c.下載方式選擇;d.選擇下載的芯片類型和要下載的文件(選擇JTAG/MutiDevicJTAGChainSetup)。e.點(diǎn)擊Configure進(jìn)行下載,將程序?qū)懭胄酒小?4高級(jí)教學(xué)(6)如何下載程序至芯片a.將下載電纜與計(jì)算機(jī)并口相連,然第二章

數(shù)據(jù)類型與數(shù)據(jù)對(duì)象的定義2-1數(shù)據(jù)類型2-2數(shù)據(jù)對(duì)象的定義2-3信號(hào)運(yùn)算符2-4信號(hào)屬性55高級(jí)教學(xué)第二章數(shù)據(jù)類型與數(shù)據(jù)對(duì)象的定義2-1數(shù)據(jù)類型55高級(jí)教2-1數(shù)據(jù)類型在VHDL程序中,我們經(jīng)常會(huì)遇到這樣的語(yǔ)句:SignalA:std_logic;VariableB:std_logic_vector(7downto0);ConstantC:integer;數(shù)據(jù)對(duì)象類型數(shù)據(jù)類型數(shù)據(jù)對(duì)象名56高級(jí)教學(xué)2-1數(shù)據(jù)類型在VHDL程序中,我們經(jīng)常會(huì)遇到這樣的語(yǔ)句:

2-1-1邏輯數(shù)據(jù)類型

(1)布爾代數(shù)(Boolean)型;(2)位(Bit);(3)位數(shù)組類型(Bit_Vector)在std庫(kù)的standard程序包中進(jìn)行定義。typeBIT_VECTORisarray(NATURALrange<>)ofBIT;typeBITis(‘0’,‘1’);typeBOOLEANis(FALSE,TRUE);57高級(jí)教學(xué)

2-1-1邏輯數(shù)據(jù)類型(1)布爾代數(shù)(Boolean)

(4)標(biāo)準(zhǔn)邏輯型(Std_Logic);

TypeSTD_LOGICis(‘U’,

--Uninialized;未初始化

‘X’,

--Forcingunknown;浮接不定

‘0’,

--Forcing0;低電位

‘1’,

--Forcing1;高電位

‘Z’,

--HighImpedance;高阻抗

‘W’,

--WeakUnknown;弱浮接

‘L’,

--Weak0;弱低電位

‘H’,

--Weak1;弱高電位

‘-’,

--Don’tcare;不必理會(huì)

);(5)標(biāo)準(zhǔn)邏輯數(shù)組類型(Std_Logic_vector);在ieee庫(kù)的std_logic_1164程序包中定義。TYPEstd_logic_vectorISARRAY(NATURALRANGE<>)OFstd_logic;58高級(jí)教學(xué)(4)標(biāo)準(zhǔn)邏輯型(Std_Logic);在ieee庫(kù)的st

2-1-2數(shù)值數(shù)據(jù)類型(1)整數(shù)(Integer);

a.正整數(shù)(POSITIVE)

b.自然數(shù)(NATURAL)在std庫(kù)的standard程序包中進(jìn)行定義。subtypePOSITIVEisrange1toINTEGER’High;TypeINTEGERisrange–2147483648to2147483647;subtypeNATURALisrange0toINTEGER’High;59高級(jí)教學(xué)

2-1-2數(shù)值數(shù)據(jù)類型(1)整數(shù)(Integer);在s(2)實(shí)數(shù)(Real)(3)有符號(hào)數(shù)(Signed)無(wú)符號(hào)數(shù)(Unsigned)在ieee庫(kù)的std_logic_arith程序包中定義。typeREALisrange–1.7E38to1.7E38;typeUNSIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;typeSIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;SIGNED

的最高位為符號(hào)位,其余位為數(shù)值位,數(shù)值位為補(bǔ)碼形式。如:符號(hào)數(shù)”1001”表示-7。60高級(jí)教學(xué)(2)實(shí)數(shù)(Real)在ieee庫(kù)的std_logic_arlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;entitydataisport(a,b:inunsigned(3downto0);--a,b:insigned(3downto0);c:outstd_logic);enddata;architecturem1ofdataisbeginc<='1'whena<belse'0';endm1;當(dāng)定義成無(wú)符號(hào)類型時(shí),若a<=”1000”,b=’0001’,即a=8,b=1則結(jié)果c=’0’;當(dāng)定義成有符號(hào)類型時(shí),若a<=”1000”,b=’0001’,則a=-8,b=1,則結(jié)果c=’1’。61高級(jí)教學(xué)libraryieee;當(dāng)定義成無(wú)符號(hào)類型時(shí),若a<=”1

2-1-3列舉和數(shù)組數(shù)據(jù)類型

(1)列舉數(shù)據(jù)類型(EnumeratedTypes)定義格式:Type列舉名稱is(元素1,元素2,…);(2)數(shù)組數(shù)據(jù)類型(ArrayTypes)定義格式:Type數(shù)組名稱isArray(range<>)of數(shù)據(jù)類型;62高級(jí)教學(xué)

2-1-3列舉和數(shù)組數(shù)據(jù)類型(1)列舉數(shù)據(jù)類型(E2-1-4數(shù)據(jù)類型的轉(zhuǎn)換

在VHDL語(yǔ)言里,不同類型的數(shù)據(jù)信號(hào)之間不能互相賦值。當(dāng)需要不同類型數(shù)據(jù)之間傳遞信息時(shí),就需要類型轉(zhuǎn)換函數(shù)將其中的一種類型數(shù)據(jù)轉(zhuǎn)換為另一中數(shù)據(jù)類型后,再進(jìn)行信號(hào)的傳遞。例如:SignalY:Std_logic_vector(7downto0);

SignalX:Integerrange0to255;Y<=CONV_STD_LOGIC_VECTOR(X,8);轉(zhuǎn)換函數(shù)有兩個(gè)參數(shù),被轉(zhuǎn)換的對(duì)象和轉(zhuǎn)換后的位數(shù)。

63高級(jí)教學(xué)2-1-4數(shù)據(jù)類型的轉(zhuǎn)換在VHDL常用的數(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類型.在庫(kù)ieee的程序包std_logic_arith中定義64高級(jí)教學(xué)常用的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)CONV_INTEGER在庫(kù)ieee的2-2

數(shù)據(jù)對(duì)象的定義常用的數(shù)據(jù)對(duì)象有三種:常數(shù)(Constant)信號(hào)(Signal)變量(Variable)

65高級(jí)教學(xué)2-2數(shù)據(jù)對(duì)象的定義常用的數(shù)據(jù)對(duì)象有三種:65高級(jí)教學(xué)2-2-1常數(shù)的定義(1)將數(shù)據(jù)對(duì)象定義為常數(shù),一方面希望該數(shù)據(jù)對(duì)象的值不會(huì)被改變;另一方面,為了提高程序的可讀性。(2)常數(shù)為全局量。(3)常數(shù)在程序包說(shuō)明、實(shí)體說(shuō)明、結(jié)構(gòu)體描述、過(guò)程說(shuō)明、函數(shù)調(diào)用中使用。(4)常數(shù)的定義格式:

Constant

常數(shù)名:數(shù)據(jù)類型:=常數(shù)值;

如:ConstantD1:Integer:=3;注意!常數(shù)定義的同時(shí)進(jìn)行賦初值。66高級(jí)教學(xué)2-2-1常數(shù)的定義(1)將數(shù)據(jù)對(duì)象定義為常數(shù),一方面希常數(shù)的應(yīng)用示例libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;--必需定義+entityexam1is

port(ip:instd_logic_vector(3downto0);op:outstd_logic_vector(3downto0));endexam1;architecturem1ofexam1isconstantnum:integer:=6;beginop<=ip+num;endm1;67高級(jí)教學(xué)常數(shù)的應(yīng)用示例libraryieee;67高級(jí)教學(xué)2-2-2信號(hào)的定義(1)“信號(hào)”數(shù)據(jù)對(duì)象,代表電路內(nèi)部信號(hào)或連接線路,其在元件之間起互連作用。注意!信號(hào)定義的時(shí)候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議信號(hào)對(duì)象定義后再進(jìn)行賦值。(2)信號(hào)為全局量。(3)在實(shí)體說(shuō)明、結(jié)構(gòu)體描述和程序包說(shuō)明中使用。(4)信號(hào)的定義格式:Signal信號(hào)名:數(shù)據(jù)類型;(5)信號(hào)賦值的語(yǔ)法格式為:信號(hào)名<=表達(dá)式;如:SignalS1:Std_logic_vector(3Downto0);S1<=“0000”;68高級(jí)教學(xué)2-2-2信號(hào)的定義(1)“信號(hào)”數(shù)據(jù)對(duì)象,代表電路內(nèi)部2-2-3變量的定義(1)“變量”數(shù)據(jù)對(duì)象,它用于對(duì)中間數(shù)據(jù)的臨時(shí)存儲(chǔ),并不一定代表電路的某一組件。注意!變量定義的時(shí)候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議變量對(duì)象定義后再進(jìn)行賦值。(2)變量為局部量。(3)僅限于進(jìn)程(Process)或子程序中使用。(4)變量的定義格式:Variable變量名:數(shù)據(jù)類型;

(5)變量賦值的語(yǔ)法格式為:目標(biāo)信號(hào)值:=表達(dá)式;如:VariableS1:Std_logic_vector(3Downto0);S1:=“0000”;69高級(jí)教學(xué)2-2-3變量的定義(1)“變量”數(shù)據(jù)對(duì)象,它用于對(duì)中間libraryieee;useieee.std_logic_1164.all;entitybcvisport(a,b,c:instd_logic;x,y:outstd_logic);endbcv;architecturem2ofbcvisbeginprocess(a,b,c)variabled:std_logic;begin

d:=a;x<=cxord;

d:=b;y<=cxord;endprocess;endm2;ABCXY例一結(jié)果:x<=cxorb,y<=cxorbx<=cxora,y<=cxorbarchitecturem1ofbcvissignald:std_logic;beginprocess(a,b,c)begin

d<=a;

--ignoredx<=cxord;

d<=b;y<=cxord;endprocess;endm1;70高級(jí)教學(xué)libraryieee;architecturem2olibraryieee;useieee.std_logic_1164.all;Entitycmpisport(cp,ip:instd_logic;--cp為時(shí)鐘脈沖

op,oq:outstd_logic);--ip為輸入信號(hào)endcmp;Architecturem1ofcmpissignald:std_logic;beginprocess(cp)variablee:std_logic;beginifcp'eventandcp='1'thend<=ip;op<=d;e:=ip;oq<=e;endif;endprocess;endm1;例二D觸發(fā)器在進(jìn)程中,信號(hào)賦值只有在過(guò)程結(jié)束時(shí)起作用,而變量賦值是立即進(jìn)行的。71高級(jí)教學(xué)libraryieee;例二D觸發(fā)器在進(jìn)程中,信號(hào)賦2-2-4信號(hào)和變量的比較

(1)信號(hào)和變量的對(duì)應(yīng)關(guān)系不同:信號(hào)代表電路內(nèi)部信號(hào)或連接線路;而變量則不是。

(2)信號(hào)和變量聲明的位置不同:信號(hào)聲明在子程序、進(jìn)程的外部;而變量聲明在子程序、進(jìn)程的內(nèi)部。

(3)信號(hào)為全局量,而變量只在定義它的域中才可見(jiàn)。因此,變量不能在兩個(gè)進(jìn)程之間傳遞信息。

(4)在一個(gè)進(jìn)程中多次為一個(gè)信號(hào)賦值時(shí),只有最后一個(gè)值會(huì)起作用;而變量則不同,每次賦值都會(huì)改變它的值。(5)賦值不同。在進(jìn)程中,信號(hào)賦值只有在進(jìn)程結(jié)束時(shí)起作用,而變量賦值是立即進(jìn)行的。而且賦值符號(hào)不同:信號(hào)賦值為“<=”,變量賦值為“:=”。72高級(jí)教學(xué)2-2-4信號(hào)和變量的比較(1)信號(hào)和變量的對(duì)應(yīng)關(guān)系Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;一位BCD碼的加法器Entitybcdadderis

Port(a,b:instd_logic_vector(3downto0);result:outstd_logic_vector(4downto0));Endbcdadder;ArchitectureNaofbcdadderis

constantadjnum:integer:=6;--常數(shù)定義signalbinadd:std_logic_vector(4downto0);--信號(hào)

Beginbinadd<=a+b;--兩數(shù)相加process(binadd)--對(duì)兩數(shù)和進(jìn)行處理variabletmp:integerrange0to6;--變量定義beginifbinadd>9thentmp:=adjnum;elsetmp:=0;endif;result<=binadd+tmp;endprocess;EndNa;73高級(jí)教學(xué)Libraryieee;一位BCD碼的加法器Entit

2-3信號(hào)運(yùn)算符

VHDL提供了四種類型運(yùn)算符號(hào):邏輯運(yùn)算符關(guān)系運(yùn)算符算術(shù)運(yùn)算符連接運(yùn)算符74高級(jí)教學(xué)

2-3信號(hào)運(yùn)算符VHDL提供了四種類型運(yùn)算符號(hào):74高VHDL運(yùn)算符——邏輯運(yùn)算符

and

邏輯與

or

邏輯或

nand

與非

nor

或非

xor

異或

xnor 同或

not

邏輯非上述邏輯運(yùn)算在庫(kù)ieee的程序包std_logic_1164中定義。

75高級(jí)教學(xué)VHDL運(yùn)算符——邏輯運(yùn)算符andVHDL運(yùn)算符——關(guān)系運(yùn)算符

= 等于

/= 不等于

< 小于

<= 小于或等于

> 大于

>= 大于或等于

注:其中‘<=’操作符也用于表示信號(hào)的賦值操作。上述運(yùn)算在庫(kù)ieee的程序包std_logic_arith中定義。76高級(jí)教學(xué)VHDL運(yùn)算符——關(guān)系運(yùn)算符= 等于

/= 不等于VHDL運(yùn)算符——算術(shù)運(yùn)算符

+ 加

- 減

* 乘

/ 除

** 乘方

mod 求模

rem 求余

abs 求絕對(duì)值

在庫(kù)ieee的程序包std_logic_arith中定義。

77高級(jí)教學(xué)VHDL運(yùn)算符——算術(shù)運(yùn)算符+ 加

VHDL運(yùn)算符——連接運(yùn)算符

&

連接符,將兩個(gè)數(shù)據(jù)對(duì)象或矢量連接成維數(shù)更大的矢量,它可給代碼書寫帶來(lái)方便。例如:vabc=a&b&c;如果a=‘1’,b=‘0’,c=‘1’,則

vabc=“101”。78高級(jí)教學(xué)VHDL運(yùn)算符——連接運(yùn)算符& 連接符,將兩個(gè)數(shù)據(jù)(1)數(shù)值類屬性:(數(shù)組類型的數(shù)據(jù)對(duì)象)數(shù)值類屬性有‘left,‘right,‘low,‘high,‘length。其中用符號(hào)“‘”隔開(kāi)對(duì)象名及其屬性。

left表示數(shù)組的左邊界;

right表示數(shù)組的右邊界;

low表示數(shù)組的下邊界;

high表示數(shù)組的上邊界;

length表示數(shù)組的長(zhǎng)度。2-4數(shù)據(jù)對(duì)象屬性79高級(jí)教學(xué)(1)數(shù)值類屬性:(數(shù)組類型的數(shù)據(jù)對(duì)象)2-4數(shù)據(jù)對(duì)象屬如:SignalA:std_logic_vector(7downto0);SignalB:std_logic_vector(0to3);則這兩個(gè)信號(hào)的屬性值分別為:

A’left=7;A’right=0;A’low=0;A’high=7;A’length=8;B’left=0;B’right=3;B’low=0;B’high=3;B’length=4;left表示數(shù)組的左邊界;

right表示數(shù)組的右邊界;

low表示數(shù)組的下邊界;

high表示數(shù)組的上邊界;

length表示數(shù)組的長(zhǎng)度。80高級(jí)教學(xué)如:SignalA:std_logic_vector((2)‘event屬性:‘event屬性,它的值為布爾型,如果剛好有事件發(fā)生在該屬性所附著的信號(hào)上(即信號(hào)有變化),則其取值為Ture,否則為False。利用此屬性可決定時(shí)鐘信號(hào)的變化情況,即時(shí)鐘是否發(fā)生。

2-4數(shù)據(jù)對(duì)象屬性81高級(jí)教學(xué)(2)‘event屬性:2-4數(shù)據(jù)對(duì)象屬性81高級(jí)教學(xué)(2)‘Event屬性:例如:時(shí)鐘邊沿表示

signalclk:in

std_logic;

則clk’event

andclk=’1’表示時(shí)鐘的上升沿。即時(shí)鐘變化了,且其值為1。

clk’eventandclk=’0’表示時(shí)鐘的下降沿。即時(shí)鐘變化了,且其值為0。此外,還可利用兩個(gè)函數(shù)來(lái)表示時(shí)鐘的邊沿。 rising_edge(clk)表示時(shí)鐘的上升沿

falling_edge(clk)表示時(shí)鐘的下降沿這兩個(gè)函數(shù)分別在庫(kù)ieee的程序包Std_logic_1164中定義。2-4數(shù)據(jù)對(duì)象屬性82高級(jí)教學(xué)(2)‘Event屬性:2-4數(shù)據(jù)對(duì)象屬性82高級(jí)教學(xué)

并行語(yǔ)句一般處于進(jìn)程(PROCESS)的外部。所有并行語(yǔ)句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無(wú)關(guān)。并行語(yǔ)句有三個(gè)特點(diǎn):a.所有語(yǔ)句的執(zhí)行是并行的;b.每條語(yǔ)句的執(zhí)行和其所在的位置無(wú)關(guān);c.并行語(yǔ)句的輸出僅僅依賴于輸入,沒(méi)有其它的限制條件。第三章

并行賦值語(yǔ)句

83高級(jí)教學(xué)并行語(yǔ)句一般處于進(jìn)程(PROCESS)的外第三章

并行賦值語(yǔ)句(1)直接賦值語(yǔ)句:<=賦值運(yùn)算符(2)條件式信號(hào)設(shè)置語(yǔ)句:When-Else(3)選擇式信號(hào)設(shè)置語(yǔ)句:With-Select-When(4)Process(進(jìn)程)語(yǔ)句(5)Block(塊)語(yǔ)句(6)函數(shù)調(diào)用語(yǔ)句(后面章節(jié)講)(7)Component(元件)例化語(yǔ)句(8)For-Generate語(yǔ)句Generic的使用84高級(jí)教學(xué)第三章并行賦值語(yǔ)句(1)直接賦值語(yǔ)句:<=賦值運(yùn)算符8(1)直接賦值語(yǔ)句:<=直接賦值語(yǔ)句的格式:Signal_name<=expression;如:SignalA,B:std_logic_vector(7downto0);A<=”0000000”;B<=”1000000”;我們也可以這樣賦值:A<=(others=>’0’);結(jié)果信號(hào)A的每一位的值都為0。B<=(‘1’,others=>’0’);信號(hào)對(duì)象的位數(shù)很多時(shí),采用others來(lái)賦值很方便。85高級(jí)教學(xué)(1)直接賦值語(yǔ)句:<=直接賦值語(yǔ)句的格式:Signal_n<=示例libraryieee;useieee.std_logic_1164.all;Entitytest1IsPort(a,b:instd_logic;c,d:outstd_logic);endtest1;architecturetest1_bodyoftest1isbegin

同時(shí)執(zhí)行d<=aorb;

c<=aandb;endtest1_body;輸出僅僅依賴于輸入,沒(méi)有其它的限制條件。

每條語(yǔ)句的執(zhí)行和其所在的位置無(wú)關(guān)。

ABCD86高級(jí)教學(xué)<=示例libraryieee;輸出僅僅依賴于輸入,每條語(yǔ)(2)When-Else條件式信號(hào)設(shè)置語(yǔ)句它的語(yǔ)法格式為:[label:]Signal_name<=expression1Whenlogic_expression1Else{expression2Whenlogic_expression2Else}expressionn;

例如:f<=’1’whenx1=x2else‘0’;87高級(jí)教學(xué)(2)When-Else條件式信號(hào)設(shè)置語(yǔ)句它的語(yǔ)法格式為:When-Else語(yǔ)句示例Libraryieee;Useieee.std_logic_1164.all;Entityxor2isPort(x,y:instd_logic;z:outstd_logic);Endxor2;Architectureaofxor2isBeginz<='1'when(x='0'andy='1')else'1'when(x='1'andy='0')else'0';Enda;ZXY88高級(jí)教學(xué)When-Else語(yǔ)句示例Libraryieee;ZXY8(3)With-Select-When選擇式信號(hào)設(shè)置語(yǔ)句[label:]WithexpressionSelectSignal_name<=expressionWhenconstant_value{,{expressionWhenconstant_value};89高級(jí)教學(xué)(3)With-Select-When選擇式信號(hào)設(shè)置語(yǔ)句[With-Select-When示例Libraryieee;Useieee.std_logic_1164.all;Entityxor2isPort(x,y:instd_logic;z:outstd_logic);Endxor2;Architectureaofxor2issignaltmp:std_logic_vector(1downto0);Begintmp<=x&y;WithtmpSelectz<=‘1’when“01”,--注意結(jié)束為“,”不是“;”'1'when"10",'0'whenothers;Enda;ZXY90高級(jí)教學(xué)With-Select-When示例LibraryieeeWhen-else和With-select-When語(yǔ)句的區(qū)別

(1)With-select-When語(yǔ)句中When后的constant_value必須是互不相同的;(2)而When-else語(yǔ)句中When后的logic_expression則不需要這樣的嚴(yán)格條件;(3)When-else語(yǔ)句中When后的logic_expression的優(yōu)先權(quán)次序?yàn)橛上鹊胶笈帕小?1高級(jí)教學(xué)When-else和With-select-When語(yǔ)句的區(qū)優(yōu)先編碼器示例Libraryieee;Useieee.std_logic_1164.all;EntitypriorityisPort(r1,r2,r3:instd_logic;f:outstd_logic_vector(1downto0));Endpriority;ArchitectureaofpriorityisBeginf<=‘01'when(r1='1')else'10'when(r2='1')else'11'when(r3='1')else'00';Enda;Ifr1=’1’,f=”01”;Ifr2=’1’andr1/=’1’,f=”10”;Ifr3=’1’andr1/=’1’andr2/=’1’,

f=”11”;如果三個(gè)輸入都為0,f=”00”。r1r3r2f92高級(jí)教學(xué)優(yōu)先編碼器示例Libraryieee;Ifr1=’1’,(4)Process語(yǔ)句(1)一個(gè)結(jié)構(gòu)體當(dāng)中可以有多個(gè)Process語(yǔ)句,Process語(yǔ)句是同時(shí)執(zhí)行的并行語(yǔ)句。(2)Process內(nèi)的語(yǔ)句卻是順序執(zhí)行的順序語(yǔ)句。(3)多進(jìn)程之間的信息通過(guò)信號(hào)對(duì)象來(lái)傳遞。Process語(yǔ)句的格式為:[Processlabel:]Process[(Sensitivitylist)][Variabledeclarations]Begin順序語(yǔ)句;EndProcess[Processlabel];

93高級(jí)教學(xué)(4)Process語(yǔ)句(1)一個(gè)結(jié)構(gòu)體當(dāng)中可以有多個(gè)Pr(4)Process語(yǔ)句

敏感表(Sensitivitylist)包括進(jìn)程的一些信號(hào),當(dāng)敏感表中的某個(gè)信號(hào)變化時(shí)進(jìn)程才被激活,進(jìn)程內(nèi)的順序語(yǔ)句被執(zhí)行。當(dāng)進(jìn)程結(jié)束時(shí),進(jìn)程內(nèi)的輸出信號(hào)值被更新,進(jìn)程進(jìn)入等待(睡眠)狀態(tài),直到敏感表中的某一信號(hào)發(fā)生變化,進(jìn)程被再次激活。對(duì)于上述電路,我們同樣可以采用Process語(yǔ)句來(lái)進(jìn)行描述。94高級(jí)教學(xué)(4)Process語(yǔ)句敏感表(SensiProcess語(yǔ)句示例architecturem2ofexam1isSignaltmp:std_logic;beginprocessbegintmp<=aandb;endprocess;d<=tmp;processbegine<=tmporc;endprocess;endm2;ABDCE95高級(jí)教學(xué)Process語(yǔ)句示例architecturem2of(5)Block(塊)語(yǔ)句

當(dāng)我們?cè)O(shè)計(jì)一個(gè)比較復(fù)雜的電路時(shí),為了使設(shè)計(jì)簡(jiǎn)單化,可以將其分為幾個(gè)部分分別進(jìn)行設(shè)計(jì),每個(gè)部分設(shè)計(jì)完成后,再將其組合成我們需要的電路。這種方法稱為模塊化設(shè)計(jì)方法。這樣,使得整個(gè)設(shè)計(jì)工作更加容易實(shí)現(xiàn),同時(shí)程序代碼的維護(hù)性、糾錯(cuò)性都能得到提高。采用模塊化設(shè)計(jì)時(shí),當(dāng)設(shè)計(jì)一個(gè)模塊時(shí),我們就要用到Block語(yǔ)句。96高級(jí)教學(xué)(5)Block(塊)語(yǔ)句當(dāng)我們?cè)O(shè)計(jì)一個(gè)比較復(fù)雜的電路時(shí)語(yǔ)法格式:BlockLabel:Block[數(shù)據(jù)對(duì)象定義部分]Begin<BlockStatementPart>EndBlock;(5)Block(塊)語(yǔ)句

97高級(jí)教學(xué)語(yǔ)法格式:(5)Block(塊)語(yǔ)句97高級(jí)教學(xué)libraryieee;useieee.std_logic_1164.all;entityexam1isport(a,b,c:instd_logic;d,e:outstd_logic);endexam1;architecturem1ofexam1isbeginBlock_1:BlockBegind<=aandb;endblock;Block_2:BlockBegine<=(aandb)orc;endblock;endm1;ABDCEBlock語(yǔ)句示例98高級(jí)教學(xué)libraryieee;ABDCEBlock語(yǔ)句示例98高Component(元件)例化語(yǔ)句

(1)Block語(yǔ)句可以使VHDL程序更加模塊化、功能化。但這樣的做法要求在同一程序中,若是重復(fù)使用時(shí),必須重寫一次。Block語(yǔ)句解決了這樣的重復(fù)編寫問(wèn)題。(2)元件也是完整的VHDL設(shè)計(jì),作為底層設(shè)計(jì),通過(guò)元件聲明,使之可在其他模塊中被調(diào)用。(3)元件聲明可放在程序包中,也可在某個(gè)設(shè)計(jì)的結(jié)構(gòu)體中聲明。

99高級(jí)教學(xué)Component(元件)例化語(yǔ)句(1)Block語(yǔ)句可以語(yǔ)法格式:Component元件名Port(端口定義);--同元件實(shí)現(xiàn)時(shí)的實(shí)體的port部分EndComponent;元件例化指元件的調(diào)用,它的語(yǔ)法格式為:Label:

元件名

PortMap(端口映射);Component(元件)例化語(yǔ)句

100高級(jí)教學(xué)語(yǔ)法格式:Component(元件)例化語(yǔ)句100高級(jí)教學(xué)元件例化時(shí)端口映射或關(guān)聯(lián)有兩種方式:a.位置對(duì)應(yīng)方式直接由輸入信號(hào)和元件信號(hào)的對(duì)應(yīng)位置進(jìn)行映射。即:元件標(biāo)號(hào):元件名

PortMap(信號(hào)A1,信號(hào)B1,…);b.名字直接對(duì)應(yīng)我們使用=>映射符號(hào)進(jìn)行輸入信號(hào)和元件信號(hào)之間的映射,那么位置可以不對(duì)應(yīng)。即:

元件標(biāo)號(hào):元件名

PortMap(元件信號(hào)A=>信號(hào)A1,元件信號(hào)B=>信號(hào)B1,…);

注意!元件標(biāo)號(hào)是必需的。Component例化語(yǔ)句

101高級(jí)教學(xué)元件例化時(shí)端口映射或關(guān)聯(lián)有兩種方式:Component例化語(yǔ)Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntityfulladderisPort(Ci:instd_logic;a,b:instd_logic;s:outstd_logic;Co:outstd_logic);Endfulladder;Architecturem1offulladderisSignaltmp:std_logic_vector(1downto0);Begintmp<=('0'&a)+b+ci;s<=tmp(0);co<=tmp(1);Endm1;一位全加器

CibasCo102高級(jí)教學(xué)Libraryieee;一位全加器CibasCo102高Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論