老莫

一图读懂SoC设计与计算机网络

1
阅读(5682) 评论(10)

上一篇博客讲了一下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(曾晓洋教授),作者单位为复旦大学专用集成电路国家重点实验室。 图片的版权属于原作者,如有技术合作需求请直接与原作者联系。

开始上图!

image.png

大家从这个图可以很清晰的看出来,这张图是分为三个部分的。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的视角看,首先注意这个地方:

image.png

这被称为叫Share SRAM,翻译过来就是共享SRAM。这个共享是由谁和谁共享呢?是由Baseband IP和RISC处理器共享。所以这SRAM可以认为是一个双口RAM(具体实现的时候不一定真用双口RAM实现)。一头是Baseband把已经经过各种信号处理、信道解码后恢复出来的数据写进去。另外一头是CPU通过片上的总线可以把这些数据读出来再做下一步的处理。

我们在来看一下RISC处理器这部分。

image.png


从CPU的角度上看过去,这个Share SRAM和其它普通的片上SRAM一样,没有什么不同。都是占据一定的地址空间,又都是可以通过总对其进行读写。但这个Share SRAM中的数据却是有特定含义和结构的。因为这是面向CMMB标准的接收机,经过了一系列通信信号处理最终得到的应该是符合CMMB标准的数据帧。这些数据帧必然是由帧头帧尾控制字以及负载数据构成。而CPU的作用就是在指令的驱动下,对于这些接收到的数据帧加以解析,并按照解析出的结果控制下一步的行动。

image.png

最终完全被解析出来的数据,将通过SDIO和SPI被传送到外部的视频解码器中。视频解码器将数据解码、还原成图像信号,然后在显示设备上把解析完的图像信号播放出来。完成了按CMMB协议接受信号的全过程。

以上呢,是从SoC的视角来看整个SoC动作的全过程。

但是仅从SoC的角度看,只能粗略的把整个SoC的运行过程讲一遍。要想从如何才能设计出一个SoC的芯片来看,光这样理解是远远不够的。我们接下来还要从计算机网络协议的角度看问题。

从计算机网络的角度应该怎么看呢?我们先回头来看一下这个SoC是什么功能。这个SoC的功能可以由下面这个图来简单描述一下:

image.png

简单的说,这个SoC芯片就是把射频接收芯片收到的CMMB协议格式的模拟信号经过一系列的处理后,转换成一SDIO协议的格式发送给图像解码芯片。这个过程本质上隐含了一个协议转换的功能。

如何实现协议转换?这就要扯到计算机网络、OSI七层模型什么的了。

还是先上图。

image.png

OSI七层模型,相信学过点计算机网络的同学都应该明白。当年我作为一个通信工程专业的毕业生,是把这七层模型倒背如流的(当然,正着背也可以背下来)。

但是倒背如流又如何?还是不理解里面真正的含义。到底什么叫XX层,为什么需要分层,这一层到底是硬件还是软件。都是搞不清楚的。

其实计算机网络中,最核心的两个概念都和分层有关。一个叫对等,一个叫服务。对等的含义在于可以把通信过程抽象成为对等实体之间的交互操作。而交互操作是要依赖于更底层的支持的,底层提供的这些支持就被叫做服务。

底层为上层提供的服务需要通过某种方式加以使用,这个就叫做“服务访问点”

换成示意图就应该是这样:

image.png

比如传输层在设计的时候,考虑的是如何和通信的另一方的传输层之间的交互操作。典型的在传输层实现的什么流量控制,服务质量之类的。都是两个传输层之间的协调操作。

而传输层要实现这些操作的过程,必然需要下层提供支持。最起码要完成包正常的送达和接受,所以这就需要服务。并且通过合理的方式使用这些服务,这就是服务访问点。

那么在这个SoC案例中,分层、服务、以及服务访问点又体现在哪里呢?

让我们再回到这张图:

image.png

从SoC的角度来看,这是总线和IP核之间的接口,是CPU通过总线读取IP核处理后数据的通道。

而从计算机网络的角度来看,这里就是服务访问点。是物理层为数据链路层提供服务的访问点。以软件形式存在的数据链路层,通过对SRAM的读写来使用物理层的服务,同时也通过这个SRAM对物理层实施了控制。至于实施了哪些控制,要细讲起来很多。大概提一下就是可以通过控制收发状态,实现对无线信道占用的控制,也就是媒介访问控制(MAC)。

这是硬件的服务访问点,对于软件来说就更简单了。直接抽象为一个函数即可。参数传进去,结果读出来。正是由于平常很多实用协议栈多在软件层面,所以导致很多人以为协议就是一种特殊的软件。也就有了以前某个学校的老教授(忘了哪个学校了,要是记住了也不方便说)问我重新下载一下软件可不可以让Zigbee变成蓝牙,大家都是在2.4G频段工作嘛……

