CPU由简单到复杂

From:简化的 RISC_CPU设计,百度文库,用VHDL来实现

基本流程:读取指令,指令解码,指令执行,数据存储

除了上述功能模块外,还需一些辅助电路。

例子:

要求(目标):

8位微处理器,一律采用直接寻址方式,即数据总是放在存储器中,寻址单元的地址由指令直接给出。

实现8个指令:

1.      HLT:停机操作。该操作将空一个指令周期,即8个时钟周期;

2.      SKZ:若为零跳过下一条语句。该操作先判断当前累加器中的结果是否为零,若为零就跳过下一条语句,否则继续执行;

3.      ADD:该操作将累加器中的值与地址所指的存储器或端口的数据相加,结果仍送回累加器中;

4.      ANDD:该操作将累加器的值与地址所指的存储器或端口的数据相与,结果仍送回累加器中;

5.      XORR:该操作将累加器的值与指令中给出地址的数据异或,结果仍送回累加器中;

6.      LDA:该操作将指令中给出地址的数据放入累加器;

7.      STO:该操作将累加器的数据放入指令中给出的地址;

8.      JMP:该操作将跳转至指令给出的目的地址,继续执行。

实现:

这个例子中的CPU由以下8部分构成。

1)时钟发生器;时钟发生器利用外来时钟信号clk生成一系列时钟信号clk1fetchalu_clk,并送往CPU的其他部件。

2指令寄存器

3)累加器;加器用于存放当前的数据结果,它也是双目运算中的一个数据来源;复位后,累加器的值是零;当累加器通过ena口收到来自CPU状态控制器load_acc信号时,在clk1时钟正跳沿时就收到来自于数据总线的数据。

4)算术逻辑运算单元;算术逻辑运算单元根据输入的8种不同操作码分别实现相应的加、与、异或、跳转等基本操作运算;利用这几种基本运算可以实现很多种其它运算以及逻辑判断等操作。(见本页末图)

5)数据控制器;数据控制器作用是控制累加器的数据输出,由于数据总线是各种操作时传送数据的公共通道,不同情况下传送不同的内容,有时要传输指令,有时要传送RAM区或接口的数据。数据控制器何时输出累加器的数据则由状态控制器输出的控制信号datactl_ena决定。

6程序计数器

7)地址多路器;它用于选择输出的地址是PC(程序计数)地址还是数据/端口地址;每个指令周期的前4个时钟周期用于从ROM中读取指令,输出的应是PC地址;后4个时钟周期用于对RAM或端口的读写,该地址由指令给出;地址的选择输出信号由时钟信号的8分频信号fetch提供。

8状态控制器