EDA設(shè)計技術(shù)教學(xué)課件 第8章 用戶定義原語_第1頁
EDA設(shè)計技術(shù)教學(xué)課件 第8章 用戶定義原語_第2頁
EDA設(shè)計技術(shù)教學(xué)課件 第8章 用戶定義原語_第3頁
EDA設(shè)計技術(shù)教學(xué)課件 第8章 用戶定義原語_第4頁
EDA設(shè)計技術(shù)教學(xué)課件 第8章 用戶定義原語_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章用戶定義原語用戶定義原語設(shè)計并定義新的原語單元的集合稱為用戶定義原語(User-DefinedPrimitives,UDP)兩種類型:組合用戶定義原語和時序用戶定義原語組合用戶定義原語的輸入決定輸出,常用于組合邏輯電路的建模;用戶定義原語的輸出由當(dāng)前的輸出和輸入決定,常用于觸發(fā)器、鎖存器等時序電路的建模。UDP的基本形式{attribute_instance}primitiveudp_identifier(udp_port_list);udp_port_declaration;//端口申明

initialstatements;//初始化語句table//狀態(tài)表table_entity;endtableendprimitive確認(rèn)符前綴端口列表UDP的結(jié)構(gòu)形式前綴{attribute_instance}是對該UDP的屬性進(jìn)行例化的可選項,UDP的屬性是由用戶定義原語自身特性決定的。例如,指定輸入端口的總線寬度參數(shù)屬性{*Size=8*}。udp_identifier是確認(rèn)符,每個用戶定義原語必須指定唯一的確認(rèn)符。例如定義一個確認(rèn)符為DFF的D觸發(fā)器:primitiveDFF(Q,D,clk,rst); …… endprimitiveUDP的端口列表udp_port_list是端口列表VerilogHDL規(guī)定UDP只能有一個確定的輸出端口輸出端口的邏輯取值可以是0、1或x,不允許z;允許一個或多個輸入端口,輸入端口接受0、1或x邏輯值,z值當(dāng)作x處理。括號內(nèi)的端口列表,第一個端口必須是輸出端口,之后以逗號分隔各輸入端口,例如:DFF(Q,D,clk,rst);UDP的端口列表輸入端口和輸出端口分別以關(guān)鍵詞input和output申明緊隨其后是端口數(shù)據(jù)類型申明和端口名時序邏輯的UDP應(yīng)申明輸出端口的數(shù)據(jù)類型為寄存器類型組合邏輯UDP不允許寄存器類型的端口類型申明。不允許申明雙向端口。例:D觸發(fā)器的用戶定義原語 primitiveDFF(Q,D,clk,rst); inputD,clk,rst; outputQ; regQ; …… endprimitiveUDP的語句體由初始化語句和狀態(tài)表組成。initial和table/endtable語句是用戶定義原語的語句體,是對模塊的功能進(jìn)行描述的主體。primitiveDFF(Q,D,clk); inputD,clk; outputQ; regQ;

initialQ=1'b0;

table //clkDQnQn+1

r0:?:0; r1:?:1; f?:?:-; ?*:?:-;

endtable endprimitive用戶定義原語的表符號VerilogHDL規(guī)定了豐富的表符號,UDP的狀態(tài)表描述語句和表達(dá)式需遵循表中的符號規(guī)定。符號符號意義備注0邏輯值0

1邏輯值1

x未知邏輯值x兩類UDP的輸入口都允許使用邏輯值x?代替任意0,1或x輸出口不允許使用?符號b代替任意0或1輸入口允許,但輸出口不允許-無變化僅允許用于時序邏輯UDP的輸出口(vw)v至w的變化僅允許用于輸入口,v和w可以在0,1,x,?和b之間任意取值。*等同于(??)輸入口的任意變化r等同于(01)或↑輸入口的上升沿f等同于(10)或↓輸入口的下降沿p代替任意(01)、(10)或(x1)輸入口的任意一種正邊沿n代替任意(10)、(1x)或(x0)輸入口的任意一種負(fù)邊沿UDP的狀態(tài)表狀態(tài)表介于關(guān)鍵詞table和endtable之間由規(guī)定的符號組成多行描述語句每一行輸入端口與輸出端口之間的表符號,以冒號分隔每一行語句以分號結(jié)尾。組合邏輯UDP每一行表示不同的輸入和組合輸出,輸入端口的表達(dá)順序與端口列表的順序必須保持一致可以與端口申明的順序不同primitiveUDP_or(Z,A,B);inputA,B;outputZ;

