当前位置: 首页 > news >正文

【无标题】Perforce研讨会回顾 | Helix Core在芯片行业的应用实例:芯片项目的版本控制、持续集成及自动化

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目录种组装示例,左图是库上目录结构的关系,右图是本地代码组装的效果。

相关文章:

【无标题】Perforce研讨会回顾 | Helix Core在芯片行业的应用实例:芯片项目的版本控制、持续集成及自动化

2023年2月28日,龙智联合全球领先的数字资产管理和DevSecOps工具厂商Perforce共同举办Perforce on Tour网络研讨会——“赋能‘大’研发,助力‘快’交付”。 研讨会上,在芯片行业有15年经验的Perforce Helix Core深度用户——何刚了带来精彩演…...

AdamW 优化器

Adam 优化器于 2014 年推出,其思想:既然知道某些参数移动得更快、更远,则每个参数不需要遵循相同的学习率,因为最近梯度的平方代表每一个权重可以得到多少信号,可以除以这个,确保即使是最迟钝的权重也有机会…...

手把手教你基于HTML、CSS搭建我的相册(上)

The sand accumulates to form a pagoda写在前面HTML是什么?CSS是什么?demo搭建写在最后写在前面 其实有过一些粉丝咨询前端该从什么开始学,那当然是我们的前端基础三件套开始学起,HTML、CSS、javaScript,前端的大部分…...

基于Redis实现的延时队列

基于Redis实现的延时队列 针对于Redis实现延时队列有两种实现方式: 使用zset实现实现的延时队列 借助redis zset来实现延时队列,具体的实现代码很简单,就是从zset中取出score小于当前时间戳的数据 import cn.hutool.json.JSONUtil; impor…...

(3.16——3.19)本周后半段总结

周四(3.16) 1.封装了TitleTip组件,并写了博客记录 http://t.csdn.cn/DAY4chttp://t.csdn.cn/DAY4c2.菜单跳转配置完毕,进行了一些页面的细节样式修改 3.基本写完了ServerSideEncryption页面,十一点多剩最后一点交互的…...

C++ 基础: cin和getline() 有啥区别?

所谓温故而知新,所以时不时会回头来看看我们最最基础的知识。 获取标准键盘输入的方法有多种。以C语言来说,最常用的就是cin 和geline() 。那么它们之间有什么区别呢,我们总结一下。 一、cin和geline的异同点 在 C 中,cin 和 ge…...

在使用fastjson中遇到的问题

一、在使用fastjson中遇到的问题 导论:最近在写一个JavaFx项目的时候使用到了fastjson作为处理json数据的依赖。在其它非JavaFx项目中也使用到了相同版本的fastjson,但是可以正常运行,而在JavaFx项目中却报异常,刚开始以为是我的依…...

C++造轮子飙车现场之无锁、有锁环形队列实现

先看带锁的实现。 带锁版本 circular_queue.h // 头文件防卫 #ifndef CIRCULAR_QUEUE_H #define CIRCULAR_QUEUE_H#include <mutex> // 互斥量 #include <condition_variable> // 条件变量template <typename T> class CircularQueue { public:// 构造函数…...

Spring Profiles and @Profile

1. Overview In this tutorial, we’ll focus on introducing Profiles in Spring. Profiles are a core feature of the framework — allowing us to map our beans to different profiles — for example, dev, test, and prod. We can then activate different profiles…...

数据分析-数据探索

文章目录前言主要内容总结更多宝藏前言 &#x1f60e;&#x1f973;&#x1f60e;&#x1f920;&#x1f62e;&#x1f916;&#x1f648;&#x1f4ad;&#x1f373;&#x1f371; 随着大数据和人工智能技术的不断发展&#xff0c;数据分析已经成为了一种非常重要的技能和工…...

7个最受欢迎的Python库,大大提高开发效率

当第三方库可以帮我们完成需求时&#xff0c;就不要重复造轮子了 整理了GitHub上7个最受好评的Python库&#xff0c;将在你的开发之旅中提供帮助 PySnooper 很多时候时间都花在了Debug上&#xff0c;大多数人呢会在出错位置的附近使用print&#xff0c;打印某些变量的值 这个…...

Intellij IDEA 中调试 maven 插件

Intellij IDEA 中调试 maven 插件话痨一下步骤1. classfinal-demo 项目部分2. ClassFinal 部分参考资料话痨一下 目前有两个项目&#xff1a; ClassFinal 是一款java class文件安全加密工具。classfinal-demo 是我建的一个Demo&#xff0c;用来测试ClassFinal的加密效果。 目…...

Java全栈知识(1)缓存池

我们先看这么一道题 Integer x new Integer(123); Integer y new Integer(123); System.out.println(x y); // false Integer z 123; Integer k 123; System.out.println(z k); // true Integer a 200; Integer b 200; System.out.println(z k); //false 我们…...

网络安全的特性

0x00 前言 网络安全的特性包括&#xff0c;机密性&#xff0c;完整性&#xff0c;可用性&#xff0c;真实性和不可否认性。详细的内容可以参考如下的内容。 Xmind资源请下载~ 0x01 机密性 机密性&#xff08;Confidentiality&#xff09; 意味着阻止未经授权的实体&#x…...

YOLOv8 多目标跟踪

文章大纲 简介环境搭建代码样例跟踪原理代码分析原始老版实现新版本封装代码实现追踪与计数奇奇怪怪错误汇总lap 安装过程报错推理过程报错参考文献与学习路径简介 使用yolov8 做多目标跟踪 文档地址: https://docs.ultralytics.com/modes/track/https://github.com/ultralyt…...

