一种基于cisc指令集的流水线取指和译码方法

文档序号:10470899阅读:380来源:国知局
一种基于cisc指令集的流水线取指和译码方法
【专利摘要】本发明公开了一种基于CISC指令集的流水线取指和译码方法,其实现过程为:1、将指令取入译码级,每周期取一字节长度的指令;2、指令长度寄存器向右移一位;3、指令执行周期数寄存器向右移一位;4、若指令长度寄存器数值为零,且指令执行周期数寄存器数值也为零,转到1,否则转到2,并且取指级输出空指令给译码级。所涉及的指令集,指令长度为1到4个字节,指令执行时间为1到11个时钟周期。本发明克服了传统CISC指令集取指和预译码技术的不足,解决传统CISC流水线设计需要增加额外译码周期和预译码电路的问题,可用于实现一类基于CISC指令集的流水线设计。
【专利说明】
一种基于CI SC指令集的流水线取指和译码方法
技术领域
[0001 ]本发明涉及基于CISC指令集的微处理器流水线设计领域,更进一步涉及兼容MCS-51指令集的CIP8051内核中微控制器的流水线取指和译码方法。
【背景技术】
[0002]流水线技术是一种指令并行执行的技术。该技术将一个操作分成几个执行时间基本相等的步骤,通过插入寄存器来暂存每个步骤的执行结果,并以此作为下一个步骤的输入数据。精简指令集(RISC)中每条指令均为单操作,且指令长度相同,因此指令操作易于划分为N个流水线步骤,当流水线填满时,则流水线中会有N条指令在同时执行。采用流水线后,单条指令的执行周期没有缩短,但每个时钟周期都会有一条指令执行完毕,现代处理器已广泛采用流水线设计。
[0003]但是,复杂指令集(CISC)中各条指令长度不一,且各指令执行周期数也不尽相同,这使得其指令非单操作,很难划分流水级,在流水线实现上存在难度。传统实现Cl SC指令集的流水线设计主要采用预译码的方法来实现,将指令一次性取出,通过预译码将复杂的Cl SC指令简单的类似于RI SC的微指令,然后再对Cl SC微指令进行流水,如在论文《32位Cl SC微处理器流水线的设计》即采用这种方法。这种译码方法,将指令一次性取出,需要较宽的总线;同时由于增加了预译码电路,增大了电路的复杂性,也增加了额外的译码周期。

【发明内容】

