Perforce研討會回顧 | Helix Core在芯片行業(yè)的應(yīng)用實例:芯片項目的版本控制、持續(xù)集


2023年2月28日,龍智聯(lián)合全球領(lǐng)先的數(shù)字資產(chǎn)管理和DevSecOps工具廠商Perforce共同舉辦Perforce on Tour網(wǎng)絡(luò)研討會——“賦能‘大’研發(fā),助力‘快’交付”。
研討會上,在芯片行業(yè)有15年經(jīng)驗的Perforce Helix Core深度用戶——何剛了帶來精彩演講,從芯片開發(fā)的需求和痛點出發(fā),分享如何利用Perforce Helix Core來實現(xiàn)快構(gòu)建,快迭代,高協(xié)作,大文件的版本管理,如何實現(xiàn)芯片項目的持續(xù)集成和自動化,并運用實例讓大家具體了解如何在芯片的研發(fā)中落地Helix Core版本控制。
何剛現(xiàn)任上海星思半導(dǎo)體芯片開發(fā)部部長,他從事芯片開發(fā)工作已15年余,曾擔(dān)任十幾顆大型復(fù)雜芯片的開發(fā)骨干,如華為早期無線基站芯片SD6xxx,投影儀芯片PA168,AMD銳龍R9系列dGPU顯卡芯片和自動駕駛芯片A1000等。何剛從業(yè)以來所有參與芯片,包括近期負(fù)責(zé)的5G基帶芯片,均一版成功。
在線研討會“賦能‘大’研發(fā),助力‘快’交付”內(nèi)容回顧
《芯片研發(fā)中的IP資產(chǎn)管理》
演講嘉賓:何剛,上海星思半導(dǎo)體芯片開發(fā)部部長
大家好,我是上海星思半導(dǎo)體芯片開發(fā)部的部長,何剛。非常感謝龍智的邀請,讓我有機會與大家分享Perforce (Helix Core)?的使用體驗。今天,我將從芯片開發(fā)的IP資產(chǎn)管理角度來分享Perforce使用體驗。
芯片項目開發(fā)需求和痛點
我簡單地總結(jié)出以下八大需求和痛點:
首先,需要穩(wěn)定、可靠的版本管理來提高工作效率,沒有版本管理的芯片開發(fā)就是一團亂麻。
其次,需要細致的權(quán)限管理來滿足安全性。因為芯片開發(fā)過程涉及到很多團隊配合,所以不同團隊的權(quán)限管理需要不同的配置,保障公司信息安全。
然后需要進行代碼的分級管理,持續(xù)集成。芯片開發(fā)過程中,在設(shè)計的時候是Top down,但是開發(fā)的時候是Bottom up。Bottom up實際上是先從小模塊到大模塊,到IP再到磁吸層最后到芯片的過程,這個過程也要分級管理,也就是持續(xù)集成,CI/CD。
再然后是經(jīng)常需要拉各種分支進行某種特性開發(fā),要保證主分支的穩(wěn)定性,拉一些開發(fā)分支進行特性的開發(fā)。特性開發(fā)比較多,所以開發(fā)分支也會比較多。
接下來是經(jīng)常需要做多分支同時merge到主分支,開發(fā)分支被拉出去后,相當(dāng)于將它展開,還是需要收回來的。
有時還需要做大文件和大數(shù)據(jù)量管理。前方開發(fā)在開發(fā)代碼的過程中不會涉及到大文件和大數(shù)據(jù)量,但是因為芯片開發(fā)有綜合和后端,這就會生成大文件,最好能做版本管理,但其他工具沒有這個能力。一些公司使用SVN或Git,但由于它們不是用文件夾來進行管理,所以會造成信息的損失,文件和原版的對齊可能出現(xiàn)錯誤。
一般都可能需要跨地區(qū)、多團隊協(xié)作,芯片開發(fā)動輒幾十人,甚至成百上千人,特別大的公司上萬人,肯定涉及跨地區(qū)、多團隊協(xié)作。
因為用戶較多、使用方式較雜,需要用戶接口友好,降低使用成本。否則難以操作會增加使用過程的困難性,進而導(dǎo)致成本增加。

