VHDL語(yǔ)言與數(shù)字集成電路設(shè)計(jì).ppt_第1頁(yè)
VHDL語(yǔ)言與數(shù)字集成電路設(shè)計(jì).ppt_第2頁(yè)
VHDL語(yǔ)言與數(shù)字集成電路設(shè)計(jì).ppt_第3頁(yè)
VHDL語(yǔ)言與數(shù)字集成電路設(shè)計(jì).ppt_第4頁(yè)
VHDL語(yǔ)言與數(shù)字集成電路設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩663頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VHDL語(yǔ)言與數(shù)字集成電路設(shè)計(jì),電子科技有限公司教程,第一章 概述,VHDL Very high speed integration circuits Hardware Description Language,一種集成電路的硬件描述語(yǔ)言; 用于進(jìn)行數(shù)字集成電路的設(shè)計(jì);,數(shù)字集成電路,數(shù)字邏輯電路,通常由基本門(mén)電路構(gòu)成;在一塊半導(dǎo)體芯片上設(shè)計(jì)制作; 目前以CMOS工藝為主進(jìn)行制備; 在信息技術(shù)領(lǐng)域得到廣泛的應(yīng)用。,從上世紀(jì)60年代開(kāi)始發(fā)展,每3年集成度與速度提高2倍。 從簡(jiǎn)單的門(mén)電路到復(fù)雜的數(shù)字系統(tǒng),系統(tǒng)復(fù)雜程度急劇提高。,數(shù)字集成電路的發(fā)展,SSI (120gates) 基本單元組合 (P.

2、13)MSI(20200) 簡(jiǎn)單功能電路: 譯碼器、數(shù)據(jù)選擇器、寄存器、計(jì)數(shù)器 LSI(20020萬(wàn)) 小規(guī)模系統(tǒng)組件: 存儲(chǔ)器、微處理器、可編程邏輯器件 VLSI(可達(dá)上億) 大型系統(tǒng)組件或小型系統(tǒng) SOC:Systems on chip !,數(shù)字集成電路的發(fā)展,數(shù)字集成電路的設(shè)計(jì),電路復(fù)雜程度高,開(kāi)發(fā)時(shí)間長(zhǎng); 目標(biāo):短周期、低成本、高性能 方案:層次化、模塊化、標(biāo)準(zhǔn)化 自頂至下的多層次設(shè)計(jì):TOP-DOWN,數(shù)字集成電路的設(shè)計(jì)特點(diǎn),系統(tǒng)設(shè)計(jì) 系統(tǒng)描述:芯片功能、性能、 成本、尺寸等 功能設(shè)計(jì) 功能級(jí)描述:功能框圖、時(shí)序 圖等 邏輯設(shè)計(jì) 邏輯描述:邏輯電路圖 電路設(shè)計(jì) 電路描述:電路圖、門(mén)級(jí)

