第五章 進(jìn)程、任務(wù)與函數(shù)_第1頁
第五章 進(jìn)程、任務(wù)與函數(shù)_第2頁
第五章 進(jìn)程、任務(wù)與函數(shù)_第3頁
第五章 進(jìn)程、任務(wù)與函數(shù)_第4頁
第五章 進(jìn)程、任務(wù)與函數(shù)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

蕪湖職業(yè)技術(shù)學(xué)院第5章

進(jìn)程、任務(wù)與函數(shù)進(jìn)程進(jìn)程間通信任務(wù)函數(shù)任務(wù)與函數(shù)的區(qū)別代碼書寫規(guī)范蕪湖職業(yè)技術(shù)學(xué)院本章介紹verilog進(jìn)程的概念、任務(wù)和函數(shù)的使用方法,并對語句順序執(zhí)行和并行執(zhí)行等進(jìn)行必要的討論。5.1進(jìn)程在verilog硬件設(shè)計(jì)中,進(jìn)程是一個很重要的概念。1.進(jìn)程行為模型的本質(zhì)是進(jìn)程。一個進(jìn)程可以被看做是一個獨(dú)立的運(yùn)行單元,它可能很簡單,也可能很復(fù)雜,我們可以將數(shù)字系統(tǒng)的行為看作很多有機(jī)結(jié)合的進(jìn)程的集合。蕪湖職業(yè)技術(shù)學(xué)院

在VerilogHDL中,描述進(jìn)程的基本語句是always和initial。always過程反復(fù)執(zhí)行其中的塊語句,而initial過程中的語句塊只執(zhí)行一次。除了always和initial過程塊外,一個assign賦值語句、一個實(shí)例元件的調(diào)用都可以看作是一個進(jìn)程。所以,一個Verilog模塊中有如下表示進(jìn)程的方式。always過程塊initial過程assign賦值語句元件例化,如anda1(out,a,b);蕪湖職業(yè)技術(shù)學(xué)院進(jìn)程只有兩種狀態(tài),即執(zhí)行態(tài)和等待狀態(tài)。進(jìn)程是否進(jìn)入執(zhí)行態(tài),取決于是否滿足特定的條件,如敏感變量是否發(fā)生變化。一旦滿足條件,進(jìn)程即進(jìn)入執(zhí)行狀態(tài)。當(dāng)該進(jìn)程執(zhí)行完畢或遇到停止語句后,即停止執(zhí)行,自動返回到起始語句,進(jìn)入等待狀態(tài)。進(jìn)程一般由敏感信號的變化來啟動各個進(jìn)程之間通過信號線進(jìn)行通信。多個進(jìn)程之所以能同步并發(fā)運(yùn)行,一個很重要的原因就是有進(jìn)程之間的信號線的通信和協(xié)議。一個進(jìn)程中只允許描述對應(yīng)于一個時鐘信號的同步時序邏輯。進(jìn)程之間是并發(fā)執(zhí)行的。兩個或更多個“always”過程塊、“assign”持續(xù)賦值語句、實(shí)例元件調(diào)用等操作都是同時執(zhí)行的。2.進(jìn)程的特點(diǎn)蕪湖職業(yè)技術(shù)學(xué)院3.進(jìn)程間的通信在進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)時,設(shè)計(jì)進(jìn)程時應(yīng)該注意以下幾點(diǎn):將硬件電路的行為以合理的方式映射為一些進(jìn)程,對每個進(jìn)程,以最有效的方式進(jìn)行設(shè)計(jì),以最合理的方式描述并實(shí)現(xiàn)。將組合邏輯實(shí)現(xiàn)的電路和用時序邏輯實(shí)現(xiàn)的電路應(yīng)盡量分配到不同的進(jìn)程中多個進(jìn)程之間通過信號線進(jìn)行通信。在設(shè)計(jì)中,為了使多個進(jìn)程協(xié)調(diào)運(yùn)行,我們可以設(shè)置一些握手信號,在進(jìn)程中檢測這些握手信號的狀態(tài),以決定是否進(jìn)行必要的操作。在有的設(shè)計(jì)中,這種握手信號的協(xié)議是必不可少的。蕪湖職業(yè)技術(shù)學(xué)院當(dāng)一個系統(tǒng)中包含有幾個進(jìn)程時,我們必須使它們同步,尤其是當(dāng)不同的進(jìn)程有共享數(shù)據(jù)的時候,這一點(diǎn)顯得尤其重要。原因是進(jìn)程A并不知道進(jìn)程B當(dāng)前處于什么狀態(tài),其數(shù)據(jù)是否已處理完畢,因此進(jìn)程B最好能給出一個信號來指明狀態(tài)的信息,在進(jìn)程A中檢測該信號的狀態(tài),以進(jìn)行合適的操作。由此可考慮采用一種通信機(jī)模型,用握手信號來實(shí)現(xiàn)兩個進(jìn)程間的通信與協(xié)調(diào)。用握手信號實(shí)現(xiàn)兩個進(jìn)程間的通信與協(xié)調(diào)蕪湖職業(yè)技術(shù)學(xué)院5.2任務(wù)任務(wù)和函數(shù)的關(guān)鍵字分別是task和function,利用任務(wù)和函數(shù)可以把一個大的程序模塊分解成許多小的任務(wù)和函數(shù),以方便調(diào)試,并且能使寫出的程序結(jié)構(gòu)更清晰。任務(wù)的定義與調(diào)用格式分別如下:定義:task<任務(wù)名>;//注意無端口列表端口及數(shù)據(jù)類型聲明語句;其他語句;endtask任務(wù)調(diào)用的格式為:<任務(wù)名>(端口1,端口2,……);蕪湖職業(yè)技術(shù)學(xué)院注:任務(wù)調(diào)用變量和定義時說明的I/O變量時一一對應(yīng)的。比如下面是一個定義任務(wù)的例子。當(dāng)調(diào)用該任務(wù)時,可使用如下語句:test(data1,data2,code1,code2)調(diào)用任務(wù)test時,變量data1和data2的值賦給in1和in2,而任務(wù)執(zhí)行完后,out1和out2的值則賦給了code1和code2.蕪湖職業(yè)技術(shù)學(xué)院任務(wù)調(diào)用注意事項(xiàng):任務(wù)的定義與調(diào)用須在一個module模塊內(nèi)定義任務(wù)時,沒有端口名列表,但需要緊接著進(jìn)行輸入、輸出端口和數(shù)據(jù)類型的說明當(dāng)任務(wù)被調(diào)用時,任務(wù)被激活。任務(wù)的調(diào)用與模塊調(diào)用一樣通過任務(wù)名調(diào)用來實(shí)現(xiàn)。調(diào)用時,需列出端口名列表,端口的排序和類型必須與任務(wù)定義中的一致一個任務(wù)可調(diào)用別的任務(wù)和函數(shù),可以調(diào)用的任務(wù)和函數(shù)個數(shù)不限。蕪湖職業(yè)技術(shù)學(xué)院5.2函數(shù)