Gitee搭建个人博客(Beautiful Jekyll)

目录一、引言二、博客模板选型 - Jekyll三、安装Jekyll环境3.1 安装Ruby3.2 安装Jekyll3.3 下载Jekyll主题四、搭建我的Gitee博客4.1 选择主题 - Beautiful Jekyll4.2 创建Gitee账号同名代码库4.3 写博客4.4 开通Gitee Pages服务五、对Beautifu Jekyll的相关优化一、引言 之前…...

图形视图框架 事件处理(item)

在图形界面框架中的事件都是先由视图进行接收&#xff0c;然后传递给场景&#xff0c;再由场景传递给图形项。通过键盘处理的话&#xff0c;需要设置焦点&#xff0c;在QGraphicsScene中使用setFoucesItem&#xff08;&#xff09;函数可以设置焦点&#xff0c;或者图形项使用s…...

PTA第六章作业详解

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;夏目的作业 &#x1f4ac;总结&#xff1a;希望你看完之后&am…...

Java课程设计项目--音乐视频网站系统

一、功能介绍 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对音乐方面的要求也在不断提高&#xff0c;听歌的人数更是不断增加&#xff0c;使得音乐网站的设计的开发成为必需而且紧迫的事情。音乐网站的设计主…...

FPGA可以转IC设计吗?需要学习哪些技能?

曾经在知乎上看到一个回答“入职做FPGA&#xff0c;后续是否还可以转数字IC设计&#xff1f;” 从下面图内薪资就可以对比出来&#xff0c;对比FPGA的行业薪资水平&#xff0c;IC行业中的一些基础性岗位薪资比很多FPGA大多数岗位薪资都要高。 除了薪资之外更多FPGA转IC设计的有…...

初探Gradle

目录一.概述二.优点三.安装与配置1. 官网下载2. 配置环境变量3. 检验4. 配置国内镜像(可选)5. IDEA配置三.工程结构四.生命周期1.Initialization阶段2.Configuration阶段3.Execution阶段五.Task六.常用任务指令七.引入依赖1.本地依赖2.项目依赖3.直接依赖八.依赖类型九.插件十.…...

国产数据库介绍

人大金仓 Kingbase 北京人大金仓信息技术股份有限公司于1999年由中共人民大学专家创立&#xff0c;自成立以来&#xff0c;始终立足自主研发&#xff0c;专注数据管理领域&#xff0c;先后承担了国家“863”、“核高基”等重大专项&#xff0c;研发出了具有国际先进水平的大型…...

Java OpenJudge-test3

目录 1:明明的随机数 2:合影效果 3:不重复的单词 4:和为给定数 5:字符串数组排序问题 6:字符串排序 7:求序列中的众数 1:明明的随机数 总时间限制: 1000ms 内存限制: 65536kB 描述 明明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff…...

蓝桥杯刷题冲刺 | 倒计时22天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.选数异或2.特殊年份1.选数异或 题目 链接&#xff1a; 选数异或 - 蓝桥云课 (lanqiao.cn) 给定…...

入行 5年,跳槽 3次,我终于摸透了软件测试这行(来自过来人的忠告)

目录 前言 第一年 第二年 第三年 第四年 作为过来人的一些忠告 前言 最近几年行业在如火如荼的发展壮大&#xff0c;以及其他传统公司都需要大批量的软件测试人员&#xff0c;但是20年的疫情导致大规模裁员&#xff0c;让人觉得行业寒冬已来&#xff0c;软件测试人员的职…...

开源时序数据库学习

计划学习使用QuestDB解决大数据日志存储场景。以下是常见引擎比较 比较项目 InfluxDB TimescaleDB OpenTSDB QuestDB 数据模型 Key-Value Relational Key-Value Relational 存储引擎 自主开发的TSI PostgreSQL扩展程序 Apache HBase 自主开发 查询语言 InfluxQ…...

字节测试工程师悄悄告诉我的软件测试、测试开发常用的测试策略与测试手段

目录 前言 测试策略的关注重点 测试策略主要内容 总体测试策略 初级版本测试策略 跟踪测试执行 版本质量评估 后续版本测试策略 发布质量评估 测试手段 前言 测试策略是指在特定环境约束之下&#xff0c;描述软件开发周期中关于测试原则、方法、方式的纲要&#xff…...

我常用的shell 进制转换工具

一、进制的一些基础知识 1. 二进制&#xff08;binary&#xff09; 二进制的取值是0和1; 前缀是 0b 2. 八进制&#xff08;Octal&#xff09; 八进制的取值是0-7&#xff1b;前缀是 O 3. 十进制&#xff08;decimal&#xff09; 十进制的取值是0-9&#xff1b;没有前缀 …...

手写vue(二)响应式实现

名词解释&#xff1a;vm&#xff1a;指Vue实例一、目标效果vue定义&#xff08;1&#xff09;新建vm时&#xff0c;可以通过一个data对象&#xff0c;或者data函数&#xff0c;其属性可以通过vm直接访问&#xff0c;而data对象可以通过vm._data获取&#xff08;2&#xff09;修…...

mysql数据库常问面试题

1、NOW()和CURRENT_DATE()有什么区别&#xff1f; NOW()命令用于显示当前年份&#xff0c;月份&#xff0c;日期&#xff0c;小时&#xff0c;分钟和秒。 CURRENT_DATE()仅显示当前年份&#xff0c;月份和日期。 2、CHAR和VARCHAR的区别&#xff1f; &#xff08;1&#xff09…...