可編程ASIC應(yīng)用技術(shù)(第三章)課件_第1頁
可編程ASIC應(yīng)用技術(shù)(第三章)課件_第2頁
可編程ASIC應(yīng)用技術(shù)(第三章)課件_第3頁
可編程ASIC應(yīng)用技術(shù)(第三章)課件_第4頁
可編程ASIC應(yīng)用技術(shù)(第三章)課件_第5頁
已閱讀5頁,還剩170頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、3.1 VHDL的基本語法規(guī)則 3.2 順序語句和并行語句的描述 3.3 VHDL的屬性描述 第3章 VHDL的基本語法現(xiàn)象 1超高速集成電路硬件描述語言(Very high speed integrated circuit Hardware Description Language,VHDL)最先由美國國防部為實(shí)現(xiàn)自己的超高速集成電路計(jì)劃而提出,目的是要開發(fā)一種不受各廠商專用集成電路特點(diǎn)限制的通用硬件設(shè)計(jì)方法,使不同廠商的硬件能用一種通用的標(biāo)準(zhǔn)化語言來描述和設(shè)計(jì)。 什么是VHDL?1981年6月 1983年7月 1985年8月 1986年3月 1987年12月 1993年9月開始 共同開發(fā)

2、投入使用 標(biāo)準(zhǔn)化 定為標(biāo)準(zhǔn) 新版本 21988年9月30日后,美國國防部就要求開發(fā)ASIC設(shè)計(jì)的合同文件中一律采用VHDL文檔,至此各EDA公司相繼推出自己的VHDL設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和VHDL接口,這樣,VHDL逐步演變?yōu)楣I(yè)標(biāo)準(zhǔn)。特點(diǎn)?VHDL具有與具體工藝和設(shè)計(jì)方法無關(guān)的特點(diǎn),它不屬于某一特定的仿真工具和工業(yè)部門,設(shè)計(jì)者在此語言范圍內(nèi)可自由地選擇工藝和設(shè)計(jì)方法。 3設(shè)計(jì)方便VHDL可以支持自頂向下和基于庫的設(shè)計(jì)方法,支持同步、異步電路、FPGA/CPLD及其它電路設(shè)計(jì)。 硬件描述能力強(qiáng)VHDL具有通過多層次設(shè)計(jì)來描述系統(tǒng)功能的能力,可以進(jìn)行從系統(tǒng)的數(shù)學(xué)模型直至門級電路的描

3、述。VHDL能進(jìn)行系統(tǒng)級的硬件描述,而一些HDL,如Verilog、UDL/I等能進(jìn)行IC級、PCB級描述,但對系統(tǒng)級的硬件進(jìn)行描述的功能相對較差。VHDL用簡潔明確的代碼描述進(jìn)行復(fù)雜控制邏輯的設(shè)計(jì),它還支持設(shè)計(jì)庫和可重復(fù)使用的元件生成,且提供模塊設(shè)計(jì)的創(chuàng)建。4不依賴器件的設(shè)計(jì)VHDL允許設(shè)計(jì)者生成一個(gè)設(shè)計(jì)而并不需要首先選擇一個(gè)用來實(shí)現(xiàn)設(shè)計(jì)的器件,對于同一個(gè)設(shè)計(jì)描述,可以采用多種不同器件結(jié)構(gòu)來實(shí)現(xiàn)其功能。性能評估能力非依賴器件的設(shè)計(jì)和可移植能力,允許設(shè)計(jì)者可采用不同的器件結(jié)構(gòu)和不同的綜合工具來評估設(shè)計(jì)。ASIC移植方便如果將設(shè)計(jì)綜合到CPLD或FPGA,可使設(shè)計(jì)產(chǎn)品以最快速度上市。采用VHDL

4、存在的主要問題是: 電路采用高級的簡明結(jié)構(gòu)的VHDL描述,意味著放棄了對電路門級實(shí)現(xiàn)定義的控制,由綜合工具生成的邏輯實(shí)現(xiàn)效果不好,而且工具不同將導(dǎo)致綜合質(zhì)量不一樣,這些問題將會(huì)隨著技術(shù)進(jìn)步最終解決。561983年,由GDA(GateWay Design Automation)公司的Phil Moorby首創(chuàng)。1989年Cadence公司收購了GDA公司。1990年Cadence公司公開發(fā)表Verilog HDL。1995年IEEE制定并公開發(fā)表Verilog HDL 1364- 1995標(biāo)準(zhǔn)。1999年Verilog標(biāo)準(zhǔn)公開發(fā)表。由于Verilog HDL簡單易學(xué),因行受到許多使用者的歡迎。但

5、由于Verilog HDL在可靠性方面的不足,在對可靠性要求較高的場合,大多采用VHDL。Verilog HDL ?6System C是由Synopsys公司和CoWare公司針對業(yè)界對系統(tǒng)級設(shè)計(jì)語言的需求而合作開發(fā)的。1999年9月27日,40多家世界著名的EDA公司、IP公司、半導(dǎo)體公司和嵌入式軟件公司宣布成立System C 聯(lián)盟。System C 從1999年9月聯(lián)盟建立初期的0.9版本開始更新,2001年10月推出了2.0版本。System C中的基本設(shè)計(jì)是模塊單元,模塊可以使得設(shè)計(jì)者將一個(gè)復(fù)雜的系統(tǒng)分割為一些更小但易于管理的部分。模塊的功能和作用與HDL語言中的模塊相類似,這使習(xí)慣

6、于用HDL進(jìn)行設(shè)計(jì)的設(shè)計(jì)人員可以很容易的轉(zhuǎn)向用System C進(jìn)行設(shè)計(jì)。 System C ?7硬件語言軟件語言的對應(yīng)關(guān)系Verilog,SystemC C VHDL Ada語言種類面向?qū)ο髲?qiáng)類型可靠性靈活性適于軍用Verilog/C是否略弱強(qiáng)略弱VHDL/ Ada是是高略弱是語言的選擇:在系統(tǒng)級采用VHDL,在軟件級采用C語言,在實(shí)現(xiàn)級采用Verilog。8硬件描述語言與軟件描述語言的區(qū)別 軟件語言編寫高級語言程序編譯匯編語言程序編譯相對地址機(jī)器代碼鏈接絕對地址機(jī)器代碼計(jì)算機(jī)逐行執(zhí)行計(jì)算結(jié)果硬件語言編寫高級語言程序編譯和綜合電路圖晶體管連接網(wǎng)表計(jì)算機(jī)串行執(zhí)行仿真位流文件下載芯片根據(jù)庫編譯每個(gè)

