Cadence(Tensilica)的可定制处理器

2017-03-28 StarryHeavensAbove公众号
分享到:

原文作者:唐杉

“处理器IP厂商的机器学习方案”这个系列写到Cadence,其实没太多可写的了。Cadence的方案就是Tensilica Vision P5和Vision P6 DSP,和CEVA的XM6(处理器IP厂商的机器学习方案 - CEVA),Synopsys的EV6x(处理器IP厂商的机器学习方案 - Synopsys)中的DSP部分类似,不过目前还没有看到它们提供专门的硬件加速。这三种DSP经常出现在同一个PPA对比的表格当中,相信以后我们也会看到一些新公司的身影,做DL processor的同学们加油吧。


但是,但我们说到Tensilica的时候,如果不说说可定制处理器(Customizable 或者说 Configurable),似乎不太合适。其实,我和Tensilica还是挺有渊源的。05年在SiliconHive的时候,公司就把他们当作直接的竞争对手的。虽然我是做NoC的,不过还是经常听到Tensilica的话题。后来和他们的工程师也都很熟悉。他们的创始人Chris Rowen的书“Engineering the Complex SOC: Fast, Flexible Design with Configurable Processors”,我一直认为是专用处理器和相关的SOC设计方面比较经典的一本。另一本是刘大可教授的“Embedded DSP Processor Design, : Application Specific Instruction Set Processors (Systems on Silicon)”。


首先看看Cadence是怎么介绍可定制处理器的,重点是实现设计的差异性:

    “Do you need to run your software algorithms on a processor or DSP, but can’t find one that meets your performance, energy and cost requirements? Perhaps you have a proprietary algorithm that will put you ahead of your competition, and you want to make sure it can’t be copied, but you don’t have the time or resources to start from scratch? You can quickly create your own unique processor or DSP, optimized for your particular algorithms, using the Tensilica Processor Platform.

    Our patented technology allows you to quickly build unique task-specific processors and DSPs fully tailored to your application requirements, with a full matching software tool chain. ”


Tensilica的可定制处理器(Xtensa)主要有两方面的定制性:

1. 可配置性(Configurability):从指令集,微结构,接口等方面都提供一些可配置的选项。你可以通过菜单选择的方式定制适合你自己应用的处理器。

2. 可扩展性(Extensibility):使用Tensilica Instruction Extension (TIE)的方法,增加你自己的指令,寄存器,寄存器堆等等。你可以使用和verilog类似的TIE语言来描述自己的datapath单元的功能,而相应的RTL代码和工具链则自动生成。


第一点对于一般的处理器IP来说是比较常见的。所以我们重点看看第二点,指令扩展。下面是Xtensa处理器的pipeline[1]。

QQ截图20170327230326

可以看出增加新的指令实际需要描述相应的寄存器(输入和输出),datapath行为,还有就是和其它module的接口。下面看一个用TIE语言来支持SIMD的例子[1]。

QQ截图20170327230338


以下是C语言实现两个向量相加的一般描述。

显然,如果能在一个周期做多个加法,那么就可以大大减少总体消耗的时间。所以我们可以在原有处理器的基础上增加一个向量加法的指令vec4_add16,相应的增加一个simd64的register file。

有了这条指令,之前的loop就可以用下面的方法实现。


好吧,看到这里是不是和我们之前讨论的专用处理器设计的思路差不多呢。实际上,Tensilica就是提供了一个能够快速设计专用处理器的方法和工具。他的好处是给你了一个基础处理器的指令集,微结构和接口,而不需要你重头开始。你可以更关注你的应用,根据你的应用来决定如果配置或者扩展这个处理器。


当然,这又是比较理想的说法。据我所知,在Tensilica的用户当中,真正使用TIE来扩展处理器的比例并不高,更多的用户也只是配置一下而已。个人感觉,其原因主要是这种方法看似给了设计者灵活性,但也增加了设计的门槛和学习的成本。加上自动化工具远非完美,技术支持也不一定到位,能真正能做定制的团队实际不多。这个问题对于Synopsys的ASIP designer也是一样(它的灵活性更高,理论上完全可以从零开始设计处理器)。另外还有一个实际原因就是,定制处理器工具的价格昂贵(总要比一个DSP IP价格高吧),真能用的公司也很有限。


说到这里又想到一个题外话。昨天有同学问我SystemC是怎么回事,应该用在什么地方。可能还有一个潜在的问题,我们是不是要学习SystemC呢?那么对于一个IC工程师,当我们看到一些新的概念,方法或者语言,我们是不是要学习呢?正好今天看到Quora上有个问题:“How useful would it be to learn Chisel HDL?”(Chisel是一种硬件结构语言Hardware Construction Language)。答案也很典型:第一种,还是把时间放在verilog和system verilog上吧,这样找工作比较有力。当你把时间花在这种东西的时候,你的同学“Kumar”正努力学习verilog呢。(笑点自己找);第二种,当然是正面鼓励了。


第二种回答里真正让我有感触的是这句话,“More importantly, learn about why these exist in the first place.”。其实这些方法,语言什么的不是重点,如果你能真正了解它们的出现是为了解决什么问题;而它们又是用什么思路来解决问题的,相信你的收获要大得多。


×
官方微信