关于SoPC的一些感悟ZZ

SoC设计中很重要的一个concept叫做软硬件协同设计,其他的两个重要特点分别是采用深亚微米(DSM)工艺技术,IP核(Intellectual Property Core)复用。一个embedded project,有很多种实现方式。可以买一个评估板,纯软件编程;可以买一个fpga,用逻辑实现;当然,也可以一部分用软件解决,其余的用自定义逻辑实现,也就是常说的软硬件协同设计。

本文转自http://www.networkcoding.net

      到真正自己设计协同设计的时候,问题才会显现出来。到底哪些功能用软件实现?哪些功能用硬件实现?设计的功能怎么复用?多模块怎么协调?软件实现带来了易于改动的灵活,缺点是效率低;硬件则能加速实现,并行触发,但不能灵活配置,或者说如果想要达到软件的方便,就会占用太多的逻辑资源。

      作为第一次接触SoC设计,目标当然不是高性能的omap,重要的是掌握SoC的设计思路。如果从cpu到外围模块都是自己做,需要的积累也非同小可。如果使用别人现成的open core,8051倒是常见的cpu部件,或者open risc。这些模块都很好,但设计起来有问题,一个小团队是不可能面面俱道的。如果拿来一个open risc,加上自定义逻辑,加上一些ip core,那绝对不是SoC! 有人会说怎么不是?用了ip core,自定义逻辑能够复用……其实这只能叫做个人的设计,拍脑瓜的想法。做一个假设,如果这个项目里面总共开发了很多个自定义逻辑,那么在下一个项目里面这些逻辑要不要改动就能被使用?SoC可不是几个半加器组成的全加器,不是“即插即用”式的门级电路,使用的自定义逻辑和ip core首先应该满足复用的思想。

       最简单的,如果这些模块都是通过总线访问的,那么模块本身就应改满足该总线的标准。举个例子,手头有10个模块,都不符合总线标准,现在有两套总线,那么如果在不同的项目里面使用这10个模块,最少就要做20次改动。另外一种情况是10个模块要么符合总线标准A,要么符合总线标准B,那么只需要开发总线A到B,总线B到A的转换模块就ok了。第二种情况的工作量肯定远远少于第一种情况的。本文转自http://www.networkcoding.net

       写过单片机程序的人对i2c都不会陌生。用到了定时器,用到了中断,用到了I/O…的确是单片机教学的好例子。这里也提到i2c,却是引出软硬件协同设计的一个实例。单片机当然可以用定时器和中断模拟i2c时序。学习单片机编程还行,要是在一个较复杂的设计中还这么做就欠妥了。最大的问题莫过于移植性很差。在8051下面的i2c通讯程序要去mega128、z80、arm7下面使用,完全得靠代码本身是否编写得易于移植。但是如果把i2c通讯模块单独独立出来,比如在系统中使用独立封装的i2c芯片,换一个处理器所要做得改动就少很多了。独立封装的芯片在系统级的稳定性实际受外界因素干扰是很大的。所以到了SoC级别,直接把i2c芯片作为子模块添加进处理器里面,减少了系统级的电路版连线。把原来的系统级减缩为一块芯片,系统变得更紧凑、稳定性也更高了。本文转自http://www.networkcoding.net

?

      SoPC是Altera提出的一个新词。s,o,c,三个字母和SoC的拼写、意思完全一样。只是加个p–programmable。连起来就是片上可编程系统。SoC其实是一个基于ip设计方法,它的最终产物是流片,一旦流片完成,逻辑就不可更改。SoPC也是基于ip的,但最终是在FPGA上跑,逻辑可更改。?

       当初Altera和Xilinx都认为如果把ARM固化在FPGA里面,既能够让做应用的公司把已有项目顺利的转形到FPGA上,又能让用户利用FPGA的优点扩充自己需要的逻辑。但结果并不好,1)FPGA本身成本就高,加上ARM的成本,价钱提高太多 2)ARM已经被固定,用户能加的无非是周围的接口控制,或者用来做自己的逻辑胶合。这么做出来的cpu相比起现在大公司提供的一系列嵌入式处理器,稳定性得不到保障,再而自己加入的部分也早就有公司开发好了,想要什么接口的ARM处理器都有。所以Altera和Xilinx嵌入ARM的产品几乎不盈利,很快就处于几乎停滞开发的阶段。

       但是Altera发现如果让用户能够很快的从基础搭建起一个cpu而不用关心设计cpu的关键问题,比如总线译码,流水线设计, 而不必担负比如arm之类处理器的费用,此类的软核处理器就有很好的市场。所以推出的一个软核处理器nios就成为现在应用前景很好东西。我个人认为nios成功得益于Altera的市场定位。原先是想用FPGA去抢夺现有ARM应用的市场,现在是想用FPGA把原先缺少cpu支持的部分加入cpu控制。

       nios的定位很好,就专注在一块上。通用的领域,目前os大厂不支持,现有公司不会换ARM方案变成它。它就专注在一些通用的cpu不可能满足要求的市场上。首先能承受FPGA的价格,其次原来的设计里面已经用到了FPGA做一些应用,再来原来的设计需要一个cpu做控制。在这种FPGA已经在原先的设计里面占一半份额的设计中,nios得到了很多成功的应用。本文转自http://www.networkcoding.net

       之所以应用前景好,是因为nios有一个功能很强,就是自定义模块和自定义指令。比如心电处理、音视频应用,如果要用大规模信号处理算法,ARM不快,DSP接口太少,用nios最好,或者一个ARM加一个nios。我周围有人在做mpeg解码,速度很慢的,一卡一卡的,如果要做编码,做实时编码,只可能用FPGA做硬件算法。比如用vhdl写了一个自定义mpeg编码模块,加到nios里面就能用,几乎不用考虑总线、流水线就能和原来得cpu整合起来。自定义指令更好用。比如使用的nios没有浮点乘法,结果软件乘法太慢,怎么办?去网上找一个浮点乘法的模块,加入变成nios的一个ALU旁路,nios马上多一条浮点乘法指令,调用就行了。

       比如说,你的手机的处理器90%都是使用ARM芯片的,但却可能是不同芯片设计公司生产的。也许是三星公司做的ARM芯片,也许是ATMEL公司做的ARM芯片,也许是其他别的公司做的ARM芯片。这些公司是拿了ARM公司的授权,然后在ARM内核周围加上了自己的外围模块,然后流片,最后交付不同的手机生产公司。所以虽然都叫做ARM芯片,其实是不同芯片设计公司的产品,只是因为它们的内核都是ARM内核,所以通称ARM芯片。

      这种芯片的设计方法叫做SOC(片上系统,或者系统芯片)。在每个芯片交付手机设计厂的时候,这个芯片的内部结构是已经固定的,就是平时见到的一个小硅片。手机设计厂只能拿来用,不能更改芯片的内部结构,不能改变芯片的性能。
