最易懂的ARM芯片开发科普,建议收藏!
经常有人说,现在做手机芯片就像搭积木,买点IP,连一下,后端外包。等芯片回来,上电,起OS,大功告成。这么简单,要不我们也来动手攒一颗吧。
首先,我们跑去ARM,问它有没有现成的系统。ARM说有啊,A73/G71/视频/显示/ISP/总线/系统控制/内存控制器/Trustzone全都帮你集成好了,CPU和GPU后端也做了,还是16nm的,包你性能和功耗不出问题。然后我们再跑到Synopsys或者Cadence买EDA工具,把仿真平台也一起打包了,顺带捎上周边IP和PHY。至于基带,Wifi和蓝牙,先不做吧,毕竟是第一次攒,要求不能太高。
在掏了几亿银子出来后,我们拿到一个系统框图:
A73MP4@3Ghz,A53MP4@1.6Ghz,G71MP8@850Mhz,显示4K分辨率双路输出,视频4K,支持VR,支持Trustzone,内存带宽25.6GB/s(LPDDR4x64@3200Gbps)。
本来可以乐呵呵的一手交钱一手交货的,可我们是来攒机的,不是买整机,我们得知道这个系统到底是怎么搭起来的,免得被坑。于是ARM给了一个更详细的图:
有了这张图,我们就可以对每个模块的性能,功耗,面积还有系统性能进行详细分析了。本文会涉及到一些基本概念,之前的文章(https://zhuanlan.zhihu.com/p/24878742?refer=c_70349842)介绍过,这篇里就不重复了。
首先是大核模块,这是一个手机芯片最受人关注的焦点。我们这里A73MP4的PPA如下:
工艺:TSMC16FFLL+
频率:2.1GHz@SSG/0.72C/0C, 2.5GHz@TT/0.8V/85C,3GHz@TT/1.0C/85C
MP4静态功耗:251mW@TT/0.8V/85C
动态功耗:200mW@TT/0.8V/85C
面积:6.7mm,MP4, 64KB L1D, 2MB L2, No ECC, with NEON&FP
跑分:835/Ghz SPECINT2K
也就是说,跑在极限3Ghz的时候,动态功耗是200x1.25x1.25x3=937mW,四核得上4W,而手机SoC最多也就能稳定跑在3W。跑在2.5G时候,动态功耗是200x2.5=500mW,MP4总功耗2.25W,可以接受。
A53的如下:
工艺:TSMC16FFLL+
频率:1.5GHz@SSG/0.72C/0C, 1.6GHz@TT/0.8V/85C
MP4静态功耗:63mW@TT/0.8V/85C
动态功耗:88mW@TT/0.8V/85C
面积:3.9mm,MP4, 32KB L1D, 1MB L2, No ECC, with NEON&FP
跑分:500/Ghz SPECINT2K
四核跑在1.6Ghz时功耗463毫瓦,加上A73MP4,一共2.7瓦。
这里的缓存大小是可以配置的,面积越大,性能收益其实是递减的,可以根据需要自行选取。
A53的:
A73的:
作为CPU,集成到SoC中的时候,一个重要的参数是访存延迟。有个数据,在A73上,每减少5ns的访存时间,SPECINT2K分数就可以提高1%。总的延迟如下:
上图只是一个例子,频率和参考设计并不一样。在上图,我们可以算出,访存在CPU之外,也就是总线和DDR上总共需要58.7ns,这个时间也就是静态延时,在做系统设计时可以控制。要缩短它,一个是提高时钟频率,一个是减少路径上的模块。在ARM给的系统中总线使用了CCI550,如果跑在1Ghz,一个Shareable的传输从进去到DDR打个来回需要10cycle,也就是10ns(上图是CCI500跑在800Mhz,所以是12.5ns)。CCI550和CPU之间还需要一个异步桥,来隔绝时钟,电源和电压域。这个异步桥其实也很花时间,来回需要7.5ns,6个cycle,快赶上总线延迟了。但是没办法,它是省不掉的,只有通过增加总线频率来减少绝对延迟。只有一种情况例外,就是异步桥连接的两端时钟频率是整数倍,比如这里的内存控制器和CCI之间频率相同,那可以去掉。
有的设计会把CCI550以及它上面的CPU,GPU作为一个子网挂在NoC下,由NoC连到内存控制器。这样的好处是可以把交织和调度交给NoC,坏处是凭空增加额外一层总线10-20ns的延迟,CPU的跑分就要低了2-4%。在ARM的方案中,交织由CCI直接完成,而调度交给内存控制器。既然所有主设备的访问都需要到DDR,那由DMC来调度更合适。再加上没有采用两层总线的链接方式,一共可以去掉两层异步桥,省掉12个cycle,已经快占到整个通路静态延迟的五分之一了。所以,现在我看到的主流总线拓扑,都是把CCI直接连内存控制器。那可不可以直接把CPU连内存控制器?只要DMC的端口够多,也没什么不可以,但是这样一来大小核就不能形成硬件支持的SMP了,功能上不允许。
路径上还有DMC和PHY的延迟,也是将近15ns,20cycle,这部分挺难降低。如果实现Trustzone,还要加上DMC和CCI之间的TZC400延迟,还会再多几个cycle。至于DDR颗粒间的延迟(行选择,命令和预充电),可以通过准确的DMC预测和调度来减少,稍后再讲。
静态延迟算完,我们来看带宽和动态延迟。
CCI和CPU/GPU之间是ACE口相连,数据宽度读写各128bit,16Byte。如果总线跑在800Mhz,单口的理论读或者写带宽分别是10.8GB/s。这个速度够吗?可以通过CPU端和总线端的Outstanding Transaction个数来判断。A73的手册上明确指出,ACE接口同时支持48个Cacheable的读请求,14x4(CPU核数量)设备和non-Cacheable的TLB/指令读,7x4+16写,这是固定的。而对应的CCI550的ACE接口支持OT数量是可配置的,配多大?有个简单公式可以计算。假设从CPU出来的传输全都是64字节的(Cacheable的一定是,而non-Cacheable的未必),而我们的带宽是10.8GB/s(假设是读),而一个传输从进入ACE到离开是51.3ns(按照上图计算),那么最大OT数是10.8x51.3/64=8.也就是说,只要8个OT就可以应付CPU那里100多个读的OT,多了也没用,因为总线数据传输率在那。从这点看,瓶颈在总线的频率。
那为什么不通过增加总线的数据位宽来移除这个瓶颈呢?主要是是位宽增加,总线的最大频率相应的会降低,这是物理特性。同时我们可能会想,真的有需要做到更高的带宽吗,CPU那里发的出来吗?我们可以计算一下。先看单个A73核,A73是个乱序CPU,它的读来自于三类方式,一个是读指令本身,一个是PLD指令,一个是一级缓存的预取。A73的一级缓存支持8路预取,每路预取范围+/-32,深度是4,预取请求会送到PLD单元一起执行,如下图。所以他们同时受到BIU上Cacheable Linefill数目的限制,也就是8.此外还有一个隐含的瓶颈,就是A73的LSU有12个槽,读写共享,所有的读写请求(包括读写指令,PLD和反馈过来的预取)都挂在这12个槽中独立维护。
言归正传,假设系统里全是读请求,地址连续;此时A73每一条读指令的延迟是3个cycle(PLD可能只需要1个cycle,我不确定)跑在3Ghz的A73,一每秒可以发出1G次读,每个8字节(LDM)的话,就是8GB/s带宽,相当于每秒128M次Linefill请求,除以BIU的8个Linefill数量,也就是每个请求可以完成的时间是60ns这和我们看到的系统延迟接近。此时一级缓存预取也会起作用,所以8个Linefill肯定用满,瓶颈其实还是在在BIU的Linefill数量,按照50ns延迟算,差不多是10GB/s。假设都是写,指令一个周期可以完成,每cycle写8字节(STM),带宽24GB/s。如果写入的地址随机,会引起大量的Linefill,于是又回到BIU的Linefill瓶颈。地址连续的话,会触发Streaming模式,在BIU内部只有一个传输ID号,由于有竞争,肯定是按次序的,所以显然这里会成为写的瓶颈。由于写的确认来自于二级缓存,而不是DDR(是cacheable的数据,只是没分配一级缓存),延迟较小,假设是8个cycle,每秒可以往外写64B/8=8GB的数据。总的来说,A73核内部,瓶颈在BIU。
到了二级缓存这,预取可以有27次。当一级缓存的BIU发现自己到了4次的极限,它可以告诉二级缓存去抓取(Hint)。单个核的时候,4+27<48,瓶颈是在一级缓存的BIU;如果四个核同时发多路请求,那就是4x8=32个OT,再加上每路都可以请求二级缓存,其总和大于ACE的48个Cacheable读请求。按照带宽算,每核是10GB/s,然后CPU的ACE口的读是48*64B/50ns=60GB/s。虽然60GB/s大于4x10GB/s,看上去像是用不满,但是一级缓存会提示二级缓存自动去预取,所以,综合一级二级缓存,簇内的瓶颈还是在ACE接口上,也意味着总线和核之间的瓶颈在总线带宽上,并且60GB/s远高于10.8GB/s。
A53是顺序执行的,读取数据支持miss-under-miss,没有A73上槽位的设计,就不具体分析了。
这里我简单计算下各个模块需要的带宽。
CPU簇x2,每个接口理论上总线接口共提供读写43.2GB/s带宽(我没有SPECINT2K时的带宽统计)。
G71MP8在跑Manhattan时每一帧需要370M带宽(读加写未压缩时),850Mhz可以跑到45帧,接近17GB/s,压缩后需要12GB/s。
4K显示模块需要4096x2160x4(Bytes)x60(帧)x4(图层)的输入,未压缩,共需要8GB/s的带宽,压缩后可能可以做到5GB/s。这还都是单向输入的,没有计算反馈给其他模块的。
视频需求带宽少些,解压后是2GB/s,加上解压过程当中对参考帧的访问,压缩后算2GB/s。
还有ISP的,拍摄视频时会大些,算2GB/s。
当然,以上这些模块不会全都同时运行,复杂的场景下,视频播放,GPU渲染,CPU跑驱动,显示模块也在工作,带宽需求可以达到20GB/s。
而在参考设计里,我们的内存控制器物理极限是3.2Gbpsx8Bytes=25.6GB/s,这还只是理论值,有些场景下系统设计不当,带宽利用率只有50%,那只能提供13GB/s的带宽了,显然不够。
而我们也不能无限制的增加内存控制器和内存通道,一个是内存颗粒成本高,还有一个原因是功耗会随之上升。光是内存控制和PHY,其功耗就可能超过1瓦。所以我们必须走提高带宽利用率的路线。
在这个前提下,我们需要分析下每个模块数据流的特征。
对于CPU,先要保证它的延迟,然后再是带宽。
对于GPU,需要保证它的带宽,然后再优化延迟,低延迟对性能跑分也是有提高的。
对于视频和ISP,带宽相对来说不大,我们要保证它的实时性,间接的需要保证带宽。
对于显示模块,它的实时性要求更高,相对于应用跑的慢,跳屏可能更让人难以容忍。
其余的模块可以相对放在靠后的位置考虑。
在CCI550上,每个端口的带宽是读写共21.6GB/s,大小核簇各需要一个端口,GPU每四个核也需要一个端口。显示和视频并没有放到CCI550,原因稍后解释。CCI550的结构如下:
它一共可以有7个ACE/ACE-Lite进口,读写通道分开,地址共用,并且会进行竞争检查,每cycle可以仲裁2个地址请求。之前我们只计算了独立的读写通道带宽,那共用的地址会是瓶颈吗?算一下就知道。对于CPU和GPU,所有从端口出来的传输,无论是不是Cacheable的,都不超过64字节,也就是16x4的突发。一拍地址对应四拍数据,那就是可以同时有八个端口发起传输,或者4个通道同时发起读和写。假设在最差情况下,CPU+GPU同时发起shareable读请求,并且,读回去的数据全都引起了eviction,造成同等数量的写。此时数据通道上不冲突,地址通道也正好符合。如果是CPU+GPU同时发起shareable写请求,并且全都命中别人的缓存,引起invalidate,读通道此时空闲,但是invalidate占用地址,造成双倍地址请求,也符合上限。到DMC的地址不会成为瓶颈,因为共四个出口,每周期可以出4个。这里,我们使用的都是shareable传输,每次都会去Snoop Filter查找,每次可能需要两个对TAG RAM的访问(一次判断,一次更新标志位,比如Invalidate),那就是每cycle四次(地址x2)。而我们的Tagram用的是2cycle访问延迟的2块ram,也就是说,需要同时支持8个OT。这一点,CCI550已经做到了。在以上的计算中,DMC是假设为固定延迟,并且OT足够,不成为瓶颈。实际情况中不会这么理想,光是带宽就不可能满足。
在CCI550中,有两处OT需要计算,一个是入口,每个端口独立,一个是做Snooping的时候,所有通道放在一起。之前我们计算过,如果静态延迟是50ns,单口的读需要8个OT。但是,上面的静态延迟算的是DDR命中一个打开的bank,并且也不需要预充电。如果加上这两步,延迟就需要85ns,而CCI必须为最差的情况作考虑。这样,OT就变成了10.8x85/64= 15。写的话需要的更少,因为写无需等待数据返回,只需要DMC给Early response就可以,也就是穿过CCI550(10cycle)加上少于DMC的静态延迟(10cycle),不超过20ns,OT算3。所以,单口OT就是18,意味着需要4x18=72个来存储请求(四个入口)。
在出口,如果是shareable的传输,会需要去查表实现snooping,此时所有的请求会放在一起,它的大小按照四个出口,每个带宽2x10.8GB/s,共86.4GB/s。但是,由于我们DDR最多也就25.6GB/s,计算OT时候延迟按照读的75ns(85-10,CCI本身的延迟可以去掉了,写延迟小于读,按照读来计算),75x25.6/64=30。如果是non-shareable传输,那就还是使用入口的OT。
上面计算出的OT都是用来存储读写请求的,其数据是要暂存于CCI550内部的buffer。对于写来说如果数据不能暂存,那就没法给上一级early response,减少上一层的OT;对于读,可以在乱序地址访问时,提高效率。由于DMC会做一定程度的调度,所以CCI550发送到DMC的读写请求,很多时候不是按照读请求的次序完成的,需要额外的缓冲来存储先返回的数据。下面是读buffer大小和带宽的关系图。我们可以看到,对于随机地址,buffer越深带宽越高。而对于顺序地址访问,几乎没有影响。这个深度根据队列原理是可以算出来的,我们这里就不写了。
同样,增加缓存也可以减少总线动态延迟,下图一目了然:
至于设置buffer的大小,根据队列原理,由于受到DMC调度的影响,数据回到CCI500的延迟期望值不容易计算,而直接设比较大的值又有些浪费(面积相对请求缓冲较大),比较靠谱的方法是跑仿真。
关于CCI550的资源配置,还有最后一项,即tag ram的大小。CCI550的特点就是把各个主设备内部的缓存标志位记录下来提供给Snooping操作,那这个tag ram的大小该如何定。理论上,最大的配置是等同于各级exclusive缓存的tag ram总合。如果小于这个值,就需要一个操作,叫做back invalidation,通知相应的缓存,把它内部的标志位去掉,免得标志位不一致。这个是由于tag ram本身的大小限制引入的操作,在执行这个操作过程中,同地址是有竞争的,这个竞争是多余的,并且会阻塞所有缓存对这一地址的snooping操作,所以需要尽量避免。ARM定义了一个CCI550中的tag ram和原始大小的比例,使得back invalidation保持在1-2%以下,参考下图:
简单来说,可以用所有exclusive cache总大小的10%,把back invalidation限制在1%以下。
其他的配置参数还有地址线宽度,决定了物理地址的范围,这个很容易理解。还有传输ID的宽度,太小的话没法支持足够的OT。
到这里为止,我们已经设置好了硬件资源的大小,尽量使得动态延迟接近静态延迟。下图是全速运行时的带宽和功耗(这里移除了内存的瓶颈)。
在这里,读写比例是2:1,也就是说出口收到的请求最多64+32=96GB/s。但我们可以看到有时是可以做到超越100GB/s的,为什么呢?因为有相当部分是命中了内部的tag,转而从缓存进行读操作。我们之前算过,Snooping操作在CCI550内部访问tag ram是足够的,但是如果命中,就需要从别人的缓存读数据,而这就收到上级缓存访问窗口的限制。所以我们看到当命中率是100%,总带宽反而大大下降,此时的瓶颈在访问上级缓存。所幸的是,对于SMP的CPU,通常命中率都在10%以下,正处于带宽最高的那段。至于通用计算,是有可能超过10%的,等到GPU之后再讨论。
第二副图显示了动态功耗,在25GB/s时为110毫瓦,还是远小于CPU的功耗,可以接受。静态功耗通常是10-20毫瓦,对于待机功耗其实并不低,而且tag ram是没法关闭的(300KB左右),只要有一个小核在运作,就必须打开。所以CCI550的静态功耗会比CCI400高一些,这就是性能的代价,需要有部分关闭tag ram之类的设计来优化。
不过,一个没法避免的事实是,总线的入口带宽是86.4GB/s,出口却只能是25.6GB/s。我们需要一些方法来来达到理论带宽。在总线上,可以使用的方法有调度和交织。
调度之前已经提到过,使用乱序来提高不存在竞争问题的读写传输,CCI550自已有内嵌策略,不需要配置。
而交织在之前的文章中也提过。 在CCI550上,只接了CPU和GPU,而他们发出的所有传输都不会超过64字节,也就是一个缓存行长度。只有一种可能的例外,就是exclusive传输,在spin lock中会用到。如果有一个变量跨缓存行,那么就有可能产生一个128字节的传输。而由于这类可能存在的传输,CCI550可以设置的最小粒度是128字节,来避免它被拆开到两个内存控制器,破坏原子性。不过到目前为止,CPU/GPU都不会发出128字节传输,如果有跨缓存行的变量,直接切断。这样虽然会造成软件逻辑上的错误,但这错误是软件不遵守规范引起的,ARM软件规范里明确禁止了这类问题。
对于视频和显示模块,它们并没有连在CCI550。因为CCI550内部只有两个优先级,不利于QoS。QoS我们稍后再讨论,先看系统中的NIC400总线。参考设计中NIC400链接了视频/显示和DMC,但其实NIC400并没有高效的交织功能,它的交织必须把整个物理地址空间按照4KB的页一个个写到配置文件。此外,它也没有调度和缓冲功能,所以在复杂系统中并不推荐使用。NIC400更适合简单的系统,比如只有一个内存控制器,可以用更低的功耗和面积实现互联。在这里我们可以使用NoC来替换。NoC还有一个适合传输长数据的功能,就是分割,可以把265字节甚至4KB的突发传输隔成小块,更利于交织。
这里就引出了一个问题,到底我们交织的粒度是多少合适?粒度越大,越不容易分散到各个DMC,而粒度越小,越不容易形成对某个DMC和DDR Bank的连续访问。
在四个通道的DMC上,CCI550使用了这样一个哈希变换,来使得各个模块的传输能够平均分布:
◦Channel_Sel[0] = Addr[8] ^ Addr[10] ^ Addr [13] ^ Addr [21]
◦Channel_Sel[1] = Addr[9] ^ Addr [11] ^ Addr [16] ^ Addr[29]
然后在DMC,使用了这样的变化来使访问分散到各个Bank:
◦For four channel memory: Addr[29:0] = {Addr[31:10], Addr[7:0]}
经过哈希化后,在CPU的顺序地址上效果如下:
在显示模块的上效果如下:
显然,在256字节的交织颗粒时效果最好,尤其是对于连续地址。对于随机地址,有个细节我们可以注意下,在颗粒度64/128字节的时候最好,这其实也符合预期。
刚刚我们提到了在DMC中的哈希优化。DMC最重要的功能是调度,这是提高带宽利用率的关键。ARM的DMC可以做到在多个主设备的64字节随机地址访问时做到94%的利用率(读),写也可以到88%。我们可以通过一些参数的设置来影响它的调度判断:读写操作切换时间,Rank(CS信号)切换时间以及页内连续命中切换阈值,高优先超时切换时间等,这些看名字就能理解,不详细解释了。
调整完这么多参数,还有一个最根本的问题没有解决:DDR理论带宽也只有25.6GB/s,各个主设备一起访问,总会有拥挤的时候。这时该采取什么策略来最大程度上保证传输?答案是QoS。QoS的基本策略是设置优先级,其次还有一些辅助策略,比如动态优先级调整,整流等。
上图是优先等级表,左边是总线的(包括CCI和NoC/NIC),高低依次是显示模块>视频>CPU>GPU>PCIe>DMA,基带跳过。在CCI550内部,实际上只有高和第两种优先级,CPU高,GPU低,没法区分更多的主设备。CCI550的优先级高低是给外部用的,可以拿来给DMC,让DMC定一个阈值,告诉CCI哪些级别之上优先发送,哪些暂缓。
当中的表是DMC内部对QoS优先级的重映射。DMC500支持把某个模块的优先级提高,并动态调整。这里,CPU在每秒发送1.6GB之后,优先级会被降低,和外部总线一样。下图中,我们可以看到在没有QoS的时候,CPU的延迟最大(最左边noqos),有了QoS,由于CPU的优先级相对较高,延迟大大降低(qos_only)。而用了重映射之后,在1.6GB之下,延迟又进一步较大降低。
让我们再看一个例子,更好的说明如何通过调整优先级来在有限的带宽下保证实时性:
在上图,我们看最右边,由于显示和视频总带宽需求不高,所以都能满足。
而这2张图里面,带宽需求上升,我们看到Video的带宽反而下降,而CPU不变。可在我们设置的表里,CPU的优先级是低于视频模块的。于是我们利用DMC的门限,告诉CCI不要送低优先级的,并把CPU中小核的优先级降低到门限之下,这样只要有视频流,CCI送到DMC的数据就会减少,如下图:
当然,我们也可以通过别的机制来达到类似的效果,比如限流等。攒机是个细致活,功夫够了肯定能调好,就是需要耐心和积累。
到这里才把CPU和总线,内存控制器考虑了,其他的GPU,多媒体,显示,系统控制和调度,传感器,安全,ISP,VR,通用计算,还没开始解释呢,以后有空慢慢更新吧。
R
eading
Q1营收暴减37%,“CPU第一股”龙芯中科能否撑起370亿市值?|硅基世界
龙芯中科董事长胡伟武(来源:龙芯中科)
钛媒体App推出产业报道专题「硅基世界」,长期关注全球半导体领域的技术与产业升级,洞悉产业一手资讯、深度趋势。
经历近一年的IPO审核之后,“国产CPU芯片第一股”终于挂牌上市。
2022年6月24日, 龙芯中科技术股份有限公司(以下简称“龙芯中科”,N龙芯代码:688047)今早成功登陆上交所科创板,开盘价96.28元/股,比发行价60.06元涨60%,随后股价大幅波动。截至发稿前,龙芯中科市值达370亿元人民币。
龙芯中科既是“国产CPU第一股”,也是A股中唯一一家基于自主指令集架构设计芯片的公司,同时是中科院计算所继联想集团(00992.HK)、中科曙光(603109.SH)、寒武纪(688256.SH)之后的第四家上市公司。
此前,龙芯中科董事长、总经理胡伟武提出“坚持为人民做龙芯”的口号,还提出“又红又专,红重于专”的人才选用和培养标准,情怀感拉满。而刚刚过去的6月6日,龙芯中科还发布新款基于自主指令集架构的CPU芯片及相关软件平台,胡伟武还直言,国产CPU应摆脱对国外指令集架构的依赖。
如今,这家国产CPU厂商迎来了资本市场的“鉴定”,今年第一季度营收却减少37%。那么,龙芯中科能否撑得起370亿元市值?
自主指令集架构授权纷争不断
龙芯中科成立于2008年3月,前身为“龙芯”服务,由北京市海淀区科学技术委员会主管的转移中心,与计算机所全资子公司中科算源共同出资设立。
“龙芯”系列是中国最早研制的通用处理器(CPU)芯片之一,始于中科院计算所内部的“Godson CPU设计与验证系统”科研项目,得到了中科院、核高基(核心电子器件、高端通用芯片及基础软件产品简称)等项目与机构的支持。
2000年11月,龙芯设计工作正式启动;2001年8月19日,设计与验证系统成功启动Linux操作系统,同时这一天也是“龙芯”的生日;2002年8月10日,基于0.18微米CMOS工艺、集成400万晶体管、首款单核32位通用CPU龙芯一号(Godson-1A)“XIA50”流片成功,结束了中国计算机产业“无芯”的历史,开启了国产CPU发力之路。
2010年开始,“龙芯”通过龙芯中科开始市场化运作,对龙芯CPU研发成果进行产业化,历经李国杰院士、唐志敏研究员、胡伟武董事长三代的不懈努力,积累了多个核心技术。
近年来,国产CPU芯片市场崛起,出现龙芯中科、华为海思、飞腾信息、海光信息、上海兆芯、电科申泰等一大批中国企业。
其中,龙芯中科此次率先抢跑上海科创板发行IPO上市——2021年6月28日正式提交招股书,并在今年6月7日公布招股意向书,15日开启申购;同时,海光信息IPO注册目前也获得了证监会同意,估值有望超过900亿元。
目前,龙芯中科主营产品为面向嵌入式、工控/终端、桌面/服务器三大场景的CPU及相关解决方案,是A股中唯一一家基于自主指令集架构设计芯片的公司。
事实上,指令集架构搭建了软硬件之间的桥梁,是芯片设计的“根技术”。
目前全球主流电子产品基于两种指令集架构体系,即基于x86指令集架构的美国Wintel(微软-英特尔)体系,以及基于ARM指令集架构的英国AA(安卓-Arm)体系。
“现在中国信息产业主要搭建在国外的两个技术平台上,而龙芯中科要打造第三套体系,从指令集到CPU、操作系统都自主研发。”在路演时,胡伟武表示,龙芯团队的初心是要建立自己的生态体系,成为IT产业体系的第三极。
因此,对于龙芯中科来说,最大的争议在于,为什么要做自主做指令集架构?“龙芯”是否真的是自主指令集IP?
2021年7月,基于12/14nm全自主IP设计、首款采用自主指令系统LoongArch的处理器芯片龙芯3A5000正式发布。为纪念抗美援朝70周年,龙芯3A5000芯片代号为“KMYC70”。
对于做自主指令集架构的原因,行业认为主要有三点:一是不存在授权问题,断供风险低,例如华为已得不到ARMv9授权;二是节省授权费,例如海光2016年从AMD获得了X86的Zen架构授权,花费高达2.93亿美元;三是获得更高的产业地位,拥有更多的“自主”宣传资本。
但兼容性、缺乏自主编程框架和语言等问题显而易见,目前,龙芯的LoongArch自主指令集架构处于劣势。
胡伟武认为,当前自主CPU和操作系统的整机产品,内部现有国产操作系统缺乏自主编程框架和语言,并不是真正意义上的自主操作系统。龙芯中科目前正在着手研发自主编程框架和语言,胡伟武预计2023年或2024年有望研发成功。
“又红又专,红重于专”的人才选用和培养标准,是胡伟武在路演时对龙芯中科长期发展的重要表述。
胡伟武指出,“十四五”期间,龙芯中科将完成从通用处理器和操作系统技术“补课”,向全面开展软件生态和产业链建设的转折,从电子政务和关键行业市场走向开放市场的转折,从跟随性发展的“必然王国”向自主发展的“自由王国”转折。
他强调,龙芯中科目标是,以龙芯中科自主指令系统为基础,通用处理器性能达到世界先进水平,基础软硬件生态基本完善,自主信息技术体系和产业生态初步建成,销售收入再上一个大台阶。
不过,目前龙芯中科依然面临芯联芯授权的MIPS技术、神州龙芯等纠纷问题,公司表示正妥善解决。
今年3月芯联芯发布的公告指出,龙芯中科因其违约未受审计,知识产权有侵权嫌疑,与芯联芯仍存在仲裁和诉讼争议,这些争议将继续进行。
最新的6月17日,芯联芯在其官网发文称,因龙芯中科违约并逃避履行责任,芯联芯已在香港国际仲裁中心和北京知识产权法院针对龙芯中科分别提起了仲裁和诉讼,依据香港国际仲裁中心的临时命令,龙芯中科现已经向香港仲裁中心提交了数千万元的权利金,该案正等待最终裁决。
招股书显示,2018-2021年,龙芯中科超过80%的营收来自于MIPS架构授权的产品。在中国市场,芯联芯所授权的使用MIPS架构的芯片出货颗数总计已超过5亿颗,龙芯中科对其有接近约0.55%出货颗数的贡献。
(来源:龙芯中科官网微信)
至于“神舟龙芯”的商标纠纷,龙芯中科在第二轮审核问询中回复称,截至目前,其与神州龙芯不存在诉讼、仲裁等纠纷。
胡伟武接受钛媒体App路演提问时表示,从2020年起,龙芯新研发的CPU均采用自主研发的龙架构LoongArch,不再使用MIPS架构,不用国外ARM架构技术授权。基于MIPS架构的龙芯CPU正在有序退出市场。
“龙芯不用国外技术授权,在市场方面可以保持开放性。例如,龙芯可以进行IP授权,而引进ARM的CPU不能进行IP授权。又如,ARM的V9没有对境内企业架构授权的情况下,境内企业没有资格研发V9的处理器核。”胡伟武表示,LoongArch架构正在成为与X86、ARM并列的指令系统架构,腾讯的微信、阿里的龙蜥社区、华为的欧拉社区都支持了LoongArch。Linux系统生态下,龙芯通过自主研发可以做得更好。
钛媒体App了解到, 下一代龙芯3A6000使用12nm工艺,主频将超过2.5GHz,包含4个处理器核心,每个处理器核心采用64位超标量LA464自主微结构,主要用于台式机和笔记本电脑。预计最快在2023年左右发布。
胡伟武表示,公司计划在2021年至2025年的“十四五”期间,使用更先进工艺研发面向桌面和服务器的通用处理器,争取性能尽快达到市场主流产品水平,同时要开展与龙芯处理器配套的GPGPU(通用图形处理器)芯片、存储类芯片的研发。
此外,6月15日网上首发路演时,胡伟武还透露,龙芯中科将进军车载芯片市场,“主要是做了控制用的MCU(微控制单元)芯片,第一款已经流片,目前公司正在与整机企业接触。”
2022年Q1营收下降37.08%,“龙芯”业务失速
目前,龙芯中科主营业务,包括处理器及配套芯片产品、基础软硬件解决方案的研制、销售及服务,基于信息系统、工控系统两条主线,龙芯产品在电子政务、能源、交通、金融、电信、教育等行业领域广泛应用。
招股书显示,2018年-2020年,公司营业收入分别为1.93亿元、4.85亿元和10.82亿元,共计17.61亿元,复合增长率为57.28%;归属于母公司股东的净利润分别为790.33万元、1.93亿元、7179.85万元,总额达2.73亿元,其中政府补助达1.27亿元,毛利率达48%以上。而2021年营收仅增长10.99%,至12.01亿元。
按照该公司2022年3月的招股书计算,预计2022年、2023年、2024年,龙芯中科预计收入均不低于15亿元。
但事实证明,龙芯中科的预测有点过于乐观。
由于新冠疫情、采购减少等原因,2022年1-3月,公司营业收入和净利润出现同比双降,其中营收仅为1.81亿元,同比下降37.08%;归母净利润为0.36亿元,下滑41.74%。
龙芯中科的失速表明,在新冠疫情、加息通胀经济变化之下,中国CPU芯片面临承压。
龙芯中科表示,收入下降主要系公司的信息化类客户正处于向最终用户集中交货验收阶段,新批次的采购有所滞后,并且产品交付工作受到了疫情的影响。此外,其主要客户上半年一般处于预算编制与审批阶段,新增采购需求较少,通常会集中在下半年特别是第四季度完成产品验收。
“受此影响,龙芯中科销售收入通常具有上半年较低、下半年尤其是第四季度较高的特点,主要与下游终端产品的市场需求有关。”龙芯中科财务总监曹砚财表示。
与此同时,直销模式导致龙芯中科销售费用率偏高,2019年、2020年和2021年分别为8.17%、4.99%和7.58%,而同期行业中值分别为4.09%、4.4%和4.17%。
在招股书中,该公司承认,竞争对手x86和Arm指令集的市场生态“成熟”,而“龙芯处理器的软件生态完备程度和整体成熟度偏低”,因此龙芯中科当前相较于Intel、AMD等国际CPU龙头企业尚存在一定差距。
据披露,截至2021年12月31日,龙芯中科基于LoongArch指令系统的产品在手订单约为1.38亿元,出货量会逐步提升。截至2021年3月20日,前述在手订单均不存在退单情况。
2022年上半年,龙芯中科预计营收约4-5亿元,同比减少约28%-11%;预计实现归母净利润约1.15-1.67亿元,同比增长28%至85%,扣非后同比减少0.38亿元。
IPO募资缩水近1/3,未来仍存国产CPU市场竞争风险
2021年6月提交招股书时,龙芯中科表示,此次IPO公司计划募资35.12亿元,其中募资总额的35%,用于先进制程芯片研发及产业化;三成(30%)用于高性能通用图形处理器芯片及系统研发两大项目的建设投入;剩下则是补充流动资金。
但根据发行价60.06元/股计算,预期募集资金为24.62亿元,较招股书中的募资计划少将近10亿元。同时,以发行价计算,总市值达到240亿元。不管是发行价,还是募资、市值都低于市场预期。
关于公司此次发行定价考量及募资预期差距,胡伟武在网上首发路演时表示,目前A股市场已上市企业没有完全与公司可比的企业,公司的定价综合考虑了当前市场情况和公司未来一段时间的资金需求。
此次龙芯中科上市发行参与战略配售的对象中,除了两份员工资管计划以及参与跟投的保荐公司,还有通富微电、国电南瑞、科德数控三家与龙芯中科业务具有战略合作关系或长期合作意愿的产业界企业(各出资3000万元)、国家大基金二期(出资2亿元)、中网投基金(出资1.206亿元)、国家产业投资基金(出资1.005亿元)等“国家队”基金参与首发战略配售。
结果来看,大基金二期此次获配143.5万股,占此次发行数量的3.50%;中网投、产业投资基金分别获配54.67万股、27.33万股;三家产业界战略投资者各获配20.5万股。
公告显示,龙芯中科此次发行初始战略配售数量为300万股,占发行总规模的15%;最终战略配售数量为83.51万股,占初始战略配售数量的27.84%。其间差额216.49万股将回拨至网下发行。
对于龙芯中科未来的定位,有媒体认为,目前来看,大量中国软件企业在用龙芯中科的编程框架和语言来写代码,这个概率还很小,而凭借自主指令集架构的成本优势,在信创市场逐渐蚕食采用X86和ARM指令集架构的国产芯片市场份额,机会很大。
但问题是,未来随着RISC-V、ARM和其他指令集架构发展迅速下,龙芯中科可能会陷入其他国产CPU、信创市场的缠斗之中,恐怕是公司最大的风险。
IPO路演接受钛媒体App提问时,胡伟武回答称,在全球计算机领域,CPU商用市场基本被Intel(市场份额常年保持80%)、AMD两家占据。经过长期积累,龙芯中科基本完成技术“补课”,通用处理器性能已经逼近商用领域市场主流产品水平,操作系统已经趋于成熟稳定,将在进一步迭代优化后,走向商用领域开放市场。
他强调,作为最早研制的通用处理器的公司,龙芯中科已拥有一系列自主专利和知识产权,技术优势突出,产品竞争力较强。与国产CPU企业相比,在工控系统自主化市场和信息系统自主化市场,龙芯中科均处于市场前列。
(本文首发钛媒体App,作者|林志佳)
相关问答
51单片机写芯片超时如何解决?
当51单片机在访问外部芯片时出现超时,可以采取以下几种方式来解决:1.增加超时时间,可以通过调整单片机的时钟频率或采用硬件定时器的方式来实现;2.优化程序逻...
电脑横机控制箱通讯超时怎么办?
电脑横机显示数据发送超时超时和3个ACK都会启动后退。没收到和超时是一个概念。总之没有在规定时间收到消息。芯片发送数据超时。排除方法:1.检查机头CAN总...
电脑横机显示数据发送超时哪里故障?
发送数据超时可能有多种原因,例如网络连接不稳定、目标服务器故障、数据包丢失等。具体原因需要进行详细的诊断和排查才能确定。建议先检查网络连接是否正常,...
长沙市图书馆借书怎么延期?图书逾期费用是多少?-红网问答
续借须知1、读者凭本人读者证(在有效期内,且无欠费记录)可通过以下多种方式办理续借:①关注微信公众号长沙图书馆(cs-lib),点击“微服务大厅”,绑...
小米wifi放大器pro总是提示链接超时,怎么回?
如果总是显示连接超时两种可能性,第1种可能性是你的信号放大器离你的信号源距离比较远,中间有信号的屏蔽,导致它无法连接,这个时候需要你将信号放大器的位置...
佳能e478原装墨盒有计数芯片吗?
据了解,佳能e478原装墨盒都配备了计数芯片。这个芯片会记录墨盒的使用量,当墨盒墨水即将耗尽时,计数芯片会发出警报,提醒用户及时更换墨盒。计数芯片还能保...
江阴银行显示未完成个人资料啥意思-汇财吧专业问答
[回答]如果接收超时,接受通讯失败主要是由于POS机的通讯不畅造成的,如果的pos机提示:”前次批上送未完成继续上送,请按键“的意思就是上次的结算操作失败,...
以太网接口LED显示屏控制卡发送超时是为什么?-ZOL问答
你可以看看是485的芯片接到网口了,还是232的模块接到网口了,另外还可以看看另外一头接的是电脑串口还是一个232转485的转换器。这种控制卡应该是窗口屏上的吧...
中国银行芯片卡在邮政提款机取钱只出了凭单没来短信...-汇...
[回答]那可能邮政的ATM机是读取芯片卡的你这属于跨行取钱,其实钱已经扣了,只不过他短信,没有像你之前在中国银行取钱那么快发给你您无需担心,只要您到农...
为何登录qq登不上去?服务器超时错误码0×000001-ZOL问答
服务器超时错误码0×000001举报服务器3人讨论7783次围观关注问题写回答讨...高通加快转型之路,重回服务器芯片市场胜算有多大?1.4万浏览9回答扩展阅读...