7、點(diǎn)每個(gè)時(shí)刻的狀態(tài)值 93.1 VHDL的基本語法規(guī)則 3.1.1 VHDL對標(biāo)識(shí)符的規(guī)定 3.1.2 VHDL的數(shù)據(jù)類型 3.1.3 VHDL的對象描述 3.1.4 VHDL的運(yùn)算操作符 103.1.1 VHDL對標(biāo)識(shí)符的規(guī)定 在VHDL中所使用的名字或名稱叫標(biāo)識(shí)符,如變量名、信號(hào)名、實(shí)體名、結(jié)構(gòu)體名等都是通過標(biāo)識(shí)符來定義和區(qū)別的,在命名這些標(biāo)識(shí)符時(shí)應(yīng)遵守如下規(guī)則:任何標(biāo)識(shí)符的首字母必是英文字母;標(biāo)識(shí)符的英文字母、小寫無區(qū)別;標(biāo)識(shí)符只能由英文字母、數(shù)字和下劃線組成;使用下劃線_時(shí),必須是單一的,且其前后都必須有英文字母或數(shù)字;1標(biāo)識(shí)符的命名規(guī)則11注釋符用連續(xù)兩個(gè)減號(hào)“”表示。注釋從“”符號(hào)開

8、始到該行末尾,以回車或換行符結(jié)束,編譯器不對注釋符后面的文字進(jìn)行處理。用單引號(hào)括起來的大寫字母X表示不確定的位邏輯值,用雙引號(hào)括起來的大寫字母X串表示不確定的位矢量值,如“XXXXX”。 不確定值X不能用小寫,也不能用其他字符代替,否則為錯(cuò)。在VHDL中使用的保留字不能用作為用戶命名的標(biāo)識(shí)符。 1213判斷下列信號(hào)命名的正確與否:signal d_bus:std_logic_vector(7 downto 0);signal 8_bus:std_logic_vector(0 to 7);signal c_bus:std_logic_vector(3downto 0); signal c_ _b

9、us:std_logic_vector(0 to 3); signal d_8_input:std_logic; a=x; a=X; b=“xxxxxxxx”; b=“XXXXXXXX”;-正確-錯(cuò),用數(shù)字開頭-錯(cuò),不能用-錯(cuò),連續(xù)使用下劃線-正確-錯(cuò),不確定值用小寫字母-正確-錯(cuò),不確定值用小寫字母-正確13下標(biāo)名用于指示數(shù)組型變量或信號(hào)的某一元素。下標(biāo)區(qū)間名則用于指示數(shù)組型變量或信號(hào)某一區(qū)間的元素。下標(biāo)名的語句格式為: 標(biāo)識(shí)符(表達(dá)式)其中,“標(biāo)識(shí)符”必須是數(shù)組型的變量或信號(hào)的名字,“表達(dá)式”所代表的值必須是數(shù)組下標(biāo)范圍中的一個(gè)或某一區(qū)間元素的位值。 signal sg1:std_logi

10、c_vector(0 to 5); signal sg2:integer range 0 to 3; y= sg1(4); w= sg2(3);2下標(biāo)名的命名規(guī)則143.1.2 VHDL的數(shù)據(jù)類型 在VHDL中,每一個(gè)對象都有一種類型且只能具有該類型的值,相同類型的對象之間才能進(jìn)行所要求的操作,而且有的操作還要求位長相同。VHDL的數(shù)據(jù)類型分為標(biāo)準(zhǔn)的數(shù)據(jù)類型和用戶定義的數(shù)據(jù)類型及子類型,不同的數(shù)據(jù)類型之間若要進(jìn)行運(yùn)算、代入和賦值,必須進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。VHDL中的數(shù)據(jù)類型可以分為兩大類。第一類:標(biāo)量型,包括整數(shù)類型、實(shí)數(shù)類型、枚舉類型、時(shí)間類型。第二類:復(fù)合類型,可以由小的數(shù)據(jù)類型復(fù)合而成,

11、如可由標(biāo)量型復(fù)合而成。15(1)整數(shù)類型整數(shù)(integer)類型的范圍為-(231-1)(231-1),所能表達(dá)的十進(jìn)制數(shù)范圍為-21474836472147483647。整數(shù)類型數(shù)據(jù)的表達(dá)方式如下: +112,+318000,-777,012,2E6其中,012相當(dāng)于12;2E6=2106。此外,如用二進(jìn)制、八進(jìn)制、十六進(jìn)制表示整數(shù),需將2、8、16放在數(shù)字前,用兩個(gè)號(hào)將數(shù)字括起來,如2#1111-1111#、8#377#、16#FF#。數(shù)字中間的“-”號(hào)不起作用,只是為了讀數(shù)方便,故123-456與123456是同一個(gè)數(shù)。1. 標(biāo)準(zhǔn)的數(shù)據(jù)類型16(2)自然數(shù)類型和正整數(shù)類型自然數(shù)(nat

12、ural)和正整數(shù)(positive)類型都是整數(shù)類型的一個(gè)子類型,其取值范圍都可取正整數(shù),區(qū)別在于自然數(shù)類型數(shù)據(jù)除可取正整數(shù)外還可取零值,而正整數(shù)則不能取零值。(3)實(shí)數(shù)類型實(shí)數(shù)(real)類型是一種浮點(diǎn)數(shù),其取值范圍為-1.0E+38+1.0E+38,即-1.01038+1.01038。書寫時(shí)一定要有小數(shù)點(diǎn)。實(shí)數(shù)的例子如下: -1.0,+2.7,2.5,-1.0E38有些數(shù)可以用整數(shù)表示也可以用實(shí)數(shù)表示。例如數(shù)字1的整數(shù)表示為1,而用實(shí)數(shù)表示則為1.0。兩個(gè)數(shù)的值是一樣的,但數(shù)據(jù)類型卻不一樣。17(4)位類型位(bit)數(shù)據(jù)類型用來表示數(shù)字系統(tǒng)中的一個(gè)位,位的取值只能是 0或 1,將0或1

