




免費(fèi)預(yù)覽已結(jié)束,剩余297頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第三章 vhdl語言與應(yīng)用設(shè)計,3.1 vhdl硬件描述語言簡介 3.2 vhdl的結(jié)構(gòu)與語言要素 3.3 vhdl的基本語句 3.4 vhdl應(yīng)用設(shè)計實(shí)例,3.1 vhdl硬件描述語言簡介,vhdl(vhsic hardware description language)是一種標(biāo)準(zhǔn)的硬件描述語言, 它是在20世紀(jì)7080年代中, 由美國國防部資助的vhsic (very high speed integrated circuit)項目開發(fā)的產(chǎn)品。 在這個語言首次開發(fā)出來時, 其目標(biāo)僅是使電路文本化的一種標(biāo)準(zhǔn), 為了使人們采用文本方式描述的設(shè)計, 能夠被其他人所理解。,1987年,vhdl被正式確定為ieee 1076標(biāo)準(zhǔn)。 vhdl可使各種復(fù)雜度(系統(tǒng)級、 電路板級、 芯片級、 門級)的電路網(wǎng)絡(luò)在同一抽象程度上被描述。 1993年,ieee 1076標(biāo)準(zhǔn)被升級、 更新, 新的vhdl標(biāo)準(zhǔn)為ieee 1164。 1996年, ieee 1076.3成為vhdl綜合標(biāo)準(zhǔn)。,(1). vhdl的優(yōu)點(diǎn),vhdl已成為一個數(shù)字電路和系統(tǒng)的描述、 建模、 綜合的工業(yè)標(biāo)準(zhǔn)。 在電子產(chǎn)業(yè)界, 無論asic設(shè)計人員, 還是系統(tǒng)級設(shè)計人員, 都需要學(xué)習(xí)vhdl, 來提高工作效率。 由于vhdl所具有的通用性, 它成為可支持不同層次設(shè)計者需求的標(biāo)準(zhǔn)語言。 vhdl有如下所述的一些優(yōu)點(diǎn)。,1)功能強(qiáng)大, 靈活性強(qiáng) vhdl具有功能強(qiáng)大的語言結(jié)構(gòu), 可用簡潔明確的代碼描述來進(jìn)行復(fù)雜控制邏輯的設(shè)計。 它還具有多層次的設(shè)計描述功能, 支持設(shè)計庫和可重復(fù)使用的元件生成。 vhdl是一種設(shè)計、 模擬、 綜合的標(biāo)準(zhǔn)硬件描述語言。,2)不依賴于器件設(shè)計 vhdl允許設(shè)計者生成一個設(shè)計, 而并不需要首先選擇一個用來實(shí)現(xiàn)設(shè)計的器件。 對于同一個設(shè)計描述, 可以采用多種不同的器件結(jié)構(gòu)來實(shí)現(xiàn)其功能。 若需對設(shè)計進(jìn)行資源利用和性能方面的優(yōu)化, 也并不是要求設(shè)計者非常熟悉器件的結(jié)構(gòu)才行。,3)可移植性 因?yàn)関hdl是一個標(biāo)準(zhǔn)語言, 故vhdl的設(shè)計描述可以被不同的工具所支持, 可以從一個模擬工具移植到另一個模擬工具, 從一個綜合工具移植到另一個綜合工具, 從一個工作平臺移植到另一個工作平臺去執(zhí)行。,4)性能評估能力 非依賴器件的設(shè)計(device independent design)和可移植能力允許設(shè)計者采用不同的器件結(jié)構(gòu)和不同的綜合工具來評估設(shè)計。 設(shè)計者可以進(jìn)行一個完整的設(shè)計描述, 并且對其進(jìn)行綜合, 生成選定的器件結(jié)構(gòu)的邏輯功能, 然后評估結(jié)果, 選用最適合你設(shè)計需求的器件。 為了衡量綜合的質(zhì)量, 可用不同的綜合工具所得到的綜合結(jié)果來進(jìn)行分析、 評估。,(2). vhdl的不足之處,vhdl的不足之處是: (1) 電路采用高級的簡明結(jié)構(gòu)vhdl描述, 意味著放棄了對電路門級實(shí)現(xiàn)定義的控制; (2) 由綜合工具生成的邏輯實(shí)現(xiàn)效果有時不優(yōu)化; (3) 采用工具的不同導(dǎo)致綜合質(zhì)量不一樣。,vhdl設(shè)計數(shù)字系統(tǒng),可劃分為6個步驟: (1) 設(shè)計要求的定義; (2) 用vhdl進(jìn)行設(shè)計描述(系統(tǒng)描述與代碼設(shè)計); (3) 原代碼模擬; (4) 設(shè)計綜合、 設(shè)計優(yōu)化和設(shè)計的布局布線; (5) 布局、 布線后的設(shè)計模塊模擬; (6) 設(shè)計實(shí)現(xiàn)的工作(如芯片的物理版圖設(shè)計、 可編程門陣列器件的編程等)。,(3). vhdl的設(shè)計步驟,(4). vhdl程序的結(jié)構(gòu),庫說明(library),程序包使用說明(use),實(shí)體說明(entity),結(jié)構(gòu)體(architecture),配置(configuration),在vhdl中, 基本單元是設(shè)計實(shí)體。 設(shè)計實(shí)體可以是整個系統(tǒng), 如像cpu那樣復(fù)雜的系統(tǒng),也可以是一個芯片、 邏輯器件, 或者是一個最簡單的門電路。 在vhdl中, 設(shè)計實(shí)體可以代表任何一個模塊, 它可以是某個層次中的一個元件, 也可以是設(shè)計中的頂層模塊。,設(shè)計實(shí)體由實(shí)體說明和構(gòu)造體(結(jié)構(gòu)體)所組成。 實(shí)體說明用來描述電路的外部特征(接口說明)。 構(gòu)造體用來描述電路的內(nèi)部邏輯。,圖 設(shè)計實(shí)體的組成,3.2 vhdl的結(jié)構(gòu)與語言要素,vhdl語言是現(xiàn)代數(shù)字系統(tǒng)設(shè)計的基本硬件描述語言。 vhdl+eda工具+fpga器件, 構(gòu)成了典型的數(shù)字系統(tǒng)現(xiàn)場集成設(shè)計方式, 正推動著數(shù)字系統(tǒng)設(shè)計技術(shù)的進(jìn)步。 ,vhdl硬件描述語言語法的基本要素是: 數(shù)據(jù)對象、 數(shù)據(jù)類型、 運(yùn)算符和標(biāo)識符。,3.2.1 vhdl基本要素,3.2.1.1 數(shù)據(jù)對象(data object),定義:可以賦予一個值的對象 vhdl語言的數(shù)據(jù)對象有: 信號、 變量、 常量,信號,是描述硬件系統(tǒng)的基本數(shù)據(jù)對象,類似于電路內(nèi)部的連線和節(jié)點(diǎn)。 信號說明全局量, 用于描述中的結(jié)構(gòu)(構(gòu)造)體(architecture)、 實(shí)體(entity)和程序包(package)。,信號定義: signal 信號名: 數(shù)據(jù)類型: =初始值 信號定義示例: signal sl: std_logic:=0 定義了一個標(biāo)準(zhǔn)的單值信號sl,初始值為低電平。 signal s2: std_logic_vector(15 downto 0) 定義了一個標(biāo)準(zhǔn)的位矢量信號s2,共有16個信號元素。,信號定義了數(shù)據(jù)類型后,就可對其賦值。信號的賦值語句格式為: 目標(biāo)信號名=表達(dá)式; 例:a=y; a=1; s1=s2 after 10ns; 表示s2經(jīng)10ns延遲后,其值才賦值到s1中。,變量,是指在設(shè)計實(shí)體中值會發(fā)生變化的量,程序運(yùn)算中的中間量。 用于對暫時數(shù)據(jù)進(jìn)行存儲,是局部量。 其主要作用是用在進(jìn)程中作為臨時的數(shù)據(jù)存儲單元。,變量定義的語句格式為: variable 變量名:數(shù)據(jù)類型:=初始值 例:variable a:integer range 0 to 15; 定義a的取值范圍是從0到15的整型變量 variable b, c:integer:=2; 定義b,c為初始值2的整型變量 variable d:std_logic; 定義d為標(biāo)準(zhǔn)邏輯位類型的變量,變量賦值格式為: 目標(biāo)變量名:=表達(dá)式; 其中,變量賦值符號是“:=”; “表達(dá)式”必須是一個與“目標(biāo)變量名”具有相同數(shù)據(jù)類型的數(shù)值。 表達(dá)式可以是一個運(yùn)算表達(dá)式,也可是一個數(shù)值。 目標(biāo)變量可以是單值變量,也可是一個變量的集合,如位矢量類型的變量。,例: variable x, y:real; variable a, b:std_logic_vector(7 downto 0); x:=100.0; 實(shí)數(shù)賦值 y:=1.5+x; 運(yùn)算表達(dá)式賦值 a:=“10111011”; 位矢量賦值; a(0 to 5):=b(2 to 7); 段賦值,常量,指在vhdl程序中值一經(jīng)定義,就不再發(fā)生變化的量。 常量的物理意義在于用來代表硬件電路的電源或地線。 常量在構(gòu)造體(architecture)、 實(shí)體(entity)、 程序包(package)、 進(jìn)程語句(process)、 函數(shù)(function)和過程(procedure)中均可使用。,常量在使用之前必須進(jìn)行說明,其說明語句為: constant 常量名,常量名:數(shù)據(jù):=表達(dá)式; 常量說明示例: constant vcc: real:=5.0; constant gnd: real:=0.0; constant number: integer:=8; constant delay_time: real:=10ns;,信號和變量的區(qū)別,變量賦值是直接生效的,沒有延遲;而信號賦值有延時。 變量賦值符為“:=”, 信號代入符為“=”。 進(jìn)程對變量不敏感而對信號敏感。即在變量的賦值語句中, 該語句一旦執(zhí)行, 其值立即將賦予變量; 而信號的代入, 其語句執(zhí)行后不會立即使信號發(fā)生代入, 在下條語句執(zhí)行時, 仍使用原來的信號值, 如進(jìn)程語句中的敏感表的信號代入就是如此。,3.2.1.2. 數(shù)據(jù)類型,vhdl語言是強(qiáng)類型語言,對各操作數(shù)的數(shù)據(jù)類型有嚴(yán)格要求。 它的數(shù)據(jù)類型一般可分為標(biāo)量類型和組合類型, 在實(shí)際使用中, 也可分成預(yù)定義類型和用戶定義類型。,(1) 預(yù)定義類型,1) 標(biāo)準(zhǔn)數(shù)據(jù)類型 整數(shù); 不同進(jìn)制整數(shù)常量示例: 2: 十進(jìn)制整數(shù) 10e4: 十進(jìn)制整數(shù) 12_345_678(=12345678) 16#d2#: 十六進(jìn)制整數(shù) 整數(shù)文字均是十進(jìn)制的數(shù)。,以數(shù)制基數(shù)表示對文字,格式為 基數(shù) # 基于該基的整數(shù).基于該基的整數(shù)#e 指數(shù) 其中,第1部分是用十進(jìn)制數(shù)標(biāo)明數(shù)制進(jìn)位的基數(shù); 第2部分是數(shù)制隔離符號“#”; 第3部分是表達(dá)的文字; 第4部分是指數(shù)隔離符號“#”; 第5部分是用字符“e”加十進(jìn)制表示的指數(shù)部分。,例: 10#254# -十進(jìn)制表示,等于254 2#1111_1110# -二進(jìn)制表示,等于254 16#fe# -十六進(jìn)制表示,等于254 8#367# -八進(jìn)制表示,等于254, 實(shí)數(shù)(浮點(diǎn)數(shù),取值范圍-1.0e+38+1.0e38); 實(shí)數(shù)文字也是十進(jìn)制的數(shù),但需帶小數(shù)點(diǎn),如 188.993, 1.0 位數(shù)據(jù)(bit; 0, 1),取值只能為 1,0; constant c: bit:=1;值為1的位類型常量c variable q: bit:=0;值為0的位類類型變量q signal a, b: bit; 兩個位類型常量a, b, 位矢量; 是基于bit數(shù)據(jù)類型的數(shù)組,如“10110101” 使用位矢量需要注明位寬,即數(shù)組中元素的個數(shù)和排列,例如: signal a:bit_vector (7 downto 0) 信號a定義為一個具有8位位寬的矢量, 布爾量(“假”, “真”); false ,true, 字符(ascii字符); 通常用單引號括起來,如a; 字符區(qū)分大小寫,如b;不同于b; vhdl中,標(biāo)識符的大小寫是不區(qū)分的,但字符的大小寫是有區(qū)別的。, 時間; 完整的時間類型包括整數(shù)和物理量單位,且整數(shù)和單位之間至少留一個空格,如:55 ms,20 ns。 錯誤等級; 用以表征系統(tǒng)工作狀態(tài),一般有四種:note(注意),warning(警告),error(出錯),failure(失敗), 自然數(shù)(大于等于0的整數(shù)); (10) 字符串(字符矢量)。 即字符串?dāng)?shù)組,必須用雙撇號標(biāo)明,如 variable string_var: string(1 to 7) string_var: “a b c d”,vhdl有2種字符串:文字字符串和數(shù)位字符串。 (1)文字字符串 是用雙硬撇號引起來的一串文字,如: “error”, “x”, “oth s and”,(2)數(shù)位字符串 也稱位矢量,是用字符形式表示的多位數(shù)碼,表示二進(jìn)制、八進(jìn)制或十六進(jìn)制的數(shù)組。 數(shù)位字符串的表示首先要有計數(shù)基數(shù),然后將該基數(shù)表示的值放在雙引號中,基數(shù)符以b,o,x表示,并放在字符串的前面。 b:二進(jìn)制基數(shù)符號,表示二進(jìn)制數(shù)位0或1,在字符串的每一位表示一個比特。,o:八進(jìn)制基數(shù)符號(07),在字符串的每一個數(shù)表示八進(jìn)制數(shù),即代表一個3位的二進(jìn)制數(shù)。 x:十六進(jìn)制基數(shù)符號(0f),在字符串的每一個數(shù)表示十六進(jìn)制數(shù),即代表一個4位的二進(jìn)制數(shù)。 例:b“111011110” - 二進(jìn)制數(shù)數(shù)組,位矢量數(shù)組長度9 o “15” - 八進(jìn)制數(shù)數(shù)組,位矢量數(shù)組長度6 x“ad0” - 十六進(jìn)制數(shù)數(shù)組,位矢量數(shù)組長度12,用戶自定義數(shù)據(jù)類型用類型定義語句type實(shí)現(xiàn): type 數(shù)據(jù)類型名 數(shù)據(jù)類型名 數(shù)據(jù)類型定義 枚舉類型; 整數(shù)類型; 實(shí)數(shù)類型; 數(shù)組類型; 存取類型; 文件類型; 記錄類型; 時間類型。,(2) 用戶定義的數(shù)據(jù)類型, 枚舉類型 是一類的數(shù)據(jù)類型,用文字符號來表示一組實(shí)際的二進(jìn)制數(shù)。 例: type state1 is (st0, st1, st2, st3) 用以表達(dá)4個狀態(tài)的位矢量長度可以為2,編碼默認(rèn)值為: st0=”00“, st1=”01“, st2=”10“, st3=”11“ 一般將第一個枚舉量的編碼為0或0000等,以后的編碼值依次加1., 數(shù)組類型 將一組具有相同類型的元素集合在一起,作為一個數(shù)據(jù)對象來處理的數(shù)據(jù)類型。 數(shù)組定義格式: type 數(shù)組類型名 is array 約束范圍 of 數(shù)據(jù)類型 實(shí)例: type stb is arrary (7 downto 0) of std_logic 數(shù)組名是stb,各元素分別為stb(7),stb(0),若一個對象可能取值范圍是某個類型說明定義范圍的子集,則需用到子類型。 subtype 子類型名 is 數(shù)據(jù)類型名范圍 例: subtype digit is integer range 0 to 9(子類型digit為整數(shù)的09范圍) 子類型digits是把integer約束到只含10個值的數(shù)據(jù)類型。,(3) 用戶定義子類型,1 函數(shù)轉(zhuǎn)換法 數(shù)據(jù)類型的變換函數(shù)通常由“std_logic_1164”、 “std_logic_arith”、 “std_logic_unsigned” 的程序包等提供。,(4) 數(shù)據(jù)類型轉(zhuǎn)換,表 典型的類型變換函數(shù),以下語句表示bit_vector和std_logic_vector的賦值語句: a=x“a8“ 十六進(jìn)制值可賦予位矢量 b=to_stdlogicvector(x“af7“) b=to_stdlogicvector(o“5177“) 八進(jìn)制變換 b=to_stdlogicvector(b“1010_1111_0111“),2 類型標(biāo)記轉(zhuǎn)換法 直接利用類型名進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,與高級語言的強(qiáng)制類型轉(zhuǎn)換類似。 其語句格式為: 數(shù)據(jù)類型標(biāo)志(表達(dá)式): 例:variable a:integer; varibale b: real; a:=integer (b); b:=real (a);,3.2.1.3 vhdl操作符,vhdl的各種表達(dá)式由操作數(shù)和操作符組成。其中操作數(shù)是各種運(yùn)算的對象,而操作符則規(guī)定運(yùn)算的方式。 vhdl操作符包括邏輯操作符,關(guān)系操作符,算術(shù)操作符和重載運(yùn)算符。,表 vhdl中的運(yùn)算符的優(yōu)先級,操作符的使用說明,遵循在操作符之間的操作數(shù)是相同數(shù)據(jù)類型的原則。 當(dāng)一個表達(dá)式中有兩個以上的運(yùn)算符時,可使用括號將這些運(yùn)算分組。 若一串邏輯運(yùn)算中的算符相同,且是and,or,xor這三個算符中的一種,則不需使用括號;其他情況則需使用括號。,例:邏輯運(yùn)算的vhdl描述 signal a, b, c: std_logic_vector(3 downto 0); signal d, e, f, g: std_logic_vector(1 downto 0); signal h, i, j, k: std_logic; signal s, m, n, o, p: bollean; ,a=b and c; d=e or f or g; -兩個操作符or相同,不需括號 s= (m xor n) and (o xor p);-操作符不同,需加括號 h=i and j and k; -操作符相同,不需加括號,算符操作符號中的并置運(yùn)算符&的操作數(shù)的數(shù)據(jù)類型是一維數(shù)組,可以利用其將普通操作數(shù)或數(shù)組組合起來形成新的數(shù)組。 “vh”&“dl”的結(jié)果為“vhdl”,例如, 并置運(yùn)算符的使用: tmp_b=b and (en 第二個語句表示4位位矢量a和4位位矢量b再次連接(并置), 構(gòu)成8位的位矢量y輸出。 圖所示為并置運(yùn)算符操作的電路示意。,圖 并置運(yùn)算符操作,重載運(yùn)算符(overloaded operators),是基本操作符作重新定義的函數(shù)型操作符。 很多重載運(yùn)算符是由ieee 1164和ieee 1076.3標(biāo)準(zhǔn)所定義的。 例如, ieee 1076標(biāo)準(zhǔn)定義了類型為signed和integer以及unsigned和natural重載運(yùn)算符的函數(shù)。,運(yùn)算符的重載函數(shù)在ieee 1076.3標(biāo)準(zhǔn)的numeric_std集合包中被定義。 使用時, 此集合包必須用use從句, 使之對設(shè)計實(shí)體可見。 library ieee; use ieee.std_logic_1164.all; use work.numeric_std.all; entity compare is port( a: in unsigned (3 downto 0); x: out std_logic; end add_vec; architecture compare of compare is begin x= 1 when a= 123 else 1; end;,標(biāo)識符的基本作用就是給vhdl中的語法單位起一個獨(dú)特的名字, 以區(qū)別于其它的語法單位。 標(biāo)識符可以是常數(shù)、變量、信號、端口、子程序或參數(shù)的名字。 在vhdl 87中有關(guān)標(biāo)識符的語法規(guī)范被vhdl 93全部接受并加以擴(kuò)展。 下面分別介紹擴(kuò)展前后的標(biāo)識符命名規(guī)則。 為了對二者加以區(qū)別, 前者稱為短標(biāo)識符, 后者則稱為擴(kuò)展標(biāo)識符。,3.2.1.4標(biāo)識符,1) 短標(biāo)識符 vhdl 87中的短標(biāo)識符遵循以下命名規(guī)則。 有效字符包括: 英文字母(az, az)、 數(shù)字(09)和下劃線(_); 必須以英文字母打頭; 下劃線(_)的前后都必須有英文字母或者數(shù)字; 不區(qū)分大小寫。 在vhdl設(shè)計中, 應(yīng)該注意在定義短標(biāo)識符時, 避開使用vhdl中的保留字。 這些保留字如下:,2) 擴(kuò)展標(biāo)識符 vhdl 93中對標(biāo)識符進(jìn)行了擴(kuò)展, 擴(kuò)展后的標(biāo)識符遵循以下語法規(guī)則。 擴(kuò)展標(biāo)識符用反斜杠來分隔。 如: adder, begin_add 擴(kuò)展標(biāo)識符允許包含圖形符號及空格等。 如: counter&adder, entity%end 擴(kuò)展標(biāo)識符的兩個反斜杠之間可以用保留字。 如: entity, architecture,擴(kuò)展標(biāo)識符的兩個反斜杠之間可以用數(shù)字打頭。 如: 1adder, 44counter 擴(kuò)展標(biāo)識符中允許多個下劃線相連。 如: addercounter 同名的擴(kuò)展標(biāo)識符和短標(biāo)識符不表示同一名稱。 如: adder和adder不相同。 擴(kuò)展標(biāo)識符中如果含有一個反斜杠, 可以兩個反斜杠來代替。 如: addercounter表示的擴(kuò)展標(biāo)識符名稱為addercounter。 擴(kuò)展標(biāo)識符要區(qū)分大小寫:gate和gate不同 擴(kuò)展標(biāo)識符規(guī)則使得vhdl中的標(biāo)識符的定義更加自由。,3.2.2 vhdl程序的結(jié)構(gòu),采用vhdl進(jìn)行數(shù)字系統(tǒng)設(shè)計, 需要根據(jù)vhdl的基本語法規(guī)則, 對所要說明的功能目標(biāo)進(jìn)行描述。 不管所描述的是一個百萬門的數(shù)字系統(tǒng), 還是描述一個基本門電路, 其基本的結(jié)構(gòu)都是實(shí)體。,示例:2選1選擇器設(shè)計,圖1是一個2選1選擇器框圖,a,b為輸入端,s為控制端,y為輸出端,其邏輯功能為:,library ieee; - 庫說明部分 use ieee.std_logic_1164.all; entity mux21 is - 實(shí)體說明部分 port(a,b : in std_logic; s : in std_logic; y : out std_logic ); end entity mux21 ; architecture one of mux21 is - 結(jié)構(gòu)體部分 begin y= a when s=“0“ else b when s=“1“ ; end architecture one ;,vhdl程序的基本結(jié)構(gòu)包括: 庫說明library 程序包使用說明use 實(shí)體說明entity 結(jié)構(gòu)體architecture 配置configuration 其中,實(shí)體和結(jié)構(gòu)體是vhdl程序的基本組成部分。,libary ieee; use ieee.std_logic_1164.all; entity dff1 is port (clk :in std_logic; d: in std_logic; q: out std_logic ); end entity dff1; architecture bhv of dff1 is signal q1 : std_logic; begin process ( clk ) begin if clkevent and clk = 1 then q1= d; end if; q=q1; end process; end architecture bhv;,例:d觸發(fā)器,entity 名稱 is 接口信號說明 end 名稱; architecture 構(gòu)造名 of 實(shí)體名 is 功能描述 end 構(gòu)造名;,1. 實(shí)體(entity) 實(shí)體主要由實(shí)體說明和構(gòu)造體組成。 實(shí)體說明描述電路的外部特征; 結(jié)構(gòu)體描述的是電路內(nèi)部的邏輯。 (1) 實(shí)體說明主要包括: 類屬參數(shù)說明; 端口說明。,實(shí)體說明語句格式為: entity 實(shí)體名 is generic(類屬表) prot(端口表) end 實(shí)體名,libary ieee; use ieee.std_logic_1164.all; entity dff1 is port ( clk : in std_logic; d : in std_logic; q : out std_logic ); end entity dff1;,類屬說明語句generic 類屬參量是一種端口界面常數(shù),以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明部分。 類屬為設(shè)計實(shí)體和其外部環(huán)境的通信的靜態(tài)信息提供通道,特別用來規(guī)定端口的大小、實(shí)體中子元件的數(shù)目、實(shí)體的定時屬性等。,類屬說明的一般格式為: generic(常數(shù)名:數(shù)據(jù)類型:= 設(shè)定值; 常數(shù)名:數(shù)據(jù)類型:= 設(shè)定值);,例:對于譯碼器電路,其特點(diǎn)是有n個輸入,就有2n個輸出。用類屬統(tǒng)一描述為: entity decoder is generic (n:positive); prot(se1: in bit_vector(1 to n); dout: out bit_vector(1 to 2*n); end decoder,端口說明語句prot 端口為設(shè)計實(shí)體和外部環(huán)境的動態(tài)通信提供通道,實(shí)體端口說明語句格式為: port(端口名:端口模式 數(shù)據(jù)類型; 端口名:端口模式 數(shù)據(jù)類型);,端口名:為實(shí)體的對外通道所取的名字 端口模式:定義了4種常用模式, 輸入in: 用于時鐘、控制和單向數(shù)據(jù)的輸入; 輸出out:主要用于計數(shù)輸出; 雙向buffer: 信號輸出到實(shí)體外部,同時在內(nèi)部反饋使用 緩沖inout: 信號是雙向的,可進(jìn)入/離開實(shí)體。,端口定義,input port,output port,數(shù)據(jù)類型:vhdl預(yù)定義的數(shù)據(jù)類型有, 整數(shù)數(shù)據(jù)類型 布爾數(shù)據(jù)類型boolean 標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型std_logic 位數(shù)據(jù)類型bit(邏輯位1和0),結(jié)構(gòu)體 用以描述實(shí)體的內(nèi)部結(jié)構(gòu)和實(shí)體端口之間的邏輯關(guān)系。 具體實(shí)現(xiàn)一個實(shí)體,每個實(shí)體有多個結(jié)構(gòu)體。 對有多個結(jié)構(gòu)體的實(shí)體,必須用configuration配置語句說明,結(jié)構(gòu)體的語句格式為 architecture 結(jié)構(gòu)體名 of 實(shí)體名 is 說明語句 begin 并行處理語句 end architecture結(jié)構(gòu)體名,說明語句:對結(jié)構(gòu)體的功能描述語句中用到的信號signal,數(shù)據(jù)類型type,常數(shù)constant,元件component,函數(shù)function和過程procedure等加以說明的語句。 并行處理語句:描述結(jié)構(gòu)體的行為和結(jié)構(gòu),例:設(shè)a,b是或非門的輸入端口,c是輸出端口,y 是結(jié)構(gòu)體內(nèi)部信號,vhdl描述的二輸入或非門的結(jié)構(gòu)體為: architechture nor1 of nor_2 is signal y: std_logic begin y=a or b; c=not y; end nor1;,圖 設(shè)計實(shí)體與其實(shí)體說明、 構(gòu)造體的關(guān)系,3 配置 配置語句是vhdl設(shè)計實(shí)體中的一個基本單元,綜合和仿真中可用配置語句為實(shí)體配置一個結(jié)構(gòu)體。 設(shè)計者可以利用配置語句來選擇不同的構(gòu)造體, 使其與要設(shè)計的實(shí)體相對應(yīng)。 在仿真某個實(shí)體時, 可利用配置來選擇不同的構(gòu)造體進(jìn)行性能對比試驗(yàn), 以得到性能最佳的實(shí)體。,configuration 配置名 of 實(shí)體名 is 語句說明 end 配置名 最簡單的配置格式: configuration 配置名 of 實(shí)體名 is for 選配構(gòu)造體名 end for end 配置名,4. 庫、 程序包 1) 庫 vhdl的庫是用來放置和存儲可編譯設(shè)計單元的倉庫。 為了方便使用vhdl進(jìn)行編程,ieee將預(yù)定義的數(shù)據(jù)類型、元件調(diào)用聲明及一些常用子程序收集在一起,形成程序包,供設(shè)計程序時共享和調(diào)用。 若干程序包形成庫,庫可以使設(shè)計者共享已經(jīng)編譯的設(shè)計成果和數(shù)據(jù)。,vhdl程序利用庫中的單元時,需要在每個實(shí)體開始說明引用的庫,然后利用use子句來指明要使用庫中的哪一個設(shè)計單元,即每個實(shí)體開始均要有打開庫或 程序包的語句。 常用的庫是ieee庫。vhdl程序需要使用庫中的單元時,需要在每個實(shí)體開始時說明引用的庫,然后用use子句來說明要使用庫中哪一個設(shè)計單元。,庫說明語句和use子句的語句結(jié)構(gòu)為: library ,庫名; use . . all use . . ; 關(guān)鍵詞library指明所使用的庫名,use指明庫中程序包。,例: library ieee; use ieee. std_logic_1164. all; use ieee.std_logic_1164. rising_edge; 表示打開ieee庫,允許設(shè)計程序中被描述器件的輸入、輸出端口和數(shù)據(jù)類型使用ieee標(biāo)準(zhǔn)庫中的std_logic_1164.all程序包和std_logic_1164程序包中的rising_edge函數(shù)。,庫的種類,vhdl庫分為設(shè)計庫和資源庫,設(shè)計庫不需要使用library和use子句聲明,資源庫是標(biāo)準(zhǔn)模塊和常規(guī)元件存放的庫,使用之前需要聲明。 vhdl庫的設(shè)計庫主要是std庫、 work庫; vhdl庫的資源庫包括用戶定義庫和ieee庫。,(1) ieee庫 該庫存放了ieee 1076中的標(biāo)準(zhǔn)設(shè)計單元, 如程序包std_logic_1164、 numeric_std和numeric_bit。 其中std_logic_1164是最重要和最常用的程序包。 synopsys的std_logic_arith, std_logic_signed, std_logic_unsigned也并入了ieee庫。,(2) std庫 邏輯名為std的庫是所有設(shè)計單元隱含定義的庫, 即下面的library子句隱含存在任意設(shè)計單元之前, 而不需顯式地寫出。 library std; std庫中包含預(yù)定義的程序包standard和textio。,(3) work庫 用戶當(dāng)前庫, 可用于保存當(dāng)前正在進(jìn)行的設(shè)計; 它也是在開發(fā)過程中, 各種vhdl工具處理設(shè)計文件的地方。 用戶在設(shè)計項目中已經(jīng)設(shè)計好的,正在校驗(yàn)、未仿真的中間件等均放在工作庫work中。,(4) 用戶定義庫 vhdl工具廠商往往都有他們自己的資源庫, 其中包括各廠商自己預(yù)定義的程序包。 用戶可以直接使用這些庫。 另外, 用戶也可以建立自己的資源庫, 如對每個項目建立的用戶庫等。 為了使用已經(jīng)定義好的某個資源庫, 必須在要使用資源庫的每個設(shè)計單元的開頭用library子句顯式地說明。,(5) 面向asic庫 fpga公司提供的現(xiàn)成的ip資源庫, 有許多可以由用戶定制的功能元件形式出現(xiàn)的設(shè)計。 這些元件的功能范圍從簡單的加法器、 多路選擇器等到復(fù)雜的系統(tǒng)級的濾波器、 存儲器模塊等。 這些功能元件都經(jīng)過專業(yè)設(shè)計和驗(yàn)證, 并在性能和占用器件資源等方面進(jìn)行了優(yōu)化。 應(yīng)用它們對提高設(shè)計效率和質(zhì)量十分有利。,2) 程序包 程序包是一個可編譯的設(shè)計單元, 也是庫結(jié)構(gòu)中的一個層次, 用來存放各個設(shè)計共享的信號定義、 常數(shù)定義、 數(shù)據(jù)類型、 元件結(jié)構(gòu)、 函數(shù)定義和過程定義等。 程序包的一般格式:,package 程序包名is 說明單元 end package程序包名; 以下為程序包包體單元 package body 程序包名 is 說明單元 end package body程序包名; 程序包體名應(yīng)該與其對應(yīng)的程序包說明的名字相同。,程序包說明單元是主設(shè)計單元, 它可以獨(dú)立編譯并插入設(shè)計庫中。 程序包體是次級單元, 它可以在其對應(yīng)的主設(shè)計單元編譯并插入設(shè)計庫之后獨(dú)立進(jìn)行編譯, 然后插入設(shè)計庫中。 ,例如: 程序包的說明單元 package my_package is function and_f(a, b: std_logic_vector) return std_logic_vector; type my_array is array 2 downto 0 of std_logic_vector(3 downto 0); constant my_5v: std_logic_vector(7 downto 0):=(other = 1); end;,程序包的包體單元 package body my_pack is function add_f(a, b: std_logic_vector) return std_logic_vector is begin return(0,常用程序包,vhdl標(biāo)準(zhǔn)提供了一些預(yù)先定義的標(biāo)準(zhǔn)程序包,包括standard,textio,std_logic_1164,numeric_std,numeric_bit等程序包。,std_logic_1164程序包 定義了一些數(shù)據(jù)類型、子類型和函數(shù),這些定義將vhdl擴(kuò)展為能描述多值邏輯的硬件描述語言。 該程序包對所有設(shè)計實(shí)體均不可見,在使用時需在vhdl開始部分添加以下語句: library ieee; use ieee.std_logic_1164.all;,std_logic_arith程序包 該程序包已預(yù)先編譯在ieee庫中,在std_logic_1164程序包基礎(chǔ)上的擴(kuò)展。 std_logic_signed和std_logic_unsigned程序包 該程序包已預(yù)先編譯在ieee庫中,其中std_logic_signed定義有符號數(shù)的運(yùn)算, std_logic_unsigned定義無符號數(shù)的運(yùn)算,,standard程序包 存在于標(biāo)準(zhǔn)設(shè)計庫std中。定義了布爾量類型,位類型,字符類型,實(shí)數(shù)類型,整數(shù)類型等。 textio程序包 存在于標(biāo)準(zhǔn)設(shè)計庫std中。定義了line類型,text類型,文件input等。,程序包textio對所有設(shè)計實(shí)體均不可見,故在使用它時需要在vhdl程序的開始部分添加: library std; use std.textio.all;,3.3 vhdl的基本語句,vhdl語句主要是并行語句 concurrent statements和順序語句sequential statements。 并行語句在執(zhí)行過程中,語句的執(zhí)行順序與語句的書寫順序無關(guān),所有語句是并發(fā)執(zhí)行的。 順序語句在執(zhí)行過程中,語句的執(zhí)行順序按照語句的書寫順序依次執(zhí)行的。 并行語句主要用于表示算法模塊間的連接關(guān)系, 順序語句主要用于實(shí)現(xiàn)模型的算法部分。,結(jié)構(gòu)體中各個模塊之間是并行執(zhí)行的,應(yīng)采用并行語句來描述。 模塊內(nèi)部的語句則需根據(jù)描述方式?jīng)Q定,即模塊內(nèi)部既可采用并行描述語句,也可采用順序描述語句。,實(shí)際電子系統(tǒng)中,幾乎所有操作都是并發(fā)執(zhí)行的。 這些操作沒有順序之分。一旦得到事件觸發(fā),它們就會開始工作。 為了描述電子系統(tǒng)的工作方式,vhdl提供了并行描述語句。 各種并行語句在結(jié)構(gòu)體中的執(zhí)行是同步進(jìn)行的,即并行運(yùn)行的,其執(zhí)行方式與書寫的順序無關(guān),3.3.1 并行語句,并行語句內(nèi)部的語句運(yùn)行方式包括并行執(zhí)行方式(塊語句)和順序執(zhí)行方式(進(jìn)程語句) 并行語句在結(jié)構(gòu)體中的格式為: architecture 結(jié)構(gòu)體 of 實(shí)體名is 說明語句; begin 并行處理語句; end 結(jié)構(gòu)體名,vhdl中的主要并行語句包括: 信號賦值語句; 塊(block)語句; 進(jìn)程(process)語句; 過程調(diào)用語句; 生成(generate)語句; 元件例化語句; 斷言(assert)語句。,并行信號復(fù)制語句用于進(jìn)程和子程序外部的信號賦值。 并行信號賦值語句有3種形式: 基本(簡單)信號賦值語句、 條件信號賦值語句、 選擇信號賦值語句。,1) 信號賦值語句,基本信號賦值語句 將信號直接賦給賦值目標(biāo), 其格式如下: 賦值目標(biāo) = 表達(dá)式 ; 注意:賦值目標(biāo)的數(shù)據(jù)對象必須是信號,=兩邊的數(shù)據(jù)類型必須一致。 多條并發(fā)信號賦值語句是并行執(zhí)行的。,例:如下結(jié)構(gòu)體中3條信號賦值語句并行執(zhí)行。 architecture curt of bcl is signal s,e,f,g,h: std_logic; begin output1=a and b; output2=c+d; g=e or f; end curt;,(2) 條件信號賦值語句 在滿足條件表達(dá)式的情況下將表達(dá)式的值賦給目標(biāo)信號, 其格式如下: 賦值目標(biāo) = 表達(dá)式 when 賦值條件 else -第一句 表達(dá)式 when 賦值條件 else -第二句 表達(dá)式; -最后一句,1)執(zhí)行該語句的過程是,首先判斷第一句中的賦值條件是否滿足,若滿足時就把對應(yīng)的表達(dá)式的值傳遞個賦值目標(biāo),并且結(jié)束該賦值語句(整個語句);否則,判斷第二句中的賦值條件,如果所有的賦值條件都不滿足,把最后一句表達(dá)式的值傳遞給賦值目標(biāo)。 2)語句的執(zhí)行具有優(yōu)先次序,第一條優(yōu)先級最高; 3)賦值目標(biāo)與表達(dá)式的值數(shù)據(jù)類型應(yīng)相同; 4)賦值條件是布爾量,為真時表示條件滿足; 5) 這是一種并行描述語句,不能在進(jìn)程和子程序中使用。,例:利用條件信號賦值語句描述4選1數(shù)據(jù)選擇電路程序 library ieee; use ieee.std_logic_1164.all; entity mux41_2 is prot( s1,s0,d0,d1,d2 d3: in std_logic; q: out std_logic); end mux41_2; architecture bhv of mux41_2 is signal sel: std_logic_vector(1 downto 0); begin sel=s1 ,(3) 選擇信號賦值語句 與條件信號賦值語句基本相同,都是在條件表達(dá)式為真時將表達(dá)式賦給目標(biāo)信號,只是在基本格式上有所不同。 選擇信號賦值語句的基本格式如下: with表達(dá)式 select 目標(biāo)信號= 表達(dá)式1 when 選擇條件1; 表達(dá)式2 when 選擇條件2; 表達(dá)式n when 選擇條件n; 先進(jìn)行選擇條件表達(dá)式的判斷,然后根據(jù)其值來決定把哪一個表達(dá)式賦給目標(biāo)信號。,例:利用選擇信號賦值語句描述4選1數(shù)據(jù)選擇電路程序 library ieee; use ieee.std_logic_1164.all; entity mux41_3 is prot( s1,s0,d0,d1,d2 d3: in std_logic; q: out std_logic); end mux41_3; architecture bhv of mux41_3 is signal sel: std_logic_vector(1 downto 0); begin sel=s1 ,選擇信號賦值語句需注意: 僅當(dāng)條件表達(dá)式的值滿足選擇條件時,才能將表達(dá)式賦給目標(biāo)信號 是并行描述語句,不能在進(jìn)程和子程序中使用 表達(dá)式后面均含when子句。,塊語句把多個并行語句打包, 形成結(jié)構(gòu)體中的一個單獨(dú)的塊區(qū)域, 可以看作結(jié)構(gòu)體中的一個子模塊。 block語句的目的是改善并行語句及其結(jié)構(gòu)的可讀性。,2) 塊(block)語句,其基本格式如下: 塊標(biāo)號: block(保護(hù)表達(dá)式) 塊說明部分語句 begin 并行描述語句 end block塊標(biāo)號;,1)塊語句本身是并行語句,塊內(nèi)的語句也需是并行語句。 2)語句包括類屬說明語句和端口說明語句。類屬說明語句用于參數(shù)的定義,端口說明語句用于信號的定義,通常用generic,port語句來實(shí)現(xiàn)。 3)塊中定義的數(shù)據(jù)類型、數(shù)據(jù)對象(信號、變量和常量)、子程序等都是局部的。在塊嵌套時,外層定義的內(nèi)容可被內(nèi)層接受,反之則不然。如果塊中出現(xiàn)同名數(shù)據(jù)對象,則遵循相鄰優(yōu)先的原則。,例: 含block語句的1位全加器 library ieee; use ieee.std_logic_1164.all; entity full_adder is port(a,b,ci: in std_logic; co: out std_logic; s: out std_logci); end full_adder;,architectur rtl of full_adder is begin example: block port(a_tmp,b_tmp,ci_tmp: in std_logic; co_tmp:out std_logic; s_tmp: out std_logic);,port map (a, b, ci, co, s); signal tmp1,tmp2:std_logic; begin p1: process (a_tmp, b_tmp) begin tmp1=a_tmp xor b_tmp; end process p1; p2: process(tmp1,ci_tmp) begin tmp2=tmp1 and ci_tmp; end process p2;,p3: process(tmp1,ci_tmp) begin s_tmp=tmp1 xor ci_tmp; end process p3; p4: process(a_tmp,b_tmp, tmp2) begin co_tmp=tmp2 or( a_tmp and b_tmp); end process p4; end block example; end rtl;,一個結(jié)構(gòu)體可包一個或多個進(jìn)程語句,各個進(jìn)程語句之間是并行執(zhí)行。 而組成進(jìn)程語句的各個語句是順序執(zhí)行的。,3) 進(jìn)程(process)語句,進(jìn)程語句基本格式如下: 進(jìn)程標(biāo)號:process(信號敏感表)is 進(jìn)程說明部分 begin 順序處理語句 end process進(jìn)程標(biāo)號;,entity example is port(in1,clk: in bit; out1: out bit); end example; archtecture example of example is begin process (clk) begin out1 = in1 after 10ns; end process; end example;,進(jìn)程語句的說明部分用來定義局部變量, 在該說明區(qū)中可以說明數(shù)據(jù)類型、 子程序和變量。 敏感信號列表是列出用于啟動本進(jìn)程可讀入的信號名。 通常將所有輸入信號均列入敏感信號列表中,當(dāng)其中某個信號變化時,該進(jìn)程被激活執(zhí)行。 不能將變量列入敏感表,因進(jìn)程只對信號敏感。,進(jìn)程語句中的敏感信號有兩種表示方式: 其一是將敏感信號緊跟在保留字process之后的顯式敏感表形式; 其二是采用wait語句形式, 即在該進(jìn)程末加wait on信號敏感表。 一個進(jìn)程語句可以看作是一個無限循環(huán): 當(dāng)進(jìn)程的最后一個語句執(zhí)行完成之后, 又從該進(jìn)程的第一個語句開始執(zhí)行。,在一個進(jìn)程語句中, 如果沒有顯式的信號敏感表, 則在進(jìn)程體內(nèi)部至少必須含有一個wait語句; 否則, 該進(jìn)程陷入無限循環(huán)。 wait語句的執(zhí)行會暫停進(jìn)程的執(zhí)行, 直到信號敏感表發(fā)生變化或某種條件滿足為止。 ,wait語句的基本格式有3種: wait on 信號敏感表; wait until 條件表達(dá)式; wait for 時間表達(dá)式。 wait on 使進(jìn)程暫停, 直到信號敏感表中的某個信號值發(fā)生變化為止; wait until語句使進(jìn)程暫停, 直到預(yù)期的條件為真; wait for語句使進(jìn)程暫停一段由時間表達(dá)式指定的時間。 在信號敏感表的位置, 如果沒有信號敏感表而有一個條件表達(dá)式, 則默認(rèn)的信號敏感表由在該表達(dá)式中出現(xiàn)的信號組成。,例:含有進(jìn)程語句的d觸發(fā)器 library ieee; use ieee.std_logic_1164.all; entity d_ff is port (clk, d: in std_logic; q,qn: out std_logic); end d_ff;,architecture rtl of d_ff is begin process (clk) begin if(clkevent and clk=1)then q=d; qb=not d; end if; end process; end rtl; 其中敏感信號激勵方式是敏感信號列表方式。若信號clk發(fā)生變化,則程序順序執(zhí)行進(jìn)程中的描述語句。執(zhí)行完成后,進(jìn)程語句進(jìn)入等待狀態(tài),等待信號clk的下次變化。,采用wait語句的進(jìn)程描述d觸發(fā)器 process begin if(clkevent and clk=1)then q=d; qb=not d; end if; wait on clk; end process 程序中去掉了保留字process后的敏感信號列表,然后在進(jìn)程語句末采用wait on語句進(jìn)行信號激勵。,過程是vhdl中子程序的一種。 對于任何一個并行過程調(diào)用, 都有一個等價的進(jìn)程語句與之對應(yīng)。 過程由過程首和過程體兩部分組成,過程首不是必須的,過程體可以獨(dú)立存在和使用。 被并行過程調(diào)用的過程的形式參數(shù)必須是常數(shù)類或信號類。,4) 過程調(diào)用語句,并行過程調(diào)用語句的基本格式如下: procedure 過程名(參數(shù)表);過程首 procedure 過程名 (參數(shù)表)is;過程體 過程說明部分; begin 順序處理語句 end 過程名,生成語句可以簡化有規(guī)則設(shè)計結(jié)構(gòu)的邏輯描述,適用于高重復(fù)性電路設(shè)計。 在設(shè)計中,只要根據(jù)某些條件,設(shè)定好某一元件或設(shè)計單位,則可利用生成語句復(fù)制一組完全相同的的并行元件或設(shè)計單元電路結(jié)構(gòu)。,5) 生成(generate)語句,生成語句的基本格式如下: 生成標(biāo)號: 生成方案 generate 生成語句 end generate 生成標(biāo)號; 生 成方案有兩種: for 和if
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省泉州七中09-10學(xué)年高二下學(xué)期期中考試(生物)
- 2025年商業(yè)店鋪?zhàn)赓U合同樣本范文
- 西昌市年產(chǎn)1800噸精煉食用油項目環(huán)境影響報告表
- 2025年二人合伙投資合同范本
- 2025委托制作合同范本范文:合同案例解析
- 2025標(biāo)準(zhǔn)化的運(yùn)輸勞務(wù)合同樣本匯編
- 某鼓式制動器溫度場研究與結(jié)構(gòu)優(yōu)化
- 2025關(guān)于北京公寓房預(yù)定合同范本
- 個人師德總結(jié)及自評(10篇)
- 文化創(chuàng)意項目投資與合作合同
- 買賣車輛協(xié)議書范文模板
- 2024年海南省??谑兄锌家荒?荚嚿镌囶}
- 2024年4月自考02323操作系統(tǒng)概論試題及答案含評分標(biāo)準(zhǔn)
- MOOC 模擬電子技術(shù)基礎(chǔ)-華中科技大學(xué) 中國大學(xué)慕課答案
- 2024網(wǎng)絡(luò)信息安全應(yīng)急響應(yīng)Windows應(yīng)急手冊
- MOOC 灰色系統(tǒng)理論-南京航空航天大學(xué) 中國大學(xué)慕課答案
- 《燃煤火力發(fā)電企業(yè)設(shè)備檢修導(dǎo)則》
- 上海市徐匯區(qū)2023-2024學(xué)年高二下學(xué)期3月質(zhì)量監(jiān)控考物理模擬試題(附答案)
- 2023年-2024年新《管理學(xué)原理》考試題庫(含答案)
- 深圳市企業(yè)數(shù)據(jù)合規(guī)指引
- 新能源汽車電機(jī)軸項目實(shí)施方案
評論
0/150
提交評論