




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)4.1結(jié)構(gòu)化過(guò)程語(yǔ)句always
任務(wù)4.2過(guò)程賦值語(yǔ)句
任務(wù)4.3選擇語(yǔ)句
任務(wù)4.4循環(huán)語(yǔ)句
任務(wù)4.5塊語(yǔ)句(begin/end)
任務(wù)4.6任務(wù)和函數(shù)語(yǔ)句
任務(wù)4.7流水線設(shè)計(jì)任務(wù)4.1結(jié)構(gòu)化過(guò)程語(yǔ)句always
always語(yǔ)句是行為建模的基本語(yǔ)句,每個(gè)always語(yǔ)句代表一個(gè)獨(dú)立的執(zhí)行過(guò)程,也稱為進(jìn)程。與C語(yǔ)言不同,Verilog在本質(zhì)上是并發(fā)的而非順序的,Verilog的各個(gè)always進(jìn)程也是并發(fā)執(zhí)行的,而不是順序執(zhí)行的。always語(yǔ)句對(duì)應(yīng)著實(shí)際的硬件電路。always@(*)通常對(duì)應(yīng)組合邏輯電路。always@(posedgeclk)對(duì)應(yīng)時(shí)序邏輯電路,相當(dāng)于一個(gè)D觸發(fā)器和一個(gè)組合邏輯電路,其中組合邏輯電路的輸出直接連接D觸發(fā)器的數(shù)據(jù)輸入端。always語(yǔ)句包括的所有行為語(yǔ)句構(gòu)成了一個(gè)always語(yǔ)句塊。每個(gè)always語(yǔ)句塊在滿足一定的條件后即執(zhí)行其中的第一條語(yǔ)句,然后按順序執(zhí)行隨后的語(yǔ)句,直到最后一條執(zhí)行完成后,再次等待always語(yǔ)句塊的執(zhí)行條件,等條件滿足后又從第一條語(yǔ)句開(kāi)始執(zhí)行,循環(huán)往復(fù)。因此,always語(yǔ)句通常用于對(duì)數(shù)字電路中一組反復(fù)執(zhí)行的活動(dòng)進(jìn)行建模?!纠?-1】
使用always語(yǔ)句描述D觸發(fā)器。例4-1的綜合結(jié)果如圖4-1所示。從綜合結(jié)果來(lái)看,例4-1實(shí)現(xiàn)了一個(gè)上升沿觸發(fā)的D觸發(fā)器。上述電路設(shè)計(jì)涉及的知識(shí)點(diǎn)有always語(yǔ)句、非阻塞賦值語(yǔ)句。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)?always語(yǔ)句。always語(yǔ)句是行為建模的典型特征。例4-1的程序在時(shí)鐘上升沿將數(shù)據(jù)d賦予觸發(fā)器輸出q,功能同D觸發(fā)器一樣。always語(yǔ)句由于其不斷重復(fù)執(zhí)行的特性,只有和一定的時(shí)序控制結(jié)合在一起才有用。always@(posedgeclk)語(yǔ)句表示只有在clk上升沿才開(kāi)始執(zhí)行always語(yǔ)句塊,否則不執(zhí)行。這種時(shí)序控制是always語(yǔ)句最常用的。always的時(shí)序控制可以是沿觸發(fā)的,也可以是電平觸發(fā)的,可以是單個(gè)信號(hào)或多個(gè)信號(hào),中間需要用關(guān)鍵字or或“,”連接。例如:沿觸發(fā)的always塊常用來(lái)描述時(shí)序邏輯,如果符合可綜合風(fēng)格要求,則可用綜合工具將其自動(dòng)轉(zhuǎn)換為表示時(shí)序邏輯的寄存器組和門級(jí)邏輯;而電平觸發(fā)的always塊常用來(lái)描述組合邏輯和帶鎖存器的組合邏輯,如果符合可綜合風(fēng)格要求,則可轉(zhuǎn)換為表示組合邏輯的門級(jí)邏輯或帶鎖存器的組合邏輯。一個(gè)模塊中可以有多個(gè)always塊,它們都是并行運(yùn)行的。(2)always語(yǔ)句對(duì)應(yīng)的電路。always@(*)通常對(duì)應(yīng)組合邏輯電路。always@(posedgeclk)對(duì)應(yīng)的是時(shí)序邏輯電路,相當(dāng)于一個(gè)D觸發(fā)器和一個(gè)組合邏輯電路,其中組合邏輯電路的輸出直接連接D觸發(fā)器的數(shù)據(jù)輸入端。本書(shū)建議每個(gè)always語(yǔ)句塊通常都實(shí)現(xiàn)且僅實(shí)現(xiàn)一個(gè)輸出變量。這是因?yàn)橐粋€(gè)D觸發(fā)器通常僅有一個(gè)輸出變量Q,這種實(shí)現(xiàn)方法與實(shí)際電路的對(duì)應(yīng)關(guān)系清晰明了。(3)非阻塞賦值語(yǔ)句。q<=d;中使用的是非阻塞賦值語(yǔ)句。非阻塞賦值語(yǔ)句是過(guò)程賦值語(yǔ)句的一種類型。讀者應(yīng)掌握阻塞賦值語(yǔ)句和非阻塞賦值語(yǔ)句的特征。任務(wù)4.2?過(guò)程賦值語(yǔ)句過(guò)程賦值語(yǔ)句的更新對(duì)象是寄存器、整數(shù)等。這些類型的變量在被賦值后,其值將保持不變,直到被其他過(guò)程賦值語(yǔ)句賦予新值。過(guò)程賦值語(yǔ)句與數(shù)據(jù)流建模中的連續(xù)賦值語(yǔ)句是不同的。首先,連續(xù)賦值語(yǔ)句總是處于活動(dòng)狀態(tài),任意一個(gè)操作數(shù)的變化都會(huì)導(dǎo)致表達(dá)式的重新計(jì)算以及重新賦值,但過(guò)程賦值語(yǔ)句只有在執(zhí)行到的時(shí)候才會(huì)起作用。其次,更新對(duì)象不同,連續(xù)賦值語(yǔ)句的更新對(duì)象是線網(wǎng),而過(guò)程賦值語(yǔ)句的更新對(duì)象是寄存器、整數(shù)等。最后,形式不同,過(guò)程賦值語(yǔ)句不使用assign。過(guò)程賦值語(yǔ)句與連續(xù)賦值語(yǔ)句又有相同之處,即兩者可以使用的運(yùn)算符是完全相同的。連續(xù)賦值語(yǔ)句中使用的運(yùn)算符在過(guò)程賦值語(yǔ)句中同樣適用,而且含義完全相同。Verilog包括兩種類型的過(guò)程賦值語(yǔ)句:阻塞賦值語(yǔ)句和非阻塞賦值語(yǔ)句。下面通過(guò)5個(gè)示例來(lái)說(shuō)明兩種賦值方式的不同。這5個(gè)示例的設(shè)計(jì)目標(biāo)都是實(shí)現(xiàn)3位移位寄存器,它們分別采用了阻塞賦值方式和非阻塞賦值方式?!纠?-2】
采用阻塞賦值方式描述移位寄存器1。
綜合結(jié)果如圖4-2所示。【例4-3】
采用阻塞賦值方式描述移位寄存器2。
綜合結(jié)果如圖4-3所示?!纠?-4】
阻塞賦值方式描述的移位寄存器3。
綜合結(jié)果如圖4-4所示?!纠?-5】
采用非阻塞賦值方式描述移位寄存器1。
【例4-6】
采用非阻塞賦值方式描述移
位寄存器2。例4-5和例4-6的綜合結(jié)果與例4-2的完全一致,如圖4-2所示。例4-2~例4-6的電路設(shè)計(jì)涉及的知識(shí)點(diǎn)有過(guò)程賦值語(yǔ)句、阻塞賦值、非阻塞賦值。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)阻塞賦值。例4-2~例4-65個(gè)例題的設(shè)計(jì)目標(biāo)均是實(shí)現(xiàn)3位移位寄存器,但從綜合結(jié)果可以看出,例4-3和例4-4沒(méi)有實(shí)現(xiàn)設(shè)計(jì)目標(biāo),這與這兩個(gè)設(shè)計(jì)中使用了阻塞賦值有關(guān)。Q2=Q1;這種賦值方式稱為阻塞賦值,Q2的值在賦值語(yǔ)句執(zhí)行完成后立刻改變,而且隨后的語(yǔ)句必須在賦值語(yǔ)句執(zhí)行完成后才能繼續(xù)執(zhí)行。所以,例4-4中的三條語(yǔ)句Q0=D,Q1=Q0,Q2=Q1,執(zhí)行完成后,Q0、Q1、Q2的值都變化為D的值。也就是說(shuō),D的值同時(shí)賦給了Q0、Q1、Q2,參照其綜合結(jié)果就能更清晰地看到這一點(diǎn)。例4-2和例4-3可通過(guò)同樣的分析得出與綜合結(jié)果一致的結(jié)論。(2)非阻塞賦值。Q2<=Q1;這種賦值方式稱為非阻塞賦值,Q2的值在賦值語(yǔ)句執(zhí)行完成后并不會(huì)立刻改變,而是等到整個(gè)always語(yǔ)句塊結(jié)束后才完成賦值操作。所以,例4-6中的三條語(yǔ)句Q0<=D,Q2<=Q1,Q1<=Q0,執(zhí)行完成后,Q0、Q1、Q2的值并沒(méi)有立刻更新,而是保持了原來(lái)的值,直到always語(yǔ)句塊結(jié)束后才同時(shí)進(jìn)行賦值,因此Q0的值變?yōu)榱薉的值,Q2的值變?yōu)榱嗽瓉?lái)Q1的值,Q1的值變?yōu)榱嗽瓉?lái)Q0的值(而不是剛剛更新的Q0的值D),參照其綜合結(jié)果能更清晰地看到這一點(diǎn)。例4-5可通過(guò)同樣的分析得出與綜合結(jié)果一致的結(jié)論。(3)過(guò)程賦值語(yǔ)句總結(jié)。前三個(gè)例題采用的是阻塞賦值方式,可以看出阻塞賦值語(yǔ)句在always塊語(yǔ)句中的位置對(duì)其結(jié)果有影響;后兩個(gè)例題采用的是非阻塞賦值方式,可以看出非阻塞賦值語(yǔ)句在always塊語(yǔ)句中的位置對(duì)其結(jié)果沒(méi)有影響。因此,在使用賦值語(yǔ)句時(shí)要注意兩者的區(qū)別與聯(lián)系。在電路設(shè)計(jì)中,注意非阻塞賦值“<=”只能用于對(duì)寄存器類型變量進(jìn)行賦值,因此只能用于“initial”塊和“always”塊中,不允許用于連續(xù)賦值語(yǔ)句“assign”;而阻塞賦值“=”既可以對(duì)線網(wǎng)類型變量賦值,也可以對(duì)寄存器類型變量進(jìn)行賦值,因此既可以用于“initial”塊和“always”塊中,也可以用于連續(xù)賦值語(yǔ)句“assign”,但阻塞賦值通常用于連續(xù)賦值語(yǔ)句中。綜上所述,在選擇使用阻塞賦值和非阻塞賦值時(shí),為了防止引起歧義或產(chǎn)生混亂,建議在實(shí)現(xiàn)組合邏輯時(shí)統(tǒng)一使用阻塞賦值,在實(shí)現(xiàn)時(shí)序邏輯時(shí)統(tǒng)一使用非阻塞賦值。任務(wù)4.3?選
擇
語(yǔ)
句一、if條件語(yǔ)句if-else語(yǔ)句用來(lái)判定所給定的條件是否滿足,根據(jù)判定結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。VerilogHDL語(yǔ)言提供了三種形式的if語(yǔ)句。(1)第1種if條件語(yǔ)句如下所示。(3)第3種if條件語(yǔ)句如下所示。(2)第2種if條件語(yǔ)句如下所示。
下面是一個(gè)使用if語(yǔ)句的例子。【例4-7】
使用always語(yǔ)句描述具有異步復(fù)位功能的D觸發(fā)器。
綜合結(jié)果如圖4-5所示。上述電路設(shè)計(jì)涉及的知識(shí)點(diǎn)有if條件語(yǔ)句和異步復(fù)位。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)異步復(fù)位。always@(posedgeclk,negedgerst)語(yǔ)句表示只有在clk上升沿或者rst下降沿才開(kāi)始執(zhí)行always語(yǔ)句塊,否則不執(zhí)行。所以,D觸發(fā)器的復(fù)位為異步復(fù)位。這種帶有異步復(fù)位的時(shí)序邏輯電路的寫法可作為時(shí)序邏輯電路設(shè)計(jì)的模板。(2)?if條件語(yǔ)句。三種形式的if語(yǔ)句中,if后面都有“表達(dá)式”,一般為邏輯表達(dá)式或關(guān)系表達(dá)式。系統(tǒng)對(duì)表達(dá)式的值進(jìn)行判斷,若為1,則按“真”處理;否則按“假”處理,執(zhí)行指定的語(yǔ)句。三種形式的if語(yǔ)句中,語(yǔ)句后都有分號(hào)。這是由于分號(hào)是VerilogHDL語(yǔ)句中不可缺少的部分,這個(gè)分號(hào)是if語(yǔ)句中的內(nèi)嵌套語(yǔ)句所要求的。但應(yīng)注意,不要誤認(rèn)為if和else是兩個(gè)語(yǔ)句,其實(shí)它們都屬于同一個(gè)if語(yǔ)句。else子句不能作為語(yǔ)句單獨(dú)使用,它必須是if語(yǔ)句的一部分,且與離它最近的if配對(duì)使用。例4-7中的程序使用了第2種if語(yǔ)句形式——if…else的條件語(yǔ)句,在時(shí)鐘上升沿的時(shí)刻,首先判斷復(fù)位信號(hào)rst是否有效,若有效則將D觸發(fā)器輸出置0,否則將數(shù)據(jù)d賦予D觸發(fā)器輸出。if(!rst)等同于if(rst==0),Verilog允許這些形式的表達(dá)式簡(jiǎn)寫方式。在if和else后面可以包含一個(gè)語(yǔ)句,也可以有多個(gè)操作語(yǔ)句,此時(shí)用begin和end這兩個(gè)關(guān)鍵詞將幾個(gè)語(yǔ)句包含起來(lái)成為一個(gè)復(fù)合塊語(yǔ)句。例如:注意:end后不需要加分號(hào)。因?yàn)閎egin…end內(nèi)是一個(gè)完整的復(fù)合語(yǔ)句,不需再附加分號(hào)。(3)?if語(yǔ)句的嵌套。在if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句,稱為if語(yǔ)句的嵌套。if語(yǔ)句嵌套的一般形式如下:進(jìn)行電路設(shè)計(jì)時(shí)應(yīng)注意if與else的配對(duì)關(guān)系,else總是與它上面距離最近的if配對(duì)。如果if與else的數(shù)目不一樣,則為了實(shí)現(xiàn)程序設(shè)計(jì)者的意圖,可以用begin…end塊語(yǔ)句來(lái)確定配對(duì)關(guān)系。例如:這時(shí)begin_end塊語(yǔ)句限定了內(nèi)嵌if語(yǔ)句的范圍,因此else與第一個(gè)if配對(duì)。注意begin_end塊語(yǔ)句在if_else語(yǔ)句中的使用。二、case多路分支語(yǔ)句case語(yǔ)句是一種多分支選擇語(yǔ)句,基本的if語(yǔ)句只有兩個(gè)分支可供選擇,而實(shí)際設(shè)計(jì)中常常需要用到多分支選擇,Verilog語(yǔ)言提供的case語(yǔ)句可直接處理多分支選擇。case語(yǔ)句的一般形式如下:case(表達(dá)式) <case分支項(xiàng)> endcasecase分支項(xiàng)的一般格式如下:分支表達(dá)式: 語(yǔ)句;缺省項(xiàng)(default項(xiàng)): 語(yǔ)句;case后面()內(nèi)的表達(dá)式稱為控制表達(dá)式,case分支項(xiàng)中的表達(dá)式稱為分支表達(dá)式??刂票磉_(dá)式通常表示為控制信號(hào)的某些位,分支表達(dá)式則用這些控制信號(hào)的具體狀態(tài)值來(lái)表示,因此,分支表達(dá)式又稱為常量表達(dá)式。當(dāng)控制表達(dá)式的值與分支表達(dá)式的值相等時(shí),就執(zhí)行分支表達(dá)式后面的語(yǔ)句。如果所有的分支表達(dá)式的值都沒(méi)有與控制表達(dá)式的值相匹配,就執(zhí)行default后面的語(yǔ)句。default項(xiàng)可有可無(wú),一個(gè)case語(yǔ)句里只允許有一個(gè)default項(xiàng)。下面是一個(gè)簡(jiǎn)單的使用case語(yǔ)句的例子?!纠?-8】
使用case語(yǔ)句實(shí)現(xiàn)四功能的算術(shù)邏輯單元(ALU)設(shè)計(jì),其輸入信號(hào)a、b均為4位,功能選擇信號(hào)sel為2位,輸出信號(hào)out為5位,具體關(guān)系如表4-1所示。例4-8的功能仿真結(jié)果如圖4-6所示。上述電路設(shè)計(jì)涉及的知識(shí)點(diǎn)有case語(yǔ)句和鎖存器。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)?case語(yǔ)句。在用case語(yǔ)句表達(dá)式進(jìn)行比較的過(guò)程中,只有當(dāng)信號(hào)的對(duì)應(yīng)位的值能明確進(jìn)行比較時(shí),比較才能成功,因此應(yīng)詳細(xì)說(shuō)明case分項(xiàng)的分支表達(dá)式的值。case語(yǔ)句的所有表達(dá)式的值的位寬必須相等,只有這樣控制表達(dá)式和分支表達(dá)式才能進(jìn)行對(duì)應(yīng)位的比較。每一個(gè)case分項(xiàng)的分支表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)矛盾現(xiàn)象(對(duì)表達(dá)式的同一個(gè)值有多種執(zhí)行方案,對(duì)應(yīng)到實(shí)際的電路,則會(huì)表現(xiàn)出電路不穩(wěn)定)。執(zhí)行完case分項(xiàng)后的語(yǔ)句后,跳出該case語(yǔ)句結(jié)構(gòu),終止case語(yǔ)句的執(zhí)行。(2)鎖存器。如果條件語(yǔ)句或多路分支語(yǔ)句使用不當(dāng),則會(huì)在設(shè)計(jì)中生成原本沒(méi)有的鎖存器。對(duì)于多路選擇語(yǔ)句使用不當(dāng)?shù)氖纠缦拢荷鲜鯿ase語(yǔ)句的功能是:在某個(gè)信號(hào)sel取不同的值時(shí),會(huì)給另一個(gè)信號(hào)q賦不同的值。always塊中說(shuō)明:如果sel?=?0,q取a值;而當(dāng)sel?=?2'b11,q取b的值。如果sel取2'b00和2'b11以外的值時(shí),在always塊內(nèi),默認(rèn)為q保持原值,這樣就自動(dòng)生成了鎖存器。如果希望當(dāng)sel取2'b00和2'b11以外的值時(shí)q賦為0,則default就必不可少了,如下例所示。程序中的case語(yǔ)句有default項(xiàng),指明如果sel不取2'b00或2'b11時(shí),編譯器或仿真器應(yīng)賦給q的值。整個(gè)Verilog程序模塊綜合出來(lái)后,always塊對(duì)應(yīng)的部分不會(huì)生成鎖存器。也就是說(shuō),在多路分支語(yǔ)句中使用default語(yǔ)句,可避免生成鎖存器。對(duì)于條件語(yǔ)句使用不當(dāng)?shù)氖纠缦拢荷鲜鯽lways語(yǔ)句塊中,if語(yǔ)句說(shuō)明當(dāng)a?=?1時(shí),q取d的值。當(dāng)a?=?0時(shí),沒(méi)有定義q的取值。在always塊內(nèi),如果在給定的條件下變量沒(méi)有賦值,這個(gè)變量將保持原值,也就是說(shuō)會(huì)生成一個(gè)鎖存器。如果希望當(dāng)a?=?0時(shí)q的值為0,else項(xiàng)就必不可少,如下例所示。整個(gè)Verilog程序模塊綜合出來(lái)后,always塊對(duì)應(yīng)的部分不會(huì)生成鎖存器。以上示例介紹了怎樣來(lái)避免偶然生成鎖存器的錯(cuò)誤。如果使用if語(yǔ)句,應(yīng)寫上else項(xiàng);如果使用case語(yǔ)句,則應(yīng)寫上default項(xiàng)。遵循上面兩條原則,就可以避免發(fā)生生成鎖存器的錯(cuò)誤,使設(shè)計(jì)者更加明確設(shè)計(jì)目標(biāo),同時(shí)也增強(qiáng)了Verilog程序的可讀性。下面分別使用if-else語(yǔ)句和case語(yǔ)句來(lái)實(shí)現(xiàn)四選一多路選擇器,以使讀者體會(huì)兩種語(yǔ)句的差別與聯(lián)系。【例4-9】
四選一多路選擇器。綜合得出的電路圖如圖4-7所示。例4-9對(duì)應(yīng)的測(cè)試代碼如例4-10所示?!纠?-10】
四選一多路選擇器測(cè)試臺(tái)。仿真波形如圖4-8所示。從圖4-8的仿真波形可以看出,out_if和out_case在相同輸入激勵(lì)的情況下,輸出波形完全一致,這說(shuō)明case語(yǔ)句與if/else語(yǔ)句是可以很容易地相互轉(zhuǎn)換。例4-10使用if-else語(yǔ)句實(shí)現(xiàn)out_if,使用case語(yǔ)句實(shí)現(xiàn)out_case。從綜合得到的電路圖來(lái)看,雖然電路結(jié)構(gòu)差異較大,但實(shí)現(xiàn)的功能都是四選一多路選擇器,條件和輸出都一樣。上述電路設(shè)計(jì)和電路仿真中涉及的知識(shí)點(diǎn)是:if條件語(yǔ)句、case語(yǔ)句、選擇語(yǔ)句、鎖存器。三、選擇語(yǔ)句總結(jié)選擇語(yǔ)句包括if-else語(yǔ)句和case語(yǔ)句,是可綜合電路設(shè)計(jì)中最常使用的語(yǔ)句。選擇語(yǔ)句必須在initial和always語(yǔ)句塊中使用。在always語(yǔ)句塊內(nèi),如果在給定的條件下變量沒(méi)有賦值,這個(gè)變量將保持原值,也就是說(shuō)會(huì)生成一個(gè)鎖存器。下面對(duì)選擇語(yǔ)句的使用作一些總結(jié)。(1)選擇語(yǔ)句。條件語(yǔ)句if和多路分支語(yǔ)句case只能用在always語(yǔ)句塊中,也就是只能用在行為建模中。if條件語(yǔ)句和case語(yǔ)句都屬于選擇語(yǔ)句。case語(yǔ)句與if…else語(yǔ)句可以很容易地相互轉(zhuǎn)換,但與case語(yǔ)句中的控制表達(dá)式和多分支表達(dá)式的結(jié)構(gòu)相比,if…else結(jié)構(gòu)中的條件表達(dá)式更為直觀一些。case語(yǔ)句經(jīng)常用于實(shí)現(xiàn)基于真值表的組合邏輯電路設(shè)計(jì)和基于狀態(tài)機(jī)的時(shí)序邏輯電路設(shè)計(jì)。(2)鎖存器。前面在介紹case語(yǔ)句時(shí)已經(jīng)介紹了鎖在器的知識(shí)點(diǎn),下面對(duì)該知識(shí)點(diǎn)作一個(gè)總結(jié)。if-else和case這兩種分支語(yǔ)句經(jīng)常會(huì)產(chǎn)生Latch。Latch就是鎖存器,是一種在異步電路系統(tǒng)中,對(duì)輸入信號(hào)電平敏感的單元,用來(lái)存儲(chǔ)信息。鎖存器在數(shù)據(jù)未鎖存時(shí),輸出端的信號(hào)隨輸入信號(hào)變化,就像信號(hào)通過(guò)一個(gè)緩沖器,一旦鎖存信號(hào)有效,則數(shù)據(jù)被鎖存,輸入信號(hào)不起作用??赡墚a(chǎn)生Latch的幾種情況包括:①
組合邏輯中if-else條件分支語(yǔ)句缺少else語(yǔ)句。②
組合邏輯中case條件分支語(yǔ)句條件未完全列舉,且缺少default語(yǔ)句。③
組合邏輯中輸出變量賦值給自己。解決辦法如下:①if-else要涵蓋所有可能。②case語(yǔ)句列舉所有條件,如果不能列出所有條件,則應(yīng)添加default語(yǔ)句。(3)選擇語(yǔ)句的使用原則。硬件電路設(shè)計(jì)過(guò)程中,對(duì)變量賦值應(yīng)考慮各種情況,即針對(duì)各種情況變量的結(jié)果都要進(jìn)行明確的說(shuō)明。下面用兩段代碼完成同一功能的示例來(lái)進(jìn)行說(shuō)明。推薦的設(shè)計(jì)代碼如下:上面的示例中,兩段代碼都是正確的。但推薦的設(shè)計(jì)代碼說(shuō)明了在各種情況下cnt的取值;而不推薦的設(shè)計(jì)代碼中沒(méi)有明確說(shuō)明各種情況下cnt的取值,需要讀者進(jìn)一步分析代碼,才能理解cnt的變化情況。任務(wù)4.4?循
環(huán)
語(yǔ)
句在VerilogHDL中常用的可綜合的循環(huán)語(yǔ)句有repeat和for,用來(lái)控制執(zhí)行語(yǔ)句的執(zhí)行次數(shù)。repeat用于將一條語(yǔ)句連續(xù)執(zhí)行n次。for通過(guò)以下三個(gè)步驟來(lái)決定語(yǔ)句的循環(huán)執(zhí)行:①
先給控制循環(huán)次數(shù)的變量賦初值。②
判定控制循環(huán)的表達(dá)式的值,如為假,則跳出循環(huán)語(yǔ)句;如為真,則執(zhí)行指定的循環(huán)語(yǔ)句后,轉(zhuǎn)到第③步。③
執(zhí)行一條賦值語(yǔ)句來(lái)修正控制循環(huán)變量次數(shù)的變量的值,然后返回第②步。下面對(duì)兩種循環(huán)語(yǔ)句進(jìn)行詳細(xì)的介紹。一、for語(yǔ)句for語(yǔ)句的一般形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句;它的執(zhí)行過(guò)程如下:(1)求解表達(dá)式1。(2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面的第(3)步。若為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)若表達(dá)式為真,在執(zhí)行指定的語(yǔ)句后,求解表達(dá)式3。(4)轉(zhuǎn)回上面的第(2)步,繼續(xù)執(zhí)行。(5)執(zhí)行for語(yǔ)句下面的語(yǔ)句。下面使用for循環(huán)語(yǔ)句實(shí)現(xiàn)由加法運(yùn)算來(lái)完成乘法運(yùn)算的功能。【例4-11】
使用for循環(huán)語(yǔ)句實(shí)現(xiàn)一個(gè)參數(shù)化的多位乘法器。綜合得到的電路圖如圖4-9所示。上述電路設(shè)計(jì)中涉及的知識(shí)點(diǎn)有for語(yǔ)句和begin/end順序塊。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)?for語(yǔ)句。for語(yǔ)句用于循環(huán)操作,例4-11就是采用了加法和移位這個(gè)循環(huán)操作來(lái)實(shí)現(xiàn)乘法的。在for語(yǔ)句中,循環(huán)變量的增值表達(dá)式可以不必是一般的常規(guī)加1或減1表達(dá)式。(2)?begin/end順序塊。begin/end塊語(yǔ)句相當(dāng)于復(fù)合語(yǔ)句,可以看作一條語(yǔ)句。若在順序塊中定義變量,則需要給順序塊命名,如例4-11中的順序塊命名為mult。例4-11在命名順序塊中定義的變量j,一方面用作循環(huán)計(jì)數(shù),另一方面也用作移位運(yùn)算符的操作數(shù)。二、repeat語(yǔ)句repeat語(yǔ)句的格式如下:
下面的示例中使用repeat循環(huán)語(yǔ)句實(shí)現(xiàn)例4-11同樣的功能?!纠?-12】使用repeat循環(huán)語(yǔ)句及加法和移位操作來(lái)實(shí)現(xiàn)一個(gè)參數(shù)化的多位乘法器。例4-12綜合得到的電路圖跟使用for循環(huán)中例4-11得到的電路圖完全一致。上述電路設(shè)計(jì)中涉及的知識(shí)點(diǎn)是repeat語(yǔ)句。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)例4-12使用repeat循環(huán)來(lái)代替for循環(huán)來(lái)實(shí)現(xiàn)乘法功能,二者的原理相同,但在實(shí)現(xiàn)形式上有所區(qū)別。(2)在repeat語(yǔ)句中,其表達(dá)式通常為常量表達(dá)式。repeat(size)中表達(dá)式size的值為常值4。下面使用for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)8位移位寄存器。【例4-13】8位移位寄存器。程序說(shuō)明如下:(1)例4-13使用兩種方法實(shí)現(xiàn)8位移位寄存器,其中q1使用普通方法實(shí)現(xiàn),q2使用for語(yǔ)句實(shí)現(xiàn)。兩種方法原理相同,便于讀者理解for語(yǔ)句的功能。(2)例4-13使用了for語(yǔ)句,讀者可以很方便地使用repeat進(jìn)行替換。(3)綜合得到的電路圖如圖4-10所示。(4)上述設(shè)計(jì)的測(cè)試代碼如例4-14所示。【例4-14】8位移位寄存器測(cè)試臺(tái)。
與仿真代碼相應(yīng)的仿真波形如圖4-11所示。從圖4-11的仿真波形圖可以看出,移位寄存器設(shè)計(jì)正確。上述電路設(shè)計(jì)和電路仿真中涉及的知識(shí)點(diǎn)是循環(huán)語(yǔ)句、組合邏輯。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)循環(huán)語(yǔ)句。for語(yǔ)句、repeat語(yǔ)句都是可綜合的循環(huán)語(yǔ)句,都用于循環(huán)操作,并且在實(shí)際應(yīng)用中兩者可以互相替換。(2)組合邏輯。循環(huán)語(yǔ)句實(shí)現(xiàn)的是組合邏輯電路,會(huì)耗用大量的硬件資源和時(shí)間。循環(huán)語(yǔ)句完成的功能越復(fù)雜,則該組合邏輯耗用的時(shí)間就越多,會(huì)大大降低系統(tǒng)的工作頻率。為了提高系統(tǒng)的工作頻率,讀者在設(shè)計(jì)中應(yīng)盡量避免使用循環(huán)語(yǔ)句。三、循環(huán)語(yǔ)句總結(jié)VerilogHDL是一種硬件描述語(yǔ)言,如果期望在代碼中實(shí)現(xiàn),則需要EDA工具將其翻譯成基本的門邏輯,而在硬件電路中并沒(méi)有循環(huán)電路的原型,因此,在使用循環(huán)語(yǔ)句時(shí)應(yīng)時(shí)刻注意其可綜合性。循環(huán)語(yǔ)句包括可綜合的和不可綜合的。for語(yǔ)句、repeat語(yǔ)句都是可綜合的循環(huán)語(yǔ)句;while語(yǔ)句是不可綜合的循環(huán)語(yǔ)句。電路設(shè)計(jì)需要使用可綜合的循環(huán)語(yǔ)句,而使用最多的是for語(yǔ)句,其他可綜合的循環(huán)語(yǔ)句使用較少。因此,在可綜合的設(shè)計(jì)中,建議讀者僅使用for循環(huán)語(yǔ)句。對(duì)于硬件電路來(lái)說(shuō),循環(huán)語(yǔ)句屬于組合邏輯,會(huì)耗費(fèi)大量的硬件資源。因此,在設(shè)計(jì)電路時(shí)應(yīng)較少使用。設(shè)計(jì)電路時(shí)需考慮面積和速度這兩個(gè)因素,如果要提高電路的工作頻率,通常是將循環(huán)語(yǔ)句轉(zhuǎn)換成狀態(tài)機(jī)建?;蛘吡魉€建模來(lái)完成相應(yīng)的功能。另外,對(duì)于不可綜合循環(huán)語(yǔ)句while,實(shí)現(xiàn)的功能也可以采用類似的處理辦法予以綜合實(shí)現(xiàn)。循環(huán)語(yǔ)句使用的指導(dǎo)原則是:雖然基于循環(huán)語(yǔ)句的VerilogHDL設(shè)計(jì)顯得相對(duì)簡(jiǎn)單,且閱讀起來(lái)比較容易,但面向硬件和軟件設(shè)計(jì)的關(guān)注點(diǎn)是不一樣的,硬件設(shè)計(jì)并不追求代碼的短小,而是設(shè)計(jì)的時(shí)序、面積和性能等特征。在電路設(shè)計(jì)中應(yīng)使用狀態(tài)機(jī)建?;蛘吡魉€建模來(lái)代替for循環(huán)。任務(wù)4.5?塊語(yǔ)句(begin/end)關(guān)鍵字begin和end用于將多條語(yǔ)句組成順序塊。順序塊的格式如下:其中,塊名即該塊的名字,是一個(gè)標(biāo)識(shí)名。塊內(nèi)聲明語(yǔ)句可以是參數(shù)聲明語(yǔ)句、reg型變量聲明語(yǔ)句、integer型變量聲明語(yǔ)句、real型變量聲明語(yǔ)句等。塊語(yǔ)句通常用來(lái)將兩條或多條語(yǔ)句組合在一起,使它們更像一條語(yǔ)句,類似于C語(yǔ)言中的復(fù)合語(yǔ)句。Verilog語(yǔ)言中可綜合的塊語(yǔ)句為順序塊,關(guān)鍵字begin和end用于將多條語(yǔ)句組成順序塊。順序塊具有以下特點(diǎn):(1)順序塊中的語(yǔ)句是一條接一條按順序執(zhí)行的,只有前面的語(yǔ)句執(zhí)行完成之后才能執(zhí)行后面的語(yǔ)句(非阻塞賦值語(yǔ)句除外)。(2)嵌套塊:塊可以嵌套使用。(3)命名塊:塊可以具有自己的名字,稱之為命名塊。在命名塊中可以聲明局部變量,命名塊是設(shè)計(jì)層次的一部分,命名塊中聲明的變量可以通過(guò)層次名引用進(jìn)行訪問(wèn)。下面是一個(gè)使用命名塊的示例,其功能是使用異或運(yùn)算符對(duì)D完成縮位異或,并檢測(cè)D中1的個(gè)數(shù)?!纠?-15】
完成使用異或運(yùn)算符對(duì)D完成縮位異或運(yùn)算和檢測(cè)D中1的個(gè)數(shù)這兩個(gè)功能。程序說(shuō)明如下:(1)本例使用了for循環(huán)語(yǔ)句對(duì)D的各位進(jìn)行運(yùn)算。(2)本例使用了begin/end塊語(yǔ)句。塊語(yǔ)句相當(dāng)于復(fù)合語(yǔ)句,可以看作一條語(yǔ)句。(3)本例定義了3個(gè)命名塊。其中,塊block1和塊xor_block、塊Count_block是嵌套關(guān)系。塊xor_block的功能是完成縮位異或,塊Count_block的功能是完成檢測(cè)D中1的個(gè)數(shù)。(4)在命名塊xor_block中聲明的局部變量I和在命名塊Count_block中聲明的局部變量J,都用于循環(huán)計(jì)數(shù)。需要說(shuō)明的是,如果在塊中使用局部變量,則必須對(duì)該塊進(jìn)行命名。任務(wù)4.6?任務(wù)和函數(shù)語(yǔ)句一、task語(yǔ)句task和function說(shuō)明語(yǔ)句分別用來(lái)定義任務(wù)和函數(shù)。利用任務(wù)和函數(shù)可以把一個(gè)較大的程序模塊分解成多個(gè)較小的任務(wù)和函數(shù),以便于理解和調(diào)試。輸入/輸出和總線信號(hào)的值可以傳入/傳出任務(wù)和函數(shù)。任務(wù)和函數(shù)往往是大的程序模塊中在不同地點(diǎn)多次用到的相同的程序段。學(xué)會(huì)使用task和function語(yǔ)句可以簡(jiǎn)化程序的結(jié)構(gòu),使程序明白易懂,是讀者編寫較大型模塊的基本功。VerilogHDL函數(shù)和任務(wù)在綜合時(shí)被理解成具有獨(dú)立運(yùn)算功能的電路,每調(diào)用一次函數(shù)和任務(wù)就相當(dāng)于改變這部分電路的輸入,以得到相應(yīng)的計(jì)算結(jié)果。下面分別通過(guò)任務(wù)和函數(shù)來(lái)實(shí)現(xiàn)對(duì)輸入數(shù)進(jìn)行按位逆序后輸出。【例4-16】
用任務(wù)實(shí)現(xiàn)輸入數(shù)據(jù)按位逆序后輸出的功能。程序說(shuō)明如下:(1)本例說(shuō)明了怎樣定義任務(wù)和調(diào)用任務(wù)。開(kāi)始于task而結(jié)束于endtask的部分定義了一個(gè)任務(wù)。定義的任務(wù)語(yǔ)法如下:這些聲明語(yǔ)句的語(yǔ)法與模塊定義中對(duì)應(yīng)的聲明語(yǔ)句的語(yǔ)法是一致的。(2)reverse_bits(D,Q);的功能是調(diào)用任務(wù)并傳遞輸入/輸出變量給任務(wù)。調(diào)用任務(wù)并傳遞輸入/輸出變量的聲明語(yǔ)句的語(yǔ)法如下:<任務(wù)名>(端口1,端口2,…,端口n);本例中,任務(wù)調(diào)用變量(D,Q)和任務(wù)定義的I/O變量(data,result)之間是一一對(duì)應(yīng)的。當(dāng)任務(wù)啟動(dòng)時(shí),由D傳入的變量賦給了data,而當(dāng)任務(wù)完成后的輸出又通過(guò)result賦給了Q。(3)如果傳給任務(wù)的變量值和任務(wù)完成后接收結(jié)果的變量已定義,則可以用一條語(yǔ)句啟動(dòng)任務(wù)。任務(wù)完成以后,控制會(huì)傳回啟動(dòng)過(guò)程。二、function語(yǔ)句使用任務(wù)完成的可綜合的模塊也可以由函數(shù)來(lái)實(shí)現(xiàn)。例4-17就是使用函數(shù)對(duì)例4-16進(jìn)行了重新改寫?!纠?-17】
用函數(shù)實(shí)現(xiàn)輸入數(shù)據(jù)位逆序后輸出的功能。程序說(shuō)明如下:(1)本例說(shuō)明了怎樣定義函數(shù)和調(diào)用函數(shù)。開(kāi)始于function而結(jié)束于endfunction的部分定義了一個(gè)函數(shù)。定義的函數(shù)語(yǔ)法如下:注意:<返回值的類型或范圍>這一項(xiàng)是可選項(xiàng),如缺省,則返回值為一位寄存器類型數(shù)據(jù)。這些聲明語(yǔ)句的語(yǔ)法與模塊定義中對(duì)應(yīng)的聲明語(yǔ)句的語(yǔ)法是一致的。(2)?Q<=reverse_bits(D);的功能是調(diào)用函數(shù)并傳遞輸入變量給函數(shù),函數(shù)的調(diào)用是通過(guò)將函數(shù)作為表達(dá)式中的操作數(shù)來(lái)實(shí)現(xiàn)的。在函數(shù)中,reverse_bits被賦予的值就是函數(shù)的返回值。函數(shù)的定義聲明了與函數(shù)同名的、函數(shù)內(nèi)部的寄存器。如果在函數(shù)的聲明語(yǔ)句中<返回值的類型或范圍>為缺省,則這個(gè)寄存器是一位的,否則是與函數(shù)定義中<返回值的類型或范圍>一致的寄存器。函數(shù)的定義把函數(shù)返回值所賦值寄存器的名稱初始化為與函數(shù)同名的內(nèi)部變量。調(diào)用函數(shù)并傳遞輸入/輸出變量的聲明語(yǔ)句的語(yǔ)法如下:<函數(shù)名>(<表達(dá)式><,<表達(dá)式>>*)其中,函數(shù)名作為確認(rèn)符。本例中,函數(shù)調(diào)用變量(D,Q)和函數(shù)定義的I/O變量(data,reverse_bits)之間是一一對(duì)應(yīng)的。當(dāng)函數(shù)啟動(dòng)時(shí),由D傳入的變量賦給了data,而函數(shù)完成后的輸出又通過(guò)reverse_bits賦給了Q。(3)如果傳給函數(shù)的變量值和函數(shù)完成后接收結(jié)果的變量已定義,則可以用一條語(yǔ)句啟動(dòng)函數(shù)。函數(shù)完成后,控制會(huì)傳回啟動(dòng)過(guò)程。例4-16和例4-17兩個(gè)示例對(duì)應(yīng)的仿真代碼如例4-18所示?!纠?-18】
函數(shù)和任務(wù)的測(cè)試代碼。
仿真波形如圖4-12所示。從圖4-12的仿真波形可以看出,兩個(gè)示例均實(shí)現(xiàn)了位逆序的功能。上述電路設(shè)計(jì)和電路仿真中涉及的知識(shí)點(diǎn)有task語(yǔ)句、function語(yǔ)句。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說(shuō)明。(1)任務(wù)和函數(shù)的相同點(diǎn)。任務(wù)和函數(shù)在完成一些電路或者功能實(shí)現(xiàn)時(shí)是可以相互替換的(如例??4-18),使用時(shí)應(yīng)注意兩者在輸入和輸出時(shí)的一些規(guī)則。(2)任務(wù)和函數(shù)的區(qū)別。①
任務(wù)能調(diào)用其他函數(shù),而函數(shù)不能調(diào)用任務(wù)。②
函數(shù)只能與主模塊共用同一個(gè)仿真時(shí)間單位,而任務(wù)可以定義自己的仿真時(shí)間單位。③
函數(shù)至少要有一個(gè)輸入變量,而任務(wù)可以沒(méi)有或有多個(gè)任何類型的變量。④
任務(wù)可以啟動(dòng)其他的任務(wù),其他任務(wù)又可以啟動(dòng)別的任務(wù),可以啟動(dòng)的任務(wù)數(shù)是沒(méi)有限制的。不管有多少任務(wù)啟動(dòng),只有當(dāng)所有的啟動(dòng)任務(wù)完成以后,控制才能傳回啟動(dòng)過(guò)程。⑤
函數(shù)的目的是通過(guò)返回一個(gè)值來(lái)響應(yīng)輸入信號(hào)的值。任務(wù)卻能支持多種目的,計(jì)算多個(gè)結(jié)果值,而這些結(jié)果值只能通過(guò)被調(diào)用的任務(wù)的輸出或總線端口輸出。⑥VerilogHDL模塊使用函數(shù)時(shí)是把它當(dāng)作表達(dá)式中的操作符,這個(gè)操作符的結(jié)果值就是這個(gè)函數(shù)的返回值。也就是說(shuō),函數(shù)返回一個(gè)值,而任務(wù)則不返回值。例如,定義一個(gè)任務(wù)或函數(shù),對(duì)一個(gè)16位的字進(jìn)行操作讓高字節(jié)與低字節(jié)互換,把它變?yōu)榱硪粋€(gè)字(假定這個(gè)任務(wù)或函數(shù)名為switch_bytes)。任務(wù)返回的新字是通過(guò)輸出端口的變量,因此,16位字字節(jié)互換任務(wù)的調(diào)用方法為switch_bytes(old_word,new_word);。任務(wù)switch_bytes把輸入old_word的高、低字節(jié)互換放入new_word端口輸出。而函數(shù)返回的新字是通過(guò)函數(shù)本身的返回值,因此,16位字高、低字節(jié)互換函數(shù)的調(diào)用方法為new_word=switch_bytes(old_word);。與任務(wù)相比,函數(shù)的使用有較多的約束。例如,函數(shù)的定義不能包含任何的時(shí)間控制語(yǔ)句,即任何用#、@或wait來(lái)標(biāo)識(shí)的語(yǔ)句;函數(shù)不能啟動(dòng)任務(wù);定義函數(shù)時(shí)至少要有一個(gè)輸入?yún)⒘?;在函?shù)的定義中必須有一條賦值語(yǔ)句給函數(shù)中的一個(gè)內(nèi)部變量賦以函數(shù)的結(jié)果值,該內(nèi)部變量具有和函數(shù)名相同的名字。任務(wù)4.7?流水線設(shè)計(jì)數(shù)字系統(tǒng)的工作頻率要滿足以下公式:其中,Tco為發(fā)端寄存器Q時(shí)鐘到輸出時(shí)間;Tlogic為組合邏輯延遲;Trouting為兩級(jí)寄存器之間的布線延遲;Tsu為接收端寄存器建立時(shí)間;Tskew為兩級(jí)寄存器的時(shí)鐘歪斜,其值等于時(shí)鐘統(tǒng)一邊沿到達(dá)兩個(gè)寄存器時(shí)鐘端口的時(shí)間差;Tclk為系統(tǒng)所能達(dá)到的最小時(shí)鐘周期。該公式可結(jié)合圖4-13來(lái)理解。因此,要提升系統(tǒng)的工作頻率,就需要考慮降低不等式右邊的值。本任務(wù)所描述的流水線設(shè)計(jì)的主要目的就是降低組合邏輯延遲,從而提升整個(gè)數(shù)字系統(tǒng)的工作頻率。流水線工作原理可以用圖4-14進(jìn)行說(shuō)明。圖4-14中,組合邏輯運(yùn)算(in+a)*b/c被拆分成3個(gè)運(yùn)算。假設(shè)in?+?a的運(yùn)算時(shí)間為t1,out1*b的運(yùn)算時(shí)間為t2,out2/c的運(yùn)算時(shí)間為t3,則運(yùn)算(in+a)*b/c的運(yùn)算時(shí)間為t1?+?t2?+?t3。顯然,max(t1,t2,t3)?<?t1?+?t2?+?t3,這樣就減少了寄存器間的組合邏輯延遲Tlogic,進(jìn)而降低了系統(tǒng)所能達(dá)到的最小時(shí)鐘周期Tclk,也就是提升了系統(tǒng)的工作頻率。流水線通常將順序執(zhí)行的阻塞賦值計(jì)算轉(zhuǎn)化為多周期完成的賦值,這樣就將單步順序計(jì)算拆分為多個(gè)并行計(jì)算,每步計(jì)算量減小,從而使所需要的時(shí)鐘周期減小,也就是提升了系統(tǒng)的工作頻率。下面用一個(gè)示例來(lái)說(shuō)明流水線設(shè)計(jì)的實(shí)現(xiàn)方式和特點(diǎn)。【例4-19】
用普通循環(huán)語(yǔ)句實(shí)現(xiàn)1?+?2?+?3?+?…?+?9。下面對(duì)例4-19電路設(shè)計(jì)代碼作一些說(shuō)明。(1)由于
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣西民族大學(xué)繼續(xù)教育學(xué)院招聘考試筆試試題(含答案)
- 2025年甘肅省直文博單位招聘事業(yè)編制工作人員考試筆試試題(含答案)
- 2025年鄂爾多斯市消防員考試筆試試題(含答案)
- 2024年生產(chǎn)經(jīng)營(yíng)單位安全生產(chǎn)知識(shí)競(jìng)賽題庫(kù)與答案
- 危急值報(bào)告制度考試題及答案
- 2024山西安全生產(chǎn)月知識(shí)培訓(xùn)考試試題附參考答案
- 樹(shù)墩爺爺?shù)拿孛苷n件
- 2024年度福建“安全生產(chǎn)月”知識(shí)考試試題附參考答案
- 2024年初級(jí)銀行從業(yè)資格之初級(jí)風(fēng)險(xiǎn)管理通關(guān)試題庫(kù)有答案
- 北京園林養(yǎng)護(hù)知識(shí)培訓(xùn)課件
- 小學(xué)道德與法治跨學(xué)科主題學(xué)習(xí):變革際遇與實(shí)踐空間-基于新課標(biāo)的審思
- 房顫治療指南
- 《醫(yī)學(xué)影像檢查技術(shù)學(xué)》課件-頸椎X線攝影
- 《生產(chǎn)管理培訓(xùn)資料》課件
- 2025年冠心病臨床研究關(guān)鍵進(jìn)展概覽
- 便攜式氣體檢測(cè)儀培訓(xùn)課件
- 顱內(nèi)和椎管內(nèi)腫瘤-神經(jīng)外科教學(xué)課件
- 生豬委托屠宰合同范例
- 高血壓病的日常護(hù)理
- 快手磁力金牛初級(jí)營(yíng)銷師理論知識(shí)題及答案
- 養(yǎng)老院餐飲有害生物防治管理制度
評(píng)論
0/150
提交評(píng)論