今天主要從四個方面說起。首先是回顧Perforce的優(yōu)勢,第二是芯片的項目版本管理,第三是芯片項目持續(xù)集成和自動化,也就是CI/CD。芯片行業(yè)的CI/CD可能沒有傳統(tǒng)軟件領(lǐng)域的CI/CD那么好、那么徹底。但是芯片項目如果引入了CI/CD將會帶來非常大的效率和質(zhì)量提升。最后給大家介紹芯片行業(yè)應(yīng)用實例。
Perforce的優(yōu)勢
部署維護簡單,我相信使用過Perforce的人應(yīng)該有很深的感受,它的部署和維護是很快、很簡單的。用戶界面非常友好,還有強大且成熟的圖形化GUI界面,對我來說十分便利。
Perforce對大文件大數(shù)據(jù)量的支持很優(yōu)秀,這一點也是有目共睹的。團隊的協(xié)同工作在使用Perforce后更便利、更高效了。Perforce的權(quán)限管理非常靈活方便,SVN已經(jīng)很方便了,但與Perforce相比還是略遜一籌。最后,我會簡單地比較一些版本管理工具。
Perforce部署維護相當(dāng)簡單,大約500人的團隊只需一位管理員來進行部署和維護。備份也特別方便。使用過程中無需擔(dān)心Perforce本身的問題,因為Perforce已經(jīng)是業(yè)界公認(rèn)的使用無問題的軟件。
Perforce用戶界面是多方面友好的,經(jīng)典集中式管理對于以前使用CVS、SVN、ClearCase的用戶來說易于上手。GUI界面工具P4V能夠和命令行工具結(jié)合使用。圖形界面可以方便地瀏覽文件版本的演進歷史,分支結(jié)構(gòu)和目錄結(jié)構(gòu)一目了然。命令行工具可以更方便的實現(xiàn)腳本化。
Perforce對大文件大數(shù)據(jù)量的支持主要體現(xiàn)在大于10G的文件,只有Perforce能進行管理,其他工具無法承受。Perforce多線程技術(shù)可以充分使用網(wǎng)絡(luò)帶寬和本地磁盤的速度,給上傳下載帶來高速的體驗與感受。它無需存儲本地控制信息,也能大幅提升上傳下載文件的速度。Perforce可以按需下載文件,當(dāng)要獲取某一個需要的文件時,不需要獲取整個倉庫。
團隊協(xié)同工作便利高效是因為Perforce的集中式管理可以早期發(fā)現(xiàn)沖突,減輕在后期合并時的工作量。您可以帶鎖check out,避免check out文件被他人修改。跨地域全球部署,各地的開發(fā)人員在本地服務(wù)器上工作,本地提交后全球站點都可使用。
Perforce的權(quán)限管理非常靈活方便,可以細化到文件級別,SVN等只能針對文件夾做管理,不能對文件進行管理。除了管理員管理權(quán)限以外,您還可以委托給各個分部門進行權(quán)限管理。無需將所有的權(quán)限管理都給權(quán)限管理員。公司級可以由管理員管理,部門級設(shè)置管理員支持部門內(nèi)部的、更精細的權(quán)限管理。權(quán)限管理也可以細化到文件級,管理員可以委托部門管理員進行管理,減少業(yè)務(wù)部門等待時間。
芯片行業(yè)早期也使用CVS、ClearCase等工具,但CVS只針對文件進行管理,無法對文件夾進行排名。ClearCase我們以前用來管理文檔、代碼,現(xiàn)在比較少見。目前來說SVN、Perforce和Git是主流。
SVN和Git都有各自的優(yōu)勢,也有各自的缺陷。SVN有很強的權(quán)限管理,但是分支和merge能力很弱。所以在使用SVN開發(fā)芯片時,是沒辦法拉分支的。如果拉了分支后面的merge會很難受。
Git的分支能力還可以,但它的權(quán)限管理非常弱,只能對整個庫進行權(quán)限管理,幾乎沒辦法對子目錄、子文件夾進行權(quán)限管理。
他們各自的優(yōu)點Perforce都有,但他們的缺點在Perforce里都解決了。Perforce有很強的權(quán)限管理,同時有很強的分支能力。他的分支能力可以說是非常靈活自如,并且有規(guī)則。
比如主分支、發(fā)布分支、開發(fā)分支、測試分支,這些基本的分支創(chuàng)建后,開發(fā)過程中就能非常自如拉分支、進行合并。
Perforce可以進行文檔管理。文檔有時也要分不同的架構(gòu)進行不同部門的權(quán)限配置。SVN、Git、ClearCase其實都可以管理文檔,Perforce當(dāng)然也沒問題。Perforce對整個開發(fā)過程中需要版本管理的文件進行版本管控。
剛才回顧Perforce的優(yōu)點,我們目前幾乎沒有發(fā)現(xiàn)他的缺點,歡迎大家來挑刺。
芯片項目版本管理
Perforce擁有強大的芯片項目版本管理能力。它有經(jīng)典的Local類型分支管理功能,Stream類型分支管理功能。接下來會講到Stream Graph示例,Changelist與Revision的概念,以及靜態(tài)標(biāo)簽、自動標(biāo)簽,最后是便捷的CI/CD。
Perforce經(jīng)典的Local類型分支管理功能中,項目組裝是對各模塊的引用,而不是拷貝。在工作區(qū)中組裝SOC時,通過View Mapping即可完成。便捷的Branch Mapping功能能夠方便地維護分支間的對應(yīng)關(guān)系。這一塊已經(jīng)被使用多年。
Perforce還有Stream類型分支管理功能,它規(guī)范了每個分支的目錄深度,避免分支層次混亂。在目錄深度方面,Stream是直接定義好的。規(guī)范每個分支的類型和父子分支之間合并行為,就是主分支、發(fā)布分支和開發(fā)分支這幾個類型之間的合并行為。將SOC組裝從工作區(qū)定義提升到Stream定義,Stream已經(jīng)把SOC組裝定義好,用戶可直接使用Stream定義來實現(xiàn)SOC組裝。同一工作區(qū)可自由切換Stream分支,減少磁盤空間占用。比如您的工作區(qū)原先在主分支上,現(xiàn)在想切換到某個發(fā)布分支,在同一個工作區(qū)內(nèi)可以自由切換,這樣您就可以在不同的分支上進行活動,無需再下載一個工作區(qū)。可視化的Stream Graph分支管理視圖,看起來非常便利。