这样做有好处,流片以后的芯片成本很低,而且每个芯片设计公司能够保证芯片稳定。当手机设计厂拿到芯片的时候,只要看懂芯片手册,然后开始做自己的产品就行了。不用去考虑流片的成本、流片失败的可能性(不是没个设计都能流片成功的,只有大公司才能担负起流片失败那些白投的银子)。??本文转自http://www.networkcoding.net

       可惜,嵌入式领域和桌面机领域最大的不同就是可定制性要求很强,不像pc机,intel或者amd只要推出面向高端&面向低端,以及不同的主频的处理器就基本能满足市场的需求。每个人买cpu的时候区别的也就是主频多少、是P4还是赛扬(或者是速龙还是毒龙)。嵌入式处理器就要求有不同的外围接口、处理器速度、片上RAM多少、片上ROM多少、功耗、有没有硬件乘除法器等等。这样一来,一个排列组合之后,同一个系列的处理器下面有十几款甚至几十款几百款处理器,这些繁多的处理器极大的满足了不同厂商针对不同应用背景的产品需求。

      对于芯片设计厂来说,正是使用了SOC设计方法,才可能在很短的时间内推出一个大系列的芯片。 因为SOC的设计思想就是搭积木: 把处理器、外围接口、存储器等等都做成模块,不同模块之间的搭配组成了不同的芯片。

    但是,随着嵌入式应用越来越广泛,电子系统规模越来越大,出现了两个问题。

1)即便是这么多芯片制造商提供这么多系列的处理器,仍然不能满足所有的应用背景。举个例子,有人想做手机,觉得这个芯片功耗低,却不带usb控制器;那个芯片带usb控制器,片上的RAM又不够大。。。。所有,就需要一种为做产品的设计者提供更专一芯片的设计方法。这种设计方法完全能够为应用背景提供唯一的芯片,满足各种要求。具体来说,就是能够达到“告诉我你需要包含什么样内容的芯片,我就能给你”的目标。

2)电子系统规模越来越大,一个系统会包含比以前多得多的芯片。比如手机,以前一块电路版上只要一个GSM/GPRS模块(用来和GSM网络通信),一个处理器,一个电源芯片,一个存储器,一些外围接口的控制芯片,这样就能构成最简单的手机了。现在的手机呢?又要mp3,又要照相,还要红外、蓝牙。。。。多一个功能,如果在不换原来架构的前提下,就要增加一个芯片。最直观的,现在的手机电路版肯定比以前的复杂,包含的芯片一定比以前的多。在电路版上面增加芯片数量,就意味着功耗增加、设计复杂度增加、出错率增加、稳定性降低。最好的解决办法就是把这些新增的芯片连同原来的芯片,再集成成为一个新的芯片。本文转自http://www.networkcoding.net

    刚才说了,流片的缺点是开发周期长、一次性投入高,开发技术难度高(涉及半导体物理)。。。

    既要解决这两个问题,又要不增加成本,缩短开发周期。FPGA制造商提出了基于FPGA的SOC设计方法--SOPC。那个P就是可编程的意思。就是说,SOPC既可以给你针对你的应用背景,你自己来设计芯片,又可以减低你流片的成本、技术难度、缩短设计周期。
不过,还得明确的是,SoPC不是万能的,它专门为了那些没有芯片能够满足的领域。

     如果你现在要做手机,几乎没有人会用sopc做。 因为芯片设计厂早就认识到手机市场,他们已经专门为手机用SOC设计了芯片,他们担负了流片费用,卖给手机制造商也就几十、几百块一片。从这个角度,SoPC比买现成的芯片贵。

    如果现在你要做的东西很特殊,市面上没有芯片能满足你,或者说即便有芯片能满足你,你用20片芯片搭起来的电路存在很多问题。那么,在这种情况下,为了要一个你自己设计的芯片,你要自己承担流片的费用。相比起来,SoPC就便宜很多了。

    一句话总结,SoPC是针对那些特殊的、专一的、能够承受一定成本的领域的芯片构造技术。

原文地址:https://www.cnblogs.com/fpga/p/1656010.html