13、放在單引號(hào)中。位與整數(shù)中的0或1不同,它僅表示一個(gè)位的兩種取值。有時(shí)也可以用顯式說明位數(shù)據(jù)類型,如bit(1)。位數(shù)據(jù)與布爾量類型數(shù)據(jù)也是不同的。(5)位矢量型位矢量(bit_vector)類型是用雙引號(hào)括起來的一組位數(shù)據(jù)類型,如“110001”,x“00ab”,o“456”。x表示十六進(jìn)制的位矢量,o表示八進(jìn)制的位矢量,常用于表示總線上各位的狀態(tài)。18(6)布爾量類型一個(gè)布爾量(boolean)類型只有真(true=1)和假(false=0)兩種取值,只能用于關(guān)系運(yùn)算中判斷關(guān)系式是否成立,成立為真,反之為假。(7)字符類型字符(character)類型的數(shù)據(jù)是用單引號(hào)括起來的單字符號(hào),在包集

14、合standard中給出了預(yù)定義的128個(gè)ASCII碼字符類型。如A、B、Q。由于VHDL對大小寫不敏感,所以程序中出現(xiàn)的大寫字母和小寫字母被看作是一樣的,但對于字符類型的數(shù)據(jù)的大小寫則認(rèn)為是不一樣的。字符1與整數(shù)1和實(shí)數(shù)1.0也是不相同的。當(dāng)要明確指出1的字符數(shù)據(jù)時(shí),則可顯式的寫為character(1)。19(8)字符串類型字符串(string)類型的數(shù)據(jù)是由雙引號(hào)括起來的一個(gè)字符序列,也稱為字符矢量或字符串?dāng)?shù)組。如“string long”,字符串常用于程序的提示和說明。(9)文件類型文件(file)類型可用來傳輸大量數(shù)據(jù),文件中可包括各種數(shù)據(jù)類型的數(shù)據(jù)。用VHDL描述時(shí)序仿真的激勵(lì)信號(hào)

15、和仿真波型輸出,一般都要用文件類型。(10)行類型行(line)數(shù)據(jù)類型用于對文件的輸入輸出處理,它可存放文件中一行的數(shù)據(jù)。在IEEE1076標(biāo)準(zhǔn)中的TEXIO程序包中定義了幾種文件I/O傳輸方法,調(diào)用這些程序就能完成數(shù)據(jù)的傳輸。20(11)錯(cuò)誤等級類型錯(cuò)誤等級(severity level)類型數(shù)據(jù)用來表示系統(tǒng)的狀態(tài),共有4種:注意(note)、警告(warning)、出錯(cuò)(error)、失?。╢ailure)。在系統(tǒng)仿真中,可以用這4種狀態(tài)來提示系統(tǒng)當(dāng)前的工作情況。上述11種數(shù)據(jù)類型是VHDL中標(biāo)準(zhǔn)的數(shù)據(jù)類型,在編程時(shí)可以直接引用。此外,許多CAD廠商在包集合中對標(biāo)準(zhǔn)數(shù)據(jù)類型進(jìn)行了擴(kuò)展,如

16、有的增加了數(shù)組數(shù)據(jù)等。21任何一個(gè)信號(hào)和變量的賦值必須落入給定的約束區(qū)間中。約束區(qū)間的說明通常跟在數(shù)據(jù)類型聲明的后面。例如: integer range 100 downto 1; bit_vector(3 downto 0); real range 2.0 to 23.0;約束數(shù)據(jù)的取值范圍用關(guān)鍵字range指明,在表示數(shù)據(jù)的增、減方向時(shí),用to和downto指明,對位矢量的取值范圍不用關(guān)鍵字range,但要用圓括號(hào)將數(shù)據(jù)的取值括起來。用to和downto的區(qū)別在于:to表示數(shù)據(jù)左邊的位為低位或較小的數(shù)據(jù),右邊的位為高位或較大的數(shù)據(jù);downto表示左邊的位為高位,右邊的位為低位。數(shù)據(jù)的約束

17、區(qū)間 22在進(jìn)行VHDL編程時(shí),除可以使用標(biāo)準(zhǔn)的數(shù)據(jù)類型外,為便于閱讀和對數(shù)據(jù)進(jìn)行管理,根據(jù)需要,用戶還可以自己定義數(shù)據(jù)類型。用戶自己定義的數(shù)據(jù)類型常用在architecture、entity、process、package、subprogram的聲明部分。用戶定義的數(shù)據(jù)類型一般格式為:type 數(shù)據(jù)類型名,數(shù)據(jù)類型名 類型定義;類型定義包括:標(biāo)量類型定義、復(fù)合類型定義、存取類型定義、文件類型定義。2. 用戶定義的數(shù)據(jù)類型23枚舉類型枚舉(enumerated)類型是用符號(hào)名來代替數(shù)字,它的可能值應(yīng)明確地列出。其定義格式為: type 數(shù)據(jù)類型名 is(元素,元素,.);其中type和is為用

18、戶定義數(shù)據(jù)類型的關(guān)鍵字。進(jìn)行枚舉類型定義時(shí),用圓括號(hào)列舉被定義的各元素。列舉的元素可以是文字、標(biāo)識(shí)符或者一個(gè)字符文字,字符文字是單個(gè)可印刷的ASC字符。例如: a, B, 5, , , , %, ”, 。24標(biāo)識(shí)符是不分大小寫的,但字符文字則有大小寫之分。例如:type std_logic is (U,X,0,1,Z,W,L,H,-);程序在處理枚舉類型時(shí),從前向后對它們的位置進(jìn)行編序,U的位置序號(hào)為0,其它的位置序號(hào)分別為1、2、3、4、5、6、7、8,但用戶讀起來就方便多了。25整數(shù)類型與實(shí)數(shù)類型用戶定義的整數(shù)(integer)類型與實(shí)數(shù)(real)類型不同于VHDL中的標(biāo)準(zhǔn)整數(shù)類型與實(shí)數(shù)

19、類型,它屬于它們的子集,其格式為:type 數(shù)據(jù)類型名 is 標(biāo)準(zhǔn)的數(shù)據(jù)類型約束范圍;例如:type dgt is integer range -10 to 10;type cnt is real range 0.0 to 10.0;這里的integer、real是已被定義的標(biāo)準(zhǔn)的數(shù)據(jù)類型。用戶定義的數(shù)據(jù)類型dgt、cnt是已被定義的標(biāo)準(zhǔn)的數(shù)據(jù)類型的子集。26數(shù)組類型數(shù)組(array)類型是將相同類型的數(shù)據(jù)集合在一起形成的一個(gè)新的數(shù)據(jù)類型,它可以是一維的或多維的。數(shù)組定義的書寫格式為:type 數(shù)據(jù)類型名 is array 范圍 of 原數(shù)據(jù)類型名;原數(shù)據(jù)類型名指新定義的數(shù)據(jù)類型中每一個(gè)元素的