這是Stream Graph的一個示例,有主分支、發(fā)布分支、開發(fā)分支。一般來說,一個IP或一個模塊就會有一個這樣的Stream體系。每個模塊可能含有其它模塊的發(fā)布分支,同時也會有自己的新開發(fā)內(nèi)容。

Changelist與Revision的概念是,Revision是針對文件有數(shù)字累加的版本,Changelist是整個庫的Changelist。但是針對單個文件,它既有Revision號,同時也有Changelist號。

芯片項目版本管理的靜態(tài)標(biāo)簽方面,您可以獲得任何一個文件的版本號,做成靜態(tài)標(biāo)簽,用戶可以使用靜態(tài)標(biāo)簽對版本進行check out。
Auto Label可直接使用Changelist作為智能標(biāo)簽。
芯片項目持續(xù)集成和自動化
芯片項目的持續(xù)集成和自動化其實借鑒了軟件行業(yè)多年的實踐經(jīng)驗。

芯片開發(fā)的整個Fullchip中有很多子系統(tǒng),例如5GNR、ISP、AI/NPU、PCIe、CPU、GPU、LPDDR5、USB,每個子系統(tǒng)中又包含多個IP,每個IP又集成了多個模塊。在開發(fā)過程中,這些模塊先進行開發(fā),然后發(fā)布給IP。IP開發(fā)到一定成熟度時,發(fā)布給子系統(tǒng),子系統(tǒng)再發(fā)布給Chip。這個過程有點像流水線,從模塊流到IP,IP流到子系統(tǒng)等等。
這樣的流過程如何實現(xiàn)?您需要對每個模塊進行版本發(fā)布,其實就使用了它的發(fā)布分支,它本身在也還在開發(fā)過程中,當(dāng)然有些第三方IP例如PCIe,底下的一級代碼是成熟的,但是自研模塊必須邊開發(fā)邊往上一級進行版本發(fā)布。
每個模塊都有自己的主分支、開發(fā)分支和發(fā)布分支。在IP這一層也有自己的三個分支,有發(fā)布分支、主分支,它的開發(fā)分支指IP的頂層。
這些分支,例如若干個模塊的發(fā)布分支被IP拿到后,就是在模塊進行開發(fā)時,發(fā)布分支可以人為發(fā)布,也可以自動化發(fā)布。當(dāng)然,自動化發(fā)布要基于一些規(guī)則。比如一些新的特性已經(jīng)開發(fā)成熟,或是最簡單的,一些典型的case已經(jīng)pass,這是就可以用工具自動化發(fā)布,當(dāng)然手動發(fā)布也可以。
這些發(fā)布分支如果IP的三個版本中還沒被拿,那么當(dāng)前這個版本就可以把它拿進來,然后讓工具做自動回歸,自動回歸通過后,新發(fā)布的版本就被這個IP拉進來了。這是就完整的一次流水過程。
IP到子系統(tǒng)也是同樣的道理,各個IP自己做流水,子系統(tǒng)也在做流水,F(xiàn)ullchip也在做流水,當(dāng)流水線對接后,整個芯片開發(fā)流水線就形成了,因為Perforce有非常強大的分支管理能力,能夠完全支撐流水線,非常方便。

