上一篇博客讲了一下SoC设计,感觉没有怎么讲过瘾。这次准备拉开架势,好好讲一下SoC设计,准备把几个核心问题谈清楚。
要想讲清楚SoC,就需要找一个好的“教材”或者叫参考。但是很遗憾,目前还没有一本真正把SoC能讲得很清楚的教材。我读论文多年,看过SoC相关的论文大概也有个几百篇吧。但是一般的论文要么过于复杂,要么过于抽象。在读了这么多论文里面,为由一篇论文我觉得最适合来讲SoC。这就是由复旦大学曾晓洋教授课题组发表于2012年ASP-DAC上的““A 60mW Baseband SoCfor CMMB Receiver”这篇论文(项目直接指导人应为陈赟副教授) 。这篇论文里面的一个配图,非常直观的讲清楚的SoC的基本结构和设计方法。而且这论文还是面向CMMB(曾经中国力推的移动数字电视的协议)接收器的,在这个论文中还体现了一些计算机网络协议如何实现的思想。
曾教授是我夫人的博士导师,也是我走上SoC设计领域研究的领路人之一。在这些年曾教授给予了我不少帮助和指导。所以要讲这个论文前,我还是需要好好酝酿一下,以免讲得不对或者讲得不好。
所以各位可以先自行搜索一下这个论文,并提前预习做好准备。
分割线——————————————————————————————
首先声明,本文所用的图片来自于A 60mW Baseband SoCfor CMMB Receiver”这篇论文,作者为Chuan Wu, JialinCao, Dan Bao, Yun Chen(陈赟副教授), XiaoyangZeng(曾晓洋教授),作者单位为复旦大学专用集成电路国家重点实验室。 图片的版权属于原作者,如有技术合作需求请直接与原作者联系。
开始上图!
大家从这个图可以很清晰的看出来,这张图是分为三个部分的。Analog部分是模拟/数模混合电路,包括两路10bit的ADC,和产生时钟信号的PLL。两路ADC的作用是实现了IQ调制的IQ两路信号从数字到模拟的转化,关于IQ调制的介绍可以看我这篇博客:
http://blog.chinaaet.com/molf/p/29748
第二个部分是Baseband Processor,基带处理器。其实严格意义说这不是一个处理器,只是一个实现基带信号处理的硬件IP,从左到右依次为混频、符号同步、信道估计、均衡、解映射、信道解码等功能。学过通信原理的朋友应该清楚,这就是一个数字接收机所需要做的基本处理。
第三个部分是32-bit RISC Processor for MAC Layer。这很明显是一个以32bit-RISC CPU为核心的嵌入式微处理器,当然也可以说是一个简单的SoC。
这样就讲完了,好像“平平无奇”。所以当然是不会这样就完了啊。接下来我们就从SoC和计算机网络两个视角重新来看一下这个图。
从SoC的视角看,首先注意这个地方:
这被称为叫Share SRAM,翻译过来就是共享SRAM。这个共享是由谁和谁共享呢?是由Baseband IP和RISC处理器共享。所以这SRAM可以认为是一个双口RAM(具体实现的时候不一定真用双口RAM实现)。一头是Baseband把已经经过各种信号处理、信道解码后恢复出来的数据写进去。另外一头是CPU通过片上的总线可以把这些数据读出来再做下一步的处理。
我们在来看一下RISC处理器这部分。
从CPU的角度上看过去,这个Share SRAM和其它普通的片上SRAM一样,没有什么不同。都是占据一定的地址空间,又都是可以通过总对其进行读写。但这个Share SRAM中的数据却是有特定含义和结构的。因为这是面向CMMB标准的接收机,经过了一系列通信信号处理最终得到的应该是符合CMMB标准的数据帧。这些数据帧必然是由帧头帧尾控制字以及负载数据构成。而CPU的作用就是在指令的驱动下,对于这些接收到的数据帧加以解析,并按照解析出的结果控制下一步的行动。
最终完全被解析出来的数据,将通过SDIO和SPI被传送到外部的视频解码器中。视频解码器将数据解码、还原成图像信号,然后在显示设备上把解析完的图像信号播放出来。完成了按CMMB协议接受信号的全过程。
以上呢,是从SoC的视角来看整个SoC动作的全过程。
但是仅从SoC的角度看,只能粗略的把整个SoC的运行过程讲一遍。要想从如何才能设计出一个SoC的芯片来看,光这样理解是远远不够的。我们接下来还要从计算机网络协议的角度看问题。
从计算机网络的角度应该怎么看呢?我们先回头来看一下这个SoC是什么功能。这个SoC的功能可以由下面这个图来简单描述一下:
简单的说,这个SoC芯片就是把射频接收芯片收到的CMMB协议格式的模拟信号经过一系列的处理后,转换成一SDIO协议的格式发送给图像解码芯片。这个过程本质上隐含了一个协议转换的功能。
如何实现协议转换?这就要扯到计算机网络、OSI七层模型什么的了。
还是先上图。
OSI七层模型,相信学过点计算机网络的同学都应该明白。当年我作为一个通信工程专业的毕业生,是把这七层模型倒背如流的(当然,正着背也可以背下来)。
但是倒背如流又如何?还是不理解里面真正的含义。到底什么叫XX层,为什么需要分层,这一层到底是硬件还是软件。都是搞不清楚的。
其实计算机网络中,最核心的两个概念都和分层有关。一个叫对等,一个叫服务。对等的含义在于可以把通信过程抽象成为对等实体之间的交互操作。而交互操作是要依赖于更底层的支持的,底层提供的这些支持就被叫做服务。
底层为上层提供的服务需要通过某种方式加以使用,这个就叫做“服务访问点”
换成示意图就应该是这样:
比如传输层在设计的时候,考虑的是如何和通信的另一方的传输层之间的交互操作。典型的在传输层实现的什么流量控制,服务质量之类的。都是两个传输层之间的协调操作。
而传输层要实现这些操作的过程,必然需要下层提供支持。最起码要完成包正常的送达和接受,所以这就需要服务。并且通过合理的方式使用这些服务,这就是服务访问点。
那么在这个SoC案例中,分层、服务、以及服务访问点又体现在哪里呢?
让我们再回到这张图:
从SoC的角度来看,这是总线和IP核之间的接口,是CPU通过总线读取IP核处理后数据的通道。
而从计算机网络的角度来看,这里就是服务访问点。是物理层为数据链路层提供服务的访问点。以软件形式存在的数据链路层,通过对SRAM的读写来使用物理层的服务,同时也通过这个SRAM对物理层实施了控制。至于实施了哪些控制,要细讲起来很多。大概提一下就是可以通过控制收发状态,实现对无线信道占用的控制,也就是媒介访问控制(MAC)。
这是硬件的服务访问点,对于软件来说就更简单了。直接抽象为一个函数即可。参数传进去,结果读出来。正是由于平常很多实用协议栈多在软件层面,所以导致很多人以为协议就是一种特殊的软件。也就有了以前某个学校的老教授(忘了哪个学校了,要是记住了也不方便说)问我重新下载一下软件可不可以让Zigbee变成蓝牙,大家都是在2.4G频段工作嘛……
而最后把解析完了的数据,再通过SDIO送出去的过程,可以用这个图意思一下。
把按协议栈1打包好的信号层层解析,最后还原成内部数据。再把这个数据按另外一种协议的格式重新组合并转换格式,通过接口再传出去。这就实现了某种形式的协议转换。在这SoC的例子里面就是CMMB转到SDIO上传出去
当然,也可以不还原层原始数据,而是从中间切一半转换。那么就要求在解码芯片上也实现CMMB协议栈的一部分。这种设计不能说不可以,但也确实比较怪异。
今天差不多就聊到这。SoC设计是一个很大的话题,希望通过今天的讲解让大家对SoC设计有一个较为全面的认识。最后再多说几句的是从今天的例子大家可以看出,SoC设计是一个涵盖面非常广的事情。不是说懂得写几行Verilog就可以的。这是需要从应用、系统架构、IP与接口设计、算法实现等一系列的工作的。对于想从事这个方向研究和工作的同学,自己心里要有点数,做好准备。同时也要掂量掂量自己是不是真的愿意在这样的一个方向上付出自己的青春。
接下来我将填坑看电影说技术之“气态电路”,因为现在优酷上面“密战”已经可以免费看了。
大家可以先看电影预习一下:
http://v.youku.com/v_show/id_XMzIyNzU5NTk1Mg==.html?spm=a2hww.20027244.m_250012.5~5!2~5~5~A