[0004]本发明的目的在于克服传统CISC指令集取指和预译码技术的不足,解决传统CISC流水线设计需要增加额外译码周期和预译码电路的问题,提出了一种基于CISC指令集的流水线取指和译码方法。
[0005]实现本发明目的方法的具体手段为:一种基于CISC指令集的流水线取指和译码方法,将流水线第一级指定为取指级,完成取指令;将流水线第二级指定为译码级,完成指令执行周期数的确定、指令字节数的确定,并通过指令长度寄存器和指令执行周期数寄存器记录当前指令的取指和执行情况;流水线第三级为执行级,完成指令执行和计算结果写回;其中第二级流水线中计算完成的指令执行周期数和指令字节数以组合逻辑值的形式反馈回第一级流水中;包括如下步骤:
(1)初始化指令长度寄存器和指令执行周期数寄存器的值为零;
(2)在取指级中,每个时钟周期取一条指令的一个字节,送入译码级中;
(3)若指令长度寄存器和指令执行周期数寄存器值都为零,说明当前进入译码电路的指令字节为一条指令的第一个字节,根据该字节编码,译出当前指令长度的字节数和当前指令需要执行的周期数;
(4)指令长度寄存器存放的值右移一位;
(5)指令执行周期数寄存器中存放的值右移一位;
(6)将指令长度寄存器和指令执行周期数寄存器的移位结果反馈回取指级,在取指级中,若移位后指令长度寄存器中4比特数值相或为I,且指令执行周期数寄存器中11比特相或为I,说明指令尚未全部取完,返回步骤(2);若移位后指令长度寄存器中4比特数值相或为O,且指令执行周期数寄存器中11比特相或为O,说明需要取新指令,返回执行步骤(2);若移位后指令长度寄存器中4比特数值相或为O,且指令执行周期数寄存器中11比特相或为I,则取指级流水线暂停,输出空指令给译码级,返回步骤(5)。
[0006]采用指令长度寄存器来记录当前指令的所有字节是否被取完的情况;所述指令长度寄存器位宽为4比特,若当前指令长度为η个字节,则指令长度寄存器第η-1比特位等于I,其他比特位设定为O;每取指令的一个字节,所述指令长度寄存器的值向右移动I个比特位,若所述指令长度寄存器的值为4,bOOOO,则当前指令的取值工作全部完毕;其中,η为自然数,I <η<40
[0007]采用指令执行周期数寄存器记录当前指令需要被执行完成的周期数;所述指令执行周期数寄存器位宽为11比特,若当前指令的执行周期数为m个周期,则指令执行周期数寄存器第m-Ι比特位等于I,其他比特位设定为O;每取指令的一个字节,所述指令执行周期数寄存器的值向右移动I个比特位,若所述指令执行周期数寄存器的值为ll’b0000_0000_000,则当前指令的执行工作全部完毕;其中,m为自然数,I 11。
[0008]本发明方法适用于指令长度为I到4个字节、指令执行周期与指令字节数不一定相等、指令执行周期为I到11个时钟周期、指令执行周期大于等于指令字节数的一类CISC指令集。
[0009]本发明克服了传统CISC指令集取指和预译码技术的不足,解决传统CISC流水线设计需要增加额外译码周期和预译码电路的问题,可用于实现一类基于CISC指令集的流水线设计。
【附图说明】
[0010]图1为本发明的流水线结构图。
[0011 ]图2为本发明的流水线取指和译码工作流程图。
[0012]图3为本发明的实例工作时序图。
【具体实施方式】
[0013]参照附图1,本发明的流水线划分为三级:取指级,译码级和执行级。其中,取指级从程序存储器中将指令码取出,每次取一个字节。译码级接收来自取指级的指令码,并对其进行译码,获得指令的执行周期数和指令长度,并将这两个值以组合逻辑的形式返回。执行级从数据存储器中取出数据,并执行运算,将结果写回。
[0014]参照附图2,本发明的一种基于CISC指令集的流水线取指和译码方法的具体实施步骤如下:
(1)初始化指令长度寄存器和指令执行周期数寄存器的值为零;
(2)在取指级中,每个时钟周期从程序存储器中取一条指令的一个字节,送入译码级中;其中,取指令过程中对程序存储器采用组合逻辑读的形式,
(3)在译码级中,若指令长度寄存器和指令执行周期数寄存器值都为零,说明当前进入译码电路的指令字节为一条指令的第一个字节,根据该字节编码,译出当前指令长度的字节数和当前指令需要执行的周期数;译码过程中,遵循CIP8051的MCS-51指令集手册;
(4)将指令长度寄存器存放的值右移一位;
(5)将指令执行周期数寄存器存放的值右移一位;
(6)将指令长度寄存器和指令执行周期数寄存器的移位结果以组合逻辑的形式反馈回取指级;同时,将移位结果分别写入指令长度寄存器和指令执行周期数寄存器;
(7)在取指级中,若移位后指令长度寄存器中4比特数值相或为O,且指令执行周期数寄存器中11比特相或为O,返回执行步骤(2);若移位后指令长度寄存器中4比特数值相或为O,且指令执行周期数寄存器中11比特相或为I,则取指级流水线暂停,输出空指令给译码级,返回步骤(5);若移位后指令长度寄存器中4比特数值相或为I,且指令执行周期数寄存器中11比特相或为I,说明指令尚未取完,返回步骤(2)。
[0015]参照附图3,以一条长度为两个字节,执行时间为三个时钟周期的指令为例,在时钟I上升沿该指令的第一个字节进入译码级,具体实现方法如下:
(1)初始化指令长度寄存器和指令执行周期数寄存器为零;
(2)时钟I上升沿来临时,取指级从程序存储器中取一个长度为一个字节的指令值,送入译码级;
(3)判断指令周期状态寄存器的值为零,则说明进来的是一条新指令,对译码级中的一个字节指令进行译码,从而获得指令长度值和指令执行周期数,即此时指令长度值为4’b0010,指令执行周期数值为11’b0000_0000_100;
(4)指令长度数值右移一位,移位结果为4’ bOOOI;
(5)指令执行周期数值右移一位,移位结果为1ΓΜ000_0000_010;
(6)指令长度数值和指令执行周期数值的移位结果以组合逻辑的形式反馈回取指级;同时,将移位结果分别写入指令长度寄存器和指令执行周期数寄存器;
(7)在取指级中,指令长度数值为4’b0001,各比特位相或值不为零,同时指令执行周期数值为11 ’ b0000_0000_010,各比特位相或值不为零,故时钟2上升沿来临时,继续从程序存储器中取指令,则该指令的第二个字节进入译码级;
(8)时钟2上升沿到来后,在译码级,将指令长度寄存器的值右移一位,此时指令长度寄存器的值为4’bOOOO;
(9)时钟2上升沿到来后,在译码级,将指令执行周期数寄存器的值右移一位,此时指令执行周期数寄存器的值为1110000_0000_001;
(10)指令长度数值和指令执行周期数值的移位结果以组合逻辑的形式反馈回取指级;同时,将移位结果分别写入指令长度寄存器和指令执行周期数寄存器;
(11)在取指级中,指令长度数值为4’bOOOO,各比特位相或值为零,但是指令执行周期数值为11,b0000_0000_001,各比特位相或值不为零,故时钟3上升沿来临时,取指级流水线暂停,输出空指令给译码级;
(12)时钟3上升沿到来后,在译码级,将指令执行周期数寄存器的值右移一位,此时指令执行周期数寄存器的值为11’b0000_0000_000;
(13)指令长度数值和指令执行周期数值的移位结果以组合逻辑的形式反馈回取指级;同时,将移位结果分别写入指令长度寄存器和指令执行周期数寄存器;
(14)在取指级中,指令长度数值为4’b0000,各比特位相或值为零,同时指令执行周期数值为ll’b0000_0000_000,各比特位相或值为零,故时钟4上升沿来临时,返回执行步骤
(I)。
【主权项】
1.一种基于CISC指令集的流水线取指和译码方法,将流水线第一级指定为取指级,完成取指令;将流水线第二级指定为译码级,完成指令执行周期数的确定、指令字节数的确定,并通过指令长度寄存器和指令执行周期数寄存器记录当前指令的取指和执行情况;流水线第三级为执行级,完成指令执行和计算结果写回;其中第二级流水线中计算完成的指令执行周期数和指令字节数以组合逻辑值的形式反馈回第一级流水中;包括如下步骤: (1)初始化指令长度寄存器和指令执行周期数寄存器的值为零; (2)在取指级中,每个时钟周期取一条指令的一个字节,送入译码级中; (3)若指令长度寄存器和指令执行周期数寄存器值都为零,说明当前进入译码电路的指令字节为一条指令的第一个字节,根据该字节编码,译出当前指令长度的字节数和当前指令需要执行的周期数; (4)指令长度寄存器存放的值右移一位; (5)指令执行周期数寄存器中存放的值右移一位; (6)将指令长度寄存器和指令执行周期数寄存器的移位结果反馈回取指级,在取指级中,若移位后指令长度寄存器中4比特数值相或为I,且指令执行周期数寄存器中11比特相或为I,说明指令尚未全部取完,返回步骤(2);若移位后指令长度寄存器中4比特数值相或为O,且指令执行周期数寄存器中11比特相或为O,说明需要取新指令,返回执行步骤(2);若移位后指令长度寄存器中4比特数值相或为O,且指令执行周期数寄存器中11比特相或为I,则取指级流水线暂停,输出空指令给译码级,返回步骤(5)。2.根据权利要求1所述的基于CISC指令集的流水线取指和译码方法,其特征在于,采用指令长度寄存器来记录当前指令的所有字节是否被取完的情况;所述指令长度寄存器位宽为4比特,若当前指令长度为η个字节,则指令长度寄存器第η-1比特位等于I,其他比特位设定为O;每取指令的一个字节,所述指令长度寄存器的值向右移动I个比特位,若所述指令长度寄存器的值为4’bOOOO,则当前指令的取值工作全部完毕;其中,η为自然数,I < η < 4。3.根据权利要求1所述的基于CISC指令集的流水线取指和译码方法,其特征在于,采用指令执行周期数寄存器记录当前指令需要被执行完成的周期数;所述指令执行周期数寄存器位宽为11比特,若当前指令的执行周期数为m个周期,则指令执行周期数寄存器第m-1比特位等于1,其他比特位设定为O;每取指令的一个字节,所述指令执行周期数寄存器的值向右移动I个比特位,若所述指令执行周期数寄存器的值为11,b0000_0000_000,则当前指令的执行工作全部完毕;其中,m为自然数,I < m < 11。
【文档编号】G06F9/38GK105824603SQ201610140888
【公开日】2016年8月3日
【申请日】2016年3月14日
【发明人】邸志雄, 向乾尹, 冯全源, 刘彤阳, 周洋程
【申请人】西南交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1