丁 晴,楊 晨,丁 召,秦魯東(貴州大學(xué) 貴州 貴陽(yáng) 550025)
隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,計(jì)算機(jī)與電子應(yīng)用之間的聯(lián)系變得越來(lái)越重要,電子設(shè)計(jì)自動(dòng)化取得了巨大的進(jìn)步。電子設(shè)計(jì)自動(dòng)化技術(shù)以計(jì)算機(jī)為工作平臺(tái),結(jié)合電子技術(shù)來(lái)幫助工程師開(kāi)發(fā)新的電子產(chǎn)品,其主要采用硬件語(yǔ)言實(shí)現(xiàn)大規(guī)模的數(shù)字系統(tǒng)設(shè)計(jì)[1]。Verilog HDL是一種硬件描述語(yǔ)言可以進(jìn)行各種級(jí)別的數(shù)字邏輯設(shè)計(jì),如系統(tǒng)級(jí)邏輯設(shè)計(jì)、行為級(jí)邏輯設(shè)計(jì)、RTL級(jí)邏輯設(shè)計(jì)、門(mén)級(jí)邏輯設(shè)計(jì)。Verilog HDL的程序是由模塊(module)構(gòu)成的,通過(guò)模塊描述可以直接定義端口和信號(hào),模塊具有多層次,每個(gè)模塊對(duì)應(yīng)特定的功能,多個(gè)模塊通過(guò)網(wǎng)表相連就可以形成一個(gè)大型設(shè)計(jì)[2]。對(duì)于一個(gè)大型設(shè)計(jì),編輯Verilog HDL代碼耗費(fèi)的時(shí)間比較長(zhǎng),可能會(huì)存在以下問(wèn)題:
1)新版本的程序引入了新的Bug,需要回到以前的版本去查找Bug的來(lái)源;
2)同一程序由不同工程師編寫(xiě)、維護(hù)與測(cè)試,不同工程師的工作可能產(chǎn)生沖突;
3)當(dāng)需要撤銷(xiāo)某個(gè)新加功能 ,代碼被覆蓋后就無(wú)法與原有版本進(jìn)行對(duì)比,很難做到設(shè)計(jì)的可重性。
由于在Verilog HDL項(xiàng)目開(kāi)發(fā)中存在上述問(wèn)題,代碼的版本管理與控制就非常必要。因此,本文提出了利用SVN的特性,對(duì)Verilog HDL項(xiàng)目代碼開(kāi)發(fā)、版本控制等問(wèn)題進(jìn)行研究,以提高開(kāi)發(fā)的效率。
SVN是一個(gè)自由開(kāi)源的版本控制系統(tǒng),其采用拷貝-修改—合并模型[3],在這種模型里,每一個(gè)客戶(hù)通過(guò)項(xiàng)目版本庫(kù)拷貝各自所需要的文件,進(jìn)行查看。客戶(hù)同時(shí)工作,修改各自的工作拷貝,最后,每個(gè)客戶(hù)提交各自的版本,并合并在一起成為最終的版本。
基本過(guò)程為:檢出工作副本—編輯修改—合并服務(wù)器中的修改—提交修改,如圖1所示。
一個(gè)SVN工作拷貝是用戶(hù)本地機(jī)器一個(gè)普通的目錄,保存著一些文件,用戶(hù)可以隨意編輯文件,在用戶(hù)完成修改之前,SVN不會(huì)把用戶(hù)的修改與其他人的合并,也不會(huì)把用戶(hù)的修改展示給別人。當(dāng)用戶(hù)在工作拷貝做了一些修改并且確認(rèn)它們工作正常之后,SVN提供了一個(gè)命令可以“發(fā)布”用戶(hù)的修改給項(xiàng)目中的其他人,如果別人發(fā)布了各自的修改,SVN提供了手段可以把這些修改與用戶(hù)的工作目錄進(jìn)行合并[4]。

