控制器电路,数据接口块和用于传输数据的方法转让专利

申请号 : CN201510217236.5

文献号 : CN105022706B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 尼古拉斯·莱娜西里尔·埃内利纳

申请人 : 恩智浦有限公司

摘要 :

本文提出一种处理器电路,包括:处理器单元,被配置成执行用于加载或存储多个数据字的多重加载或存储指令;数据接口块(DIB),被配置成与处理器单元通信,并且被配置成响应于在执行多重加载或存储指令期间中断的发生,保存多重加载或存储指令的状态。保存状态可以包括存储当中断发生时已经被加载或存储的数据字的数目。当在中断之后再次执行多重加载或存储指令时,数据接口块可以跳过所存储的数目的数据字。

权利要求 :

1.一种处理器电路,其特征在于,包括:

处理器单元,被配置成执行用于加载或存储多个数据字的多重加载或存储指令;

数据接口块DIB,被配置成用于通过系统的串行或并行物理接口来发送或接收数据,并且被配置成响应于在执行多重加载或存储指令期间中断的发生,保存多重加载或存储指令的状态,其中所述保存多重加载或存储指令的状态包括存储指示当中断发生时已经加载或存储的数据字的数目的值。

2.如权利要求1所述的处理器电路,其特征在于,包括中断监控块IMB,被配置成检测中断的发生,并通知数据接口块发生了中断。

3.如权利要求2所述的处理器电路,其特征在于,还包括指令总线,其中中断监控块被连接到指令总线,用于监控在指令总线上传输的指令。

4.如权利要求1所述的处理器电路,其特征在于,数据接口块被配置成检测多重加载或存储指令执行的开始。

5.如权利要求1所述的处理器电路,其特征在于,数据接口块被配置成,当在中断之后再次执行多重加载或存储指令时,跳过一定数目的用于加载或存储的数据字,其中所述数目等于所述值。

6.如在前的任一项权利要求所述的处理器电路,其特征在于,包括数据总线,其中数据接口块包括用于存储要被加载或存储的数据字的数据寄存器,其中数据寄存器被连接到数据总线。

7.如权利要求6所述的处理器电路,其特征在于,数据接口块包括先进先出FIFO缓冲器。

8.如权利要求7所述的处理器电路,其特征在于,FIFO缓冲器被连接到串行或并行数据接口。

9.如权利要求7或8所述的处理器电路,其特征在于,FIFO缓冲器被连接到数据寄存器。

10.如权利要求1所述的处理器电路,其特征在于,该处理器电路形成为片上系统SoC。

11.一种数据接口块DIB,其特征在于,该数据接口块用在如在前的任一项权利要求所述的处理器电路中。

12.一种用于加载或存储多个数据字的方法,其特征在于,该方法包括:在处理器单元中执行多重加载或存储指令;

将至少一个数据字写入到数据接口块DIB中;

检测处理器单元的中断的发生;

通知数据接口块多重加载或存储指令被中断;

由数据接口块存储多重加载或存储指令的状态;

其中存储多重加载或存储指令的状态包括存储指示当中断发生时已经加载或存储的数据字的数目的值。

13.如权利要求12所述的方法,其特征在于,还包括:当在中断之后再次执行多重加载或存储指令时,跳过一定数目的用于加载或存储的数据字,其中所述数目等于所述值。

说明书 :

控制器电路,数据接口块和用于传输数据的方法

技术领域

[0001] 本文涉及控制器电路、数据接口块和用于传输数据的方法。特别是,本文涉及用于处理器的控制器电路、数据接口块和方法,该处理器具有指令集,该指令集包括多重加载/存储指令。

背景技术