20、數(shù)據(jù)類型。如果沒有指定范圍是采用何種數(shù)據(jù)類型,則默認(rèn)使用整數(shù)數(shù)據(jù)類型來說明范圍。例如:type word is array (31 downto 0) of std_logic;這里范圍(31 downto 0)沒有指明其數(shù)據(jù)類型,因此被默認(rèn)為使用了整數(shù)數(shù)據(jù)類型。 27若范圍這一項(xiàng)需用整數(shù)以外的其它數(shù)據(jù)類型時(shí),則在指定數(shù)據(jù)范圍前應(yīng)加數(shù)據(jù)類型名。例如:type word is array (integer 1 to 8) of std_logic;type instruction is (add,sub,inc,srl,srf,lda,ldb,xfr);subtype digit is inte

21、ger 0 to 9;type insflag is array (instruction add to srf) of digit;type std_logic_vector is array (natural range ) of std_logic;這里范圍由natural range 指定,這是一個(gè)沒有范圍限制的數(shù)組,在這種情況下,范圍由信號(hào)或變量聲明語句確定。例如:signal busrange:std_logic_vector(0 to 3);28例3-3:多維數(shù)組描述的例子。type memarray is array (0 to 5,7 downto 0) of std_log

22、ic;constant romdata:memarray:=( 0,0,0,0,0,0,0,0),( 0,1,1,1,0,0,0,1),( 0,0,1,1,0,0,0,0),( 1,1,1,0,0,0,0,1),( 0,0,0,0,1,1,0,1),( 1,1,0,0,0,0,1,0);signal data_bit:std_logic; data_bit=romdata(4,6);29時(shí)間類型時(shí)間(time)類型屬于典型的物理量類型,對物理量類型的描述涉及數(shù)字和單位兩個(gè)部分,兩者中間隔一個(gè)空格。如30 s(30秒)、20 m(20米)、2 k(千歐姆)、40 A(40安培),VHDL綜合器不

23、接受物理量這類文字類型數(shù)據(jù)。VHDL中惟一的預(yù)定義物理量類型是時(shí)間類型。對時(shí)間類型定義的書寫格式為: Type 數(shù)據(jù)類型名 is 范圍; units基本單位; 單位; end units;30在standard程序包中對時(shí)間的定義為:type time is range -1E18 to 1E18;units fs; ps =1000fs; ns =1000ps; s=1000ns; ms =1000s; sec=1000ms; min=60sec; hr =60min;end units;31記錄數(shù)據(jù)類型記錄(recode)數(shù)據(jù)類型定義的書寫格式為:type 數(shù)據(jù)類型名 is record

24、元素名:數(shù)據(jù)類型名; 元素名:數(shù)據(jù)類型名; end record;從記錄數(shù)據(jù)類型中提取元素?cái)?shù)據(jù)時(shí)應(yīng)用進(jìn)行分隔,即為記錄數(shù)據(jù)類型名元素名。記錄是將不同類型的數(shù)據(jù)組織在一起而形成的新類型,而數(shù)組則是同一類型數(shù)據(jù)的集合,即記錄中元素的數(shù)據(jù)類型可以不同,而數(shù)組中元素的數(shù)據(jù)類型必須相同。32例3-4:記錄數(shù)據(jù)類型的應(yīng)用。type bank is recordaddr0:std_logic_vector(7 downto 0);addr1:std_logic_vector(3 downto 0);r0:integer;inst:instruction;end record;signal addbus0:

25、std_logic_vector(7 downto 0);signal addbus1: std_logic_vector(3 downto 0);signal result:integer;signal alu_code:instruction;signal r_bank:bank:=(“00000000”,“0000”,0,add);addbus1=r_bank.addr1;r_bank.inst=alu_code;33將用戶已定義的數(shù)據(jù)類型作一些范圍限制就形成用戶定義的子類型。子類型定義的一般格式為: subtype 子類型名 is 源數(shù)據(jù)類型名范圍;例如:subtype digit i

26、s integer range 0 to 9; subtype addrbus is std_logic_vector(7 downto 0);3. 用戶定義的子類型34在VHDL中使用別名(alias)可來代替對現(xiàn)有信號(hào)、變量、常數(shù)或文件對象的聲明,也可用來對除標(biāo)簽、循環(huán)參數(shù)、生成語句參數(shù)外的幾乎所有先前聲明過的非對象進(jìn)行聲明。別名本身并不定義新的對象,它只是給現(xiàn)有的對象分配一個(gè)特定的名稱。別名主要用來提高對矢量某些特定部分的可讀性。當(dāng)一個(gè)別名表示的矢量的特定部分沒有被聲明為子類型時(shí),別名表示的內(nèi)容可當(dāng)做子類型看待。4、別名的使用35例如:signal instruction : bit_v

27、ector(15 downto 0); alias opcode : bit_vector(3 downto 0) is instruction(15 downto 12);alias source : bit_vector(1 downto 0) is instruction(11 downto 10);alias destin : bit_vector(1 downto 0) is instruction(9 downto 8);alias immdat : bit_vector(7 downto 0) is instruction(7 downto 0);聲明了一個(gè)信號(hào)instructi

28、on是一個(gè)16位的位矢量信號(hào),然后使用別名opcode、source、destin、immdat來分別代表該信號(hào)的1512、1110、98、70位。36(1)IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與標(biāo)準(zhǔn)邏輯矢量類型標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型VHDL的早期標(biāo)準(zhǔn)中,用數(shù)據(jù)類型bit來表示邏輯型的數(shù)據(jù)類型。這類數(shù)據(jù)取值只能是0和1,由于該類型數(shù)據(jù)不存在不確定狀態(tài)X,故不便于仿真。而且由于它也不存在高阻狀態(tài),因此也很難用它來描述雙向數(shù)據(jù)總線。為此在IEEE在1993年制訂的新標(biāo)準(zhǔn)(IEEE STD1164)中,對bit數(shù)據(jù)類型進(jìn)行了擴(kuò)展,定義了標(biāo)準(zhǔn)邏輯位(std_logic)數(shù)據(jù)類型,它除具有傳統(tǒng)bit數(shù)據(jù)類型的0、1值外