table//AB:Z00:0;?1:1;1?:1;11:1;endtableendprimitive例:或門用戶定義原語[例1]本例定義的UDP是一個2選1多路選擇器。primitiveMUX2x1(Z,Hab,Bay,Sel);//Z是輸出端,其余為輸入端,注意輸入端的排列順序outputZ;inputHab,Bay,Sel;table/*表中每一行的值是按照HabBaySel:Z的順序排列的,前3個輸入端的排列順序應(yīng)與端口列表中的順序相同*/0?1:0;//HabBaySel:Z1?1:1;//HabBaySel:Z?00:0;//HabBaySel:Z?10:1;//HabBaySel:Z00x:0;//HabBaySel:Z11x:1;//HabBaySel:ZendtableendprimitiveUDP的使用方法和內(nèi)置基元的完全相同?!纠?】調(diào)用例1定義好的2選1多路選擇器,用3個這樣的UDP可以組合成4選1多路選擇器,如圖所示。ABCD程序如下:moduleMUX4x1(Z,A,B,C,D,Sel);inputA,B,C,D;input[2:1]Sel;outputZ;MUX2x1

(TL,A,B,Sel[1]),(TP,C,D,Sel[1]),(Z,TL,TP,Sel[2]);//3個UDPendmodule可見,UDP的使用方法和內(nèi)置基元的使用方法完全相同,本例是通過6個輸入端A、B、C、D、Sel[1]、Sel[2]和1個輸出端Z以及2個線網(wǎng)TL、TP實現(xiàn)3個UDP連接的。時序邏輯UDP時序邏輯UDP分為

電平敏感型UDP邊沿敏感型UDP電平敏感型UDP的時序行為與組合邏輯UDP類似。區(qū)別在于電平敏感型UDP的輸出端口為寄存器類型,而且狀態(tài)表的每一行多出一列,即在輸入和下一個輸出Qn+1之間增加一列表符號,用于表達(dá)UDP的當(dāng)前輸出值Qn。primitiveDLatch(Q,En,D);inputEn,D;outputQ;regQ;

table//EnD:Qn:Qn+101:?:1;00:?:0;1?:?:-;endtableendprimitive例:D鎖存器用戶定義原語。當(dāng)鎖存控制端En為高電平時,下一狀態(tài)輸出為保持狀態(tài);反之,下一狀態(tài)為數(shù)據(jù)接收狀態(tài),即Qn+1=D?!埃俊北硎綫n+1的值僅與En和D有關(guān)。上述狀態(tài)表中,在輸入口En和D、輸出口Qn+1之間,插入一列當(dāng)前Qn輸出,以“?”表示Qn+1的值僅與En和D有關(guān)。如下語句:?:?:-;可解釋為:當(dāng)鎖存控制端En為邏輯1,則無論輸入口D和當(dāng)前輸出Qn的值為何值,下一個狀態(tài)的輸出為數(shù)據(jù)鎖存狀態(tài)。在本例狀態(tài)表中,Qn一直取任意值,屬多余項。邊沿敏感型UDP邊沿敏感型UDP的每一行只能指定一個輸入口的上升沿(01)、下降沿(10)等變化對,或按表符號r、f、p或n等表達(dá)變化對。狀態(tài)表每一行的變化說明語句中,不能出現(xiàn)兩個或兩個以上的變化對。(01)00:?:0;//(1),合法的變化說明r00:?:0;//(2),與語句(1)等效(01)(01)0:?:0;//(3),兩個端口的變化對說明,非法表達(dá)rr0:?:0;//(4),兩個端口的變化對說明,非法表達(dá)表符號的順序狀態(tài)表中,表符號的安排順序分別是輸入端口、輸出端口的當(dāng)前狀態(tài)、輸出端口的下一個狀態(tài),輸入端口與端口列表的順序一致。用戶定義原語允許在狀態(tài)表內(nèi)混合使用電平敏感和邊沿敏感的多分支變化說明,當(dāng)輸入變化時,先執(zhí)行邊沿敏感分支,之后再執(zhí)行電平敏感分支。當(dāng)兩種類型的分支指定不同的輸出值,結(jié)果由電平敏感分支決定。例:邊沿觸發(fā)JK觸發(fā)器UDP電平敏感和邊沿敏感混合描述的邊沿觸發(fā)JK觸發(fā)器。如表所示,邊沿觸發(fā)JK觸發(fā)器定義如下具有四種類型的功能:置1功能:Qn+1=1,當(dāng)且僅當(dāng)變化說明序號(1)、(2)或(8);置0功能:Qn+1=0,當(dāng)且僅當(dāng)變化說明序號(3)、(4)或(7);反向保持功能:Qn+1=Qn',當(dāng)且僅當(dāng)變化說明序號(5)、(9)或(10);正向保持功能:Qn+1=Qn,當(dāng)且僅當(dāng)變化說明序號(6)、(11)、(12)或(13);變化說明序號clkJKSDRDQnQn+1功能1???01?1Qn+1=12???*1113???10?0Qn+1=04???1*005↑000001Qn+1=Qn'6↑0011?-Qn+1=Qn7↑0111?0Qn+1=08↑1011?1Qn+1=19↑111101Qn+1=Qn'10↑111110Qn+1=Qn'11↓?????-Qn+1=Qn12b*????-Qn+1=Qn13b?*???-Qn+1=Qn電平敏感描述邊沿敏感描述primitiveudp_edge_jkff(Q,clk,J,K,SD,RD);inputclk,J,K,SD,RD;outputQ;regQ;table//clkJKSDRD:Qn:Qn+1???01:?:1;//置位???*1:1:1;???10:?:0;//復(fù)位???1*:0:0;r0000:0:1;//時鐘驅(qū)動變化

