针对复杂嵌入式应用的创新处理器实现方法
时间:07-11
来源:
点击:
随着流媒体、宽带网络以及各种高速接口的广泛应用,消费类电子产品开始向三重播放(Triple Play)甚至四重播放(Quab Play)的领域演进。对嵌入式处理器的要求也变得越来越高,一方面要处理大量的人机交互、外设控制等任务,另一方面还要对不同接口的声音、视频、图像等数据进行数字信号处理,与此同时,嵌入式系统还要应对功耗更低,体积更小的挑战。
传统的应对方法是不断研发更宽数据流、更快频率的处理器,数据宽已经由最初的4位、8位、发展到现在的16位、32位,频率也由最初的MHz级到发展到现在的GHz级,相应的存储器容量、速度也在不断增加。但是继续沿着高带宽、高主频的摩尔定律方向发展,工艺上的受限已经初显端倪,更加难以应对低功耗、小体积的需求。众多厂商也意识到,对于新的应用而言,速度已经不再是唯一因素,提升性能才是更好的选择。
同一化多核处理器结构
单芯片的多核解决方案是个好的尝试,也是现在的嵌入式应用的热点之一。InterllaSys公司SEAforth系统芯片是从自已的可扩展嵌入式阵列Scalable Embedded Array (SEA)平台发展而来的,与将通用处理器和若干DSP核嵌入单芯片的方法不同,该平台使用了相同的处理器核,每个核既具有通用处理器的功能,同时内部集成高速乘法器 ,经过妥善设计,就可以把复杂的计算任务分配给各个处理器核共同进行。
工作时,可以简单地指定各个处理器核完成需要执行的不同任务。比如,在三重播放应用中,可以让1个处理器核去管理外接存储器,让8个处理器核负责FFT变换,完成多媒体算法,再用几个处理器核带动应用系统中的各种I/O子系统(见图1)。这样,每个处理器都会专心运行自己的任务,避免了执行不同任务时任务切换之间的开销,单个处理器在执行流媒体解码过程中,也不会出现由于处理器等待别的外设而造成的图像抖动不畅等现象,同时,我们可以根据具体的应用选择具有不同数量内核的处理器,极大地增强了设计和选择的灵活性。目前在这一体系下,已经有40核的处理器解决方案。
本地化RAM/ROM存储器和时钟发生器
当设计中使用了多个处理器时,存储器存取的问题就出来了。大多数多核芯片设计把几个处理器核和一个共用存储器放在一起。这样做简化了设计,因为每一个核只是处理器本身,问题转到多个处理器核如何共同使用一个存储器,以及存储器存取的仲裁,这是一个难题。通常用到某种仲裁网络或者交叉点切换开关,在只有3个到4个处理器核时,这个方法是可行的。但是,在芯片上需要几十个处理器核时,共用存储器的问题变得很复杂,令人望而却步。此外,由于越来越多处理器核需要对存储器进行存取,共用存储器的效率变得越来越低,很快就成为致命的瓶颈,把多核结构在处理方面的优点都淹没了。
SEAforth多核处理器使用了本地化存储器设计,即为每个处理器核设计了自己的RAM/ROM存储器。这有两个好处,一方面避免了存储器仲裁,也不需要交叉切换开关;另一方面可以分配给每个处理器核所需要的存储容量。分析典型算法的源代码,需要的存储器容量有两种,一种是1000字节或者少一些,一种是容量很大,几兆字节,甚至几百兆字节。大多数应用属于前者,后者则在少数应用中需要,实现上也不切实际。所以SEAforth多核处理器为每一个处理器核都用小一些的本地存储器,1000字节的数量级,用于存放程序源代码和数据,ROM中固化每个处理器核的BIOS,再用一个大得多的外接存储器,作为缓冲存储器满足多媒体的需要。
与采用公共外部时钟的方式不同,SEAforth多核处理器为每个核内建一个时钟--一个简单的环形振荡器。它的速度和硅半导体的速度一样快,只有在该处理器核工作时,它的时钟才工作。这种设计方式为下面介绍的核间通讯提供了可能,同时,任一时刻由于只有部分处理器核在工作也大大降低了功耗。SEAforth多核处理器有很低的功耗水平,每个处理器以1GHz的频率运行,而40核的整体功耗为250mW。
高效的处理器核间通讯
SEAforth多核处理器允许计算量很大的算法由几个核协作完成,这时,不同核间需要大量的交换数据,通讯方式的优劣影响整个系统的性能。
完成一项复杂的任务时,传统的做法是由操作系统自行指定参与的核,离的很远的核间通讯需要处理器内有大量的通讯电路,往往设计复杂,效率偏低。在SEAforth多核处理器应用中,由工程师自己指定完成特定任务的处理器核,这需要工程师了解哪些任务需要交换更多的数据,然后指定相邻的核完成这项任务。对于要求大量访问核外存储器的任务,同样可以指定距离最近的核去完成。
SEAforth 多核处理器相邻的核间通讯通过共用寄存器传输,如图2所示。
通过共用寄存器这种方式避免了冲突电路和优先权网络的问题,具体传输过程中,传统的处理方法需要利用读取、检测、写入等状态位信息建立握手协议,耗费的时间多于实际传送数据所用的时间。该处理器由于内建一个电路,可以在一个指令周期内实现启动/停止中的处理器核操作,所以实现了无需握手协议的传输。
假设核A与核B之间传输数据,处理器核A是送出数据的核,想把数据送到共用寄存器去,如果在寄存器中的数据还没读取,处理器核A 就停下来,一直到处理器核B读取了寄存器中的数据。在同一时刻,处理器核A回来执行原来要执行的那条指令,即"送出数据"。于是,从源代码的角度看,处理器核A总是认为寄存器是空着的,在等待数据,没有必要读取和检测状态位。处理器核B做的事与之相似。处理器核B的源代码总是认为寄存器中一直存放着没有读出的数据。当它开始执行指令"读取数据",从寄存器中取出数据时,如果寄存器中没有需要读取的数据,它也停下来。当新的数据在寄存器中出现时,处理器核B便执行"读取数据"指令,这条指令把数据从寄存器中取出来。同样,没有必要读取、检测状态位,没有必要将状态位置位。
在SEAforth多核处理器中,处理器核不仅可以读取和执行本地ROM和RAM中的指令,它还能够读取和执行I/O口和寄存器送来的指令(见图3)。这样,利用上面的传输方式,指令便可以源源不断地送到共用寄存器,并且直接执行,不必把源代码传送给本地存储器。大大加快了执行效率。
传统的应对方法是不断研发更宽数据流、更快频率的处理器,数据宽已经由最初的4位、8位、发展到现在的16位、32位,频率也由最初的MHz级到发展到现在的GHz级,相应的存储器容量、速度也在不断增加。但是继续沿着高带宽、高主频的摩尔定律方向发展,工艺上的受限已经初显端倪,更加难以应对低功耗、小体积的需求。众多厂商也意识到,对于新的应用而言,速度已经不再是唯一因素,提升性能才是更好的选择。
同一化多核处理器结构
单芯片的多核解决方案是个好的尝试,也是现在的嵌入式应用的热点之一。InterllaSys公司SEAforth系统芯片是从自已的可扩展嵌入式阵列Scalable Embedded Array (SEA)平台发展而来的,与将通用处理器和若干DSP核嵌入单芯片的方法不同,该平台使用了相同的处理器核,每个核既具有通用处理器的功能,同时内部集成高速乘法器 ,经过妥善设计,就可以把复杂的计算任务分配给各个处理器核共同进行。
工作时,可以简单地指定各个处理器核完成需要执行的不同任务。比如,在三重播放应用中,可以让1个处理器核去管理外接存储器,让8个处理器核负责FFT变换,完成多媒体算法,再用几个处理器核带动应用系统中的各种I/O子系统(见图1)。这样,每个处理器都会专心运行自己的任务,避免了执行不同任务时任务切换之间的开销,单个处理器在执行流媒体解码过程中,也不会出现由于处理器等待别的外设而造成的图像抖动不畅等现象,同时,我们可以根据具体的应用选择具有不同数量内核的处理器,极大地增强了设计和选择的灵活性。目前在这一体系下,已经有40核的处理器解决方案。
本地化RAM/ROM存储器和时钟发生器
当设计中使用了多个处理器时,存储器存取的问题就出来了。大多数多核芯片设计把几个处理器核和一个共用存储器放在一起。这样做简化了设计,因为每一个核只是处理器本身,问题转到多个处理器核如何共同使用一个存储器,以及存储器存取的仲裁,这是一个难题。通常用到某种仲裁网络或者交叉点切换开关,在只有3个到4个处理器核时,这个方法是可行的。但是,在芯片上需要几十个处理器核时,共用存储器的问题变得很复杂,令人望而却步。此外,由于越来越多处理器核需要对存储器进行存取,共用存储器的效率变得越来越低,很快就成为致命的瓶颈,把多核结构在处理方面的优点都淹没了。
SEAforth多核处理器使用了本地化存储器设计,即为每个处理器核设计了自己的RAM/ROM存储器。这有两个好处,一方面避免了存储器仲裁,也不需要交叉切换开关;另一方面可以分配给每个处理器核所需要的存储容量。分析典型算法的源代码,需要的存储器容量有两种,一种是1000字节或者少一些,一种是容量很大,几兆字节,甚至几百兆字节。大多数应用属于前者,后者则在少数应用中需要,实现上也不切实际。所以SEAforth多核处理器为每一个处理器核都用小一些的本地存储器,1000字节的数量级,用于存放程序源代码和数据,ROM中固化每个处理器核的BIOS,再用一个大得多的外接存储器,作为缓冲存储器满足多媒体的需要。
与采用公共外部时钟的方式不同,SEAforth多核处理器为每个核内建一个时钟--一个简单的环形振荡器。它的速度和硅半导体的速度一样快,只有在该处理器核工作时,它的时钟才工作。这种设计方式为下面介绍的核间通讯提供了可能,同时,任一时刻由于只有部分处理器核在工作也大大降低了功耗。SEAforth多核处理器有很低的功耗水平,每个处理器以1GHz的频率运行,而40核的整体功耗为250mW。
高效的处理器核间通讯
SEAforth多核处理器允许计算量很大的算法由几个核协作完成,这时,不同核间需要大量的交换数据,通讯方式的优劣影响整个系统的性能。
完成一项复杂的任务时,传统的做法是由操作系统自行指定参与的核,离的很远的核间通讯需要处理器内有大量的通讯电路,往往设计复杂,效率偏低。在SEAforth多核处理器应用中,由工程师自己指定完成特定任务的处理器核,这需要工程师了解哪些任务需要交换更多的数据,然后指定相邻的核完成这项任务。对于要求大量访问核外存储器的任务,同样可以指定距离最近的核去完成。
SEAforth 多核处理器相邻的核间通讯通过共用寄存器传输,如图2所示。
通过共用寄存器这种方式避免了冲突电路和优先权网络的问题,具体传输过程中,传统的处理方法需要利用读取、检测、写入等状态位信息建立握手协议,耗费的时间多于实际传送数据所用的时间。该处理器由于内建一个电路,可以在一个指令周期内实现启动/停止中的处理器核操作,所以实现了无需握手协议的传输。
假设核A与核B之间传输数据,处理器核A是送出数据的核,想把数据送到共用寄存器去,如果在寄存器中的数据还没读取,处理器核A 就停下来,一直到处理器核B读取了寄存器中的数据。在同一时刻,处理器核A回来执行原来要执行的那条指令,即"送出数据"。于是,从源代码的角度看,处理器核A总是认为寄存器是空着的,在等待数据,没有必要读取和检测状态位。处理器核B做的事与之相似。处理器核B的源代码总是认为寄存器中一直存放着没有读出的数据。当它开始执行指令"读取数据",从寄存器中取出数据时,如果寄存器中没有需要读取的数据,它也停下来。当新的数据在寄存器中出现时,处理器核B便执行"读取数据"指令,这条指令把数据从寄存器中取出来。同样,没有必要读取、检测状态位,没有必要将状态位置位。
在SEAforth多核处理器中,处理器核不仅可以读取和执行本地ROM和RAM中的指令,它还能够读取和执行I/O口和寄存器送来的指令(见图3)。这样,利用上面的传输方式,指令便可以源源不断地送到共用寄存器,并且直接执行,不必把源代码传送给本地存储器。大大加快了执行效率。
嵌入式; 相关文章:
- 高性能嵌入式ARM MPU在医疗电子系统中的设计应用(05-12)
- 嵌入式技巧:ARM的三种中断调试方法的介绍(05-13)
- 关于嵌入式系统的软硬件协同设计(05-13)
- 多路嵌入式H.264视频服务器的设计详解(06-04)
- 一种时间触发的多任务调度器设计(06-07)
- 基于ARM7的轨道检测仪的嵌入式系统设计(06-22)