29、,還可表示更多的情況。5. 預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型37U表示初值,X表示不確定值,0表示低電平0,1表示高電平1,Z 表示高阻,W表示弱的信號(hào)不確定,L表示弱的信號(hào)低電平0,H表示弱的信號(hào)高電平1,-表示不可能的情況。std_logic數(shù)據(jù)類型可以具有9種不同的取值。如用38標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)類型std_logic和std_logic_vector是IEEE預(yù)定義的標(biāo)準(zhǔn)邏輯位與位矢量數(shù)據(jù)類型,因此將它歸屬到用戶定義的數(shù)據(jù)類型中。在賦值時(shí)只能在有相同位寬、相同數(shù)據(jù)類型的矢量間進(jìn)行賦值。當(dāng)使用該類型數(shù)據(jù)時(shí),在程序中必須寫出庫聲明語句和使用包集合的說明語句,例如:library IEEE; use IEE

30、E.std_logic_1164.all;39(2)無符號(hào)類型、有符號(hào)類型VHDL綜合工具配帶的擴(kuò)展程序包中,定義了一些有用的類型,如Synopsys公司在IEEE庫中加入的程序包std_logic_arith中定義了無符號(hào) (unsigned) 類型、有符號(hào) (signed) 類型和小數(shù)(small_int)類型。在使用前應(yīng)作如下定義:library IEEE;use IEEE.std_logic_arith.all;unsigned類型和signed類型是用來設(shè)計(jì)可綜合的數(shù)學(xué)運(yùn)算程序的重要類型,unsigned類型用于無符號(hào)數(shù)的運(yùn)算,signed類型用于有符號(hào)數(shù)的運(yùn)算,小數(shù)類型為01之間的

31、數(shù)。40無符號(hào)數(shù)數(shù)據(jù)類型無符號(hào)數(shù)(unsigned)數(shù)據(jù)類型代表一個(gè)無符號(hào)的數(shù)值,被解釋為一個(gè)二進(jìn)制數(shù),最左位是其最高位。這樣,一個(gè)十進(jìn)制數(shù)8可表示為unsigned(“1000”)。不能用unsigned定義負(fù)數(shù)。示例:variablevar:unsigned(0 to 7);signal sig:unsigned(3 downto 0);其中變量var有8位二進(jìn)制數(shù)值,最高位為右邊的var (7),而非左邊的var (0);信號(hào)sig有4位二進(jìn)制數(shù),最高位為sig(3)。41有符號(hào)數(shù)數(shù)據(jù)類型有符號(hào)數(shù)(signed)數(shù)據(jù)類型代表一個(gè)有符號(hào)的數(shù)值,解釋為補(bǔ)碼,此數(shù)的最高位是符號(hào)位。如signe

32、d(“0101”)代表5,signed(“1101”)代表5。有符號(hào)數(shù)據(jù)類型的定義示例:variable var : signed(0 to 7);signal sig : signed(3 downto 0);其中變量var有8位二進(jìn)制數(shù)值,最高位為var (7)是符號(hào)位,最高有效數(shù)據(jù)位為var (6);信號(hào)sig最高位sig(3)也是符號(hào)位。42在進(jìn)行數(shù)據(jù)處理時(shí),不同類型的數(shù)據(jù)是不能直接進(jìn)行代入和運(yùn)算的,要進(jìn)行不同類型數(shù)據(jù)間的代入和運(yùn)算,必須先將它們變換為相同的數(shù)據(jù)類型。VHDL的包集合中提供有用于數(shù)據(jù)類型變換的函數(shù),如在std_logic_1164、std_logic_arith、std