說明分支r0011:?:-;r0111:?:0;r1011:?:1;r1111:0:1;r1111:1:0;f????:?:-;b*???:?:-;//JK變化說明分支b?*??:?:-;endtableendprimitive變化說明序號clkJKSDRDQnQn+1功能1???01?1Qn+1=12???*1113???10?0Qn+1=04???1*005↑000001Qn+1=Qn'6↑0011?-Qn+1=Qn7↑0111?0Qn+1=08↑1011?1Qn+1=19↑111101Qn+1=Qn'10↑111110Qn+1=Qn'11↓?????-Qn+1=Qn12b*????-Qn+1=Qn13b?*???-Qn+1=Qn時序UDP的初始化時序用戶定義原語輸出端口的初始化用于指定輸出端口的初始狀態(tài),以關(guān)鍵詞initial開始,緊隨過程賦值語句對輸出端口賦值,其基本形式為:initialoutput_port=initialization_value;initial語句布置在table之前,表達(dá)式左側(cè)的output_port是UDP內(nèi)申明的reg型輸出端口,表達(dá)式右側(cè)的initialization_value是初始化值。UDP初始化語句內(nèi)不允許使用延時賦值。例:指定RS觸發(fā)器輸出端口的初始值為1由于UDP只有一個輸出端口,因此只允許出現(xiàn)一條初始化賦值語句,賦值語句的操作對象是reg寄存器類型的輸出端口,端口確認(rèn)符必須一致。賦值表達(dá)式的右側(cè)只能使用1'b1、1'b0、1'bx、1或0。primitiveSRFF(Q,S,R);outputQ;regQ;inputS,R;

initialQ=1'b1;//輸出端口的初始值為邏輯1table//SR:Qn:Qn+110:?:1;f0:1:-;0r:?:0;0f:0:-;11:?:0;endtableendprimitive用戶定義原語建模在系統(tǒng)層次化結(jié)構(gòu)中,用戶定義原語是一個獨立的模塊,與其他模塊有相同的語法層次和相應(yīng)的抽象級別。在源文件的模塊結(jié)構(gòu)中,用戶定義原語可以出現(xiàn)在模塊內(nèi)任何需要例化的地方,當(dāng)然不能超出模塊的module和endmodule范圍。UDP建模的基本形式udp_name[drive_strength][delay2][attribute_instance]udp_instance(output_port,input_port);udp_name:用戶定義原語模塊名,例如SR觸發(fā)器UDP的SRFF;drive_strength用于指定UDP的驅(qū)動強(qiáng)度;delay2用于指定UDP的延時賦值;attribute_instance用于例化UDP的屬性;上述三項與模塊的相關(guān)規(guī)則相同。udp_instance是模塊中被指定的UDP例化名;output_port和input_port是分別與模塊連接的輸出端口和輸入端口列表,其連接順序必須與模塊內(nèi)相關(guān)端口的順序保持一致。(1)設(shè)計T觸發(fā)器用戶定義原語udp_tff。

設(shè)清零控制端Clear,Q為觸發(fā)器輸出端,下降沿觸發(fā)。Clear為高電平時,輸出端Q被清零。若Clear為高電平,則時鐘脈沖下降沿到來時,輸出端反向保持,即Qn+1=Qn'。primitiveudp_tff(Q,T,Clear);inputT,Clear;outputQ;regQ;

table//TClear:Qn:Qn+1?1:?:0;//清零?(10):?:-;//正向保持,Qn+1=Qn(10)0:1:0;//反向保持,Qn+1=Qn'(10)0:0:1;//反向保持,Qn+1=Qn'(0?)0:?:-;//正向保持,Qn+1=Qnendtableendprimitive例化用戶定義原語(2)例化用戶定義原語,設(shè)計計數(shù)器模塊。其中,驅(qū)動強(qiáng)度和延時賦值設(shè)置為默認(rèn)值,輸入輸出端口連接采用串行級聯(lián)方式。將第i個T觸發(fā)器udp_inst(i)的輸出Count[i]與第i+1個T觸發(fā)器udp_inst(i+1)的輸入端(T端)連接在一起udp_tffudp_inst(i)(Count[i],Count[0],Clear);udp_tffudp_inst(i+1)(Count[2],Count[i],Clear);例化用戶定義原語moduleCounter(Count,T,Clear);inputT,Clear;inout[7:0]Count;reg[7:0]Count;udp_tff

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論