3、網(wǎng)表 版圖設(shè)計(jì) 版圖網(wǎng)表,數(shù)字集成電路的設(shè)計(jì)層次,采用文本形式進(jìn)行程序設(shè)計(jì),便于編寫(xiě)和修改; 具有硬件特征的語(yǔ)句,可以描述數(shù)字系統(tǒng)的結(jié)構(gòu)、功能、行為和接口; 全面支持電路硬件的設(shè)計(jì)、驗(yàn)證、綜合和測(cè)試;設(shè)計(jì)與具體工藝無(wú)關(guān),適合于多層次設(shè)計(jì); 具有良好的開(kāi)放性和并行設(shè)計(jì)能力、便于交流保存共享。,設(shè)計(jì)交流的語(yǔ)言:HDL,一個(gè)簡(jiǎn)單數(shù)字電路的設(shè)計(jì)描述,4位加法器標(biāo)準(zhǔn)模塊:a+b+ci=s 3組輸入,1組輸出;,4位加法的實(shí)現(xiàn)過(guò)程,可以采用4個(gè)全加器模塊(FA)連接實(shí)現(xiàn); 每個(gè)模塊有3個(gè)輸入,2個(gè)輸出;,VHDL對(duì)電路模塊的描述,entity add4 is port (a,b: in bit_vecto

4、r( 3 downto 0 ); ci : in bit; s : out bit_vector(4 downto 0); end add4;,采用實(shí)體(entity)描述模塊的外部端口,VHDL對(duì)電路內(nèi)部結(jié)構(gòu)的描述,architecture str of add4 is signal c: bit_vector(2 downto 0); component fa is port (a,b,ci: in bit; s,co : out bit); end component; begin u1:fa port map (a(0),b(0),ci,s(0),c(0); u2:fa port ma

5、p (a(1),b(1),c(0),s(1),c(1); u3:fa port map (a(2),b(2),c(1),s(2),c(2); u4:fa port map (a(3),b(3),c(2),s(3),s(4); end str;,采用結(jié)構(gòu)體(archtecture)描述模塊的內(nèi)部連接關(guān)系,對(duì)上述描述程序的電路綜合,程序準(zhǔn)確體現(xiàn)了希望實(shí)現(xiàn)的電路結(jié)構(gòu),全加器的設(shè)計(jì),VHDL不僅可以通過(guò)連線描述進(jìn)行電路設(shè)計(jì),也可以通過(guò)運(yùn)算關(guān)系或電路的行為特征進(jìn)行電路設(shè)計(jì)。 根據(jù)數(shù)字電路的基本知識(shí),全加器的功能可以由下列邏輯運(yùn)算描述:,全加器的VHDL程序,entity fa is port (a,b,

6、ci: in bit; s,co : out bit); end fa; architecture rtl of fa is begin s=a xor b xor ci; co=(a and b) or (a and ci) or (b and ci); end rtl;,全加器VHDL程序的綜合結(jié)果,對(duì)全加器電路描述的修改,在CMOS電路結(jié)構(gòu)中,3輸入異或門(mén)不是一個(gè)基本單元器件,為了使設(shè)計(jì)能夠更直接地反映晶體管電路的構(gòu)成,可以將該計(jì)算采用兩輸入邏輯替代,設(shè)置一個(gè)中間信號(hào)表達(dá)2個(gè)輸入量的異或,然后再將其與第3個(gè)變量進(jìn)行異或;,對(duì)全加器電路描述的修改,architecture rtl of f

7、a is signal s1:bit; Begin - s=a xor b xor ci; s1=a xor b;s=s1 xor ci co=(a and b) or (a and ci) or (b and ci); end rtl;,只是改變結(jié)構(gòu)體中的相應(yīng)描述語(yǔ)句,修改后電路的綜合結(jié)果,通過(guò)簡(jiǎn)單改變VHDL的語(yǔ)句,就可以改變電路中使用的邏輯單元和連接方式。,電路基本單元的結(jié)構(gòu),考慮到晶體管級(jí)和版圖級(jí)的性能優(yōu)化問(wèn)題,異或門(mén)可以采用傳輸門(mén)結(jié)構(gòu)實(shí)現(xiàn),而“與-或”結(jié)構(gòu)則通常采用與非門(mén)實(shí)現(xiàn)。,數(shù)字集成電路的優(yōu)化設(shè)計(jì),在系統(tǒng)一級(jí),需要考慮使功能模塊的數(shù)量最小化,減少相互連線; 在功能模塊一級(jí),需要考

8、慮邏輯單元的使用量和運(yùn)算速度問(wèn)題; 對(duì)于邏輯單元,則需要考慮基本單元的使用及其連接方式; 晶體管級(jí)和版圖的優(yōu)化則限制著基本邏輯單元的規(guī)模。,數(shù)字集成電路設(shè)計(jì)的基本條件,熟悉電路的基本結(jié)構(gòu),設(shè)計(jì)方法和設(shè)計(jì)流程; 掌握硬件描述語(yǔ)言的特點(diǎn)和描述方法; 掌握相關(guān)綜合工具和仿真工具的應(yīng)用。,本課程內(nèi)容安排,了解數(shù)字集成電路的結(jié)構(gòu)特點(diǎn) 了解數(shù)字集成系統(tǒng)的基本設(shè)計(jì)方法 掌握常用EDA工具的基本使用方法 掌握VHDL的基本語(yǔ)法和主要編程要點(diǎn) 掌握常用數(shù)字單元電路的VHDL設(shè)計(jì)特點(diǎn),教材,Digital Design Principles co,s: OUT bit); END fa; ARCHITECTURE

9、 rtl OF fa IS BEGIN s=a xor b xor ci; co=(a and b) or (a and ci) or (b and ci); end rtl;,Modelsim SE 5.5e使用要點(diǎn),進(jìn)行編輯,保存文件:命名/指定路徑; 在源程序編輯窗口中對(duì)已保存的文件進(jìn)行編譯,結(jié)果可以在項(xiàng)目窗口中看到; 編譯完成后,在項(xiàng)目窗口中將文件添加到項(xiàng)目中:Project/Add File to Project; 在其他工具中編譯的文件也可以直接添加到項(xiàng)目中。,Modelsim SE 5.5e使用要點(diǎn),進(jìn)行編輯,保存文件:命名/指定路徑;,對(duì)已保存的文件進(jìn)行編譯,在項(xiàng)目窗口中看到,

10、在項(xiàng)目窗口中,裝載設(shè)計(jì)項(xiàng)目:vsim fa; 打開(kāi)仿真波形窗口:add wave *; 對(duì)各輸入信號(hào)進(jìn)行設(shè)置: force -repeat 20 ns a 0 0 ns, 1 10 ns force -repeat 40 ns b 0 0 ns, 1 20 ns force -repeat 80 ns ci 0 0 ns, 1 40 ns,Modelsim SE 5.5e使用要點(diǎn),在項(xiàng)目窗口中,裝載設(shè)計(jì)項(xiàng)目:vsim fa;,打開(kāi)仿真波形窗口:add wave *;,設(shè)置完畢后,在波形窗口中進(jìn)行仿真并觀察結(jié)果; 仿真完畢后,可以執(zhí)行quit sim 命令退出仿真;,Modelsim SE 5.

11、5e使用要點(diǎn),Modelsim SE 5.5e使用要點(diǎn),在上述仿真中,沒(méi)有考慮延遲時(shí)間,輸入變化與輸出變化發(fā)生在同一時(shí)刻,這屬于邏輯仿真。 如果考慮器件的時(shí)間延遲,可以將源程序中的信號(hào)賦值語(yǔ)句改為如下形式: s=a xor b xor ci after 7 ns; co=(a and b) or (a and ci) or (b and ci) after 4 ns;,Modelsim SE 5.5e使用要點(diǎn),Modelsim SE 5.5e使用要點(diǎn),仿真測(cè)試文件:testbench,testbench相當(dāng)于一塊電路板,將HDL程序描述的電路塊安裝在上面; 該電路塊與外界沒(méi)有任何接口,其功能僅

12、僅是對(duì)電路塊進(jìn)行仿真測(cè)試,將各種驅(qū)動(dòng)信號(hào)和輸出信號(hào)在波形窗口中表達(dá)出來(lái); HDL程序以元件例化的形式被testbench程序調(diào)用;,仿真測(cè)試文件:testbench,library ieee; use ieee.std_logic_1164.all; entity fa_testbench is end fa_testbench; architecture beh of fa_testbench is component fa port (a,b,ci: in std_logic; s,co : out std_logic); end component; signal xt,yt,zt,st

13、,cot:std_logic; begin u1: fa port map (xt,yt,zt,st,cot);,process begin xt=0;yt=0;zt=0; wait for 10 ns; xt=0;yt=0;zt=1; wait for 10 ns; xt=0;yt=1;zt=0; wait for 10 ns; xt=0;yt=1;zt=1; wait for 10 ns; xt=1;yt=0;zt=0; wait for 10 ns; xt=1;yt=0;zt=1; wait for 10 ns; xt=1;yt=1;zt=0; wait for 10 ns; xt=1;

14、yt=1;zt=1; wait for 10 ns; xt=0;yt=0;zt=0; wait for 10 ns; end process; end beh;,仿真測(cè)試文件:testbench,先分別將源程序和testbench程序添加到項(xiàng)目中; 先編輯編譯源程序,再編輯編譯testbench程序; 裝載已編譯的testbench程序: vsim mytestbench 將設(shè)計(jì)的信號(hào)添加到波形窗口中: add wave * 直接在波形窗口中執(zhí)行“run”命令進(jìn)行仿真;,邏輯綜合,邏輯綜合將HDL語(yǔ)言編寫(xiě)的行為模型轉(zhuǎn)換為電路結(jié)構(gòu)模型(網(wǎng)表)。 這種轉(zhuǎn)換類(lèi)似于C語(yǔ)言的編譯器將C語(yǔ)言轉(zhuǎn)換為機(jī)器語(yǔ)言

15、(二進(jìn)制語(yǔ)言);,邏輯綜合,綜合過(guò)程從原文出發(fā)或原始電路圖出發(fā),經(jīng)過(guò)邏輯分析,首先得出電路的詳細(xì)描述,然后再進(jìn)行邏輯優(yōu)化,得到簡(jiǎn)化的邏輯表達(dá),通過(guò)邏輯映射產(chǎn)生于實(shí)際電路單元的對(duì)應(yīng)關(guān)系,最后基于這種映射關(guān)系給出電路的時(shí)間分析。,邏輯綜合,綜合過(guò)程一定要基于指定的單元庫(kù)(或PLD器件)進(jìn)行,選擇不同的單元庫(kù)會(huì)得出不同的電路結(jié)構(gòu); 在對(duì)HDL語(yǔ)句的綜合時(shí),只有具備硬件對(duì)應(yīng)關(guān)系的語(yǔ)句才能被綜合;不同的綜合工具或單元庫(kù)對(duì)語(yǔ)言的支持能力不同。,HDL綜合工具:Synplify,一種專(zhuān)用的綜合工具,可以支持較大范圍HDL語(yǔ)句的綜合; 帶有較全面的PLD器件庫(kù),支持采用多家公司的各種CPLD或FPGA器件;

16、可以給出電路的RTL實(shí)現(xiàn)方式,為電路的進(jìn)一步優(yōu)化設(shè)計(jì)提供參考。,Synplify Pro 7.6基本使用流程,點(diǎn)擊圖標(biāo)、打開(kāi)程序; 建立約束和選項(xiàng): 點(diǎn)擊Impl Option按鈕,打開(kāi)約束和選項(xiàng)窗口;器件選擇: 選擇技術(shù)(公司型號(hào))、器件類(lèi)別、封裝形式、速度級(jí)別;對(duì)布局選項(xiàng)進(jìn)行設(shè)置(對(duì)于不同的技術(shù),選項(xiàng)不同);,Synplify Pro 7.6基本使用流程,點(diǎn)擊圖標(biāo)、打開(kāi)程序;,Synplify Pro 7.6基本使用流程,約束選擇: 通常采用自動(dòng)約束方式,以評(píng)估設(shè)計(jì)可能實(shí)現(xiàn)的最快速度;自動(dòng)約束只能對(duì)Atera和Xilinx的部分器件實(shí)行。要想對(duì)IO端口進(jìn)行自動(dòng)約束,應(yīng)該在約束選項(xiàng)中,選擇U

17、se clock period for unconstrained IO;否則系統(tǒng)只對(duì)觸發(fā)器之間的通道進(jìn)行約束。,Synplify Pro 7.6基本使用流程,打開(kāi)或新建一個(gè)項(xiàng)目 (Open ProjectNew Project); 添加文件(Add File); 點(diǎn)擊文件名,打開(kāi)文本窗口,進(jìn)行文件的輸入編輯; 保存編輯完成的文件后,回到項(xiàng)目窗口,運(yùn)行綜合程序(Run);,對(duì)綜合結(jié)果的分析,通過(guò)對(duì)綜合文件進(jìn)行分析(View Log),可以得到器件綜合的各種信息: 時(shí)間特性(TIMING REPORT): 最長(zhǎng)延遲時(shí)間/最高頻率;各端口的時(shí)間信息; 面積特性(AREA REPORT): 器件使用

18、量(IO單元、LUT單元、DSP塊),門(mén)輸入數(shù)量,節(jié)點(diǎn)數(shù)量;,設(shè)計(jì)優(yōu)化程度的衡量,通過(guò)對(duì)綜合結(jié)果的分析比較,可以在一定程度上判斷設(shè)計(jì)的優(yōu)劣程度。在此階段,設(shè)計(jì)的目標(biāo)應(yīng)該是使電路的頻率最高,面積最小。需要注意的是,由于各公司的各種等級(jí)的器件性能不同,對(duì)設(shè)計(jì)優(yōu)劣程度的比較應(yīng)該在同一型號(hào)的器件上進(jìn)行。,電路的結(jié)構(gòu)視圖,綜合后的電路結(jié)構(gòu)可以通過(guò)電路視圖分析綜合的效果,電路視圖可以給出電路中所有基本器件的種類(lèi)和數(shù)量,也給出端口和節(jié)點(diǎn)的數(shù)量;每個(gè)器件、端口、節(jié)點(diǎn)都給予了相應(yīng)的命名;在電路視圖中雙擊任何器件,可以顯示程序中與之相關(guān)的語(yǔ)句;,RTL視圖,由基本電路單元連接成的電路,與綜合器件無(wú)關(guān),由于不同語(yǔ)句

19、不同方法會(huì)導(dǎo)致不同的RTL電路,因此RTL電路可以用于客觀地評(píng)價(jià)電路的設(shè)計(jì)效果;根據(jù)該電路使用的邏輯單元,可以估計(jì)電路中各路徑的延遲時(shí)間,為前仿真提供支持。,技術(shù)視圖,與綜合器件相關(guān)的電路圖; 選擇不同的器件可以綜合出不同的技術(shù)視圖;分為單元電路圖和門(mén)級(jí)電路圖兩種形式;,單元電路圖,顯示電路使用的PLD單元塊的使用量和相應(yīng)的連接關(guān)系,可以用于評(píng)價(jià)該電路采用PLD設(shè)計(jì)時(shí)在特定器件中的使用情況;,門(mén)級(jí)電路圖,將電路在器件中的實(shí)現(xiàn)情況分解為基本邏輯單元的連接方式,可以用于分析電路的邏輯關(guān)系,便于電路優(yōu)化時(shí)進(jìn)行修改。,PLD設(shè)計(jì)的時(shí)間特性分析,在技術(shù)視圖中,可以查看各器件的時(shí)間特性(HDL Analy

20、stShow Timing Information),選擇這一操作后,每個(gè)器件上用紅色數(shù)字標(biāo)明該器件的信號(hào)到達(dá)時(shí)間和時(shí)間容限;可以通過(guò)顯示關(guān)鍵路徑(Show Critical Path)選出最長(zhǎng)延遲路徑;對(duì)關(guān)鍵路徑的分析有利于對(duì)電路結(jié)構(gòu)進(jìn)行優(yōu)化。,設(shè)計(jì)工具:MAX+PLUS ,PLD主要廠商Altera公司設(shè)計(jì)的EDA工具; 可采用原理圖輸入和文本輸入等多種設(shè)計(jì)輸入方式; 可支持VHDL、Verilog HDL、AHDL等多種硬件設(shè)計(jì)語(yǔ)言; 可進(jìn)行編輯、編譯、仿真、綜合、芯片編程等設(shè)計(jì)全過(guò)程操作;,MAX+PLUS 的主要使用方法,設(shè)計(jì)輸入: 點(diǎn)擊圖標(biāo)、打開(kāi)程序; 建立新文件,打開(kāi)文本編輯器

21、file/save:建立一個(gè).vhd文件; 輸入編輯VHDL程序; 輸入完畢之后保存文件;,MAX+PLUS 的主要使用方法,建立項(xiàng)目、指定器件: 選擇file/project/set project to current file,為當(dāng)前文件建立項(xiàng)目; 選擇asigne/device: FLEX10K/AUTO,為編譯目標(biāo)指定PLD器件;,MAX+PLUS 的主要使用方法,檢查、編譯: 對(duì)程序進(jìn)行保存、檢查;根據(jù)檢查提示錯(cuò)誤對(duì)程序進(jìn)行修改,直到完成檢查; 使用編譯器對(duì)程序進(jìn)行編譯; 編譯成功后,可選擇file/create default symbol 將所設(shè)計(jì)電路保存為符號(hào)文件(模塊);,

22、MAX+PLUS 的主要使用方法,設(shè)計(jì)結(jié)果分析: 在文本編輯器中,打開(kāi)同名的.rpt文件(報(bào)告文件),檢查對(duì)所選擇PLD器件編程的詳細(xì)結(jié)果;利用Floorplan Editor中檢查器件的布局連線情況;利用Timing Analyzer檢查器件各端口間的傳輸延遲;,MAX+PLUS 的主要使用方法,仿真信號(hào)設(shè)置: 打開(kāi)波形編輯器(waveform editor); 用右鍵點(diǎn)擊Name區(qū)域,點(diǎn)擊List,選定端口; 在File/End time中選擇仿真時(shí)間長(zhǎng)度,在Option/Grid size中選擇時(shí)鐘刻度; 單擊輸入端口的value,設(shè)定輸入信號(hào)波形: 完成所有輸入信號(hào)的設(shè)定后,保存文件;

23、,MAX+PLUS 的主要使用方法,器件仿真: 打開(kāi)仿真器(simulator),進(jìn)行仿真;仿真結(jié)束后OpenSCF即可看到各輸出信號(hào)的波形;可以檢查輸入/輸出關(guān)系是否符合設(shè)計(jì)要求; 由于編譯時(shí)已經(jīng)將設(shè)計(jì)對(duì)應(yīng)到具體器件中,因此仿真結(jié)果會(huì)帶有相應(yīng)的時(shí)間延遲,類(lèi)似于前仿真。,MAX+PLUS 的主要使用方法,器件下載: 打開(kāi)仿真器(simulator),進(jìn)行仿真;仿真結(jié)束后OpenSCF即可看到各輸出信號(hào)的波形;可以檢查輸入/輸出關(guān)系是否符合設(shè)計(jì)要求; 由于編譯時(shí)已經(jīng)將設(shè)計(jì)對(duì)應(yīng)到具體器件中,因此仿真結(jié)果會(huì)帶有相應(yīng)的時(shí)間延遲,類(lèi)似于前仿真。,利用圖形輸入法的設(shè)計(jì),通常在PLD廠商提供的綜合EDA工具

24、中,都可以采用原理圖的形式進(jìn)行設(shè)計(jì)輸入: 打開(kāi)程序,選擇建立一個(gè)圖形文件,打開(kāi)圖形編輯窗口;在圖形編輯窗口中雙擊,可以從各種庫(kù)中選取需要的各種功能器件和端口; 對(duì)器件進(jìn)行連線,可以通過(guò)電路邏輯圖實(shí)現(xiàn)電路設(shè)計(jì)。,MAX+PLUS 中包含的器件庫(kù),基本門(mén)級(jí)單元庫(kù):包含主要的基本邏輯單元和端口,如NOT、AND、OR、XOR、LATCH、FF等; 常用功能單元庫(kù):主要是74系列的各種中規(guī)模功能模塊,如譯碼、編碼、MUX、加法、比較、寄存器、計(jì)數(shù)器等; 參數(shù)化模塊庫(kù):常用的組合及時(shí)序模塊,端口數(shù)量和功能可以自由設(shè)定。,采用波形輸入方法進(jìn)行電路設(shè)計(jì),打開(kāi)程序;打開(kāi)波形編輯窗口; 雙擊Name區(qū)域,對(duì)輸入

25、/輸出端口進(jìn)行設(shè)置命名; 端口設(shè)置完畢后,點(diǎn)擊各端口的取值區(qū)為各端口設(shè)置信號(hào);,采用波形輸入方法進(jìn)行電路設(shè)計(jì),對(duì)組合電路,通常按真值表方式設(shè)置輸入信號(hào); 對(duì)于時(shí)序電路,通常按狀態(tài)轉(zhuǎn)換圖的順序設(shè)置信號(hào); 信號(hào)設(shè)置完畢后,將設(shè)計(jì)文件保存為(.wdf)文件; 保存之后,就可以通過(guò)編譯形成模塊符號(hào)及相應(yīng)的電路文件;,MAX+PLUS 的特點(diǎn),可以使用多種設(shè)計(jì)輸入方法進(jìn)行設(shè)計(jì); 可以在同一工具中完成從設(shè)計(jì)輸入、綜合、仿真直到下載到器件的整個(gè)設(shè)計(jì)流程; 具有豐富的數(shù)據(jù)庫(kù)可以利用; 只能采用可綜合的設(shè)計(jì)語(yǔ)言,對(duì)VHDL的支持面較小。,VHDL硬件描述語(yǔ)言 Very high speed integratio

26、n circuits HDL,起源: 1985年,美國(guó)國(guó)防部提出計(jì)劃; 1987年成為IEEE1076標(biāo)準(zhǔn); 1993年進(jìn)一步修訂完善; 是目前標(biāo)準(zhǔn)化程度最高,適應(yīng)性最廣的HDL語(yǔ)言;,VHDL硬件描述語(yǔ)言 Very high speed integration circuits HDL,特點(diǎn): 全方位硬件描述從系統(tǒng)到電路 多種描述方式適應(yīng)層次化設(shè)計(jì) 數(shù)據(jù)類(lèi)型豐富,語(yǔ)法嚴(yán)格清晰 串行和并行通用,物理過(guò)程清楚 與工藝結(jié)構(gòu)無(wú)關(guān),可用于各類(lèi)EDA工具,VHDL描述形式,硬件電路模型: 電路模塊,具有外部接口和內(nèi)部結(jié)構(gòu) VHDL:用于描述硬件的結(jié)構(gòu)性程序,采用文本文件編寫(xiě);用程序模塊表達(dá)硬件模塊:設(shè)定

27、外部端口,設(shè)計(jì)內(nèi)部結(jié)構(gòu)。,VHDL的程序結(jié)構(gòu),VHDL程序由模塊構(gòu)成,每個(gè)模塊對(duì)應(yīng)于一個(gè)電路塊; 模塊由三部分組成: 庫(kù)和包 library(設(shè)計(jì)資源) 實(shí)體 entity (外部端口) 構(gòu)造體 architecture(內(nèi)部結(jié)構(gòu)),VHDL的程序示例,library ieee; use ieee.std_logic_1164.all; entity inhibit is port ( x,y: in std_logic ; z: out std_logic); end inhibit; architecture rtl of inhibit is begin z=1 when x=1 and

28、 y=0 else 0; end rtl;,簡(jiǎn)單的實(shí)體,entity entity-name is port (signal-name : mode signal-type; signal-name : mode signal-type); end entity-name;,比較復(fù)雜的實(shí)體,ENTITY 實(shí)體名 IS GENERIC語(yǔ)句; PORT語(yǔ)句; (BEGIN 決斷語(yǔ)句、過(guò)程調(diào)用、進(jìn)程說(shuō)明等) END 實(shí)體名;,VHDL的實(shí)體: entity,要點(diǎn): 實(shí)體以 entity 實(shí)體名 is 開(kāi)始;以end 實(shí)體名; 結(jié)束; 實(shí)體的主要內(nèi)容為端口(port)說(shuō)明,其中主要包括: 實(shí)體名、信號(hào)

29、名、信號(hào)模式、信號(hào)類(lèi)型,實(shí)體名稱(chēng)和信號(hào)名稱(chēng),每個(gè)實(shí)體在設(shè)計(jì)中對(duì)應(yīng)一個(gè)電路模塊,實(shí)體中的每個(gè)信號(hào)在設(shè)計(jì)中對(duì)應(yīng)模塊的一個(gè)端口;實(shí)體名稱(chēng)和信號(hào)名稱(chēng)應(yīng)具有意義,方便記憶;名稱(chēng)不能重復(fù)使用; 對(duì)模塊進(jìn)行編譯時(shí),文件名和項(xiàng)目名必須與實(shí)體名相同;,實(shí)體名稱(chēng)和信號(hào)名稱(chēng),名稱(chēng)由英文字母和數(shù)字構(gòu)成,英文字母開(kāi)頭;可在名稱(chēng)中使用不連接的下劃線符號(hào)_;字母不分大小寫(xiě); 不能與關(guān)鍵字沖突。,實(shí)體名稱(chēng)和信號(hào)名稱(chēng),例:合法的名稱(chēng) name , name2, name_a, name_2_3m; 非法的名稱(chēng) ill_egle、_illegle、illegle_、2bad、ill egle、ill/egle 特殊的名稱(chēng) 74L

30、S04、vhdl、VHDL,信號(hào)模式,每個(gè)端口信號(hào)都必須規(guī)定信號(hào)模式; 信號(hào)模式規(guī)定信號(hào)流動(dòng)的方向; in 輸入端口 out 輸出端口 inout 雙向端口 buffer 緩沖輸出端口,內(nèi)部端口Y與外部端口X的連接規(guī)則,從外向內(nèi): X Y in in out out inout 任意 (可通過(guò)多源控制) buffer 任意 (只能通過(guò)單源控制),內(nèi)部端口Y與外部端口X的連接規(guī)則,從內(nèi)向外: Y X in in、inout、buffer out out、inout inout inout (可通過(guò)多源控制) buffer buffer (只能通過(guò)單源控制),信號(hào)數(shù)據(jù)類(lèi)型,所有信號(hào)都必須規(guī)定其類(lèi)型

31、; 數(shù)字電路設(shè)計(jì)中最簡(jiǎn)單的類(lèi)型為: bit bit_vector 最常用的類(lèi)型為: std_logic 單個(gè)邏輯量 std_logic_vector 邏輯數(shù)組、總線邏輯量,實(shí)體的其它語(yǔ)法要點(diǎn),除了第一行 entity is 以外,每一句以分號(hào)“;”結(jié)束 ; 編寫(xiě)程序時(shí),一行可以含若干句(以分號(hào)間隔),一句也可以寫(xiě)若干行; 可以用“-”符號(hào)后接說(shuō)明文字,這些文字用于幫助理解程序,不會(huì)對(duì)編譯產(chǎn)生影響; 單詞之間必須使用空格;并列信號(hào)間使用逗號(hào);,實(shí)體編寫(xiě)的示例 4選1數(shù)據(jù)選擇器 kmux4,entity kmux4 is port ( d0,d1,d2,d3: in std_logic; a0,a

32、1 : in std_logic; s : in std_logic; y : out std_logic); end kmux4;,實(shí)體編寫(xiě)的示例 4選1數(shù)據(jù)選擇器 kmux4,entity kmux4 is port ( d: in std_logic_vector (0 to 3); a : in std_logic_vector (1 downto 0); s : in std_logic; y : out std_logic); end kmux4;,類(lèi)屬說(shuō)明 generic,實(shí)體中可以設(shè)置類(lèi)屬說(shuō)明語(yǔ)句; 類(lèi)屬說(shuō)明位于port語(yǔ)句之前; 類(lèi)屬是對(duì)電路模塊可變常數(shù)的說(shuō)明; 類(lèi)屬值在編寫(xiě)

33、本模塊時(shí)可以設(shè)置為一個(gè)確定值;在其他程序調(diào)用該模塊時(shí),可以對(duì)類(lèi)屬值進(jìn)行重新設(shè)定;,類(lèi)屬說(shuō)明的基本格式,generic ( cons_name : cons_type: =cons_value ; cons_name : cons_type: =cons_value) ;,類(lèi)屬說(shuō)明的示例,entity kmux_n is generic(n:integer:=4; m:integer:=2); port ( d: in std_logic_vector (n-1 downto 0); a : in std_logic_vector (m-1 downto 0); s : in std_logic

34、; y : out std_logic); end kmux_n;,類(lèi)屬說(shuō)明的示例,通過(guò)調(diào)用時(shí)改動(dòng)常數(shù),得到16位的MUX :u1: kmux_n generic map(16,4) port map (x,y,e,f);,Testbench的實(shí)體,測(cè)試板是一種特殊的電路模塊,只用于電路的仿真,因此該實(shí)體可以不含任何輸入/輸出端口。(該實(shí)體不可綜合) 例: entity fa_testbench is end fa_testbench;,VHDL的構(gòu)造體: architecture,architecture arch_name of entity_name is 說(shuō)明部分 declaratio

35、ns and definitions; begin 語(yǔ)句部分 concurrent statement; end arch_name;,構(gòu)造體語(yǔ)法要點(diǎn),每個(gè)構(gòu)造體必須屬于一個(gè)實(shí)體; 每個(gè)構(gòu)造體必須有一個(gè)名稱(chēng): 通??梢愿鶕?jù)描述方式起名: str rtl beh 構(gòu)造體分為兩部分: is bigin: 說(shuō)明語(yǔ)句; bigin end: 并行語(yǔ)句;,構(gòu)造體的說(shuō)明語(yǔ)句,type declarations; 類(lèi)型說(shuō)明 signal declarations; 信號(hào)說(shuō)明 constant declarations; 常量說(shuō)明 component declarations; 元件說(shuō)明 function d

36、efinitions; 函數(shù)說(shuō)明 procedure definitions; 過(guò)程說(shuō)明,構(gòu)造體的并行語(yǔ)句,信號(hào)賦值語(yǔ)句 數(shù)據(jù)流描述 元件例化語(yǔ)句 結(jié)構(gòu)描述 進(jìn)程語(yǔ)句 行為描述 每條并行語(yǔ)句形成一個(gè)電路邏輯單元。,構(gòu)造體的其他語(yǔ)法要點(diǎn),除了第一句和begin句外,其余各句均以分號(hào)結(jié)束; 在每一部分中,各語(yǔ)句處于并列狀態(tài),執(zhí)行時(shí)不分先后次序; 定義語(yǔ)句需要考慮使用的順序。,VHDL的數(shù)據(jù)對(duì)象,Signal 信號(hào) Constant 常量 Variable 變量 每個(gè)數(shù)據(jù)對(duì)象必須有特定的名稱(chēng); 數(shù)據(jù)對(duì)象的命名規(guī)則與實(shí)體名相同;,VHDL的信號(hào):signal,電路中端口、連接線的體現(xiàn),具有具體物理含義

37、,在構(gòu)造體內(nèi)為全局變量; 信號(hào)使用前必須先進(jìn)行說(shuō)明: 輸入/輸出信號(hào)在實(shí)體中說(shuō)明; 通用信號(hào)在包集合中進(jìn)行說(shuō)明; 模塊內(nèi)部信號(hào)在結(jié)構(gòu)體內(nèi)說(shuō)明;,信號(hào)說(shuō)明語(yǔ)句基本格式,signal signal_name : signal_type; 信號(hào)名 信號(hào)類(lèi)型 例:signal temp : std_logic; signal bus_a : std_logic_vector(7 downto 0); 注意:端口(輸入/輸出)信號(hào)已在實(shí)體中說(shuō)明,在結(jié)構(gòu)體中就不再說(shuō)明;,信號(hào)的賦值,在程序中采用“=”(賦值語(yǔ)句)進(jìn)行: 信號(hào)名 = 信號(hào)值(表達(dá)式); 例: temp=1;z=x and not y; d=

38、“0110”; 賦值號(hào)兩邊的信號(hào)原則上必須為相同類(lèi)型; 信號(hào)可在構(gòu)造體內(nèi)、過(guò)程、進(jìn)程內(nèi)賦值; 信號(hào)不能在函數(shù)內(nèi)賦值;,VHDL的常量: constant,根據(jù)說(shuō)明所在的位置,可表現(xiàn)為全局或局部常量; 常量必須在說(shuō)明時(shí)賦值,所賦值與說(shuō)明的類(lèi)型必須一致;常量一旦賦值就不能在程序中通過(guò)語(yǔ)句更改; 常量不一定有硬件對(duì)應(yīng);常見(jiàn)的硬件對(duì)應(yīng)是固定的接地線或正電源。,常量說(shuō)明語(yǔ)句基本格式,constant 常量名:常量類(lèi)型:= 常量值 例: constant vcc: real:= 5.0; constant grn: std_logic:= 0; constant tpd: time:= 5ns; cons

39、tant fbus:std_logic_vector:=“0110”;,VHDL的變量: variable,表達(dá)各類(lèi)運(yùn)算中間量,通常對(duì)應(yīng)于計(jì)算機(jī)中的一個(gè)存儲(chǔ)位置,沒(méi)有具體硬件對(duì)應(yīng),主要用于電路的行為描述; 變量在子程序(函數(shù)、過(guò)程、進(jìn)程)中進(jìn)行說(shuō)明,只能為局部變量; 變量只在順序語(yǔ)句中使用;,變量說(shuō)明語(yǔ)句基本格式,variable 變量名:變量類(lèi)型 例: variable temp : std_logic; variable bus_a : std_logic_vector(7 downto 0);,變量的賦值,采用“:=”符號(hào)進(jìn)行: 變量賦值語(yǔ)句 變量名:= 變量值(表達(dá)式); 例: va

40、:= a ; te := d+c; wb := “1001”; 賦值號(hào)兩邊變量必須為相同類(lèi)型;,變量的賦值,變量在定義時(shí)需要賦初始值: 例: variable c:integer range 1 to 10:=10; variable d:std_logic_vector(7 downto 0):(others=0); 當(dāng)沒(méi)有指定初始值時(shí),默認(rèn)為其數(shù)據(jù)類(lèi)型中的第一個(gè)值(最左邊的值);,變量的賦值,注意: 變量只在函數(shù)、過(guò)程、進(jìn)程等子結(jié)構(gòu)中使用,一旦子結(jié)構(gòu)執(zhí)行結(jié)束,變量值隨即消失; 因此,在一個(gè)結(jié)構(gòu)體中,同一個(gè)變量名可以出現(xiàn)在不同的子程序中,表達(dá)不同的數(shù)據(jù)對(duì)象。,VHDL的數(shù)據(jù)類(lèi)型,每一個(gè)數(shù)據(jù)對(duì)

41、象都必須規(guī)定其類(lèi)型; 類(lèi)型規(guī)定了數(shù)據(jù)的數(shù)據(jù)形式、取值范圍、排列順序、可進(jìn)行的運(yùn)算; VHDL規(guī)定了若干預(yù)定義類(lèi)型,用戶(hù)可以利用預(yù)定義類(lèi)型來(lái)設(shè)置自定義類(lèi)型;,常用預(yù)定義類(lèi)型,預(yù)定義類(lèi)型在相關(guān)的包集合中定義std.standard: bit(位)、boolean(布爾) integer(整數(shù))、real(實(shí)數(shù))ieee.std_logic_1164: std_logic(標(biāo)準(zhǔn)邏輯量);ieee.std_logic_arith: signed、unsigned;,常用預(yù)定義類(lèi)型,bit、bit_vector:2值邏輯 數(shù)據(jù)范圍(0,1),用于邏輯運(yùn)算 說(shuō)明方式: signal x:bit;-x為1位

42、邏輯信號(hào); signal y:bit_vector(3 downto 0);-y為4位邏輯信號(hào),最高位為y(3),在最左邊;,常用預(yù)定義類(lèi)型,bit、bit_vector:常數(shù)表達(dá)形式 一位邏輯量采用單引號(hào): 1 0 多位邏輯量采用雙引號(hào): 1001 可以采用其他進(jìn)制的縮寫(xiě)形式: b 1001 o 7777 xffff,常用預(yù)定義類(lèi)型,boolean:(falth,true) 邏輯量,用于關(guān)系判斷; 可進(jìn)行邏輯運(yùn)算; 不能表達(dá)為多位數(shù)組;,常用預(yù)定義類(lèi)型,integer:(-231-1 - +231-1) 算術(shù)量,用于算術(shù)運(yùn)算; 其子集合有natural和positive; 考慮到電路綜合效率

43、,對(duì)于整數(shù)類(lèi)型,可以在說(shuō)明時(shí)對(duì)數(shù)據(jù)范圍進(jìn)行限制;,常用預(yù)定義類(lèi)型,例:整數(shù)類(lèi)型的范圍 entity t is port(a,b: in integer range 0 to 15; f: out bit); end t; 如果不加范圍限制,a、b都是32位,加限制后,變?yōu)?位;,常用預(yù)定義類(lèi)型,整數(shù)類(lèi)型的一些常數(shù)表達(dá)形式 十進(jìn)制數(shù) 120000=12E4=120_000 ; 二進(jìn)制數(shù) 2#1111_1111#=2:1111_1111: 16進(jìn)制數(shù) 16#FFFF#=16:FFFF:,常用預(yù)定義類(lèi)型,character、string:ISO 8位字符集(前128個(gè)為ASC編碼符號(hào)),綜合性較差,

44、主要用于仿真; 在字符類(lèi)型中,大寫(xiě)字母和小寫(xiě)字母表達(dá)不同含義,需要加以區(qū)分; 例如:A和a分別表達(dá)不同的字符。,常用預(yù)定義類(lèi)型,可通過(guò)連接運(yùn)算將字符組合為字符串,或?qū)⒍套址B接成長(zhǎng)字符串: ,常用預(yù)定義類(lèi)型,real:(-1038 - +1038)算術(shù)量,只能用于抽象描述及仿真,不可綜合; 例:十進(jìn)制數(shù) 120000.0=1.2E5=12.0E4 time:物理量,由整數(shù)和相關(guān)單位字符構(gòu)成,不可綜合; 例: 50 ns 3 sec 25 hr 可進(jìn)行算術(shù)運(yùn)算,常用預(yù)定義類(lèi)型,std_logic、std_logic_vector:8值邏輯 數(shù)據(jù)范圍(X,0,1,Z,W,L,H,-) std_u

45、logic、std_ulogic_vector:9值邏輯 數(shù)據(jù)范圍(U,X,0,1,Z,W,L,H,-) 用于邏輯運(yùn)算;,常用預(yù)定義類(lèi)型,std_logic、std_logic_vector:8值邏輯 數(shù)據(jù)范圍(X,0,1,Z,W,L,H,-) 用于邏輯運(yùn)算; X:強(qiáng)不定; 0:強(qiáng)0; 1:強(qiáng)1; Z:高阻 W:弱不定; L:弱0; H:弱1; -:不出現(xiàn); 只有0、1、Z可以綜合,其他只用于仿真;,常用預(yù)定義類(lèi)型,std_logic、std_logic_vector:特點(diǎn) 此類(lèi)信號(hào)能夠更清楚地表現(xiàn)電路中的實(shí)際電平情況; 設(shè)置有解決總線沖突問(wèn)題的專(zhuān)用函數(shù); 當(dāng)多個(gè)電平連接到同一接點(diǎn)上的時(shí)候,

46、可以根據(jù)該判決函數(shù)決定連接點(diǎn)狀態(tài)。,常用預(yù)定義類(lèi)型,std_logic、std_logic_vector:判決函數(shù)表,常用預(yù)定義類(lèi)型,std_ulogic、std_ulogic_vector:9值邏輯 數(shù)據(jù)范圍(U,X,0,1,Z,W,L,H,-) 增加了一個(gè)初始不定值:U; 8值邏輯是它的子集合; 缺少總線沖突函數(shù),只能通過(guò)設(shè)計(jì)消除總線沖突。,常用預(yù)定義類(lèi)型,signed、unsigned:符號(hào)數(shù)和無(wú)符號(hào)數(shù) 屬于二進(jìn)制算術(shù)量,可以通過(guò)重載函數(shù)(overload)支持算術(shù)運(yùn)算;相關(guān)運(yùn)算規(guī)則在IEEE.std_logic_arith中定義。,用戶(hù)定義數(shù)據(jù)類(lèi)型,VHDL允許用戶(hù)自行定義類(lèi)型; 自定

47、義類(lèi)型的元素實(shí)際上全部來(lái)自預(yù)定義類(lèi)型; 用戶(hù)定義類(lèi)型必須在使用以前進(jìn)行類(lèi)型說(shuō)明; 用戶(hù)定義類(lèi)型可以分為以下三種形式: 子類(lèi)型 枚舉類(lèi)型 數(shù)組類(lèi)型,子類(lèi)型,從已有類(lèi)型中取連續(xù)子集合加以定義 例: subtype twoval_logic is std_logic range 0 to 1; subtype bitnum is integer range 31 downto 0 ; 子類(lèi)型的數(shù)據(jù)可以和原有類(lèi)型的數(shù)據(jù)進(jìn)行直接運(yùn)算;子類(lèi)型的數(shù)據(jù)寬度與原有類(lèi)型的數(shù)據(jù)寬度一致;,子類(lèi)型,當(dāng)原有類(lèi)型為integer時(shí),也可以采用下列簡(jiǎn)化定義,省略類(lèi)型說(shuō)明: type 子類(lèi)型名稱(chēng) is range 起點(diǎn) to

48、 終點(diǎn); 例: type a is range 32 to 212; 整數(shù)升序定義 type b is range 31 downto 0; 整數(shù)降序定義,枚舉類(lèi)型,通過(guò)列舉全部元素集合進(jìn)行定義: type type-name is ( value list) ; 例: type move is (1,0,A,a); type tra_light is (reset, stop, wait, go); type color is (red,green,blue,white,black),枚舉類(lèi)型的特點(diǎn),在括號(hào)中按順序列舉該類(lèi)型中的全部元素;各元素間以逗號(hào)分隔; 在枚舉類(lèi)型中,數(shù)據(jù)大小關(guān)系根據(jù)順

49、序進(jìn)行排列,從小到大,并根據(jù)數(shù)據(jù)元素的數(shù)量,采用最短的二進(jìn)制自然碼表達(dá);,數(shù)組類(lèi)型,數(shù)組為同類(lèi)型元素的有序排布(從左向右),每一元素與一個(gè)數(shù)組指標(biāo)對(duì)應(yīng); 數(shù)組指標(biāo)通常為整數(shù);也可以采用枚舉類(lèi)型的元素來(lái)表達(dá)。 只有一維和二維數(shù)組可以綜合,高維數(shù)組不可綜合;,數(shù)組說(shuō)明示例,type byte is array (7 downto 0) of std_logic; type monthly_count is array (1 to 12) of integer; type length is array (natural range ) of bit;,數(shù)組下標(biāo)可以按升序或降序排列,也可以采用不定范

50、圍;,數(shù)組說(shuō)明示例,constant word_len: integer := 32; type word is array (word_len-1 downto 0)of std_logic; constant num_regs: integer := 8; type reg_file is array (1 to num_regs) of word;,數(shù)組下標(biāo)也可以采用常數(shù)參量定義;,多維數(shù)組定義的示例,type row is array (7 downto 0) of std_logic; -先定義一維數(shù)組; type matrix is array (0 to 3) of row; -

51、再定義1x1數(shù)組; type matrix is array (0 to 3) of std_logic_vector (7 downto 0); -直接定義1x1數(shù)組; type matrix is array (0 to 3,7 downto 0) of std_logic;-直接定義2維數(shù)組;,數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,當(dāng)數(shù)據(jù)需要交替進(jìn)行算術(shù)和邏輯運(yùn)算時(shí),就需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換; 一般的類(lèi)型轉(zhuǎn)換通常由專(zhuān)門(mén)的函數(shù)進(jìn)行,這些函數(shù)存放在特定的包集合中; 子類(lèi)型與基本類(lèi)型之間可以直接賦值,不需要進(jìn)行類(lèi)型轉(zhuǎn)換;個(gè)別非常關(guān)聯(lián)的類(lèi)型可以通過(guò)賦值進(jìn)行直接轉(zhuǎn)換;,常用的數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù),包集合:ieee.std_log