函數(shù)的目的是返回一個值,以用于表達(dá)式的計(jì)算。用關(guān)鍵字function來定義函數(shù)。函數(shù)定義function<返回值位寬或類型說明>函數(shù)名;端口聲明;局部變量聲明;其他語句;endfunction<返回值位寬或類型說明>是一個可選項(xiàng),如果缺省,則返回值為一位寄存器類型的數(shù)據(jù)蕪湖職業(yè)技術(shù)學(xué)院例get0函數(shù)循環(huán)核對輸入數(shù)據(jù)x的每一位,統(tǒng)計(jì)出x中的“0”的個數(shù),并返回一個適當(dāng)?shù)闹?。蕪湖職業(yè)技術(shù)學(xué)院函數(shù)的定義中蘊(yùn)含了一個與函數(shù)同名的、函數(shù)內(nèi)部的寄存器。在函數(shù)定義時,將返回值所使用的寄存器名稱設(shè)為與函數(shù)同名的內(nèi)部變量,因此函數(shù)名被賦予的值就是函數(shù)的返回值。上例中g(shù)et0最終賦予的值即為函數(shù)的返回值。函數(shù)的調(diào)用函數(shù)的調(diào)用是通過將函數(shù)作為表達(dá)式中的操作數(shù)來實(shí)現(xiàn)的。調(diào)用格式如下:<函數(shù)名>(<表達(dá)式><表達(dá)式>);比如使用持續(xù)賦值語句調(diào)用函數(shù)get0時,可以采用如下語句:assignout=is_legal?get0(in):1’b0;蕪湖職業(yè)技術(shù)學(xué)院函數(shù)的使用與任務(wù)相比有更多的限制和約束。函數(shù)不能啟動任務(wù),在函數(shù)中不能包含有任何的時間控制語句,同時,定義函數(shù)時至少要有一個輸入?yún)⒘康龋@些都要在使用時注意。與C語言類似,VerilogHDL使用函數(shù),以適應(yīng)對不同操作數(shù)采取同一運(yùn)算的操作。函數(shù)在綜合時被轉(zhuǎn)換成具有獨(dú)立運(yùn)算功能的電路,每調(diào)用一次函數(shù),相當(dāng)于改變這部分電路的輸入,以得到相應(yīng)的計(jì)算結(jié)果。蕪湖職業(yè)技術(shù)學(xué)院函數(shù)使用注意事項(xiàng)函數(shù)的定義和調(diào)用須在一個module模塊內(nèi)函數(shù)只允許有輸入變量,且必須至少有一個輸入變量,輸出變量由函數(shù)名本身擔(dān)任。因此在定義函數(shù)時,需對函數(shù)名說明其類型和位寬。定義函數(shù)時,沒有端口名列表,但調(diào)用函數(shù)時,需列出端口名列表,端口名的排序和類型必須與定義時的相一致,這點(diǎn)與任務(wù)相同。函數(shù)可以出現(xiàn)在連續(xù)賦值assign的右端表達(dá)式中。函數(shù)不能調(diào)用任務(wù),而任務(wù)可以調(diào)用別的任務(wù)和函數(shù),且調(diào)用任務(wù)和函數(shù)個數(shù)不受限制。蕪湖職業(yè)技術(shù)學(xué)院任務(wù)和函數(shù)的區(qū)別任務(wù)和函數(shù)的合理使用會使程序顯得結(jié)構(gòu)清晰而簡潔,一般的綜合器對task和function都是支持的,但也有的綜合器不支持task,需要在使用的時候加以注意。蕪湖職業(yè)技術(shù)學(xué)院5.3Verilog代碼書寫規(guī)范代碼書寫規(guī)范涵蓋面很廣,還涉及很多細(xì)節(jié)問題,這些需要在實(shí)際編寫過程中加以考慮。雖然代碼規(guī)范不是絕對的,需要用戶靈活處理,但是在一個項(xiàng)目組內(nèi)部、一個項(xiàng)目的進(jìn)程中,應(yīng)該有一套完備的代碼書寫規(guī)范來作為約束,使代碼整潔且具備良好的可讀性。接下來講解一些代碼書寫規(guī)范的基本要點(diǎn),以供參考。蕪湖職業(yè)技術(shù)學(xué)院1.信號命名規(guī)則信號命名規(guī)則在團(tuán)隊(duì)開發(fā)中占據(jù)著重要的地位,統(tǒng)一、有序的命名能大幅減少設(shè)計(jì)人員之間的冗余工作,還可便于團(tuán)隊(duì)成員對縮寫代碼進(jìn)行差錯和驗(yàn)證。比較著名的信號命名規(guī)則當(dāng)推Microsoft公司的“匈牙利”法。該命名規(guī)則的主要思想是“在變量名和函數(shù)名中加入前綴,以增進(jìn)人們對程序的理解”。例如:所有的字符變量均以ch為前綴;若是常數(shù)變量,則追加前綴c。信號命名的整天要求為:命名字符具有一定的意義,直白易懂,且項(xiàng)目命名規(guī)則唯一。對于HDL設(shè)計(jì),設(shè)計(jì)人員還需要注意以下命名規(guī)則。蕪湖職業(yè)技術(shù)學(xué)院系統(tǒng)級信號的命名系統(tǒng)級信號指復(fù)位信號、置位信號、時鐘信號等需要輸送到各個模塊的全局信號。系統(tǒng)信號以字符串sys或syn開頭;時鐘信號以clk開頭,并在后面添加相應(yīng)的頻率值;復(fù)位信號一般以rst或reset信號開頭;置位信號以st或set開頭。典型的信號命名方式如下所示:wire[7:0]sys_dout,sys_in;wireclk_768MHz;wirereset;wirest_counter;蕪湖職業(yè)技術(shù)學(xué)院低電平有效的信號命名對于低電平有效的信號后一律加下劃線和字母n。如:wireSysRst_n;wireFifoFull_n;蕪湖職業(yè)技術(shù)學(xué)院經(jīng)過鎖存器鎖存后的信號經(jīng)過鎖存器鎖存后的信號后加下劃線和字符r,與鎖存前的信號相區(qū)別。例如:CpuRamRd信號經(jīng)鎖存器鎖存后應(yīng)命名為CpuRamRd_r。低電平有效的信號經(jīng)過鎖存器鎖存后,其命名應(yīng)在_n后面加r。例如:CpuRamRd_n信號經(jīng)鎖存器鎖存后應(yīng)命名為CpuRamRd_nr。對于多級鎖存的信號,可多加r以標(biāo)明。例如CpuRamRd信號經(jīng)兩級觸發(fā)器鎖存后,應(yīng)命名為CpuRamRd_rr。蕪湖職業(yè)技術(shù)學(xué)院2.模塊命名規(guī)則HDL語言的模塊類似于C語言中的函數(shù),可采用C語言函數(shù)的大多數(shù)規(guī)則。模塊的命名應(yīng)盡量用英文表達(dá)出其完成的功能。遵循動賓結(jié)構(gòu)的命名法則,函數(shù)名種動詞在前,并在命名前加入函數(shù)的前綴,函數(shù)名的長度一般不少于2個字母。同時,HDL模塊的命名規(guī)則還需考慮以下情況:模塊的命名規(guī)則模塊之間接口信號的命名模塊內(nèi)部信號蕪湖職業(yè)技術(shù)學(xué)院模塊的命名規(guī)則