模塊級、IP級經(jīng)過CI到Harden級。Harden是由一些大的IP形成的。然后再到子系統(tǒng)級,最后到Fullchip級。每一級都是相似的流水線過程。
當(dāng)流水線實現(xiàn)后,能夠使得芯片開發(fā)過程變得特別高效。舉個簡單的例子,如果有持續(xù)集成的過程,新的版本形成新的集成,例如IP進子系統(tǒng)或進Harden的過程會自動完成,無需人為推動。人為推動很容易疲勞,并且會發(fā)生跟不上的情況,去催促版本也不方便。
CI就算沒有成功,比如模塊進IP的過程失敗了,馬上就會發(fā)郵件給相關(guān)的人。假設(shè)有模塊1和模塊2失敗,報出來的錯誤是接口不對,郵件立即發(fā)送給相關(guān)的負(fù)責(zé)人,相關(guān)的負(fù)責(zé)人一看就知道,原來是發(fā)布版本的接口不一致導(dǎo)致失敗,他能夠迅速解決,再merge到之前的發(fā)布分支。
版本更新后可以重新做一次CI。CI可以自動化,也可以人為觸發(fā)。所以即使是失敗也是有意義的。無論是pass還是fail都是有意義的。
我們以前的項目流水線一般做四級,后來我們簡化為三級。
芯片行業(yè)應(yīng)用實例
芯片項目有大有小,大的項目也是由若干個子系統(tǒng)或IP組成。小型項目或IP可以使用單一Stream管理就足夠了。大型項目分模塊組織Stream。
使用Stream管理分支和IP有以下幾個類型,都可以使用Perforce進行管理,在此不多做介紹。

有一點需要強調(diào),當(dāng)上一級集成下一級模塊的時候,一般用它的發(fā)布分支。然后在本層,例如IP層級,本身也有基礎(chǔ)的代碼,不僅需要子模塊的發(fā)布分支,自己本身也可能處于主分支/開發(fā)分支/發(fā)布分支中。
小型項目使用單一Stream如圖所示,每個分支包含Soc的所有部分,整個項目里面都這樣迭代。
大型項目分模塊組織Stream,不同模塊的迭代速度不同,有些開發(fā)較快,有些開發(fā)較慢。
分模塊組織Stream,分別按照Feature發(fā)布自己的Golden版本,也就是發(fā)布分支。
SOC項目按需選擇各個模塊的不同分支下的Golden版本。

這是一個SOC Stream Graph示例。Soc_main作為系統(tǒng)頂層,集成了Coretex、pcie、usb、isp、npu等IP或子系統(tǒng)?;蛘哒fIP本身就是子系統(tǒng)。有些第三方的IP核配置一個版本就能一直運行,不用再做開發(fā),所以不用再頻繁拉發(fā)布分支。

SOC Stream定義示例,大團隊使用Stream soc_main的Stream定義中,可以按需指定導(dǎo)入模塊。您可以看到子系統(tǒng)、IP的import和發(fā)布分支。
Stream定義通常由項目管理者,也就是PM制定。開發(fā)人員使用時,只需在工作區(qū)中指定Stream的名字即可。

這是SOC目錄種組裝示例,左圖是庫上目錄結(jié)構(gòu)的關(guān)系,右圖是本地代碼組裝的效果。