52、ic_1164 bitstd_logic : to_stdlogic(a) std_logicbit : to_bit (a) bit_vectorstd_logic_vector : to_stdlogicvector(a) std_logic_vectorbit_vector : to_bitvector (a),常用的數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù),包集合:ieee.std_logic_unsigned std_logicinteger : conv_integer (a) 包集合:ieee.std_logic_arith integerstd_logic : conv_std_logic_vecto

53、r( a, l ) 注:a 為待轉(zhuǎn)換量,l為轉(zhuǎn)換后數(shù)組的位長(zhǎng)度;,VHDL的運(yùn)算符號(hào),運(yùn)算符號(hào)主要用于各類(lèi)表達(dá)式中; VHDL中主要有六類(lèi)運(yùn)算符號(hào): 賦值運(yùn)算、邏輯運(yùn)算、算術(shù)運(yùn)算 關(guān)系運(yùn)算、連接運(yùn)算、移位運(yùn)算,運(yùn)算的優(yōu)先順序,VHDL中運(yùn)算沒(méi)有左右優(yōu)先級(jí)差別,同一表達(dá)式中進(jìn)行多個(gè)運(yùn)算時(shí)必須用括號(hào)表達(dá)先后差別; 在一般運(yùn)算中,優(yōu)先順序排列為: 算術(shù)關(guān)系邏輯 在同類(lèi)運(yùn)算中,單目運(yùn)算優(yōu)先; 在所有運(yùn)算符號(hào)中,NOT的優(yōu)先級(jí)別最高; 可以通過(guò)加括號(hào)來(lái)改變運(yùn)算的優(yōu)先順序;,運(yùn)算賦值, 數(shù)組內(nèi)部分元素賦值(括號(hào)內(nèi)使用);,運(yùn)算賦值,所有數(shù)據(jù)類(lèi)型都可以進(jìn)行運(yùn)算賦值; 賦值號(hào)兩邊的數(shù)據(jù)類(lèi)型原則上應(yīng)該相同; 在