在系統(tǒng)設(shè)計(jì)階段,應(yīng)該為每個模塊命名。命名的方法是將模塊英文名稱的各個單詞的首字母組合起來,形成3~5個字符的縮寫。若模塊的英文名只有一個單詞,可取該單詞的前3個字母。各模塊的命名以3個字母為宜。例如:ArithmaticLogicalUnit模塊的命名為ALUDataMemoryInterface模塊的命名為DMIDecoder模塊的命名為DEC蕪湖職業(yè)技術(shù)學(xué)院模塊之間接口信號的命名所有的變量名分為兩個部分:第一部分表明數(shù)據(jù)方向,其中數(shù)據(jù)發(fā)出方在前,數(shù)據(jù)接收方在后;第二部分為數(shù)據(jù)名稱。兩個部分之間用下劃線隔離開。第一部分全部大寫;第二部分中所有具有明確意義的英文名全部拼寫或所寫的第一個字母大寫,其余部分小寫。例如:wireCPUMMU_WrReg;下劃線左邊是第一部分,代表數(shù)據(jù)方向是從CPU模塊發(fā)向存儲器管理單元模塊(MMU)。下劃線右邊的Wr為Write的縮寫,Reg是Request的縮寫,兩個縮寫的第一個字母都大寫,便于理解。整個變量連起來的意思就是:“CPU發(fā)送給MMU的寫請求信號”。模塊上、下層次間信號的命名也遵循本規(guī)定。蕪湖職業(yè)技術(shù)學(xué)院模塊內(nèi)部信號模塊內(nèi)部的信號由幾個單詞連接而成,縮寫要求能基本表明本單詞的含義;單詞除常用的縮寫方法外(如Clock->Clk、Write->Wr、Read->Rd等),一律取該單詞的前幾個字母(如Frequency->Freq、Variable->Var等);每個縮寫單詞的第一個字母大寫;若遇兩個大寫字母相鄰,中間添加一個下劃線(如:DivN_Cntr)。蕪湖職業(yè)技術(shù)學(xué)院3.代碼格式規(guī)范分節(jié)書寫格式各節(jié)之間加1行或多行空格。如每個always、initial語句都是一節(jié),每節(jié)基本上完成一個特定的功能,即用于描述某幾個信號的產(chǎn)生。在每節(jié)之前有幾行注釋對該節(jié)代碼加以描述,至少列出本節(jié)中所描述信號的含義。注釋的規(guī)范