圖1 SVN工作流程圖Fig. 1 Flow chart of SVN
當(dāng)版本庫(kù)接收到一個(gè)修改后的版本,更新后版本庫(kù)發(fā)生了新的變化,這樣的一個(gè)過(guò)程就稱(chēng)為修訂版本。SVN的特色之一就是原子提交[5],一個(gè)修訂版本要么全部提交,要么都保持不變,這樣可以防止部分文件未被提交的狀況發(fā)生。每次的提交都會(huì)產(chǎn)生一個(gè)新的獨(dú)一無(wú)二的修訂版本號(hào),SVN版本庫(kù)會(huì)自動(dòng)進(jìn)行數(shù)據(jù)傳輸,后修改過(guò)的版本也存有先前的內(nèi)容,不會(huì)互相沖突。
完成一個(gè)階段的工作后,工程師需要將分支上的修改合并到最新版本。一個(gè)分支就像一個(gè)拷貝的存在,并從那里離開(kāi),并具有自己的歷史。如圖2所示。

圖2 分支示意圖Fig. 2 branch
當(dāng)分支合并后,分支就失去意義。平時(shí)在進(jìn)行開(kāi)發(fā)時(shí),一般都會(huì)有多版本分支同時(shí)進(jìn)行,當(dāng)某一個(gè)版本具備上線條件后,需要在上一個(gè)已發(fā)布的版本基礎(chǔ)上進(jìn)行發(fā)布,才能夠避免出現(xiàn)版本相互覆蓋,因此往往需要對(duì)版本之間代碼進(jìn)行合并,合并的過(guò)程中網(wǎng)頁(yè)地址(URL)及版本需填寫(xiě)起始的和結(jié)束的,這將影響合并后所得到的版本。假設(shè)這次分支是從主干版本3上創(chuàng)建的,而分支的起始版本是4,最終分支完成后的版本是7,主干版本8是分支版本4的差異和分支版本6的差異的合并,如圖3所示。那么在主干版本沒(méi)有更新的前提下,工程師把分支功能合并到主干上,在主干版本3的工作副本中點(diǎn)擊合并,在“起始URL 和版本”填寫(xiě)主干的URL和版本3,在“結(jié)束的URL 和版本”填寫(xiě)分支的URL和版本7即可。

圖3 合并示意圖Fig. 3 merger
Verilog HDL大型軟件的開(kāi)發(fā)是一個(gè)非常繁瑣的過(guò)程。在軟件的開(kāi)發(fā)過(guò)程中,很多時(shí)候需要團(tuán)隊(duì)協(xié)作來(lái)完成。若是多人完成一個(gè)程序時(shí),需要頻繁查看別人的進(jìn)度或者代碼,交流起來(lái)十分不便,這時(shí)就需引入SVN強(qiáng)大的協(xié)作功能,方便開(kāi)發(fā)者隨時(shí)了解他人進(jìn)度以便及時(shí)分享自己的工作。
在本論文中工程師A和工程師B在兩個(gè)電腦分別完成Verilog HDL程序編程,工程師B的電腦通過(guò)查找工程師A電腦IP,設(shè)定與工程師A相同的IP192.168.1.107來(lái)連接兩臺(tái)電腦,工程師B可以共享工程師A電腦中SVN版本庫(kù)的資源,分步驟來(lái)說(shuō)明其工作過(guò)程,如圖4所示是團(tuán)隊(duì)協(xié)作流程圖。

圖4 團(tuán)隊(duì)協(xié)作流程圖Fig. 4 Flow chart of teamwork
在處理一個(gè)需要多人協(xié)同修改的程序前,團(tuán)隊(duì)中的每個(gè)成員都要檢出(check out)SVN版本庫(kù)中現(xiàn)有的Verilog HDL程序文件目錄REV.1。在本文中假設(shè)工程師A和工程師B為同一個(gè)項(xiàng)目團(tuán)隊(duì)的成員,在進(jìn)行檢出后,工程師們都有了一份相同的Verilog HDL程序文件工作副本REV.1,然后才能開(kāi)始修改Verilog HDL程序中自己負(fù)責(zé)的部分。如圖5所示,工程師B從服務(wù)器中的SVN版本庫(kù)檢出完成。

圖5 檢出完成圖Fig. 5 Detection Complete
假設(shè)工程師A和工程師B兩人對(duì)Verilog HDL多路選擇器(MUX)程序[6]進(jìn)行修改,代碼如下:


工程師A在原有程序上添加“二進(jìn)制到BCD碼轉(zhuǎn)換”模塊,并將“VERSION 1.0”修改為“VERSION 1.1”,工程師A將修改后的程序提交,版本號(hào)更新為REV.2。代碼如下:

工程師B在原有模塊上添加“二進(jìn)制到格雷碼轉(zhuǎn)換”模塊,在兩人各自獨(dú)立工作的情況下,工程師B同樣將“VERSION 1.0”修改為“VERSION 1.1”。代碼如下:

由于兩人修改了程序的相同行,即“VERSION 1.0”一行,則工程師B在提交他的修改時(shí),SVN程序會(huì)產(chǎn)生沖突警告,他將得到錯(cuò)誤信息,提示其Verilog HDL工作副本已經(jīng)過(guò)期,他的提交失敗,如圖6所示。

圖6 提交失敗圖Fig. 6 Commit failed
因?yàn)楣こ處烝與工程師B修改了相同的一行,并且工程師A先于工程師B提交,SVN無(wú)法決定如何將工程師B的修改與Verilog HDL版本庫(kù)已有的修改進(jìn)行合并,因此SVN產(chǎn)生沖突,需要工程師B來(lái)解決。工程師B需要先更新版本庫(kù),檢出版本庫(kù)REV.2到本地,如圖7所示。

圖7 更新圖Fig. 7 Updated
工程師 B在解決沖突之后還要通過(guò)SVN Resolved命令通知SVN沖突已經(jīng)解決,最終工程師B可以提交他的修改形成一個(gè)新的Verilog HDL程序修訂版REV.3,如圖8所示。

圖8 提交完成圖Fig. 8 Submit completed
SVN平臺(tái)已經(jīng)成為現(xiàn)代協(xié)同工作提高效率的一種非常有效的手段,并且在當(dāng)今網(wǎng)絡(luò)行業(yè)中已經(jīng)有許多成熟的產(chǎn)品。SVN平臺(tái)的開(kāi)發(fā)潛力非常大,可以用于各行各業(yè)。本文介紹了SVN平臺(tái)在Verilog HDL開(kāi)發(fā)中的工作原理及應(yīng)用方法,這種技術(shù)能極大地提高團(tuán)隊(duì)的工作效率,達(dá)到了設(shè)計(jì)要求。
[1] 王長(zhǎng)宏,陳朝陽(yáng),鄒雪城,等.Verilog HDL設(shè)計(jì)實(shí)例及其仿真與綜合[J].計(jì)算機(jī)應(yīng)用,2001,27(12):19-22.WANG Chang-hong,CHEN Chao-yang,ZOU Xue-cheng,et al.Verilog HDL design examples and simulation and synthesis[J].Computer Applications,2001,27(12):19-22.
[2] 羅杰,康華光. 兩種硬件描述語(yǔ)言VHDL/Verilog的發(fā)展及其應(yīng)用[J]. 電氣電子教學(xué)學(xué)報(bào),2002,24(4):1-4.LUO Jie,KANG Hua-guang.Two hardware description language VHDL / Verilog Development and Application[J]. Electrical Electronic Education,2002,24(4):1-4.
[3] 高平,周磊.版本控制系統(tǒng)—Subversi0n技術(shù)及其在軟件開(kāi)發(fā)庫(kù)的應(yīng)用[J].航空電子技術(shù),2012,44(1):24-28.GAO Ping,ZHOU Lei.Version control system—Subversi0n technology and its application in software development library[J].Avionics Technology,2012,44(1):24-28.
[4] BenCollins-Sussman,BrianW.Fitzpatrick,C.MichaelPilato,Subversion book r3600 [EB/OL].(2002).http://creativecommons.org/licenses/by/2.0/.pdf.
[5] 劉樂(lè).軟件項(xiàng)目管理與SVN[J].科技信息,2011,21(1):77-78.LIU Le.Software Project Management and SVN[J].Technology Information,2011,21(1):77-78
[6] 夏宇聞. Verilog語(yǔ)法的基本概念[J].電子產(chǎn)品世界,2002,21(1):76-79.XIA Yu-men.The basic concept Verilog Syntax[J].Electronic Products,2002,21(1):76-79.