54、進(jìn)行賦值時(shí),若右端數(shù)據(jù)類(lèi)型難以判斷,可以在數(shù)據(jù)前加上“類(lèi)型名”進(jìn)行限定。 例:a0=std_logic_vector ( 01101010 );,數(shù)據(jù)賦值的例子:信號(hào)、變量、常量,signal x1:std_logic; variable y:std_logic_vector(3 downto 0); constant z:std_logic_vector(7 downto 0):= 11101100; x1,others=0);,數(shù)據(jù)賦值的例子:1維數(shù)組、整數(shù)下標(biāo),signal x1:std_logic_vector(7 downto 0):=11101100; x1 0011, 3=Z,

55、others =0); x1(4 downto 2) =110; x1(5) =1;,數(shù)據(jù)賦值的例子:1維數(shù)組、自定義下標(biāo),type traffic_light_state is (reset, stop, wait, go); type statecount is array (traffic_light_state) of bit; signal x2:statecount; x2(stop)=1; x2(stop to go)=110;,數(shù)據(jù)賦值的例子:1X1維數(shù)組,type row is array (7 downto 0) of std_logic; type matrix is a

56、rray (0 to 3) of row; signal x3:matrix; x3 =(00001111,00101100, 11010011,11000011); x3(2)=11010011; x3(2)(4)=1;,數(shù)據(jù)賦值的例子:2維數(shù)組,type matrix2 is array (0 to 3,7 downto 0) of std_logic; signal x4:matrix2; x4 = (00001111,00101100, 11010011,11000011); x4(2,7 downto 0)=11010011; x4(2,4)=1;,邏輯運(yùn)算,not and or n