33、_logic_unsigned包集合中便提供有數(shù)據(jù)類型變換函數(shù)。表3-2列出了部分的類型轉(zhuǎn)換函數(shù)。6. 數(shù)據(jù)類型的轉(zhuǎn)換4344例3-5:類型轉(zhuǎn)換函數(shù)conv_integer的應(yīng)用。signal slvsig :std_logic_vector(5 downto 0);signal unsig :unsigned(3 downto 0);signal sisig :signed(3 downto 0);signal int1,int2 :integer;unsig=“1001”;sisig=“1001”;int1=conv_integer(unsig);int2=conv_integer(sis

34、ig);slvsig= conv_std_logic_vector(int1,6);由于slvsig有6位二進(jìn)制數(shù),而int1=(9)10=(1001)2,只有4位二進(jìn)制數(shù),故為了達(dá)到6位二進(jìn)制數(shù),應(yīng)在4位二進(jìn)制數(shù)前添加0,即轉(zhuǎn)換后slvsig=(001001)2。45例3-6:由std_logic_vector到integer的變換。library IEEE; use IEEE. std_logic_1164. all;use IEEE. std_logic_unsigned. all;entity ex3_6 is Port (in_a :in std_logic_vector(2 dow

35、nto 0); out_c :out integer range (0 to 7);end ex3_6;architecture Behavioral of ex3_6 isbegin out_c=conv_integer(in_a)+1;end Behavioral;46需要注意的是,代入std_logic_vector的值只能是二進(jìn)制數(shù)。而代入bit_vector的值除二進(jìn)制數(shù)外,還可以是十六進(jìn)制數(shù)和八進(jìn)制數(shù),并且還可以用“-”來分隔數(shù)值位。例如:signal a: bit_vector(11 downto 0);signal b: std_logic_vector(11 downto 0

36、);a=x“A8C”;b=to_std_logic_vector(x“AF7”);b=to_std_logic_vector(o“5177”);b=to_std_logic_vector(b“1010-1111-0111”);47在進(jìn)行整數(shù)與實(shí)數(shù)轉(zhuǎn)換時(shí),還可用轉(zhuǎn)換函數(shù)integer()和real()。integer()用于將實(shí)數(shù)轉(zhuǎn)換為整數(shù),real()用于將整數(shù)轉(zhuǎn)換為實(shí)數(shù)。例如:variable i:integer;-i為整型variable r:real; -r為實(shí)型i:=integer(r);-將實(shí)型變量r轉(zhuǎn)換為整型后賦給整型變量ir:=real(i); 483.1.3 VHDL的對象描述

37、 信號(hào)變量常數(shù)文件對象是VHDL程序中可以被賦值的目標(biāo)。對象可以被連續(xù)的賦值最初被聲明時(shí)被賦值一次,以后永遠(yuǎn)保持該值不變不能被直接賦值,只能通過函數(shù)對文件中的信號(hào)進(jìn)行讀寫操作。49信號(hào)是給電路內(nèi)部硬件連接線所取的名字,電路內(nèi)部各元件之間交換的信息只能通過信號(hào)傳送。信號(hào)必需先聲明后使用。信號(hào)沒有方向性,用于聲明全局量。信號(hào)可以在整個(gè)程序中有效。信號(hào)具有屬性,可利用屬性存取過去、當(dāng)前的數(shù)值。信號(hào)用在architecture、package、entity中。圖31信號(hào)的物理意義1. 信號(hào)的聲明與賦值通常在結(jié)構(gòu)體中的architecture與begin之間對信號(hào)進(jìn)行聲明。50對信號(hào)進(jìn)行聲明的語句格式為

38、: signal 信號(hào)名:數(shù)據(jù)類型 約束條件;關(guān)鍵字signal表示該語句為聲明信號(hào)的語句,信號(hào)名是為某一特定信號(hào)指定的專用名稱,在一個(gè)程序中信號(hào)名不能重復(fù),它是在整個(gè)程序中有效的全局量。信號(hào)名后面用冒號(hào)分隔對信號(hào)的描述。對信號(hào)的描述包括數(shù)據(jù)類型和約束條件。對信號(hào)類型的描述是必須有的,方括號(hào)中的約束條件可以省略,還可用約束條件給信號(hào)賦值或指出信號(hào)的值可以出現(xiàn)的范圍。信號(hào)聲明語句末尾必須以分號(hào)結(jié)束。(1)信號(hào)聲明語句的格式51例3-7,對下列信號(hào)進(jìn)行聲明。signal sg_1:boolean;signal sg_2:integer range 0 to 31;signal sg_3:bit;s

39、ignal sg_4:bit:=0;signal sg_5:bit_vector(2 downto 0);signal sg_6:std_logic;signal sg_7,sg_8:std_logic_vector(0 to 3);如果有相同類型和約束條件的信號(hào)需要聲明,可在一個(gè)信號(hào)聲明語句中,例出多個(gè)信號(hào)名,它們之間用逗號(hào)隔開。52信號(hào)可以被連續(xù)賦以新值,其賦值又稱代入,用代入符“”表示。信號(hào)的賦值語句表達(dá)式為: 目標(biāo)信號(hào)名表達(dá)式;目標(biāo)信號(hào)名指將要被賦值的信號(hào);表達(dá)式可以是一個(gè)運(yùn)算表達(dá)式,也可以是變量、信號(hào)或常量這樣的數(shù)據(jù)對象,在賦值時(shí)可以設(shè)置延時(shí)量。一般來說,對信號(hào)的賦值是按仿真時(shí)間進(jìn)行

40、的,到了規(guī)定的仿真時(shí)間才進(jìn)行賦值。因此目標(biāo)信號(hào)獲得傳入的數(shù)據(jù)并不是程序運(yùn)行到該語句時(shí)就立即賦值的,即使是不作任何顯式表達(dá)的零延時(shí),也要經(jīng)歷一個(gè)特定的延時(shí)。故符號(hào)“”兩邊的數(shù)值并不總是一致的,這與實(shí)際器件中信號(hào)的傳播延遲特性是吻合的。(2)信號(hào)賦值語句的格式53例3-8:在一個(gè)進(jìn)程中對信號(hào)進(jìn)行重復(fù)賦值。process(a,b,c)-定義進(jìn)程和敏感量清單begin -開始進(jìn)程 d=a; -將a代入到d x=c and d; -c和d相與后代入到x d=b; -將b代入到d y=c and d; -c和d相與后代入到y(tǒng)end process; -結(jié)束進(jìn)程執(zhí)行后的結(jié)果為:x=c and b;y=c a

41、nd b;圖32例3-8生成的電路54變量表示暫時(shí)存放數(shù)據(jù)的臨時(shí)存儲(chǔ)體。變量是局部量,給變量取的名稱只能在某一范圍內(nèi)有效,因此在另一范圍可以取相同名字的變量。變量只能用在進(jìn)程、函數(shù)語句和過程語句中作為局部的數(shù)據(jù)存儲(chǔ)體。對變量的使用也需先聲明后使用。通常在進(jìn)程中的process與begin之間對變量進(jìn)行聲明。2. 變量的聲明與賦值55對變量進(jìn)行聲明的語句格式為:variable 變量名:數(shù)據(jù)類型 約束條件:表達(dá)式;關(guān)鍵字variable表示該語句為定義變量的語句;變量名是為某一特定變量指定的專用名稱。由于變量是局部量,在不同的進(jìn)程、函數(shù)和過程中,可以定義相同的名,它們的作用域僅在它們被定義的局部

42、域中。變量名后面用冒號(hào)分隔對變量的描述。對變量的描述包括數(shù)據(jù)類型和約束條件。對變量類型的描述不能少,方括號(hào)中的可以省略,還可用約束條件給變量賦值或指出變量的值可以出現(xiàn)的范圍。變量說明語句末尾必須以分號(hào)結(jié)束。(1)變量聲明語句的格式56例3-9,對下列變量進(jìn)行聲明。variable var_1:boolean;variable var_2:integer range 0 to 31;variable var_2:integer range 0 to 31:=10;variable var_3:bit;variable var_4:bit_vector(2 downto 0);variable v

43、ar_5:std_logic;variable vr_6,vr_7:std_logic_vector(0 to 3);57變量可以被連續(xù)賦以新值,對變量的賦值用“:=”,以區(qū)別于對信號(hào)的賦值。變量的賦值語句表達(dá)式為: 目標(biāo)變量名:表達(dá)式;目標(biāo)變量名指將要被賦值的變量;變量數(shù)值的改變是通過變量賦值來實(shí)現(xiàn)的;表達(dá)式可以是一個(gè)運(yùn)算表達(dá)式,也可以是一個(gè)數(shù)值、也可以是變量、信號(hào)或常量這樣的數(shù)據(jù)對象。變量賦值語句左邊的目標(biāo)變量可以是單值變量,也可以是一個(gè)變量的集合,如位矢量類型的變量。(2)變量賦值語句的格式58例3-10,對下列變量進(jìn)行賦值。variable x,y:integer range 15 d

44、ownto 0;variable a,b:std_logic_vector(7 downto 0);.x :=11 ;y :=2x ;a :=b ;a (0 to 5) :=b (2 to 7) ;由于對變量的賦值是立即發(fā)生的,不能產(chǎn)生附加延時(shí),因此不能給變量賦值設(shè)置時(shí)延。如:tmp3:=(tmp1tmp2)after 10ns;59例3-11:在進(jìn)程中為變量賦值。process(a,b,c)-定義進(jìn)程和敏感量清單variabled: std_logic;-聲明d為邏輯型變量begin-開始進(jìn)程 d:=a;-將a賦值到d x=c and d;-c和d相與后賦值給x d:=b;-將b賦值給d y

45、=c and d;-c和d相與后賦值給yend process;執(zhí)行后的結(jié)果為: x=c and a; y=c and b;圖33例3-11生成的電路60賦值形式不同。信號(hào)代入語句采用“”代入符,而變量賦值采用“:”。信號(hào)賦值至少有延遲,可為零,因此即使代入語句被執(zhí)行也不會(huì)立即發(fā)生代入,實(shí)際代入過程和代入語句的處理是分開進(jìn)行的。變量在賦值時(shí)沒有延遲。信號(hào)除當(dāng)前值外,還有許多相關(guān)信息,如歷史信息、投影波形等,變量只有當(dāng)前值。進(jìn)程對信號(hào)敏感而不對變量敏感,因此變量出現(xiàn)在進(jìn)程敏感量清單中是沒有作用的,不能啟動(dòng)進(jìn)行執(zhí)行。信號(hào)可以是多個(gè)進(jìn)程的全局信號(hào),而變量只能在定義他們的順序域。信號(hào)是硬件連線的抽象描

46、述,變量無類似對應(yīng)關(guān)系。信號(hào)與變量的比較61常數(shù)表示某一固定不變的量,常數(shù)的值在整個(gè)程序中不能被改變。常數(shù)相當(dāng)于電路中的恒定電平,如GND或VCC接口。由于常數(shù)不能在使用時(shí)賦新值,故它的值是在常數(shù)被聲明時(shí)賦予的。通常在architecture與begin之間對常數(shù)進(jìn)行聲明。3. 常數(shù)的聲明與賦值62對常數(shù)進(jìn)行聲明的語句格式為: constant 常數(shù)名:數(shù)據(jù)類型:=表達(dá)式;關(guān)鍵字constant用于聲明該語句為常數(shù)聲明語句;常數(shù)名在程序中是唯一的,它作用于所定義的域內(nèi)。如在實(shí)體中聲明,則在整個(gè)實(shí)體中有效。如果常數(shù)是在子程序中被聲明時(shí),它在每次子程序調(diào)用時(shí)要重新計(jì)算,而在子程序執(zhí)行期間則保持不變

47、。常數(shù)名后面用冒號(hào)分隔對常數(shù)的描述。對常數(shù)的描述只有數(shù)據(jù)類型和賦值表達(dá)式,并且賦值是必須有的。常數(shù)說明語句末尾必須以分號(hào)結(jié)束。(1)常數(shù)聲明語句的格式63例3-12,對下列常數(shù)進(jìn)行聲明。constant const_1:boolean:=true;constant const_2:integer:=31;constant const_3:real:=5.0;constant const_4:time:=100ns;constant const_5:bit_vector(3 downto 0):=“0000”;constant const_6:std_logic:=Z;constant cons

48、t_7:std_logic_vector (3 downto 0):=“0101”;64常數(shù)只能在被聲明時(shí)被賦值,對常數(shù)的賦值用“:=”,這與對變量的賦值相同。常數(shù)的賦值語句表達(dá)式為: 目標(biāo)常數(shù)名:表達(dá)式;目標(biāo)常數(shù)名指將要被賦值的常數(shù);表達(dá)式所給出的數(shù)值必須與目標(biāo)常數(shù)名類型相同;表達(dá)式可以是一個(gè)運(yùn)算表達(dá)式,也可以是一個(gè)數(shù)值。下面的賦值就錯(cuò)在類型不一致。constant Vcc: real:=“0101”; -把非實(shí)型數(shù)據(jù)“0101”賦給實(shí)型常量(2)常數(shù)賦值語句的格式65文件指以ASCII碼文本的形式進(jìn)行數(shù)據(jù)的輸入、輸出處理的存儲(chǔ)體。不同于前述的信號(hào)、變量和常數(shù),文件作為對象不能進(jìn)行直接的賦值

49、,只能通過函數(shù)進(jìn)行對文件中數(shù)據(jù)的存取。文件對象不能被綜合,所以是VHDL程序描述的非綜合部分。4. 文件的說明與賦值6687版對文件進(jìn)行聲明的語句格式為:file 文件名:text is (in或out) “文本文件”;關(guān)鍵字file用于聲明該語句為文件聲明語句;文件對象名用于存放PC機(jī)中以ASC碼格式表達(dá)的文本文件的名字,使程序在此后的執(zhí)行中用此處所定義的文件對象名來代替PC機(jī)中當(dāng)前目錄下以ASC碼格式描述的文本文件。在整個(gè)程序執(zhí)行過程中該文件對象名是唯一的,是一個(gè)全局量。文件名后面用冒號(hào)分隔對文件的描述。text is后面用in或out指明數(shù)據(jù)被傳送的方向。ASCII碼文本文件指PC機(jī)中以

50、ASC碼格式表達(dá)的文本文件的名字,該文件必須在當(dāng)前目錄下。(1)文件聲明語句的格式67例如:file myfilin:text is in“test.txt”; 此處的myfilin是由file定義的文件對象名,in指明myfilin是一個(gè)只能從test.txt中讀出ASC碼格式表達(dá)的數(shù)據(jù)的文件,而不能寫入。再例如:file myfilout:text is out“data.txt”; 此處的myfilout是由file定義的文件對象名,out指明myfilout是一個(gè)只能向其寫入數(shù)據(jù)的文件。data.txt表示PC機(jī)中當(dāng)前目錄下的一個(gè)以ASC碼格式描述的文本文件。在此處進(jìn)行了文件的說明以后

51、,就用myfilout來代替data.txt進(jìn)行寫數(shù)據(jù)操作。6897版對文件對象進(jìn)行聲明的語句格式為:file文件名:text open read_mode is“目錄+文件.后綴”; file文件名:text open write_mode is“目錄+文件.后綴”; 例如:file fir_in: text open read_mode is “fir_data.txt”;file fir_out: text open write_mode is “fir_data.txt”;也可用函數(shù)打開文件,使用方法為:file_open(文件狀態(tài)指示變量,文件對象名,“目錄+文件.后綴”,read_

52、mode);文件狀態(tài)指示變量是可選的,其定義方法為:variable文件狀態(tài)變量:file_open_status;使用完文件應(yīng)關(guān)閉,例如:file_close(fir_in );69從文件中讀一行數(shù)據(jù)由于不能直接給文件賦值,因此對文件的讀寫操作只能利用文件讀寫函數(shù)來間接完成數(shù)據(jù)的處理。從文件中讀一行數(shù)據(jù)的格式為: readline(文件名,行類型變量);readline是從文件中讀取一行數(shù)據(jù)的函數(shù),用于從文本文件中讀取一行放入行變量指定的單元中。例3-13:從文件名所指定的文件中讀取一行的內(nèi)容放入行變量指定的單元中。variable livar:line;file myfile:text i

53、s in “testin.txt”;readline(myfile,livar);(2)對文件中數(shù)據(jù)的讀寫操作70 從一行中讀一個(gè)數(shù)據(jù)文件的一行中通??梢苑胖枚鄠€(gè)不同類型的數(shù)據(jù),為了從一行中取出所需要的數(shù)據(jù),應(yīng)使用過程語句read。從一行中讀一個(gè)數(shù)據(jù)格式為: read(行類型變量,數(shù)據(jù)變量);例3-14:從一行中取出一個(gè)數(shù)據(jù),將其存放到數(shù)據(jù)變量和信號(hào)中。variable lvar:line;signal clk:std_logic;signal din:std_logic_vector(7 downto 0);read(lvar,clk); read(lvar,din); 71寫一行到輸出文件

54、要向文件寫入數(shù)據(jù),應(yīng)使用行寫入函數(shù)。格式為: writeline(文件名,行類型變量);writeline函數(shù)用于將行類型變量指定的存儲(chǔ)單元中存放的一行數(shù)據(jù)的內(nèi)容寫入到文件名所指定的文件中。例3-15:將行類型變量指定的單元中存放的一行數(shù)據(jù)寫入到文件名所指定的文件中。variable lovar:line; file outfile:text is out “testout.txt”;writeline(outfile,lovar);該例中,將行類型變量lovar中的數(shù)據(jù)寫入到outfile所指定的文件testext.out中。72 寫一個(gè)數(shù)據(jù)到一行中寫數(shù)據(jù)到一行中的格式為: write(行類

55、型變量,數(shù)據(jù)變量);在某些CAD公司的VHDL版本中對該寫語句進(jìn)行了擴(kuò)充。如按十六進(jìn)制寫時(shí),寫語句應(yīng)以h為前綴,即寫為hwrite;如按八進(jìn)制值寫時(shí),則應(yīng)以o為前綴,寫為owrite等。另外,寫語句的格式也有相應(yīng)變化。例如將write修改為: write(行類型變量,數(shù)據(jù)變量,起始位置,字符數(shù));其中起始位置有l(wèi)eft和right兩種選擇。Left表示從行的最左邊對齊開始寫入,right表示從行的最右邊對齊寫入。73例3-16:寫一個(gè)數(shù)據(jù)到文件的一行中。variable lovar:line;signal dout:std_logic_vector(7 downto 0);write(lova

56、r,dout,left,8) 文件結(jié)束檢查檢查文件是否結(jié)束,可用endfile函數(shù),其格式為: endfile(文件名);該語句檢查文件是否結(jié)束,如果檢出文件結(jié)束標(biāo)志,則返回真值,否則返回假值。74在VHDL的標(biāo)準(zhǔn)格式中,有一個(gè)預(yù)先定義的包集合textio,它按行對文件進(jìn)行處理,一行為一個(gè)字符串,并以回車、換行符作為行結(jié)束符。在使用該包集合時(shí)要必須先進(jìn)行聲明。使用的聲明語句為:library STD;use STD.textio.all;但在VHDL語言的標(biāo)準(zhǔn)格式中,textio只能使用bit和bit_vector兩種數(shù)據(jù)類型,如要使用std_logic和std_logic_vector就要調(diào)

57、用IEEE庫中的包集合std_logic_vector_textio。這時(shí)應(yīng)使用下面的聲明語句:libraryIEEE;use IEEE.std_logic_vector_textio.all;753.1.4 VHDL的運(yùn)算操作符 邏輯運(yùn)算、關(guān)系運(yùn)算、算術(shù)運(yùn)算和并置運(yùn)算 VHDL的運(yùn)算操作符包括4類及重載操作符 操作符 要點(diǎn):運(yùn)算時(shí)操作數(shù)的類型應(yīng)與操作符要求的類型一致按操作符的優(yōu)先級順序進(jìn)行運(yùn)算。 7677運(yùn)算符的左右兩邊沒有優(yōu)先級差別,如果邏輯表達(dá)式中只有and、or、xor中的一種,那么改變運(yùn)算順序?qū)⒉粫?huì)導(dǎo)致邏輯的改變,否則應(yīng)用括號(hào)指明運(yùn)算的順序。 1. 邏輯運(yùn)算符not(邏輯取反)and

