带有快速中断的数字信号处理器

今天晚上看到某同学将MSN的nick改成了"太黑了...专利都是假的...",就忍不住去查了查这几个专利:
[ 03115475 ]带有快速中断的数字信号处理器
[ 03115375 ]带有可重构系统硬件栈的数字信号处理器
[ 03115376 ]具有可重配置高速缓存的数字信号处理器
[ 03115377 ]带有可重构通道数DMA的数字信号处理器
[ 03115374 ]带有可重切换缓存的数字信号处理器
[ 03115372 ]具有取模地址运算的数字信号处理器"
现在在知识产权局的网站上都能查的到(
http://www.sipo.gov.cn/sipo/default.htm)
把"带有快速中断的数字信号处理器"这个稍微看了一下, 专利说明书里面对于该发明的原理是这样说的:首先根据指令寄存器中的值判断下一条指令是否是跳转指令,如果不是跳转指令, 就把中断服务程序的起始地址送到下一条指令的取址寄存器上,如果是跳转指令, 程序的运行过程如一般操作一样.
俺比较笨,看了好几遍才明白,所谓的和一般操作一样,就是让中断正常打断.
虽然俺笨,但是中国聪明人多着呢,这么简洁漂亮的解决办法,老美研究计算机组织与系统结构那么久,愣是没想出来,咱们中国人一下子就想出来了。
按照专利上的说法,如果不是跳转指令,就直接把取址寄存器的内容改成中断服务程序的地址就成了。真的这么简单么?俺不是学计算机的,但有幸于N年前旁听过胡越明讲计算机组成,也写过几个DSP的中断服务程序。 中断服务程序的最主要原则就是要保证进入中断服务程序时的context和退出中断服务程序时的context要一致。为了保证这种一致,需要CPU的中断响应和中断服务程序的协同。
所以,在有流水线的CPU中,一般有两种方法来进行CPU的中断响应:
    所谓“不精确断点”法。不论第i条指令在流水线的哪一段发出中断申请,都不再允许那时还未进入流水线的后续指令再进入,但已在流水线的所有指令却可仍然流动到执行完毕, 然后才转入中断处理程序。
    另一种是精确断点法,就是将流水线里还没有执行完的指令全部抛弃,立即转入中断处理程序。
如果不等流水停止的话,中断响应程序不能保证正确的保护和恢复context,因为有可能,中断保护程序在将寄存器压栈或者出栈的时候产生冒险。
或许有硬件可以避免这种冒险,但是,太复杂了吧。得不偿失阿。
还有一种可能性就是采用类RISC结构,使用load,store来访问内存,并且保证ALU的取数,执行和写会在一个周期内完成。这样ALU的路径较长,提高CPU的主频比较困难。不过分析下来,这是最可能的实现方式了。
另外,据专利说明书说,此办法可以在每次中断响应中节省4-6个clock,"大大提高程序运行效率". 大大提高程序运行效率的话,我想至少要提高1%吧?对于200MIPS的DSP来说,不过2个MIPS而已。这样算下来,每400-600条指令就要处理一个中断,除去中断服务程序里面保护context的开销,最多只有350-550的指令用于程序处理,这个DSP用的也太..... 这么密集的中断,不丢几个真不容易啊。做架构的人因该被拉出去打pp。
至于什么"带有可重构通道数DMA的数字信号处理器"之类的,懒得说了,大家有空自己去看看吧。

 本文基于个人理解,如有错误,概不负责。

hoho

 

俺对于CPU设计属于业余级,有什么地方理解错了大家尽管说。


3 thoughts on “带有快速中断的数字信号处理器”

  1. [ 03115372 ]具有取模地址运算的数字信号处理器
    这些东西也都是专利了,难怪现在说专利转换成效益的不多。
    当年某通信公司一个做dsp软件的人告诉我,他申请了一个专利,就是用查表法实现crc校验。我当时差点昏倒。
  2. “精确断点法”个人认为也不太安全,除非所有的读,写,执行都是在同一个cycle实现的,否则按目前很多dsp的做法,读写往往在不同cycle执行,那么就很难判断已经进入流水的指令是否已经完成,比如某指令包含读操作,其实已经完成了,结果也被半途抛弃。这样,对于用单指令实现信号量来说,会存在问题。我倒是更多地看到“不精确断点”的使用。
    这个专利里面的快速中断实现我也不明白,根本没有说中断保护的事情。我倒是看见现在ti和starcore的实现中,有一种加入BRANCH TARGET BUFFER的方式,等于随时记录上下文,还可以预测下文。这个对于判断很多的控制代码非常有利。

Leave a Reply

Your email address will not be published. Required fields are marked *