丁 晴,楊 晨,丁 召,秦魯東(貴州大學(xué) 貴州 貴陽 550025)
隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,計(jì)算機(jī)與電子應(yīng)用之間的聯(lián)系變得越來越重要,電子設(shè)計(jì)自動化取得了巨大的進(jìn)步。電子設(shè)計(jì)自動化技術(shù)以計(jì)算機(jī)為工作平臺,結(jié)合電子技術(shù)來幫助工程師開發(fā)新的電子產(chǎn)品,其主要采用硬件語言實(shí)現(xiàn)大規(guī)模的數(shù)字系統(tǒng)設(shè)計(jì)[1]。Verilog HDL是一種硬件描述語言可以進(jìn)行各種級別的數(shù)字邏輯設(shè)計(jì),如系統(tǒng)級邏輯設(shè)計(jì)、行為級邏輯設(shè)計(jì)、RTL級邏輯設(shè)計(jì)、門級邏輯設(shè)計(jì)。Verilog HDL的程序是由模塊(module)構(gòu)成的,通過模塊描述可以直接定義端口和信號,模塊具有多層次,每個模塊對應(yīng)特定的功能,多個模塊通過網(wǎng)表相連就可以形成一個大型設(shè)計(jì)[2]。對于一個大型設(shè)計(jì),編輯Verilog HDL代碼耗費(fèi)的時間比較長,可能會存在以下問題:
1)新版本的程序引入了新的Bug,需要回到以前的版本去查找Bug的來源;
2)同一程序由不同工程師編寫、維護(hù)與測試,不同工程師的工作可能產(chǎn)生沖突;
3)當(dāng)需要撤銷某個新加功能 ,代碼被覆蓋后就無法與原有版本進(jìn)行對比,很難做到設(shè)計(jì)的可重性。
由于在Verilog HDL項(xiàng)目開發(fā)中存在上述問題,代碼的版本管理與控制就非常必要。因此,本文提出了利用SVN的特性,對Verilog HDL項(xiàng)目代碼開發(fā)、版本控制等問題進(jìn)行研究,以提高開發(fā)的效率。
SVN是一個自由開源的版本控制系統(tǒng),其采用拷貝-修改—合并模型[3],在這種模型里,每一個客戶通過項(xiàng)目版本庫拷貝各自所需要的文件,進(jìn)行查看??蛻敉瑫r工作,修改各自的工作拷貝,最后,每個客戶提交各自的版本,并合并在一起成為最終的版本。
基本過程為:檢出工作副本—編輯修改—合并服務(wù)器中的修改—提交修改,如圖1所示。
一個SVN工作拷貝是用戶本地機(jī)器一個普通的目錄,保存著一些文件,用戶可以隨意編輯文件,在用戶完成修改之前,SVN不會把用戶的修改與其他人的合并,也不會把用戶的修改展示給別人。當(dāng)用戶在工作拷貝做了一些修改并且確認(rèn)它們工作正常之后,SVN提供了一個命令可以“發(fā)布”用戶的修改給項(xiàng)目中的其他人,如果別人發(fā)布了各自的修改,SVN提供了手段可以把這些修改與用戶的工作目錄進(jìn)行合并[4]。
圖1 SVN工作流程圖Fig. 1 Flow chart of SVN
當(dāng)版本庫接收到一個修改后的版本,更新后版本庫發(fā)生了新的變化,這樣的一個過程就稱為修訂版本。SVN的特色之一就是原子提交[5],一個修訂版本要么全部提交,要么都保持不變,這樣可以防止部分文件未被提交的狀況發(fā)生。每次的提交都會產(chǎn)生一個新的獨(dú)一無二的修訂版本號,SVN版本庫會自動進(jìn)行數(shù)據(jù)傳輸,后修改過的版本也存有先前的內(nèi)容,不會互相沖突。
完成一個階段的工作后,工程師需要將分支上的修改合并到最新版本。一個分支就像一個拷貝的存在,并從那里離開,并具有自己的歷史。如圖2所示。
圖2 分支示意圖Fig. 2 branch
當(dāng)分支合并后,分支就失去意義。平時在進(jìn)行開發(fā)時,一般都會有多版本分支同時進(jìn)行,當(dāng)某一個版本具備上線條件后,需要在上一個已發(fā)布的版本基礎(chǔ)上進(jìn)行發(fā)布,才能夠避免出現(xiàn)版本相互覆蓋,因此往往需要對版本之間代碼進(jìn)行合并,合并的過程中網(wǎng)頁地址(URL)及版本需填寫起始的和結(jié)束的,這將影響合并后所得到的版本。假設(shè)這次分支是從主干版本3上創(chuàng)建的,而分支的起始版本是4,最終分支完成后的版本是7,主干版本8是分支版本4的差異和分支版本6的差異的合并,如圖3所示。那么在主干版本沒有更新的前提下,工程師把分支功能合并到主干上,在主干版本3的工作副本中點(diǎn)擊合并,在“起始URL 和版本”填寫主干的URL和版本3,在“結(jié)束的URL 和版本”填寫分支的URL和版本7即可。
圖3 合并示意圖Fig. 3 merger
Verilog HDL大型軟件的開發(fā)是一個非常繁瑣的過程。在軟件的開發(fā)過程中,很多時候需要團(tuán)隊(duì)協(xié)作來完成。若是多人完成一個程序時,需要頻繁查看別人的進(jìn)度或者代碼,交流起來十分不便,這時就需引入SVN強(qiáng)大的協(xié)作功能,方便開發(fā)者隨時了解他人進(jìn)度以便及時分享自己的工作。
在本論文中工程師A和工程師B在兩個電腦分別完成Verilog HDL程序編程,工程師B的電腦通過查找工程師A電腦IP,設(shè)定與工程師A相同的IP192.168.1.107來連接兩臺電腦,工程師B可以共享工程師A電腦中SVN版本庫的資源,分步驟來說明其工作過程,如圖4所示是團(tuán)隊(duì)協(xié)作流程圖。
圖4 團(tuán)隊(duì)協(xié)作流程圖Fig. 4 Flow chart of teamwork
在處理一個需要多人協(xié)同修改的程序前,團(tuán)隊(duì)中的每個成員都要檢出(check out)SVN版本庫中現(xiàn)有的Verilog HDL程序文件目錄REV.1。在本文中假設(shè)工程師A和工程師B為同一個項(xiàng)目團(tuán)隊(duì)的成員,在進(jìn)行檢出后,工程師們都有了一份相同的Verilog HDL程序文件工作副本REV.1,然后才能開始修改Verilog HDL程序中自己負(fù)責(zé)的部分。如圖5所示,工程師B從服務(wù)器中的SVN版本庫檢出完成。
圖5 檢出完成圖Fig. 5 Detection Complete
假設(shè)工程師A和工程師B兩人對Verilog HDL多路選擇器(MUX)程序[6]進(jìn)行修改,代碼如下:
工程師A在原有程序上添加“二進(jìn)制到BCD碼轉(zhuǎn)換”模塊,并將“VERSION 1.0”修改為“VERSION 1.1”,工程師A將修改后的程序提交,版本號更新為REV.2。代碼如下:
工程師B在原有模塊上添加“二進(jìn)制到格雷碼轉(zhuǎn)換”模塊,在兩人各自獨(dú)立工作的情況下,工程師B同樣將“VERSION 1.0”修改為“VERSION 1.1”。代碼如下:
由于兩人修改了程序的相同行,即“VERSION 1.0”一行,則工程師B在提交他的修改時,SVN程序會產(chǎn)生沖突警告,他將得到錯誤信息,提示其Verilog HDL工作副本已經(jīng)過期,他的提交失敗,如圖6所示。
圖6 提交失敗圖Fig. 6 Commit failed
因?yàn)楣こ處烝與工程師B修改了相同的一行,并且工程師A先于工程師B提交,SVN無法決定如何將工程師B的修改與Verilog HDL版本庫已有的修改進(jìn)行合并,因此SVN產(chǎn)生沖突,需要工程師B來解決。工程師B需要先更新版本庫,檢出版本庫REV.2到本地,如圖7所示。
圖7 更新圖Fig. 7 Updated
工程師 B在解決沖突之后還要通過SVN Resolved命令通知SVN沖突已經(jīng)解決,最終工程師B可以提交他的修改形成一個新的Verilog HDL程序修訂版REV.3,如圖8所示。
圖8 提交完成圖Fig. 8 Submit completed
SVN平臺已經(jīng)成為現(xiàn)代協(xié)同工作提高效率的一種非常有效的手段,并且在當(dāng)今網(wǎng)絡(luò)行業(yè)中已經(jīng)有許多成熟的產(chǎn)品。SVN平臺的開發(fā)潛力非常大,可以用于各行各業(yè)。本文介紹了SVN平臺在Verilog HDL開發(fā)中的工作原理及應(yīng)用方法,這種技術(shù)能極大地提高團(tuán)隊(duì)的工作效率,達(dá)到了設(shè)計(jì)要求。
[1] 王長宏,陳朝陽,鄒雪城,等.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] 羅杰,康華光. 兩種硬件描述語言VHDL/Verilog的發(fā)展及其應(yīng)用[J]. 電氣電子教學(xué)學(xué)報,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ù)及其在軟件開發(fā)庫的應(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] 劉樂.軟件項(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語法的基本概念[J].電子產(chǎn)品世界,2002,21(1):76-79.XIA Yu-men.The basic concept Verilog Syntax[J].Electronic Products,2002,21(1):76-79.