基于状态机的简易RISC CPU设计

本文详细介绍了基于状态机的RISC CPU设计,包括CPU的基本功能、RISC结构、各组件如时钟发生器、累加器、算术逻辑运算单元等的工作原理,以及CPU的操作和时序。此外,还提到了RISC CPU的寻址方式和简单的指令系统。

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

基于状态机的简易RISC CPU设计


目录

一、什么是CPU?
二、RISC CPU结构
1.时钟发生器
2.指令寄存器
3.累加器
4.RISC CPU算术逻辑运算单元
5.数据控制器
6.状态控制器
7.程序计数器
8.地址多路器
9.外围模块
10.地址译码器
a.RAM
b.ROM
三、RISC CPU中各部件的相互连接关系
四、RISC CPU和它的外围电路
五、RISC CPU的寻址方式和指令系统
六、RISC CPU的操作和时序

正文

一、什么是CPU?

CPU 即中央处理单元的英文缩写,它是计算机的核心部件。计算机进行信息处理可分为两个步骤:
  1.  将数据和程序(即指令序列)输入到计算机的存储器中。
  2.  从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。CPU的作用是协调并控制计算机的各个部件执行程序的指令序列,使其有条不紊地进行。因此它必须具有以下基本功能:
    • a)取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。
    • b)分析指令:即指令译码。是对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作控制命令。
    • c)执行指令:根据分析指令时产生的“操作命令”形成相应的操作控制信号序列,通过运算器,存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。
 
将其功能进一步细化,可概括如下:
  1. 能对指令进行译码并执行规定的动作;
  2. 可以进行算术和逻辑运算; 
  3. 能与存储器,外设交换数据;
  4. 提供整个系统所需要的控制;
尽管各种CPU的性能指标和结构细节各不相同,但它们所能完成的基本功能相同。由功能分析,可知任何一种CPU内部结构至少应包含下面这些部件:
  1. 算术逻辑运算部件(ALU),
  2. 累加器,
  3. 程序计数器,
  4. 指令寄存器,译码器,
  5. 时序和控制部件。
        RISC 即精简指令集计算机(Reduced Instruction Set Computer)的缩写。它是一种八十年代才出现的CPU,与一般的CPU 相比不仅只是简化了指令系统,而且是通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。从实现的途径看,RISC_CPU与一般的CPU的不同处在于:它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做省去了读取微指令的时间。RISC_CPU也包括上述这些部件,下面就详细介绍一个简化的用于教学目的的RISC_CPU的可综合VerilogHDL模型的设计和仿真过程。

二、RISC CPU结构

          RISC_CPU是一个复杂的数字逻辑电路,但是它的基本部件的逻辑并不复杂。可把它分成八个基本部件:
  1. 时钟发生器
  2. 指令寄存器
  3. 累加器
  4. RISC CPU算术逻辑运算单元
  5. 数据控制器
  6. 状态控制器
  7. 程序计数器
  8. 地址多路器
其中时钟发生器利用外来时钟信号进行分频生成一系列时钟信号,送往其他部件用作时钟信号。各部件之间的相互操作关系则由状态控制器来控制。下面逐一介绍各部件的具体结构和逻辑关系。

1 时钟发生器


         时钟发生器 clkgen 利用外来时钟信号clk 来生成一系列时钟信号clk1、fetch、alu_clk 送往CPU的其他部件。其中fetch是外来时钟 clk 的八分频信号。利用fetch的上升沿来触发CPU控制器开始执行一条指令,同时fetch信号还将控制地址多路器输出指令地址和数据地址。clk1信号用作指令寄存器、累加器、状态控制器的时钟信号。alu_clk 则用于触发算术逻辑运算单元。时钟发生器clkgen的波形见下图所示:

其VerilogHDL 程序见下面的模块:
module clk_gen (clk,reset,clk1,clk2,clk4,fetch,alu_clk);input clk,reset;output clk1,clk2,clk4,fetch,alu_clk;wire clk,reset;reg clk2,clk4,fetch,alu_clk;reg[7:0] state;parameter S1 = 8'b00000001, S2 = 8'b00000010, S3 = 8'b00000100, S4 = 8'b00001000, S5 = 8'b00010000, S6 = 8'b00100000, S7 = 8'b01000000, S8 = 8'b10000000, idle = 8'b00000000;assign clk1 = ~clk;always @(negedge clk) if(reset)  begin   clk2 <= 0;   clk4 <= 1;   fetch <= 0;   alu_clk <= 0;   state <= idle;  end else  begin   case(state)   S1:    begin     clk2 <= ~clk2;     alu_clk <= ~alu_clk;     state <= S2;    end   S2:    begin     clk2 <= ~clk2;     clk4 <= ~clk4;     alu_clk <= ~alu_clk;     state <= S3;    end   S3:    begin     clk2 <= ~clk2;     state <= S4;    end   S4:    begin     clk2 <= ~clk2;   &
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值