57、and nor xor 適用數(shù)據(jù)類(lèi)型:邏輯量 bit、bit_vector boolean std_logic、std_logic_vector,邏輯運(yùn)算,邏輯運(yùn)算與基本邏輯單元器件形成直接對(duì)應(yīng); 邏輯運(yùn)算結(jié)果為同類(lèi)型邏輯量; 對(duì)數(shù)組類(lèi)型進(jìn)行邏輯運(yùn)算時(shí),參與運(yùn)算的兩個(gè)數(shù)據(jù)位數(shù)必須相等,所做運(yùn)算為對(duì)應(yīng)位進(jìn)行;,邏輯運(yùn)算,合法的邏輯運(yùn)算: x= not a and b; x= not (a and b); x= (a or b) and c; x= a or (b and c); x= a and b and c; 不合法的邏輯運(yùn)算: x=a or b and c;,算術(shù)運(yùn)算,/ (除)* (乘)

58、 + (加) - (減) mod(求模) rem(取余) *(指數(shù)) abs(絕對(duì)值) 適用數(shù)據(jù)類(lèi)型:算術(shù)量 integerrealsignedunsignedtime 使用ieee.std_logic_signed和ieee.std_logic_unsigned后,可以對(duì)std_logic和std_logic_vector進(jìn)行加減運(yùn)算;,算術(shù)運(yùn)算,算術(shù)運(yùn)算用于抽象的編程(行為設(shè)計(jì)); 只有少數(shù)算術(shù)運(yùn)算符能夠進(jìn)行綜合:加、減、乘;綜合結(jié)果與工具有關(guān); 通常算術(shù)運(yùn)算的程序通過(guò)后,還需要對(duì)所使用的加法器、乘法器進(jìn)行具體設(shè)計(jì)優(yōu)化;,比較運(yùn)算,= (大于等于) (大于) (小于) /= (不等于) = (等于) 適用數(shù)據(jù)類(lèi)型: =和/=適用于所有類(lèi)型; 其他運(yùn)算適用于整數(shù)、實(shí)數(shù)、位、位矢量,以及枚舉類(lèi)型和數(shù)組類(lèi)型;,比較運(yùn)算,比較運(yùn)算對(duì)應(yīng)于比較器,通常由異或門(mén)構(gòu)成,能夠綜合; 比較運(yùn)算可以比較位長(zhǎng)度不相同的情況(從左對(duì)齊,向右逐位比較); 比較運(yùn)算的結(jié)果為boolean類(lèi)型: false true,連接運(yùn)算,y=1101;z=x 使用連接運(yùn)算時(shí)需要注意數(shù)據(jù)類(lèi)型的匹配。,分割運(yùn)算,將一個(gè)已知的數(shù)組對(duì)象分割為不同的部分,類(lèi)似于連接運(yùn)算的逆運(yùn)算; 例: signal word:bit_vector(7_downto 0); alias mb:bit is wo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論