丁 晴,杨 晨,丁 召,秦鲁东(贵州大学 贵州 贵阳 550025)
随着电子技术和计算机技术的不断发展,计算机与电子应用之间的联系变得越来越重要,电子设计自动化取得了巨大的进步。电子设计自动化技术以计算机为工作平台,结合电子技术来帮助工程师开发新的电子产品,其主要采用硬件语言实现大规模的数字系统设计[1]。Verilog HDL是一种硬件描述语言可以进行各种级别的数字逻辑设计,如系统级逻辑设计、行为级逻辑设计、RTL级逻辑设计、门级逻辑设计。Verilog HDL的程序是由模块(module)构成的,通过模块描述可以直接定义端口和信号,模块具有多层次,每个模块对应特定的功能,多个模块通过网表相连就可以形成一个大型设计[2]。对于一个大型设计,编辑Verilog HDL代码耗费的时间比较长,可能会存在以下问题:
1)新版本的程序引入了新的Bug,需要回到以前的版本去查找Bug的来源;
2)同一程序由不同工程师编写、维护与测试,不同工程师的工作可能产生冲突;
3)当需要撤销某个新加功能 ,代码被覆盖后就无法与原有版本进行对比,很难做到设计的可重性。
由于在Verilog HDL项目开发中存在上述问题,代码的版本管理与控制就非常必要。因此,本文提出了利用SVN的特性,对Verilog HDL项目代码开发、版本控制等问题进行研究,以提高开发的效率。
SVN是一个自由开源的版本控制系统,其采用拷贝-修改—合并模型[3],在这种模型里,每一个客户通过项目版本库拷贝各自所需要的文件,进行查看。客户同时工作,修改各自的工作拷贝,最后,每个客户提交各自的版本,并合并在一起成为最终的版本。
基本过程为:检出工作副本—编辑修改—合并服务器中的修改—提交修改,如图1所示。
一个SVN工作拷贝是用户本地机器一个普通的目录,保存着一些文件,用户可以随意编辑文件,在用户完成修改之前,SVN不会把用户的修改与其他人的合并,也不会把用户的修改展示给别人。当用户在工作拷贝做了一些修改并且确认它们工作正常之后,SVN提供了一个命令可以“发布”用户的修改给项目中的其他人,如果别人发布了各自的修改,SVN提供了手段可以把这些修改与用户的工作目录进行合并[4]。
图1 SVN工作流程图Fig. 1 Flow chart of SVN
当版本库接收到一个修改后的版本,更新后版本库发生了新的变化,这样的一个过程就称为修订版本。SVN的特色之一就是原子提交[5],一个修订版本要么全部提交,要么都保持不变,这样可以防止部分文件未被提交的状况发生。每次的提交都会产生一个新的独一无二的修订版本号,SVN版本库会自动进行数据传输,后修改过的版本也存有先前的内容,不会互相冲突。
完成一个阶段的工作后,工程师需要将分支上的修改合并到最新版本。一个分支就像一个拷贝的存在,并从那里离开,并具有自己的历史。如图2所示。
图2 分支示意图Fig. 2 branch
当分支合并后,分支就失去意义。平时在进行开发时,一般都会有多版本分支同时进行,当某一个版本具备上线条件后,需要在上一个已发布的版本基础上进行发布,才能够避免出现版本相互覆盖,因此往往需要对版本之间代码进行合并,合并的过程中网页地址(URL)及版本需填写起始的和结束的,这将影响合并后所得到的版本。假设这次分支是从主干版本3上创建的,而分支的起始版本是4,最终分支完成后的版本是7,主干版本8是分支版本4的差异和分支版本6的差异的合并,如图3所示。那么在主干版本没有更新的前提下,工程师把分支功能合并到主干上,在主干版本3的工作副本中点击合并,在“起始URL 和版本”填写主干的URL和版本3,在“结束的URL 和版本”填写分支的URL和版本7即可。
图3 合并示意图Fig. 3 merger
Verilog HDL大型软件的开发是一个非常繁琐的过程。在软件的开发过程中,很多时候需要团队协作来完成。若是多人完成一个程序时,需要频繁查看别人的进度或者代码,交流起来十分不便,这时就需引入SVN强大的协作功能,方便开发者随时了解他人进度以便及时分享自己的工作。
在本论文中工程师A和工程师B在两个电脑分别完成Verilog HDL程序编程,工程师B的电脑通过查找工程师A电脑IP,设定与工程师A相同的IP192.168.1.107来连接两台电脑,工程师B可以共享工程师A电脑中SVN版本库的资源,分步骤来说明其工作过程,如图4所示是团队协作流程图。
图4 团队协作流程图Fig. 4 Flow chart of teamwork
在处理一个需要多人协同修改的程序前,团队中的每个成员都要检出(check out)SVN版本库中现有的Verilog HDL程序文件目录REV.1。在本文中假设工程师A和工程师B为同一个项目团队的成员,在进行检出后,工程师们都有了一份相同的Verilog HDL程序文件工作副本REV.1,然后才能开始修改Verilog HDL程序中自己负责的部分。如图5所示,工程师B从服务器中的SVN版本库检出完成。
图5 检出完成图Fig. 5 Detection Complete
假设工程师A和工程师B两人对Verilog HDL多路选择器(MUX)程序[6]进行修改,代码如下:
工程师A在原有程序上添加“二进制到BCD码转换”模块,并将“VERSION 1.0”修改为“VERSION 1.1”,工程师A将修改后的程序提交,版本号更新为REV.2。代码如下:
工程师B在原有模块上添加“二进制到格雷码转换”模块,在两人各自独立工作的情况下,工程师B同样将“VERSION 1.0”修改为“VERSION 1.1”。代码如下:
由于两人修改了程序的相同行,即“VERSION 1.0”一行,则工程师B在提交他的修改时,SVN程序会产生冲突警告,他将得到错误信息,提示其Verilog HDL工作副本已经过期,他的提交失败,如图6所示。
图6 提交失败图Fig. 6 Commit failed
因为工程师A与工程师B修改了相同的一行,并且工程师A先于工程师B提交,SVN无法决定如何将工程师B的修改与Verilog HDL版本库已有的修改进行合并,因此SVN产生冲突,需要工程师B来解决。工程师B需要先更新版本库,检出版本库REV.2到本地,如图7所示。
图7 更新图Fig. 7 Updated
工程师 B在解决冲突之后还要通过SVN Resolved命令通知SVN冲突已经解决,最终工程师B可以提交他的修改形成一个新的Verilog HDL程序修订版REV.3,如图8所示。
图8 提交完成图Fig. 8 Submit completed
SVN平台已经成为现代协同工作提高效率的一种非常有效的手段,并且在当今网络行业中已经有许多成熟的产品。SVN平台的开发潜力非常大,可以用于各行各业。本文介绍了SVN平台在Verilog HDL开发中的工作原理及应用方法,这种技术能极大地提高团队的工作效率,达到了设计要求。
[1] 王长宏,陈朝阳,邹雪城,等.Verilog HDL设计实例及其仿真与综合[J].计算机应用,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的发展及其应用[J]. 电气电子教学学报,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] 高平,周磊.版本控制系统—Subversi0n技术及其在软件开发库的应用[J].航空电子技术,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] 刘乐.软件项目管理与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].电子产品世界,2002,21(1):76-79.XIA Yu-men.The basic concept Verilog Syntax[J].Electronic Products,2002,21(1):76-79.