[0002] 现代处理器单元的指令集可以包括多重加载/存储指令。利用多重加载/存储指令,例如通过从外围块读取或写入到外围块,单个指令可用于加载或存储多个数据字。
[0003] 在美国专利US6,260,086中公开了具有多重加载/存储指令的处理器。为了将多个数据字写入到串行外设接口,使用了一组外围数据字以及先入/先出(FIFO)缓冲器。
[0004] 具有多重加载/存储指令的处理器的另一个例子是ARM公司的ARM Cortex-MO。
[0005] 具有多重加载/存储指令的已知的处理器的一个特征是,指令执行不是原子的,因此可以被中断。当中断处理结束时,该指令一般是整个被重复。这可能会产生严重的后果。例如,当使用多个存储指令来写入到外设数据接口时,中断后重复整个指令意味着在中断发生之前已经写入的数据字被写入两次。这导致不正确的数据被写入到外设数据接口。同样地,在非原子的多重加载执行期间进行中断也可能会导致写入不正确的数据。
[0006] 防止这些效应的一种方法是屏蔽中断,使得它们不中断多重加载/存储指令的执行。另一种方法是简单地根本不使用多重加载/存储指令,或者至少是不在从外设接口读取时或写入到外设接口时。前一种方法往往是不可行的,因为中断必须被及时处理。后一种方法是不可取的,因为这样会导致更多的指令,从而增加指令存储、获取以及解码的开销。
[0007] 因此,需要一种处理器电路和方法能够使用多重加载/存储指令(在下文中也称为:多重传输指令),在执行过程中对于中断是具有鲁棒性的。
[0008] 此外,由于目前对于硬件厂商来说,例如在片上系统中对来自第三方处理器供应商的处理器单元进行设计是很常见的,因此需要一种解决方案,这种解决方案不需要修改处理器单元本身,但是可以使用处理器单元的外部电路来实现。

发明内容

[0009] 根据第一个方面,本文提供了一种处理器电路,包括:
[0010] 处理器单元,被配置成执行用于加载或存储多个数据字的多重加载或存储指令;
[0011] 数据接口块(DIB),被配置成响应于在执行多重加载或存储指令期间中断的发生,保存多重加载或存储指令的状态。
[0012] 在一个实施例中,处理器电路还包括指令总线,其中中断监控块被连接到指令总线用于监控在指令总线上传输的指令。
[0013] 在一个实施例中,数据接口块被配置成检测多重加载或存储指令执行的开始。
[0014] 在一个实施例中,保存多重加载或存储指令的状态包括存储指示当中断发生时已经加载或存储的数据字的数目的值。
[0015] 在一个实施例中,数据接口块被配置成,当在中断之后再次执行多重加载或存储指令时,跳过一定数目的用于加载或存储的数据字,其中所述数目等于所存储的值。
[0016] 在一个实施例中,处理器电路包括数据总线,其中数据接口块包括用于存储要被加载或存储的数据字的数据寄存器,其中数据寄存器被连接到数据总线。
[0017] 在一个实施例中,数据接口块包括先进先出(FIFO)缓冲器。在一个实施例中,FIFO被连接到串行或并行数据接口。FIFO可以被连接到数据寄存器。
[0018] 在一个实施例中,处理器电路形成为片上系统(SoC)。
[0019] 根据第二个方面,提供了一种用于上述处理器电路的数据接口块(DIB)。
[0020] 根据第三个方面,提供了一种用于加载或存储多个数据字的方法,该方法包括:
[0021] 在处理器单元中执行多重加载或存储指令;
[0022] 将至少一个数据字写入到数据接口块(DIB)中;
[0023] 检测处理器单元的中断的发生;
[0024] 通知数据接口块多重加载或存储指令被中断;
[0025] 由数据接口块存储多重加载或存储指令的状态。
[0026] 在第三个方面的实施例中,保存多重加载或存储指令的状态包括存储指示当中断发生时已经加载或存储的数据字的数目的值。
[0027] 在第三个方面的实施例中,该方法还包括:当在中断之后再次执行多重加载或存储指令时,跳过一定数目的用于加载或存储的数据字,其中所述数目等于所存储的值。

附图说明

