2023年2月28日,龍智聯合全球領先的數字資產管理和DevSecOps工具廠商Perforce共同舉辦Perforce on Tour網絡研討會——“賦能‘大’研發,助力‘快’交付”。
研討會上,在芯片行業有15年經驗的Perforce Helix Core深度用户——何剛了帶來精彩演講,從芯片開發的需求和痛點出發,分享如何利用Perforce Helix Core來實現快構建,快迭代,高協作,大文件的版本管理,如何實現芯片項目的持續集成和自動化,並運用實例讓大傢俱體瞭解如何在芯片的研發中落地Helix Core版本控制。
何剛現任上海星思半導體芯片開發部部長,他從事芯片開發工作已15年餘,曾擔任十幾顆大型複雜芯片的開發骨幹,如華為早期無線基站芯片SD6xxx,投影儀芯片PA168,AMD鋭龍R9系列dGPU顯卡芯片和自動駕駛芯片A1000等。何剛從業以來所有參與芯片,包括近期負責的5G基帶芯片,均一版成功。
在線研討會“賦能‘大’研發,助力‘快’交付”內容回顧
《芯片研發中的IP資產管理》
演講嘉賓:何剛,上海星思半導體芯片開發部部長
大家好,我是上海星思半導體芯片開發部的部長,何剛。非常感謝龍智的邀請,讓我有機會與大家分享Perforce (Helix Core) 的使用體驗。今天,我將從芯片開發的IP資產管理角度來分享Perforce使用體驗。
芯片項目開發需求和痛點
我簡單地總結出以下八大需求和痛點:
首先,需要穩定、可靠的版本管理來提高工作效率,沒有版本管理的芯片開發就是一團亂麻。
其次,需要細緻的權限管理來滿足安全性。因為芯片開發過程涉及到很多團隊配合,所以不同團隊的權限管理需要不同的配置,保障公司信息安全。
然後需要進行代碼的分級管理,持續集成。芯片開發過程中,在設計的時候是Top down,但是開發的時候是Bottom up。Bottom up實際上是先從小模塊到大模塊,到IP再到磁吸層最後到芯片的過程,這個過程也要分級管理,也就是持續集成,CI/CD。
再然後是經常需要拉各種分支進行某種特性開發,要保證主分支的穩定性,拉一些開發分支進行特性的開發。特性開發比較多,所以開發分支也會比較多。
接下來是經常需要做多分支同時merge到主分支,開發分支被拉出去後,相當於將它展開,還是需要收回來的。
有時還需要做大文件和大數據量管理。前方開發在開發代碼的過程中不會涉及到大文件和大數據量,但是因為芯片開發有綜合和後端,這就會生成大文件,最好能做版本管理,但其他工具沒有這個能力。一些公司使用SVN或Git,但由於它們不是用文件夾來進行管理,所以會造成信息的損失,文件和原版的對齊可能出現錯誤。
一般都可能需要跨地區、多團隊協作,芯片開發動輒幾十人,甚至成百上千人,特別大的公司上萬人,肯定涉及跨地區、多團隊協作。
因為用户較多、使用方式較雜,需要用户接口友好,降低使用成本。否則難以操作會增加使用過程的困難性,進而導致成本增加。
今天主要從四個方面説起。首先是回顧Perforce的優勢,第二是芯片的項目版本管理,第三是芯片項目持續集成和自動化,也就是CI/CD。芯片行業的CI/CD可能沒有傳統軟件領域的CI/CD那麼好、那麼徹底。但是芯片項目如果引入了CI/CD將會帶來非常大的效率和質量提升。最後給大家介紹芯片行業應用實例。
Perforce的優勢
中標題
部署維護簡單,我相信使用過Perforce的人應該有很深的感受,它的部署和維護是很快、很簡單的。用户界面非常友好,還有強大且成熟的圖形化GUI界面,對我來説十分便利。
Perforce對大文件大數據量的支持很優秀,這一點也是有目共睹的。團隊的協同工作在使用Perforce後更便利、更高效了。Perforce的權限管理非常靈活方便,SVN已經很方便了,但與Perforce相比還是略遜一籌。最後,我會簡單地比較一些版本管理工具。
Perforce部署維護相當簡單,大約500人的團隊只需一位管理員來進行部署和維護。備份也特別方便。使用過程中無需擔心Perforce本身的問題,因為Perforce已經是業界公認的使用無問題的軟件。
Perforce用户界面是多方面友好的,經典集中式管理對於以前使用CVS、SVN、ClearCase的用户來説易於上手。GUI界面工具P4V能夠和命令行工具結合使用。圖形界面可以方便地瀏覽文件版本的演進歷史,分支結構和目錄結構一目瞭然。命令行工具可以更方便的實現腳本化。
Perforce對大文件大數據量的支持主要體現在大於10G的文件,只有Perforce能進行管理,其他工具無法承受。Perforce多線程技術可以充分使用網絡帶寬和本地磁盤的速度,給上傳下載帶來高速的體驗與感受。它無需存儲本地控制信息,也能大幅提升上傳下載文件的速度。Perforce可以按需下載文件,當要獲取某一個需要的文件時,不需要獲取整個倉庫。
團隊協同工作便利高效是因為Perforce的集中式管理可以早期發現衝突,減輕在後期合併時的工作量。您可以帶鎖check out,避免check out文件被他人修改。跨地域全球部署,各地的開發人員在本地服務器上工作,本地提交後全球站點都可使用。
Perforce的權限管理非常靈活方便,可以細化到文件級別,SVN等只能針對文件夾做管理,不能對文件進行管理。除了管理員管理權限以外,您還可以委託給各個分部門進行權限管理。無需將所有的權限管理都給權限管理員。公司級可以由管理員管理,部門級設置管理員支持部門內部的、更精細的權限管理。權限管理也可以細化到文件級,管理員可以委託部門管理員進行管理,減少業務部門等待時間。
芯片行業早期也使用CVS、ClearCase等工具,但CVS只針對文件進行管理,無法對文件夾進行排名。ClearCase我們以前用來管理文檔、代碼,現在比較少見。目前來説SVN、Perforce和Git是主流。
SVN和Git都有各自的優勢,也有各自的缺陷。SVN有很強的權限管理,但是分支和merge能力很弱。所以在使用SVN開發芯片時,是沒辦法拉分支的。如果拉了分支後面的merge會很難受。
Git的分支能力還可以,但它的權限管理非常弱,只能對整個庫進行權限管理,幾乎沒辦法對子目錄、子文件夾進行權限管理。
他們各自的優點Perforce都有,但他們的缺點在Perforce裏都解決了。Perforce有很強的權限管理,同時有很強的分支能力。他的分支能力可以説是非常靈活自如,並且有規則。
比如主分支、發佈分支、開發分支、測試分支,這些基本的分支創建後,開發過程中就能非常自如拉分支、進行合併。
Perforce可以進行文檔管理。文檔有時也要分不同的架構進行不同部門的權限配置。SVN、Git、ClearCase其實都可以管理文檔,Perforce當然也沒問題。Perforce對整個開發過程中需要版本管理的文件進行版本管控。
剛才回顧Perforce的優點,我們目前幾乎沒有發現他的缺點,歡迎大家來挑刺。
芯片項目版本管理
Perforce擁有強大的芯片項目版本管理能力。它有經典的Local類型分支管理功能,Stream類型分支管理功能。接下來會講到Stream Graph示例,Changelist與Revision的概念,以及靜態標籤、自動標籤,最後是便捷的CI/CD。
Perforce經典的Local類型分支管理功能中,項目組裝是對各模塊的引用,而不是拷貝。在工作區中組裝SOC時,通過View Mapping即可完成。便捷的Branch Mapping功能能夠方便地維護分支間的對應關係。這一塊已經被使用多年。
Perforce還有Stream類型分支管理功能,它規範了每個分支的目錄深度,避免分支層次混亂。在目錄深度方面,Stream是直接定義好的。規範每個分支的類型和父子分支之間合併行為,就是主分支、發佈分支和開發分支這幾個類型之間的合併行為。將SOC組裝從工作區定義提升到Stream定義,Stream已經把SOC組裝定義好,用户可直接使用Stream定義來實現SOC組裝。同一工作區可自由切換Stream分支,減少磁盤空間佔用。比如您的工作區原先在主分支上,現在想切換到某個發佈分支,在同一個工作區內可以自由切換,這樣您就可以在不同的分支上進行活動,無需再下載一個工作區。可視化的Stream Graph分支管理視圖,看起來非常便利。
這是Stream Graph的一個示例,有主分支、發佈分支、開發分支。一般來説,一個IP或一個模塊就會有一個這樣的Stream體系。每個模塊可能含有其它模塊的發佈分支,同時也會有自己的新開發內容。
Changelist與Revision的概念是,Revision是針對文件有數字累加的版本,Changelist是整個庫的Changelist。但是針對單個文件,它既有Revision號,同時也有Changelist號。
芯片項目版本管理的靜態標籤方面,您可以獲得任何一個文件的版本號,做成靜態標籤,用户可以使用靜態標籤對版本進行check out。
Auto Label可直接使用Changelist作為智能標籤。
芯片項目持續集成和自動化
芯片項目的持續集成和自動化其實借鑑了軟件行業多年的實踐經驗。
芯片開發的整個Fullchip中有很多子系統,例如5GNR、ISP、AI/NPU、PCIe、CPU、GPU、LPDDR5、USB,每個子系統中又包含多個IP,每個IP又集成了多個模塊。在開發過程中,這些模塊先進行開發,然後發佈給IP。IP開發到一定成熟度時,發佈給子系統,子系統再發布給Chip。這個過程有點像流水線,從模塊流到IP,IP流到子系統等等。
這樣的流過程如何實現?您需要對每個模塊進行版本發佈,其實就使用了它的發佈分支,它本身在也還在開發過程中,當然有些第三方IP例如PCIe,底下的一級代碼是成熟的,但是自研模塊必須邊開發邊往上一級進行版本發佈。
每個模塊都有自己的主分支、開發分支和發佈分支。在IP這一層也有自己的三個分支,有發佈分支、主分支,它的開發分支指IP的頂層。
這些分支,例如若干個模塊的發佈分支被IP拿到後,就是在模塊進行開發時,發佈分支可以人為發佈,也可以自動化發佈。當然,自動化發佈要基於一些規則。比如一些新的特性已經開發成熟,或是最簡單的,一些典型的case已經pass,這是就可以用工具自動化發佈,當然手動發佈也可以。
這些發佈分支如果IP的三個版本中還沒被拿,那麼當前這個版本就可以把它拿進來,然後讓工具做自動迴歸,自動迴歸通過後,新發布的版本就被這個IP拉進來了。這是就完整的一次流水過程。
IP到子系統也是同樣的道理,各個IP自己做流水,子系統也在做流水,Fullchip也在做流水,當流水線對接後,整個芯片開發流水線就形成了,因為Perforce有非常強大的分支管理能力,能夠完全支撐流水線,非常方便。
模塊級、IP級經過CI到Harden級。Harden是由一些大的IP形成的。然後再到子系統級,最後到Fullchip級。每一級都是相似的流水線過程。
當流水線實現後,能夠使得芯片開發過程變得特別高效。舉個簡單的例子,如果有持續集成的過程,新的版本形成新的集成,例如IP進子系統或進Harden的過程會自動完成,無需人為推動。人為推動很容易疲勞,並且會發生跟不上的情況,去催促版本也不方便。
CI就算沒有成功,比如模塊進IP的過程失敗了,馬上就會發郵件給相關的人。假設有模塊1和模塊2失敗,報出來的錯誤是接口不對,郵件立即發送給相關的負責人,相關的負責人一看就知道,原來是發佈版本的接口不一致導致失敗,他能夠迅速解決,再merge到之前的發佈分支。
版本更新後可以重新做一次CI。CI可以自動化,也可以人為觸發。所以即使是失敗也是有意義的。無論是pass還是fail都是有意義的。
我們以前的項目流水線一般做四級,後來我們簡化為三級。
芯片行業應用實例
芯片項目有大有小,大的項目也是由若干個子系統或IP組成。小型項目或IP可以使用單一Stream管理就足夠了。大型項目分模塊組織Stream。
使用Stream管理分支和IP有以下幾個類型,都可以使用Perforce進行管理,在此不多做介紹。
有一點需要強調,當上一級集成下一級模塊的時候,一般用它的發佈分支。然後在本層,例如IP層級,本身也有基礎的代碼,不僅需要子模塊的發佈分支,自己本身也可能處於主分支/開發分支/發佈分支中。
小型項目使用單一Stream如圖所示,每個分支包含Soc的所有部分,整個項目裏面都這樣迭代。
大型項目分模塊組織Stream,不同模塊的迭代速度不同,有些開發較快,有些開發較慢。
分模塊組織Stream,分別按照Feature發佈自己的Golden版本,也就是發佈分支。
SOC項目按需選擇各個模塊的不同分支下的Golden版本。
這是一個SOC Stream Graph示例。Soc_main作為系統頂層,集成了Coretex、pcie、usb、isp、npu等IP或子系統。或者説IP本身就是子系統。有些第三方的IP核配置一個版本就能一直運行,不用再做開發,所以不用再頻繁拉發佈分支。
SOC Stream定義示例,大團隊使用Stream soc_main的Stream定義中,可以按需指定導入模塊。您可以看到子系統、IP的import和發佈分支。
Stream定義通常由項目管理者,也就是PM制定。開發人員使用時,只需在工作區中指定Stream的名字即可。
這是SOC目錄種組裝示例,左圖是庫上目錄結構的關係,右圖是本地代碼組裝的效果。