58、(邏輯與)or(邏輯或)nand(邏輯與非)nor(邏輯或非)xor(邏輯異或)邏輯運(yùn)算符78其中+(取正)、-(取負(fù))為一元運(yùn)算符,它的操作數(shù)可以為任何數(shù)值類型,如整數(shù)、實(shí)數(shù)、物理量。 2. 算術(shù)運(yùn)算符+(加) 、-(減)*(乘) 、/(除)mod(求模)、rem(取余)+(取正) 、-(取負(fù))* *(指數(shù))、abs(取絕對值)算術(shù)運(yùn)算符加法和減法的操作數(shù)也可為任何數(shù)值類型,且參加運(yùn)算的操作數(shù)的類型及位長也必須相同。 乘、除法的操作數(shù)可以同為整數(shù)和實(shí)數(shù)。 79library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.a

59、ll;entity multiplication is port (a,b : in std_logic_vector(1 downto 0); cunsi,csi : out std_logic_vector(3 downto 0);end ;architecture bhv of multiplication is signal d : std_logic_vector(0 downto 0); signal e : signed(0 downto 0); signal g,h,k : integer range 200 downto 0;begin -乘法用有符號(hào)數(shù)類型或無符號(hào)數(shù)類型,或

60、用整型數(shù)相乘。 e = signed(d); d = std_logic_vector(e); g =h/32 ; -除法用整型,且分母為2的N次方 cunsi=(unsigned(a)*unsigned(b);-無符號(hào)數(shù)相乘 csi =(signed(a)*signed(a); -有符號(hào)數(shù)相乘 k = g * h ; end; -整型數(shù)相乘乘法/除法運(yùn)算80library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;entity multp is port (clk : in std_logic; m1,m2 :

溫馨提示

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

評論

0/150

提交評論