[0028] 在下文中将参考附图仅以示例的方式来描述本发明的实施例,这些附图都是示意性的,因此不是按比例绘制的。此外,在附图中相似的元件采用相似的附图标记。
[0029] 图1示意性地示出了根据一个实施例的处理器电路。
[0030] 图2示意性地示出了根据一个实施例的用于加载和存储数据的电路。
[0031] 图3示意性地示出了根据一个实施例的多重存储操作。
[0032] 图4示意性地示出了根据一个实施例的多重加载操作。
[0033] 图5示意性地示出了根据一个实施例的用于存储数据的方法。

具体实施方式

[0034] 图1示意性地示出了根据本发明的一个实施例的处理器电路10。电路10可以被实现为片上系统。电路10包括用于执行数据指令的处理器单元11,处理器单元具有指令集,指令集的特点是具有多重加载或存储指令(在下文中也称为:多重传输指令(MTI)或多重加载/存储指令)。处理器单元的一个例子是ARM Cortex MO 32位处理器。
[0035] 虽然可以通过修改处理器单元11来实现本发明,但是也可以如将要参考实例所描述的那样,提供另外的功能使用处理器单元11外部的另外的块在执行期间来处理中断。这使得本发明可以用很容易得到的不能(很容易)修改的第三方处理器单元11来实现。
[0036] 该电路还包括代码存储器14和数据存储器15,以及代码总线13和数据总线12,分别传输由处理器11获取的代码和由处理器使用的数据。另外,也可以提供用于代码和数据两者传输的单个总线。
[0037] 数据接口块(DIB)18被配置用于通过系统的串行或并行物理接口19来发送/接收数据。该DIB 18可以被配置成检测输入DIB/从DIB输出的多重加载/存储指令的开始,并且设置MULTIPLE_TRANSFER_STARTED标志作为响应。然后在多重加载/存储指令执行期间,该MULTIPLE_TRANSFER_STARTED标志都被设置。该DIB 18也可以被描述为数据接口外设块(DIPB)。DIPB或DIB 18可以被实现为专用硬件块。
[0038] 中断监控块(IMB)17被提供用于检测中断。在图1的例子中,IMB 17被连接到代码总线12。IMB 17被配置为检测多重加载/存储指令的中断,以及通过设置MULTIPLE_TRANSFER_INTERRUPTED标志来通知DIB 18中断的发生。在一个实施例中,只有在发生中断时DIB 18已经设置了MULTIPLE_TRANSFER_STARTED标志的情况下才设置MULTIPLE_TRANSFER_INTERRUPTED标志。IMB 17可以被实现为专用硬件块。IMB 17可以通过检测在执行多重传输指令期间处理器单元11获取(新)指令来检测中断的发生。在一个替代实施例(未示出)中,IMB 17被配置成例如通过被连接到中断线路来直接检测中断的发生。
[0039] 可以在处理器电路10中提供DIB块18的多个实例(例如在具有多个数据接口19的系统的情况下)。在这种情况下,当IMB 17检测到中断,并且相应的DIB 18已经设置了MULTIPLE_TRANSFER_STARTED标志时,DIB 18可以从IMB 17接收MULTIPLE_TRANSFER_INTERRUPTED标志。如果DIB 18负责设置MULTIPLE_TRANSFER_STARTED标志,并且如果在多个DIB中每个DIB18已经设置了一个标志,则IMB 17可以被配置为只对目前参与中断的多重传输指令中的DIB 18设置MULTIPE_TRANSFER_INTERRUPTED标志。在一个实施例中,多个DIB中的每一个DIB 18都具有连接到IMB 17的单独的“执行”标志线,IMB 17可以为多个DIB中的每一个DIB 18设置单独的、专用的“中断”标志。在实施例中,可以在电路10中设置一个、两个、三个、四个或更多的DIB 18。
[0040] 可选的时钟和电源管理块16可以被用来为DIB 18、IMB 17、处理器11和总线12、13产生必要的时钟。它也可以负责处理器电路10的电源管理。
[0041] 图2提供了DIB 18的各个组成部分的详图。在一个实施例中,DIB 18包括数据寄存器20,可以由处理器11通过数据总线13访问数据寄存器20。数据寄存器20用于在DIB 18和处理器11之间传输数据字。数据寄存器20被映射到数据存储器15中的N个连续的地址21上,用于传输宽度为M的N个数据字。
[0042] 数据寄存器20可以用于半双工和全双工通信。整数N被定义在另一个寄存器中,或者可以被固定为指定的硬件实现(例如:4个字)。整数M定义在另一个寄存器中,或者可以被固定为指定的硬件实现,M的最大值被定义为数据总线的宽度(例如:8位)。
[0043] 在一个实施例中,DIB 18还包括数据先入/先出(FIFO)缓冲器22。在替代实施例中,数据FIFO 22可以由数据接口19提供。数据FIFO 22是具有发送和接收逻辑的数据缓冲器。FIFO 22的深度是最大值(N)字深,字是最大值(M)位宽。FIFO 22可以被分成两部分,一部分用于发送数据字,一部分用于接收数据字。
[0044] 在多重传输指令的执行过程中,由处理器11成功地存储/读取的每个数据字被分别推送到数据FIFO中(存储操作),或从数据FIFO中弹出(加载操作)。例如,当N=4,M=8时,DIB 18被配置成用处理器的多重加载/存储指令传输4个连续的数据字节。
[0045] 在发送时(从接口来看,即当处理器11执行存储功能时),一旦DIB 18被启用用于发送,数据通过数据寄存器20被写入到FIFO 22。当判断是写入信号时,数据可以被写入到FIFO 22中的由数据写入指针的当前值指定的位置。数据写指针是循环指针,它在每次FIFO写入之后递增,并且迭代通过所有可用于发送的FIFO 22的位置。然后数据可以通过数据接口19被弹出,递增数据读指针,然后被发送出去。数据写指针和数据读指针之间的差(允许两个指针的循环性质)代表在FIFO中等待发送的数据字的数量,并且该差可以被存储在FIFO寄存器中。如果出现同时访问的话,基于时隙的机制确保处理器单元11和数据接口19之间数据寄存器操作的优先级。
[0046] 在接收时(从接口来看,即当处理器执行加载功能时),当已经接收到正确的数据时,通过数据接口19写入数据(递增FIFO中的数据字的数量)。一旦DIB 18被启用用于接收,通过数据寄存器从FIFO 22中读出数据。当判断是读出信号时,可以从数据读指针的当前值指定的FIFO 22中的位置读出数据。在每一次读取FIFO 22之后,存储FIFO中用于接收的数据字的数量的寄存器被递减。再次,如果出现同时访问的话,基于时隙的机制确保数据寄存器操作的优先级。
[0047] 使用一对循环的读/写指针以及被分成两部分的FIFO数据缓冲器(接收和发送部分之间的比率是可配置的),可以支持全双工通信进行双向存取。在这种情况下,两对读/写指针是必需的。另外,一个寄存器可以存储用于发送的条目的数量(用于发送的写指针和读指针之间的循环补偿差),另一个寄存器可以存储用于接收的条目的数量(用于接收的写指针和读指针之间的循环补偿差)。
[0048] IMB 17和DIB 18的组合实现状态机。当处理器11对N个数据字执行多重存储操作时,对于处理器11传输的每个新的数据字递增硬件计数器(counter_word)(换言之,counter_word从0增加到N-1)。当数据寄存器20第一次被访问时(counter_word=0),设置一个标志并通知IMB 17(MULTIPLE_TRANSFER_STARTED)。当处理器11已经将最后一个数据字发送到DIB 18时,这个标志被取消。多重加载操作的执行也是同样的。
[0049] 如果在处理器11处发生中断,则IMB 17将会检测到该中断的发生。在一个实施例中,该检测是通过检查从处理器11向代码存储器14的一个新的获取请求来实现的。然后处理器11自动将设置的标志MULTIPLE_TRANSFER_INTERRUPTED发送到DIB 18;于是DIB 18将用专用的(counter_word_stopped)变量来保存counter_word的当前值。通过这种方式,DIB 18保存被中断的多重传输指令的状态。
[0050] 一旦处理器11退出中断,它将重新启动多重加载(或存储)指令,并将第一数据字重新发送到DIB 18。DIB 18从非零的counter_word_stopped变量得知,之前的多重传输指令没有成功完成。其结果是,DIB 18然后将跳过第一个counter_word_stopped数据字,因为这些已经被从数据FIFO 22/向数据FIFO 22发送了。通过跳过已经处理的数据字,保证了FIFO 22中的数据的完整性。
[0051] 当多重传输指令完成时(所有的N个数据字被存储或加载),该counter_word_stopped变量被重置为0。
[0052] 图3示意性地示出了根据本发明的一个实施例的多重存储操作,图4示意性地示出了根据本发明的一个实施例的多重加载操作。在两个图中,处理器单元11的状态(CPU状态)被示为获取(F)、解码(D)或执行(E)指令。计数器31表示counter_word的值,32表示的是MULTIPLE_TRANSFER_STARTED标志,33表示的是MULTIPLE_TRANSFER_INTERRUPT标志。在图3中,34表示的是变量counter_word_stopped,位于最后一行的35表示的是哪些数据字被推送到FIFO 22。
[0053] 在图4中,36表示的是FIFO读指针(在全双工的FIFO 22的情况下用于接收)。为清楚起见,FIFO读指针被设置为0,以指示在FIFO中的第一个数据字的位置。最后一行37表示的是哪些数据字被从(图4)FIFO 22中弹出。
[0054] 当多重传输指令开始第一次执行时,MULTIPLE_TRANSFER_STARTED标志32被设置。在这两个例子中,在第3个数据字被推送到FIFO 22中或从FIFO 22中被弹出之后接收到中断。此时MULTIPLE_TRANSFER_INTERRUPTED标志33被设置并且MULTIPLE_TRANSFER_STARTED标志32被取消。counter_word 31的值2(即第三个数据字的索引)被存储在counter_word_stopped变量34中。
[0055] 当多重传输指令开始第二次执行时,在中断处理结束之后,MULTIPLE_TRANSFER_STARTED标志32被再次设置。此时MULTIPLE_TRANSFER_INTERRUPTED标志33被取消。
[0056] 在图3的存储操作中,数据字0,1和2(counter_word_stopped 34的值)被跳过(未被推送到FIFO 22中),因为它们已经在多重存储指令的第一次执行期间被写入FIFO 22了。当counter_word 31增加到超过2时,数据字3、4、直到N-1被推送到FIFO 22中。在数据字N-1被写入之后,counter_word_stopped的值被重置为0。
[0057] 在图4的加载操作中,顺序稍有不同,这是因为处理器单元11需要在从数据FIFO 22中弹出N个数据字之前接收所有数据。然后,当在多重加载指令期间发生中断时,FIFO 22的读指针需要被重置为0,可以通过检查counter_word 31的值来知道发生了该中断。在本实施例中,当中断发生时,通过将FIFO 22的用于MTI的读指针重置为开始位置来保存DIB 
18的状态。例如,这可以通过从FIFO的读指针减去(以循环方式)counter_word的值来实现。
这可以在中断到达时(如图4所示)或只是在MTI指令重新开始之前立即执行。
[0058] 如果在多重传输指令的第二次执行期间发生另一个中断,则仅当在第二次执行时counter_word的值比所存储的counter_word_stopped的值高才更新counter_word_stopped变量。换言之,如果相同的多重传输指令被重复地中断,则DIB 18在counter_word_stopped中记住counter_word在一系列的中断指令中的任一个达到的最大值。
[0059] 图5示意性地示出了根据本发明的一个实施例的与图3的示意图相对应的用于存储数据的方法。在步骤51中,处理器11获取并解码多重传输指令(MTI),并在步骤52中通过将第一数据字写入到DIB 18的数据寄存器20中来执行该指令。在步骤53中,DIB 18检测正在被写入的第一个字,为IMB 17设置MULTIPLE_TRANSFER_STARTED标志,并将counter_word设置为0。在步骤54中,第一个数据字被写入到FIFO 22中,并且递增counter_word。在步骤55中,处理器单元11现在写入第二个数据字,在步骤56中,DIB 18将该数据字推送到FIFO 
22,并且递增counter_word。
[0060] 在MTI完成之前的某个时刻,接收到中断57,在此之后中断处理开始60。该中断的发生是由IMB 17检测的(例如通过检测在完成多重传输之前处理器11获取新指令),这引起了在步骤58中为DIB 18设置MULTIPLE_TRANSFER_INTERRUPTED标志。其结果是,在步骤59中,DIB 18将counter_word的当前值保存在counter_word_stopped中。
[0061] 在中断处理结束之后,在步骤62中,处理器11再次获取并解码MTI。然后,在步骤62中通过写入第一个数据字来开始再次执行该指令。这还是由DIB 18检测的,这引起了在步骤63中设置MULTIPLE_TRANSFER_STARTED标志并将counter_word重置为0。然而,因为counter_word的值(0)低于counter_word_stopped的值(2),该数据字不被推送到FIFO 22中。在步骤64中,counter_word被逐一增加,并且当counter_word小于或等于counter_word_stopped时,跳过所有数据字。
[0062] 最后,在步骤65中,当counter_word>counter_word_stopped时执行该步骤,第一个新的数据字被写入到数据寄存器20中,然后由DIB 18被推送到FIFO 22。当该指令完成时(在N个数据字已经被推送到FIFO 22之后),counter_word_stopped的值被重置为0。
[0063] 在上述实施例中,描述了用于使用多重传输指令的数据传输的处理器电路,数据接口块和方法,该技术方案对于多重传输指令执行期间处理器的中断具有鲁棒性。数据接口块被配置成在中断时保存多重传输指令的状态,允许当再次执行多重传输指令时数据接口块从之前被中断的执行期间停止的位置处继续读写数据,从而防止由于二次写入或读取数据造成数据损坏。
[0064] 能够检测中断的示例方法是通过提供中断监控块来检测中断。IMB(例如通过监控代码总线)可以监控处理器单元的指令。如果在多重传输指令执行期间新的指令被获取,则IMB例如能够设置“中断”标志。IMB基于对指令的分析或基于从数据接口块接收到的“执行”标志可以知道正在执行多重传输指令。
[0065] 能够检测多重传输指令的执行的示例方法是通过使数据接口块检测对数据寄存器的第一次访问。通过检查counter_word的值可以检查到第一次访问,counter_word的值跟踪在多重传输指令期间正在被写入或读取的N个数据字。
[0066] 当在中断之后第二次执行指令时,(或者在一系列中断的情况下第三次、第四次执行指令时),跳过已经被写入或读取的指令数据字。在DIB具有FIFO的情况下,需要注意FIFO读/写指针要保持一致。在多重存储指令的情况下,通过参考变量counter_word_stopped可以例如跳过正确数目的数据字,变量counter_word_stopped存储了在多重传输指令之前执行时已经被写入/读取的数据字的最大数目。在多重加载指令的情况中,FIFO读指针可以被重置为在该指令第一次(被中断)执行的开始处的位置。
[0067] 在上文中,已经参考附图和具体实施例对本发明进行了描述。然而,很显然,在不背离所附权利要求概括的本发明的保护范围的情况下,可以得到不同的修改和变化。
[0068] 另外,在不背离实质范围的情况下,可以做出很多的修改以适应特定的情况。因此,本发明并不局限于本文中所揭露的具体实施例,本发明包括落入所附权利要求的范围内的所有实施例。
[0069] 特别是,本发明的不同方面的具体特征可以进行组合。通过向本发明的一个方面增加关于本发明的另一个方面描述的特征可以有利地增强本发明的一个方面。
[0070] 应当理解,本发明由所附权利要求及其技术等同内容来限定。在本文中,动词“包括”以其非限定的含义来使用,表示包括在该动词之后的内容,并不排除未具体提及的内容。另外,在本文中,量词“一”并不排除存在一个以上元件的可能性,除非在上下文中清楚地要求了是一个元件和只有一个元件。因此量词“一”通常表示“至少一个”。