版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
VHDL與數(shù)字電路設計主講:崔
剛
北京工業(yè)大學電控學院電工電子中心2005年9月11精選2021版課件目錄
概述第一章VHDL的程序結構和軟件操作
第二章
數(shù)據(jù)類型與數(shù)據(jù)對象的定義第三章
并行賦值語句第四章順序賦值語句第五章組合邏輯電路的設計第六章時序邏輯電路的設計第七章子程序、庫和程序包第八章CPLD和FPGA的結構與工作原理第九章數(shù)字鐘電路的設計
2精選2021版課件本節(jié)主要內(nèi)容傳統(tǒng)數(shù)字電路設計方法EDA設計方法PLD器件
PLD器件設計流程文本設計輸入—VHDL程序設計3精選2021版課件數(shù)字電子技術的基本知識回顧組合邏輯電路
編碼器、譯碼器、數(shù)據(jù)選擇器、加法器、數(shù)值比較器等時序邏輯電路同步時序邏輯電路異步時序邏輯電路寄存器、移位寄存器、計數(shù)器、序列信號發(fā)生器4精選2021版課件一、傳統(tǒng)設計方法(1)首先確定可用的元器件;(2)根據(jù)這些器件進行邏輯設計,完成各模塊;(3)將各模塊進行連接,最后形成系統(tǒng);(4)而后經(jīng)調(diào)試、測量觀察整個系統(tǒng)是否達到規(guī)定的性能指標。傳統(tǒng)的設計方法是基于中小規(guī)模集成電路器件進行設計(如74系列及其改進系列、CC4000系列、74HC系列等都屬于通用型數(shù)字集成電路),而且是采用自底向上進行設計:5精選2021版課件EDA(ElectronicsDesignAutomation)即電子設計自動化技術,是利用計算機工作平臺,從事電子系統(tǒng)和電路設計的一項技術。EDA技術為電子系統(tǒng)設計帶來了這樣的變化:(1)設計效率提高,設計周期縮短;(2)設計質量提高;(3)設計成本降低;(4)能更充分地發(fā)揮設計人員的創(chuàng)造性;(5)設計成果的重用性大大提高,省去了不必要的重復勞動。二、EDA設計方法
6精選2021版課件自頂向下的設計方法數(shù)字電路的EDA設計是基于PLD進行設計的,支持自頂向下的設計方法:(1)首先從系統(tǒng)設計入手,在頂層進行功能劃分和結構設計;(2)然后再逐級設計底層的結構;(3)并在系統(tǒng)級采用仿真手段驗證設計的正確性;(4)最后完成整個系統(tǒng)的設計,實現(xiàn)從設計、仿真、測試一體化。7精選2021版課件傳統(tǒng)設計方法vsEDA設計方法
傳統(tǒng)設計方法EDA設計方法自底向上手動設計軟硬件分離原理圖設計方式系統(tǒng)功能固定不易仿真難測試修改模塊難移植共享設計周期長自頂向上自動設計打破軟硬件屏障原理圖、HDL等設計方式系統(tǒng)功能易改易仿真易測試修改模塊可移植共享設計周期短8精選2021版課件三、PLD器件(一)出現(xiàn)的背景如果能把所設計的數(shù)字系統(tǒng)做成一片大規(guī)模集成電路,則不僅能減小電路的體積、重量、功耗,而且會使電路的可靠性大為提高。為某種專門用途而設計的集成電路叫做專用集成電路,即所謂的ASIC(ApplicationSpecificIntegratedCircuit的縮寫)。
在用量不大的情況下,設計和制造這樣的專用集成電路成本很高,而且設計、制造的周期也較長。
可編程邏輯器件的研制成功為解決上述問題提供了比較理想的途徑。
9精選2021版課件(二)PLD概述PLD是可編程邏輯器件(ProgrammableLogicDevice)的英文縮寫??删幊踢壿嬈骷且环N數(shù)字集成電路的半成品,在其芯片上按一定排列方式集成了大量的邏輯門和觸發(fā)器等基本邏輯元件。通過編程可以設置其邏輯功能。PLD編程:利用開發(fā)工具對PLD進行加工,即按設計要求將這些片內(nèi)的元件連接起來,使之完成某個邏輯電路或系統(tǒng)的功能,成為一個專用集成電路(ASIC—ApplicationSpecificIntegratedCircuit)。
10精選2021版課件PLD開發(fā)系統(tǒng)PLD開發(fā)系統(tǒng)包括硬件和軟件兩部分。硬件部分:計算機、下載電纜或編程器;軟件部分:集成開發(fā)系統(tǒng)。Altera公司:MaxplusⅡ、QuartusⅡXilinx公司:Foundation、ISELattice公司:SynarioSystem、ispEXPERTSystem11精選2021版課件四、PLD設計流程設計準備設計輸入設計處理器件編程功能仿真時序仿真器件測試12精選2021版課件PLD設計準備在設計之前,首先要進行方案論證和器件選擇等設計準備工作。設計者首先要根據(jù)任務要求,判斷系統(tǒng)的可行性。系統(tǒng)的可行性要受到邏輯要求合理性、成本、開發(fā)條件、器件供應等方面的約束。若系統(tǒng)可行,則根據(jù)系統(tǒng)所完成的功能及復雜程度,對器件本身的資源和成本、工作速度及連線的可布性等方面進行權衡,選擇合適的設計方案和合適的器件類型。13精選2021版課件設計輸入將所設計的電路的邏輯功能按照開發(fā)系統(tǒng)要求的形式表達出來的過程稱為設計輸入。通常,設計輸入有如下三種方式:(1)原理圖輸入方式適用于對系統(tǒng)及各部分電路很熟悉的場合。(2)硬件描述語言輸入方式硬件描述語言是用文本方式描述設計,硬件描述語言有ABEL、AHDL、VHDL、Verilog等,其中VHDL和Verilog已成為IEEE標準。(3)波形輸入方式14精選2021版課件設計處理邏輯優(yōu)化把邏輯描述轉變?yōu)樽钸m合在器件中實現(xiàn)的形式,優(yōu)化使設計所占用的資源最少。邏輯綜合根據(jù)設計描述,對給定的硬件結構組件,最終獲得門級電路甚至更底層的電路描述文件,即將多個模塊化設計文件合并為一個網(wǎng)表文件。適配確定優(yōu)化后的邏輯能否與器件中的宏單元和I/O單元適配。分割將大的設計分割為多個便于器件內(nèi)部資源實現(xiàn)的邏輯小塊的形式。15精選2021版課件設計校驗設計校驗過程包括功能仿真和時序仿真。
功能仿真時序仿真16精選2021版課件器件編程器件編程就是將開發(fā)系統(tǒng)生成的目標文件下載到可編程邏輯器件中,來定義內(nèi)部模塊的邏輯功能以及它們的相互連接關系。
兩種編程方式:編程器下載電纜17精選2021版課件PLD開發(fā)系統(tǒng)PLD開發(fā)系統(tǒng)包括硬件和軟件兩部分。硬件部分:計算機、下載電纜或編程器;軟件部分:集成開發(fā)系統(tǒng)。Altera公司:MaxplusⅡ、QuartusⅡXilinx公司:Foundation、ISELattice公司:SynarioSystem、ispEXPERTSystem18精選2021版課件設計舉例設計內(nèi)容:十進制計數(shù)器電路設計。PLD器件:ACEX1K系列的EP1K30QC208。開發(fā)系統(tǒng):MAX+plusⅡ系統(tǒng)。編程方式:下載電纜。實驗下載板19精選2021版課件設計過程1、設計輸入VHDL演示12、邏輯驗證演示23、設計處理引腳設定演示34、器件編程連接下載電纜演示41/23/202420三、PLD電路設計的特點1、設計簡單,方便;2、電路系統(tǒng)可以集成在一片芯片上;3、電路設計不依賴于器件進行設計;4、電路系統(tǒng)很容易完善和升級。器件選擇:(1)電路系統(tǒng)所完成的功能及復雜程度;(2)器件本身的資源和成本、性能參數(shù)、器件編程工藝等方面進行權衡。21精選2021版課件
VHDL是非常高速集成電路硬件描述語言(VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage)的英文縮寫。五、文本設計輸入—VHDL程序設計語法和風格:(1)類似與現(xiàn)代高級編程語言,如C語言。(2)VHDL描述的是硬件,它包含許多硬件特有的結構。22精選2021版課件VHDL設計VS電路圖設計VHDL與電路圖設計電路的方式不同,和電路圖設計方式相比:(1)易于修改;(2)設計能力更強;(3)VHDL語言很方便:獨立于器件設計;相同的程序代碼可以用于不同廠家生產(chǎn)的器件。
23精選2021版課件VHDL程序的基本結構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精選2021版課件VHDL程序的基本結構(1)LIBRARY和PACHAGE聲明區(qū);(2)ENTITY定義區(qū);(3)ARCHITECTURE定義區(qū);25精選2021版課件Library(庫)是用于存放預先編譯好的Package(程序包)。Package(程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,元件及子程序等。
作用:聲明在實體和結構體定義中將用到的數(shù)據(jù)類型、元件或子程序等。聲明格式:
Library
庫名;
Use
庫名.PACKAGE名.All;(1)LIBRARY和PACKAGE聲明區(qū)26精選2021版課件
作用:ENTITY(實體)用于定義電路的外觀,即I/O端口的類型和數(shù)量。定義格式:Entity實體名
is
Port(a:
inbit;
b:inbit;c:outbit);End
實體名;(2)ENTITY定義區(qū)端口名數(shù)據(jù)類型端口模式27精選2021版課件端口模式(MODE)有以下幾種類型:
IN;OUT;INOUT;BUFFER
端口模式可用下圖說明:(黑框代表一個設計或模塊)
INOUTBUFFERINOUT(2)ENTITY定義區(qū)28精選2021版課件(3)ARCHITECTURE定義區(qū)
實體的實現(xiàn)。即說明電路執(zhí)行什么動作或實現(xiàn)功能。定義格式:
Architecture結構體名of實體名is
[聲明語句;(內(nèi)部信號、變量、常數(shù),元件,子程序聲明)]Begin并行描述語句;End結構體名;29精選2021版課件二輸入與門電路設計范例
abc電路真值表abc00010001011130精選2021版課件二輸入與門電路設計范例Librarystd;Usestd.standard.all;Entityand2is
Port(a:inbit;b:inbit;c:outbit);Endand2;--實體定義結束。
雙減號--為VHDL程序的注釋符,類似C語言中的//注釋符。31精選2021版課件二輸入與門電路設計范例ArchitectureNaofand2isBegin
c<=’0’whena=’0’andb=‘0’else’0’whena=’1’andb=‘0’else’0’whena=’0’andb=‘1’else‘1’;符號<=為信號直接賦值符。
EndNa;--結構體NaArchitectureNbofand2is
Beginc<=aandb;--and為邏輯與操作EndNb;
--結構體Nb32精選2021版課件第一章VHDL的程序結構和軟件操作
1-1VHDL程序的基本結構1-2Max+plusⅡ的操作33精選2021版課件1-1VHDL程序的基本結構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精選2021版課件1-1VHDL程序的基本結構(1)LIBRARY和PACHAGE聲明區(qū);(2)ENTITY定義區(qū);(3)ARCHITECTURE定義區(qū);(4)CONFIGURATION定義區(qū)。35精選2021版課件Library(庫)是用于存放預先編譯好的Package(程序包)。Package(程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,元件及子程序等。
作用:聲明在實體和結構體定義中將用到的數(shù)據(jù)類型、元件或子程序等。聲明格式:
Library
庫名;
Use
庫名.PACKAGE名.All;(1)LIBRARY和PACKAGE聲明區(qū)36精選2021版課件
作用:ENTITY(實體)用于定義電路的外觀,即I/O端口的類型和數(shù)量。定義格式:Entity實體名
is
Port(a:
inbit;
b:inbit;c:outbit);End
實體名;(2)ENTITY定義區(qū)端口名數(shù)據(jù)類型端口模式37精選2021版課件(2)ENTITY定義區(qū)標識符的定義原則:(1)標識符由字母、數(shù)字和下劃線組成,a7_;(2)在標識符不區(qū)分大小寫,ab和AB是一樣的;(3)第一個字符必須是字母,即a666;(4)不允許有兩個連續(xù)的下劃線,a__b錯誤;(5)末尾不能是下劃線,mname_錯誤;(6)標識符不能和關鍵字相同,如Entity,is等。38精選2021版課件端口模式(MODE)有以下幾種類型:
IN;OUT;INOUT;BUFFER
端口模式可用下圖說明:(黑框代表一個設計或模塊)
INOUTBUFFERINOUT(2)ENTITY定義區(qū)39精選2021版課件(3)ARCHITECTURE定義區(qū)
定義了實體的實現(xiàn)。即電路的具體描述,說明電路執(zhí)行什么動作或實現(xiàn)功能。定義格式:
Architecture結構體名of實體名is
[聲明語句;(內(nèi)部信號、變量、常數(shù),元件,子程序聲明)]Begin并行描述語句;End結構體名;40精選2021版課件(4)CONFIGURATION定義區(qū)
一個完整VHDL電路設計必須有一個實體和對應的結構體,即實體和結構體對構成一個完整的VHDL設計。一個實體可對應一個結構體或多個結構體,即一個實體可以有不同的描述方式。作用:當實體有多個結構體時,系統(tǒng)默認實體選用最后一個結構體,利用CONFIGURATION語句可以任意選擇采用哪一個結構體。
41精選2021版課件(4)CONFIGURATION定義區(qū)定義格式:Configuration配置名of實體名isfor選用的結構體名endfor;endconfiguration配置名;42精選2021版課件二輸入與門電路設計范例
abc電路真值表abc00010001011143精選2021版課件二輸入與門電路設計范例Librarystd;Usestd.standard.all;Entityand2is
Port(a:inbit;b:inbit;c:outbit);Endand2;--實體定義結束。
雙減號--為VHDL程序的注釋符,類似C語言中的//注釋符。44精選2021版課件二輸入與門電路設計范例ArchitectureNaofand2isBegin
c<=’0’whena=’0’andb=‘0’else’0’whena=’1’andb=‘0’else’0’whena=’0’andb=‘1’else‘1’;符號<=為信號直接賦值符。
EndNa;--結構體NaArchitectureNbofand2is
Beginc<=aandb;--and為邏輯與操作EndNb;
--結構體Nb45精選2021版課件二輸入與門電路設計范例Configurations1ofand2isfornaendfor;endconfigurations1;--結構體配置結束。46精選2021版課件1-2Max+plusⅡ系統(tǒng)的操作
Max+plusⅡ開發(fā)工具是美國Altera公司自行設計的一種軟件工具,其全稱為MultipleArrayMatrixandProgrammableLogicUserSystem。它具有原理圖輸入和文本輸入(采用硬件描述語言)兩種輸入手段,利用該工具所配備的編輯、編譯、仿真、時序分析、芯片編程等功能,將設計電路圖或電路描述程序變成基本的邏輯單元寫入到可編程的芯片中(如CPLD或FPGA芯片),作成ASIC芯片。它是EDA設計中不可缺少的一種工具。
47精選2021版課件下面我們介紹利用Max+plusⅡ系統(tǒng)如何實現(xiàn)如下操作:(1)如何編寫VHDL程序(使用TextEditor);(2)如何編譯VHDL程序(使用Compiler);(3)如何仿真驗證VHDL程序(使用WaveformEditor,Simulator);(4)如何進行芯片的時序分析(使用TimingAnalyzer);(5)如何安排芯片腳位(使用FloorplanEditor);(6)如何下載程序至芯片(使用Programmer)。1-2Max+plusⅡ系統(tǒng)的操作48精選2021版課件(1)如何編寫VHDL程序a.打開文本編輯器;File/new/Texteditorfileb.編寫VHDL程序;c.保存文件,<1>文件名和定義的實體名必須相同,<2>文件擴展名為VHD,<3>文件存盤的目錄不應是根目錄或桌面,建議存放在Max2work或Maxplus2目錄,或其子目錄。49精選2021版課件(2)如何編譯VHDL程序a.打開需要編譯的文件;b.設置工程到目前打開的文件;
File/Project/SetProjecttoCurrentFile,c.打開編譯器;點擊主菜單MAX+plusⅡ/Compiler選項。
d.選定VHDL源文件的版本;Interfaces/VHDLNetlistReaderSettings…
e.打開編譯器進行編譯。50精選2021版課件(3)如何仿真驗證VHDL程序a.打開波形編輯器(WaveformEditor);b.確定仿真持續(xù)時間(File/EndTime);c.將輸入輸出端口名選入波形編輯器;d.編輯輸入信號波形;e.保存仿真波形文件;f.打開仿真器MAX+plusⅡ\Simulator進行仿真。在仿真結束后打開仿真波形文件(點擊右下角的OpenSCF按鈕)即可以顯示仿真結果。51精選2021版課件(4)如何進行芯片的時序分析a.選擇要下載的器件型號;點擊主菜單的Assign/Device項得到Device對話框。在DeviceFamily框中選擇芯片系列,在Devices選擇框下選擇具體的芯片名,最后點擊OK按鈕。b.再編譯一次;c.打開時序分析器(TimingAnalyzer);d.點擊Start進行時序分析。52精選2021版課件(5)如何安排芯片腳位a.打開芯片腳位設置窗口;點擊主菜單Assign/Pin/Location/Chip,出現(xiàn)腳位設置對話框;;b.將實體定義的端口名字和下載芯片的管腳進行具體對應;在NodeName框中輸入我們定義的實體端口名字,然后在Pin列表選項框中輸入下載芯片的管腳序號,再點擊對話框右下角的Add按鈕,將所有端口設置完成以后,點擊Ok按鈕,則實現(xiàn)實體端口和下載芯片的管腳的對應;
c.再編譯一次,將生成可以下載的文件(And2.Sof)。53精選2021版課件(6)如何下載程序至芯片a.將下載電纜與計算機并口相連,然后給芯片通電;b.打開編程器Programmer;Options/HardwareSetup,在HardwareType選擇ByteBlaster(MV)方式,則在ParallelPort處顯示LPT1,單擊OK鈕返回Programmer窗口。
c.下載方式選擇;d.選擇下載的芯片類型和要下載的文件(選擇JTAG/MutiDevicJTAGChainSetup)。e.點擊Configure進行下載,將程序寫入芯片中。54精選2021版課件第二章
數(shù)據(jù)類型與數(shù)據(jù)對象的定義2-1數(shù)據(jù)類型2-2數(shù)據(jù)對象的定義2-3信號運算符2-4信號屬性55精選2021版課件2-1數(shù)據(jù)類型在VHDL程序中,我們經(jīng)常會遇到這樣的語句:SignalA:std_logic;VariableB:std_logic_vector(7downto0);ConstantC:integer;數(shù)據(jù)對象類型數(shù)據(jù)類型數(shù)據(jù)對象名56精選2021版課件
2-1-1邏輯數(shù)據(jù)類型
(1)布爾代數(shù)(Boolean)型;(2)位(Bit);(3)位數(shù)組類型(Bit_Vector)在std庫的standard程序包中進行定義。typeBIT_VECTORisarray(NATURALrange<>)ofBIT;typeBITis(‘0’,‘1’);typeBOOLEANis(FALSE,TRUE);57精選2021版課件(4)標準邏輯型(Std_Logic);
TypeSTD_LOGICis(‘U’,
--Uninialized;未初始化
‘X’,
--Forcingunknown;浮接不定
‘0’,
--Forcing0;低電位
‘1’,
--Forcing1;高電位
‘Z’,
--HighImpedance;高阻抗
‘W’,
--WeakUnknown;弱浮接
‘L’,
--Weak0;弱低電位
‘H’,
--Weak1;弱高電位
‘-’,
--Don’tcare;不必理會);(5)標準邏輯數(shù)組類型(Std_Logic_vector);在ieee庫的std_logic_1164程序包中定義。TYPEstd_logic_vectorISARRAY(NATURALRANGE<>)OFstd_logic;58精選2021版課件
2-1-2數(shù)值數(shù)據(jù)類型(1)整數(shù)(Integer);a.正整數(shù)(POSITIVE)b.自然數(shù)(NATURAL)在std庫的standard程序包中進行定義。subtypePOSITIVEisrange1toINTEGER’High;TypeINTEGERisrange–2147483648to2147483647;subtypeNATURALisrange0toINTEGER’High;59精選2021版課件(2)實數(shù)(Real)(3)有符號數(shù)(Signed)無符號數(shù)(Unsigned)在ieee庫的std_logic_arith程序包中定義。typeREALisrange–1.7E38to1.7E38;typeUNSIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;typeSIGNEDisarray(NATURALrange<>)ofSTD_LOGIC;SIGNED
的最高位為符號位,其余位為數(shù)值位,數(shù)值位為補碼形式。如:符號數(shù)”1001”表示-7。60精選2021版課件libraryieee;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;當定義成無符號類型時,若a<=”1000”,b=’0001’,即a=8,b=1則結果c=’0’;當定義成有符號類型時,若a<=”1000”,b=’0001’,則a=-8,b=1,則結果c=’1’。61精選2021版課件
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精選2021版課件2-1-4數(shù)據(jù)類型的轉換在VHDL語言里,不同類型的數(shù)據(jù)信號之間不能互相賦值。當需要不同類型數(shù)據(jù)之間傳遞信息時,就需要類型轉換函數(shù)將其中的一種類型數(shù)據(jù)轉換為另一中數(shù)據(jù)類型后,再進行信號的傳遞。例如:SignalY:Std_logic_vector(7downto0);
SignalX:Integerrange0to255;Y<=CONV_STD_LOGIC_VECTOR(X,8);轉換函數(shù)有兩個參數(shù),被轉換的對象和轉換后的位數(shù)。
63精選2021版課件常用的數(shù)據(jù)類型轉換函數(shù)CONV_INTEGER將數(shù)據(jù)類型UNSIGNED,SIGNED轉換為INTEGER類型.
CONV_UNSIGNED將數(shù)據(jù)類型INTEGER,SIGNED轉換為UNSIGNED類型.CONV_SIGNED將數(shù)據(jù)類型INTEGER,UNSIGNED轉換為SIGNED類型. CONV_STD_LOGIC_VECTOR將數(shù)據(jù)類型INTEGER,UNSIGNED,SIGNED,STD_LOGIC轉換為STD_LOGIC_VECTOR類型.在庫ieee的程序包std_logic_arith中定義64精選2021版課件2-2數(shù)據(jù)對象的定義常用的數(shù)據(jù)對象有三種:常數(shù)(Constant)信號(Signal)變量(Variable)
65精選2021版課件2-2-1常數(shù)的定義(1)將數(shù)據(jù)對象定義為常數(shù),一方面希望該數(shù)據(jù)對象的值不會被改變;另一方面,為了提高程序的可讀性。(2)常數(shù)為全局量。(3)常數(shù)在程序包說明、實體說明、結構體描述、過程說明、函數(shù)調(diào)用中使用。(4)常數(shù)的定義格式:Constant
常數(shù)名:數(shù)據(jù)類型:=常數(shù)值;
如:ConstantD1:Integer:=3;注意!常數(shù)定義的同時進行賦初值。66精選2021版課件常數(shù)的應用示例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精選2021版課件2-2-2信號的定義(1)“信號”數(shù)據(jù)對象,代表電路內(nèi)部信號或連接線路,其在元件之間起互連作用。注意!信號定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議信號對象定義后再進行賦值。(2)信號為全局量。(3)在實體說明、結構體描述和程序包說明中使用。(4)信號的定義格式:Signal信號名:數(shù)據(jù)類型;(5)信號賦值的語法格式為:信號名<=表達式;如:SignalS1:Std_logic_vector(3Downto0);S1<=“0000”;68精選2021版課件2-2-3變量的定義(1)“變量”數(shù)據(jù)對象,它用于對中間數(shù)據(jù)的臨時存儲,并不一定代表電路的某一組件。注意!變量定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議變量對象定義后再進行賦值。(2)變量為局部量。(3)僅限于進程(Process)或子程序中使用。(4)變量的定義格式:Variable變量名:數(shù)據(jù)類型;
(5)變量賦值的語法格式為:目標信號值:=表達式;如:VariableS1:Std_logic_vector(3Downto0);S1:=“0000”;69精選2021版課件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例一結果: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精選2021版課件libraryieee;useieee.std_logic_1164.all;Entitycmpisport(cp,ip:instd_logic;--cp為時鐘脈沖op,oq:outstd_logic);--ip為輸入信號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ā)器在進程中,信號賦值只有在過程結束時起作用,而變量賦值是立即進行的。71精選2021版課件2-2-4信號和變量的比較(1)信號和變量的對應關系不同:信號代表電路內(nèi)部信號或連接線路;而變量則不是。(2)信號和變量聲明的位置不同:信號聲明在子程序、進程的外部;而變量聲明在子程序、進程的內(nèi)部。(3)信號為全局量,而變量只在定義它的域中才可見。因此,變量不能在兩個進程之間傳遞信息。(4)在一個進程中多次為一個信號賦值時,只有最后一個值會起作用;而變量則不同,每次賦值都會改變它的值。(5)賦值不同。在進程中,信號賦值只有在進程結束時起作用,而變量賦值是立即進行的。而且賦值符號不同:信號賦值為“<=”,變量賦值為“:=”。72精選2021版課件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);--信號
Beginbinadd<=a+b;--兩數(shù)相加process(binadd)--對兩數(shù)和進行處理variabletmp:integerrange0to6;--變量定義beginifbinadd>9thentmp:=adjnum;elsetmp:=0;endif;result<=binadd+tmp;endprocess;EndNa;73精選2021版課件
2-3信號運算符
VHDL提供了四種類型運算符號:邏輯運算符關系運算符算術運算符連接運算符74精選2021版課件VHDL運算符——邏輯運算符
and邏輯與
or 邏輯或
nand 與非
nor或非
xor異或
xnor 同或
not 邏輯非上述邏輯運算在庫ieee的程序包std_logic_1164中定義。
75精選2021版課件VHDL運算符——關系運算符
= 等于
/= 不等于
< 小于
<= 小于或等于
> 大于
>= 大于或等于
注:其中‘<=’操作符也用于表示信號的賦值操作。上述運算在庫ieee的程序包std_logic_arith中定義。76精選2021版課件VHDL運算符——算術運算符
+ 加
- 減
* 乘
/ 除
** 乘方
mod 求模
rem 求余
abs 求絕對值
在庫ieee的程序包std_logic_arith中定義。
77精選2021版課件VHDL運算符——連接運算符
& 連接符,將兩個數(shù)據(jù)對象或矢量連接成維數(shù)更大的矢量,它可給代碼書寫帶來方便。例如:vabc=a&b&c;如果a=‘1’,b=‘0’,c=‘1’,則vabc=“101”。78精選2021版課件(1)數(shù)值類屬性:(數(shù)組類型的數(shù)據(jù)對象)數(shù)值類屬性有‘left,‘right,‘low,‘high,‘length。其中用符號“‘”隔開對象名及其屬性。left表示數(shù)組的左邊界;right表示數(shù)組的右邊界;low表示數(shù)組的下邊界;high表示數(shù)組的上邊界;length表示數(shù)組的長度。2-4數(shù)據(jù)對象屬性79精選2021版課件如:SignalA:std_logic_vector(7downto0);SignalB:std_logic_vector(0to3);則這兩個信號的屬性值分別為: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ù)組的長度。80精選2021版課件(2)‘event屬性:‘event屬性,它的值為布爾型,如果剛好有事件發(fā)生在該屬性所附著的信號上(即信號有變化),則其取值為Ture,否則為False。利用此屬性可決定時鐘信號的變化情況,即時鐘是否發(fā)生。
2-4數(shù)據(jù)對象屬性81精選2021版課件(2)‘Event屬性:例如:時鐘邊沿表示
signalclk:in
std_logic;
則clk’event
andclk=’1’表示時鐘的上升沿。即時鐘變化了,且其值為1。
clk’eventandclk=’0’表示時鐘的下降沿。即時鐘變化了,且其值為0。此外,還可利用兩個函數(shù)來表示時鐘的邊沿。 rising_edge(clk)表示時鐘的上升沿
falling_edge(clk)表示時鐘的下降沿這兩個函數(shù)分別在庫ieee的程序包Std_logic_1164中定義。2-4數(shù)據(jù)對象屬性82精選2021版課件并行語句一般處于進程(PROCESS)的外部。所有并行語句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無關。并行語句有三個特點:a.所有語句的執(zhí)行是并行的;b.每條語句的執(zhí)行和其所在的位置無關;c.并行語句的輸出僅僅依賴于輸入,沒有其它的限制條件。第三章
并行賦值語句
83精選2021版課件第三章
并行賦值語句(1)直接賦值語句:<=賦值運算符(2)條件式信號設置語句:When-Else(3)選擇式信號設置語句:With-Select-When(4)Process(進程)語句(5)Block(塊)語句(6)函數(shù)調(diào)用語句(后面章節(jié)講)(7)Component(元件)例化語句(8)For-Generate語句Generic的使用84精選2021版課件(1)直接賦值語句:<=直接賦值語句的格式:Signal_name<=expression;如:SignalA,B:std_logic_vector(7downto0);A<=”0000000”;B<=”1000000”;我們也可以這樣賦值:A<=(others=>’0’);結果信號A的每一位的值都為0。B<=(‘1’,others=>’0’);信號對象的位數(shù)很多時,采用others來賦值很方便。85精選2021版課件<=示例libraryieee;useieee.std_logic_1164.all;Entitytest1IsPort(a,b:instd_logic;c,d:outstd_logic);endtest1;architecturetest1_bodyoftest1isbegin
同時執(zhí)行d<=aorb;
c<=aandb;endtest1_body;輸出僅僅依賴于輸入,沒有其它的限制條件。
每條語句的執(zhí)行和其所在的位置無關。
ABCD86精選2021版課件(2)When-Else條件式信號設置語句它的語法格式為:[label:]Signal_name<=expression1Whenlogic_expression1Else{expression2Whenlogic_expression2Else}expressionn;例如:f<=’1’whenx1=x2else‘0’;87精選2021版課件When-Else語句示例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精選2021版課件(3)With-Select-When選擇式信號設置語句[label:]WithexpressionSelectSignal_name<=expressionWhenconstant_value{,{expressionWhenconstant_value};89精選2021版課件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”,--注意結束為“,”不是“;”'1'when"10",'0'whenothers;Enda;ZXY90精選2021版課件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)先權次序為由先到后排列。91精選2021版課件優(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”;如果三個輸入都為0,f=”00”。r1r3r2f92精選2021版課件(4)Process語句(1)一個結構體當中可以有多個Process語句,Process語句是同時執(zhí)行的并行語句。(2)Process內(nèi)的語句卻是順序執(zhí)行的順序語句。(3)多進程之間的信息通過信號對象來傳遞。Process語句的格式為:[Processlabel:]Process[(Sensitivitylist)][Variabledeclarations]Begin順序語句;EndProcess[Processlabel];
93精選2021版課件(4)Process語句敏感表(Sensitivitylist)包括進程的一些信號,當敏感表中的某個信號變化時進程才被激活,進程內(nèi)的順序語句被執(zhí)行。當進程結束時,進程內(nèi)的輸出信號值被更新,進程進入等待(睡眠)狀態(tài),直到敏感表中的某一信號發(fā)生變化,進程被再次激活。對于上述電路,我們同樣可以采用Process語句來進行描述。94精選2021版課件Process語句示例architecturem2ofexam1isSignaltmp:std_logic;beginprocessbegintmp<=aandb;endprocess;d<=tmp;processbegine<=tmporc;endprocess;endm2;ABDCE95精選2021版課件(5)Block(塊)語句
當我們設計一個比較復雜的電路時,為了使設計簡單化,可以將其分為幾個部分分別進行設計,每個部分設計完成后,再將其組合成我們需要的電路。這種方法稱為模塊化設計方法。這樣,使得整個設計工作更加容易實現(xiàn),同時程序代碼的維護性、糾錯性都能得到提高。采用模塊化設計時,當設計一個模塊時,我們就要用到Block語句。96精選2021版課件語法格式:BlockLabel:Block[數(shù)據(jù)對象定義部分]Begin<BlockStatementPart>EndBlock;(5)Block(塊)語句
97精選2021版課件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語句示例98精選2021版課件Component(元件)例化語句
(1)Block語句可以使VHDL程序更加模塊化、功能化。但這樣的做法要求在同一程序中,若是重復使用時,必須重寫一次。Block語句解決了這樣的重復編寫問題。(2)元件也是完整的VHDL設計,作為底層設計,通過元件聲明,使之可在其他模塊中被調(diào)用。(3)元件聲明可放在程序包中,也可在某個設計的結構體中聲明。
99精選2021版課件語法格式:Component元件名Port(端口定義);--同元件實現(xiàn)時的實體的port部分EndComponent;元件例化指元件的調(diào)用,它的語法格式為:Label:
元件名PortMap(端口映射);Component(元件)例化語句
100精選2021版課件元件例化時端口映射或關聯(lián)有兩種方式:a.位置對應方式直接由輸入信號和元件信號的對應位置進行映射。即:元件標號:元件名PortMap(信號A1,信號B1,…);b.名字直接對應我們使用=>映射符號進行輸入信號和元件信號之間的映射,那么位置可以不對應。即:
元件標號:元件名PortMap(元件信號A=>信號A1,元件信號B=>信號B1,…);注意!元件標號是必需的。Component例化語句
101精選2021版課件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精選2021版課件Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntityadderisPort(Cin:instd_logic;x,y:instd_logic_vector(3downto0);sum:outstd_logic_vector(3downto0);Cout:outstd_logic);Endadder;四位加法器103精選2021版課件ArchitectureaofadderisSignalc:std_logic_vector(0to4);ComponentfulladderPort(ci,a,b:instd_logic;s,co:outstd_logic);endcomponent;Beginc(0)<=cin;U1:fulladderPortmap(c(0),x(0),y(0),sum(0),c(1));--U1:fulladderPortmap(ci=>c(0),a=>x(0),b=>y(0),s=>sum(0),co=>c(1));U2:fulladderPortmap(c(1),x(1),y(1),sum(1),c(2));U3:fulladderPortmap(c(2),x(2),y(2),sum(2),c(3));U4:fulladderPortmap(c(3),x(3),y(3),sum(3),c(4));Cout<=c(4);Enda;Component例化示例
104精選2021版課件For-Generate語句For-Generate語句用于生成一組信號賦值或元件例化語句。語法格式:generate_label:
--必須的forindex_variableInrangegenerate
statement;[statement;]endgenerate;105精選2021版課件則上面的四位加法器可以這樣來實現(xiàn):其它相同,上面四條賦值語句可以這樣來代替:Generate_label:ForiIn0to3GenerateBitadder:fulladderPortmap(c(i),x(i),y(i),sum(i),c(i+1));Endgenerate;For-Generate語句106精選2021版課件Generic語句
通過引入一個參數(shù)n使得我們設計的加法器更加具有通用性,參數(shù)n代表加法器中相加的位數(shù),在VHDL中,這樣的參數(shù)稱為Generic(類屬)。
通常定義在實體描述和元件聲明中。
定義格式:Generic(參數(shù)名:數(shù)據(jù)類型[:=表達式]);例如:Generic(m:integer:=7);107精選2021版課件Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntityadderisGeneric(n:integer:=4);Port(Cin:instd_logic;x,y:instd_logic_vector(n-1downto0);sum:outstd_logic_vector(n-1downto0);Cout:outstd_logic);Endadder;Generic語句示例—N位全加器108精選2021版課件ArchitectureaofadderisSignalc:std_logic_vector(0ton);ComponentfulladderPort(ci,a,b:instd_logic;s,co:outstd_logic);Endcomponent;Beginc(0)<=cin;Generate_label:ForiIn0ton-1GenerateBitadder:fulladderPortmap(c(i),x(i),y(i),sum(i),c(i+1));Endgenerate;Cout<=c(n);Enda;109精選2021版課件Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntitynadderisPort(Cin1:instd_logic;x1,y1:instd_logic_vector(7downto0);Sum1:outstd_logic_vector(7downto0);Cout1:outstd_logic);Endnadder;帶Generic的元件例化—N位全加器110精選2021版課件ArchitectureaofnadderisComponentadderGeneric(n:integer);--也可在此進行影射Generic(n:integer:=8);Port(cin:instd_logic;x,y:instd_logic_vector(n-1downto0);sum:outstd_logic_vector(n-1downto0);cout:outstd_logic);endcomponent;BeginNadder:adderGenericmap(n=>8)Portmap(cin1,x1,y1,sum1,cout1);Enda;
--若元件聲明時已經(jīng)賦值,則Nadder:adderPortmap(cin1,x1,y1,sum1,cout1);Genericmap(8)111精選2021版課件(1)順序語句每一條語句的執(zhí)行都是順序進行的。如同高級編程語言中的命令執(zhí)行方式,一次一條命令,按書寫順序由上而下執(zhí)行。(2)順序語句只能出現(xiàn)在進程和子程序內(nèi)部。(3)由于順序語句的次序很重要,因此,順序語句要與并行語句分割開,這可以通過Process語句來實現(xiàn)。Process語句出現(xiàn)在結構體中,它將其內(nèi)部的語句進行封裝。第四章順序賦值語句順序語句有三個特點:a.所有語句的執(zhí)行是順序進行的;b.每條語句的執(zhí)行和其所在的位置有關;c.順序語句的輸出不僅依賴于輸入,而且還受位置的影響。112精選2021版課件第四章順序語句(1)Process語句
(2)If-Else語句
(3)Case-When語句
(4)Null語句
(5)For-Loop語句
(6)Waituntil語句
(7)變量賦值語句
(8)Procedure(過程)調(diào)用語句
113精選2021版課件(1)Process語句Process內(nèi)的順序語句可以是:[Process-label:]Process[(Sensitivitylist)][Variabledeclarations]--變量聲明Begin[waituntilstatement][variableassignmentstatements][ifstatements][casestatements][Procedure調(diào)用語句]EndProcess;114精選2021版課件(2)If-Else語句Ifexpression1Then
statement1;[statement;][Elsifexpression2Then
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度跑步活動志愿者服務合同3篇
- 2024-2025學年貴州省畢節(jié)市大方縣東關鄉(xiāng)教育管理中心三年級數(shù)學第一學期期末綜合測試試題含解析
- 創(chuàng)新教育與文化融合學校國際交流實踐探索
- 2024年科技園區(qū)商鋪代理合作協(xié)議3篇
- 商業(yè)中心大門的智能化改造與升級方案
- 2025中國鐵物物資集團限公司校園招聘高頻重點提升(共500題)附帶答案詳解
- 2025中國遠洋海運集團校園招聘995人高頻重點提升(共500題)附帶答案詳解
- 2025中國移動浙江公司校園招聘595人高頻重點提升(共500題)附帶答案詳解
- 2025中國石油獨山子石化分公司校園招聘145人高頻重點提升(共500題)附帶答案詳解
- 2025中國建材集團總部招聘1人高頻重點提升(共500題)附帶答案詳解
- 科室質量與安全管理小組專題活動記錄
- 2022年安徽省公務員錄用考試《行測》真題及答案
- 電子技術說課課件
- 安徽恒光聚氨酯材料有限公司年產(chǎn)2.8萬噸聚氨酯高新材料及原料項目環(huán)境影響報告書
- 5.4.6土釘墻檢驗批質量驗收記錄
- 七年級體育與健康 《足球》單元作業(yè)設計
- 放射性粒子植入自我評估報告
- LY/T 2450-2015無花果栽培技術規(guī)程
- 浙大中控DCS系統(tǒng)介紹(簡潔版)
- GB/T 16288-2008塑料制品的標志
- GB/T 14486-2008塑料模塑件尺寸公差
評論
0/150
提交評論