注釋使用“//”開始的注釋以行為單位,使用“/**/”的注釋,“/*”和“*/”各占用一行,并且頂頭。蕪湖職業(yè)技術(shù)學(xué)院對于函數(shù),應(yīng)該從功能、參數(shù)、返回值、主要思路、調(diào)用方法、日期6個方面用如下格式注釋://程序說明開始//==================================////功能://參數(shù)://輸入?yún)?shù)://輸出參數(shù)://主要思路://日期://版本://程序編寫人員://程序調(diào)試記錄://===================================////模塊說明結(jié)束蕪湖職業(yè)技術(shù)學(xué)院此外,在注釋說明中,需要注意以下細(xì)節(jié):在注釋中,應(yīng)該詳細(xì)說明模塊的主要實(shí)現(xiàn)思路,特別要注明自己的一些想法。如果有必要,應(yīng)該寫明想法產(chǎn)生的來由。在注釋中詳細(xì)注明函數(shù)的使用方法、對于輸入?yún)?shù)的要求以及輸出數(shù)據(jù)的格式。在注釋中強(qiáng)調(diào)調(diào)用時的危險方面、可能出錯的地方。對日期的注釋要求記錄從開始編寫模塊到模塊測試結(jié)束之間的日期。蕪湖職業(yè)技術(shù)學(xué)院begin…end的書寫規(guī)范

同一層次的所有語句左端對齊;initial、always等語句塊的begin關(guān)鍵詞跟在本行末

溫馨提示

  • 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

提交評論