而最后把解析完了的数据,再通过SDIO送出去的过程,可以用这个图意思一下。

image.png

把按协议栈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


  1. 高屋建瓴的分析,跳出具体的而技术细节,点出SOC的全貌。

    “SoC设计是一个涵盖面非常广的事情。不是说懂得写几行Verilog就可以的。这是需要从应用、系统架构、IP与接口设计、算法实现等一系列的工作的。”

  2. @PennXu   
    @老莫   
    @PennXu   
    @老莫   
    @PennXu   

    莫老师,想请教一下,一个没有学习过通信相关知识的人,如何着手从零开始学习相关知识,达到能看懂协议中的MAC与PHY的内容,并且能用具体电路来实践。

    这两部分涉及的内容很多,而且方向不一样。

    PHY的内容一般是在通信原理里面讲,有大量信号处理、电路设计相关的知识需要学习。可以看一本叫《数字传输工程》的书:https://www.amazon.cn/dp/B001KFR0Z2/ref=sr_1_1?ie=UTF8&qid=1523426873&sr=8-1&keywords=%E6%95%B0%E5%AD%97%E4%BC%A0%E8%BE%93%E5%B7%A5%E7%A8%8B

    上面主要讲无线通信的PHY部分,如果是有线通信那又是另外一套晚饭了。

    MAC的部分呢主要是接入访问控制,有很多计算机网络和计算机接口技术方面的知识需要学习。具体的就需要看一些计算机网络方面的书,这些书很多,我就不详细列举了。

    如果允许的话,PHY+MAC应该尽量的选择专用芯片来实现。现在的协议非常的复杂,在分工越来越细的情况下,把时间精力投到这个上面是不值得的。如果是非做不可呢,我只能说祝你好运……

    不好意思莫老师,之前的情况说明很含糊,我应该说明一下具体情况,是这样的,现在的任务是一款通信芯片,但是我对通信接触很少,想做的相关工作是数字IC,知道这款芯片里面分为PHY和MAC两个部分,目前就自己的学习计划比较迷茫,也在网上看了很多资料,但是发现所包含的内容很多,在有限的时间内是无法完成学习任务的,所以想请教一下莫老师。目前我的学习计划还是从soc入手,学习计算机的相关知识(打算选莫老师推荐的数字IC接口类相关书籍),同时看一看无线通信的知识(知乎推荐的wireless communication,Andrea Goldsmith著),不知道这样的路子对不对,或者有不完善的地方,还望莫老师指导一下。

    如果是做一个包含了PHY和MAC的芯片,理论上应该至少两人分工完成(高校里面做项目,仅仅做到FPGA原型验证环节,公司里面这个数量要翻几倍)。

    这整个芯片本就安排你一个人做?应该质疑这工作安排是否合理。

    无线通信如果掰扯理论的话非常的多,我给你推荐的那本书是我读过工程性最强的一本,真正从工程事件的角度讲了基带处理怎么做。要从通信理论入手去学习怎么做,那肯定会迷失在公式的迷宫之中。

    是分开的不同组负责的,现阶段还是初步接触,跟着学习,下一版才可能加入工作,老板让选,但是鉴于都不了解,就想两部分都熟悉一下。谢谢莫老师的解答,得到了很多东西,这对于我自己而言很重要,十分感谢。

    不客气。如果是完全没有基础的话,我建议选MAC。相对而言要好理解一点,没有那么多数学需要去学习和理解。

  3. @Felix   

    是这本书吗?

    http://read.pudn.com/downloads229/doc/comm/1076833/wiley-digital-transmission-engineering-john-b-anderson-2005-568s[1].pdf

    是的。

  4. 是这本书吗?

    http://read.pudn.com/downloads229/doc/comm/1076833/wiley-digital-transmission-engineering-john-b-anderson-2005-568s[1].pdf

  5. @老莫   
    @PennXu   
    @老莫   
    @PennXu   

    莫老师,想请教一下,一个没有学习过通信相关知识的人,如何着手从零开始学习相关知识,达到能看懂协议中的MAC与PHY的内容,并且能用具体电路来实践。

    这两部分涉及的内容很多,而且方向不一样。

    PHY的内容一般是在通信原理里面讲,有大量信号处理、电路设计相关的知识需要学习。可以看一本叫《数字传输工程》的书:https://www.amazon.cn/dp/B001KFR0Z2/ref=sr_1_1?ie=UTF8&qid=1523426873&sr=8-1&keywords=%E6%95%B0%E5%AD%97%E4%BC%A0%E8%BE%93%E5%B7%A5%E7%A8%8B

    上面主要讲无线通信的PHY部分,如果是有线通信那又是另外一套晚饭了。

    MAC的部分呢主要是接入访问控制,有很多计算机网络和计算机接口技术方面的知识需要学习。具体的就需要看一些计算机网络方面的书,这些书很多,我就不详细列举了。

    如果允许的话,PHY+MAC应该尽量的选择专用芯片来实现。现在的协议非常的复杂,在分工越来越细的情况下,把时间精力投到这个上面是不值得的。如果是非做不可呢,我只能说祝你好运……

    不好意思莫老师,之前的情况说明很含糊,我应该说明一下具体情况,是这样的,现在的任务是一款通信芯片,但是我对通信接触很少,想做的相关工作是数字IC,知道这款芯片里面分为PHY和MAC两个部分,目前就自己的学习计划比较迷茫,也在网上看了很多资料,但是发现所包含的内容很多,在有限的时间内是无法完成学习任务的,所以想请教一下莫老师。目前我的学习计划还是从soc入手,学习计算机的相关知识(打算选莫老师推荐的数字IC接口类相关书籍),同时看一看无线通信的知识(知乎推荐的wireless communication,Andrea Goldsmith著),不知道这样的路子对不对,或者有不完善的地方,还望莫老师指导一下。

    如果是做一个包含了PHY和MAC的芯片,理论上应该至少两人分工完成(高校里面做项目,仅仅做到FPGA原型验证环节,公司里面这个数量要翻几倍)。

    这整个芯片本就安排你一个人做?应该质疑这工作安排是否合理。

    无线通信如果掰扯理论的话非常的多,我给你推荐的那本书是我读过工程性最强的一本,真正从工程事件的角度讲了基带处理怎么做。要从通信理论入手去学习怎么做,那肯定会迷失在公式的迷宫之中。

    是分开的不同组负责的,现阶段还是初步接触,跟着学习,下一版才可能加入工作,老板让选,但是鉴于都不了解,就想两部分都熟悉一下。谢谢莫老师的解答,得到了很多东西,这对于我自己而言很重要,十分感谢。

  6. @PennXu   
    @老莫   
    @PennXu   

    莫老师,想请教一下,一个没有学习过通信相关知识的人,如何着手从零开始学习相关知识,达到能看懂协议中的MAC与PHY的内容,并且能用具体电路来实践。

    这两部分涉及的内容很多,而且方向不一样。

    PHY的内容一般是在通信原理里面讲,有大量信号处理、电路设计相关的知识需要学习。可以看一本叫《数字传输工程》的书:https://www.amazon.cn/dp/B001KFR0Z2/ref=sr_1_1?ie=UTF8&qid=1523426873&sr=8-1&keywords=%E6%95%B0%E5%AD%97%E4%BC%A0%E8%BE%93%E5%B7%A5%E7%A8%8B

    上面主要讲无线通信的PHY部分,如果是有线通信那又是另外一套晚饭了。

    MAC的部分呢主要是接入访问控制,有很多计算机网络和计算机接口技术方面的知识需要学习。具体的就需要看一些计算机网络方面的书,这些书很多,我就不详细列举了。

    如果允许的话,PHY+MAC应该尽量的选择专用芯片来实现。现在的协议非常的复杂,在分工越来越细的情况下,把时间精力投到这个上面是不值得的。如果是非做不可呢,我只能说祝你好运……

    不好意思莫老师,之前的情况说明很含糊,我应该说明一下具体情况,是这样的,现在的任务是一款通信芯片,但是我对通信接触很少,想做的相关工作是数字IC,知道这款芯片里面分为PHY和MAC两个部分,目前就自己的学习计划比较迷茫,也在网上看了很多资料,但是发现所包含的内容很多,在有限的时间内是无法完成学习任务的,所以想请教一下莫老师。目前我的学习计划还是从soc入手,学习计算机的相关知识(打算选莫老师推荐的数字IC接口类相关书籍),同时看一看无线通信的知识(知乎推荐的wireless communication,Andrea Goldsmith著),不知道这样的路子对不对,或者有不完善的地方,还望莫老师指导一下。

    如果是做一个包含了PHY和MAC的芯片,理论上应该至少两人分工完成(高校里面做项目,仅仅做到FPGA原型验证环节,公司里面这个数量要翻几倍)。

    这整个芯片本就安排你一个人做?应该质疑这工作安排是否合理。

    无线通信如果掰扯理论的话非常的多,我给你推荐的那本书是我读过工程性最强的一本,真正从工程事件的角度讲了基带处理怎么做。要从通信理论入手去学习怎么做,那肯定会迷失在公式的迷宫之中。

  7. @老莫   
    @PennXu   

    莫老师,想请教一下,一个没有学习过通信相关知识的人,如何着手从零开始学习相关知识,达到能看懂协议中的MAC与PHY的内容,并且能用具体电路来实践。

    这两部分涉及的内容很多,而且方向不一样。

    PHY的内容一般是在通信原理里面讲,有大量信号处理、电路设计相关的知识需要学习。可以看一本叫《数字传输工程》的书:https://www.amazon.cn/dp/B001KFR0Z2/ref=sr_1_1?ie=UTF8&qid=1523426873&sr=8-1&keywords=%E6%95%B0%E5%AD%97%E4%BC%A0%E8%BE%93%E5%B7%A5%E7%A8%8B

    上面主要讲无线通信的PHY部分,如果是有线通信那又是另外一套晚饭了。

    MAC的部分呢主要是接入访问控制,有很多计算机网络和计算机接口技术方面的知识需要学习。具体的就需要看一些计算机网络方面的书,这些书很多,我就不详细列举了。

    如果允许的话,PHY+MAC应该尽量的选择专用芯片来实现。现在的协议非常的复杂,在分工越来越细的情况下,把时间精力投到这个上面是不值得的。如果是非做不可呢,我只能说祝你好运……

    不好意思莫老师,之前的情况说明很含糊,我应该说明一下具体情况,是这样的,现在的任务是一款通信芯片,但是我对通信接触很少,想做的相关工作是数字IC,知道这款芯片里面分为PHY和MAC两个部分,目前就自己的学习计划比较迷茫,也在网上看了很多资料,但是发现所包含的内容很多,在有限的时间内是无法完成学习任务的,所以想请教一下莫老师。目前我的学习计划还是从soc入手,学习计算机的相关知识(打算选莫老师推荐的数字IC接口类相关书籍),同时看一看无线通信的知识(知乎推荐的wireless communication,Andrea Goldsmith著),不知道这样的路子对不对,或者有不完善的地方,还望莫老师指导一下。

  8. @老莫   
    @PennXu   

    莫老师,想请教一下,一个没有学习过通信相关知识的人,如何着手从零开始学习相关知识,达到能看懂协议中的MAC与PHY的内容,并且能用具体电路来实践。

    这两部分涉及的内容很多,而且方向不一样。

    PHY的内容一般是在通信原理里面讲,有大量信号处理、电路设计相关的知识需要学习。可以看一本叫《数字传输工程》的书:https://www.amazon.cn/dp/B001KFR0Z2/ref=sr_1_1?ie=UTF8&qid=1523426873&sr=8-1&keywords=%E6%95%B0%E5%AD%97%E4%BC%A0%E8%BE%93%E5%B7%A5%E7%A8%8B

    上面主要讲无线通信的PHY部分,如果是有线通信那又是另外一套晚饭了。

    MAC的部分呢主要是接入访问控制,有很多计算机网络和计算机接口技术方面的知识需要学习。具体的就需要看一些计算机网络方面的书,这些书很多,我就不详细列举了。

    如果允许的话,PHY+MAC应该尽量的选择专用芯片来实现。现在的协议非常的复杂,在分工越来越细的情况下,把时间精力投到这个上面是不值得的。如果是非做不可呢,我只能说祝你好运……

    莫老师,我看了您的很多博客,我个人的学习兴趣是通信中的数字IC,您说到数字IC分为接口类和算法类,如果我想侧重学习MAC层,是不是就应该学习接口类的知识(接口类的书籍莫老师您也有推荐)。

  9. @PennXu   

    莫老师,想请教一下,一个没有学习过通信相关知识的人,如何着手从零开始学习相关知识,达到能看懂协议中的MAC与PHY的内容,并且能用具体电路来实践。

    这两部分涉及的内容很多,而且方向不一样。

    PHY的内容一般是在通信原理里面讲,有大量信号处理、电路设计相关的知识需要学习。可以看一本叫《数字传输工程》的书:https://www.amazon.cn/dp/B001KFR0Z2/ref=sr_1_1?ie=UTF8&qid=1523426873&sr=8-1&keywords=%E6%95%B0%E5%AD%97%E4%BC%A0%E8%BE%93%E5%B7%A5%E7%A8%8B

    上面主要讲无线通信的PHY部分,如果是有线通信那又是另外一套晚饭了。

    MAC的部分呢主要是接入访问控制,有很多计算机网络和计算机接口技术方面的知识需要学习。具体的就需要看一些计算机网络方面的书,这些书很多,我就不详细列举了。

    如果允许的话,PHY+MAC应该尽量的选择专用芯片来实现。现在的协议非常的复杂,在分工越来越细的情况下,把时间精力投到这个上面是不值得的。如果是非做不可呢,我只能说祝你好运……

  10. 莫老师,想请教一下,一个没有学习过通信相关知识的人,如何着手从零开始学习相关知识,达到能看懂协议中的MAC与PHY的内容,并且能用具体电路来实践。