计算机组成——CPU系统设计

2009-06-04 20:22 / 4 comments / 48 views /

一、存储结构

按照软件设计的思想,程序包括数据和建立在数据上的操作。在设计该计算机系统的时候也主要考虑的是数据(程序、操作数和微指令)的存储方式和要对数据完成的操作。经过对器件和性能的综合考虑,最后决定系统总体结构采用类似哈佛结构。其主要特点如下:

  • 1、使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;
  • 2、指令存储器和数据存储器使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,这两条总线之间毫无关联;
  • 3、微指令共约十一位,按高低位分开存储在两个存储器,可一次读出完整的微指令,剩余约五位控制位做为扩展;
  • 4、微指令分开存在指令存储器和数据存储器中,数据总线采用分时共用的原则,高电平时读取微指令,低电平时才读取指令和数据。

二、流水线

完成一条指令一般需要三个步骤:取指令、指令译码和执行指令。其中在取指令和执行指令阶段都有访存的操作,对于冯.诺曼结构,由于取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行。但是采用哈佛结构,相当于利用重复设置资源的方式消除了瓶颈段,这两个执行部件的可以同时访存互不干扰,因而可以重叠执行。流水线重叠执行过程如下表:

指令1取指令译码执行
指令2取指令译码执行
指令取指令译码执行

其中,译码在时钟周期的高电平期间完成;执行指令和取下一条指令在时钟周期的低电平期间完成。由于译码期间的访存,以及执行指令和取下一条指令期间的访存,存在对总线的复用,所以无法形成更深程度的流水线。

三、指令系统

以运算器为中心,包括各寄存器和数据存储器的操作都由控制器集中控制,控制器又由时钟信号控制。时钟信号就是整个系统的幕后黑手,按周期动作,有条不紊。在指令和微指令的设计过程中,为了保证流水线的正常运行,就要尽量保证指令的规整而且要保证每条指令都在一个时钟周期内完成。所以,该指令系统主要特点如下:

  • 1、指令共八位,高四位为操作码,低四位为操作数地址;
  • 2、大多数指令操作数有两位,一位由AC提供,另一位由存储器直接提供操作数地址由指令低四位给出;
  • 3、每次计算的结果都由保存在DR中,并设计专门的指令把结果送往寄存器AC或送往存储器;
  • 4、设计一条空指令,每用一次跳转指令就要紧跟一条空指令,因为没有设置动态分支预测或硬件自动插入“气泡”的机制。

部分指令和微指令列表如下:

S3

S2

S1

S0

M

C

X

X

SAC

SDR

NODR

O

J

X

X

X

LAD

1

1

1

1

1

1

1

1

0

1

1

1

1

1

1

1

F

F

7

F

STA

1

1

1

1

1

1

1

1

0

1

0

0

1

1

1

1

F

F

4

F

ADD

1

0

0

1

0

1

1

1

1

0

1

1

1

1

1

1

9

7

B

F

AND

1

1

1

0

1

0

1

1

1

0

1

1

1

1

1

1

E

B

B

F

STOR

1

1

1

1

1

1

1

1

1

1

0

0

1

1

1

1

F

F

C

F

JMP

1

1

1

1

1

1

1

1

1

1

1

1

0

1

1

1

F

F

F

7

NULL

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

F

F

F

F

其中,S3~S0、M和C控制运算器,补齐两位后和指令存储在一起;SAC为1代表锁住寄存器AC,为0对AC写数;SDR为1代表锁住寄存器DR,为0代表对DR写数;NODR为1寄存器DR不向数据总线输出数据,为0 寄存器DR向数据总线输出数据;O为1读数据存储器,为0数据存储器不向数据总线输出数据;J为1不跳转,为0跳转。

四、运算和控制细节

具体设计时,分指令的流动路线、数据的流动路线和微指令的流动路线,分别考虑。其中,在存储器上,还存在线路的复用,需要根据高低电平来区分线路的意义:

  • 1、低电平时,指令存储器选通为读状态,PC送地址位,取指令;指令低四位送数据存储器地址位,释放控制信号到运算器、各寄存器和数据存储器,执行微指令。
  • 2、高电平时,指令和数据存储器都选通为读状态,指令高四位同时送往两片存储器,读出微指令;各控制信号均管住在高电平,寄存器处于锁住状态。

细节设计的重点在于,在时钟信号的高低电平时,指令和数据存储器的地址位意义不同,要根据时钟信号进行切换。

五、实际接线和调试

实际接线分使用FPGA和不使用FPGA两种情况。由于指令系统预先已经设计好,所以可以先用拔码开关向存储器中写入程序和微指令,以免后续接线复杂写程序不方便。不使用FPGA的情况下,从时钟信号出发,先接控制电路。主要是先接两片存储器的地址位信号根据电钟信号切换的电路。由于流水作业,需要接入两片指令寄存器,指令在这条线路上流动,这一环节需要最先验证。然后验证控制信号正确,最后接运算部分。使用FPGA的情况下接线要简单的多,软件访真正确后把存储器和LED灯接进来就可以了。

调试的时候可以把中间信号,比如两片存储器地址位信号和数据位信号,接往LED灯显示。由于器件的动作都是根据时钟信号执行,可以把动作触发信号即时钟信号接在LED灯的小数点位上,方便观察。查错时可以根据LED灯显示的中间数据来估计错误出现的位置。

在实际接线过程中出现过一次指令流动过程中的数据错误:本来是数据‘3’流动到一下一环节变成了‘5’;本来是数据‘c’流动到下一环节变成了‘4’;本来是数据‘9’流动到下一环节变成了‘c’。通过及时记录这些数据,并分析这些数据的二进制,发现是数据的低三位接线有误。

Related Posts

  1. 如何解决FPGA电路设计中的毛刺问题
  2. 主板报警声大全
  3. Linux, Iometer / Dynamo usage
  4. 用VHDL实现PCI仲裁模块
  5. GetSystemInfo Function
  6. 利用Windows api获得CPU使用率
  7. 16位精简指令集cpu设计
  8. Altera QuartusII警告
  9. Quartus II 6.0破解方法
  10. 如何让电源脱离主板启动

Tags: , .

Get a Trackback link

4 Comments

  1. bolo2009年6月8日 18:00:

    你真牛啊,还会设计cpu?

  2. 挑战书2009年6月8日 18:45:

    @bolo, 小任务,与龙芯的通用性和工艺程度差远了,不成标准不能用的。不要把一些高深的技术想复杂了,再高深也都是由一些简单的想法来的。建议关注一下国产的龙芯,这东西除了受限于技术垄断,用的思想都是很先近的。

  3. 芒果2009年6月9日 11:36:

    计算机组成原理……

  4. bolo2009年6月9日 12:00:

    @挑战书, 龙芯现在起码在市场上也有立足之地了,不过市场化的路还很长

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>