计算机组成原理 8位RISC CPU设计

基于计算机组成原理课程设计和Verilog数字系统设计第二版夏宇闻版
笔者通过记录课设中CPU的设计过程以总结 后续文章请参看计算机组成原理专栏

RISC-CPU是一个复杂的数字逻辑电路,但是它的基本部件的逻辑并不复杂,可把它分

成8个基本部件来考虑;

〈1)时钟发生器
(2)指令寄存器;
(3)累加器;
(4)算术逻辑运算单元;
(5)数据控制器;
(6)状态控制器;
(7)程序计数器;
(8)地址多路器。

各部件的互相连接关系如图 其中时钟发生器利用外来信号进行分频生成系列时钟

时钟发生器 

时钟发生器CLKGEN利用外来时钟信号clk生成一系列时钟信号clk1,fetch,alu_clk,并送往CPU的其他部件。其中,fetch是控制信号,elk的8分频信号。当FETCH高电平时,使CLK能触发CPU控制器开始执行一条指令;同时FETCH信号还将控制地址多路器输出指令地址和数据地址。clk信号用作指令寄存器、累加器、状态控制器的时钟信号。ALU_ENA则用于控制箅术逻辑运算单元的操作。图17.2为时钟clkgen的波形如图所示


时钟发生器的设计中采用了同步状态机的设计方法,使clk_gen可以被综合。

 

指令寄存器

指令寄存器的触发时钟是clk,在clk的正沿触发下,寄存器将数据总线送来的指令存入高8位或低8位寄存器中。但并不是每个clk的上升沿都寄数据总线的数据,因为数据总线上有时传输指令,有时传输数据。什么时候寄存,什么时候不寄存由CPU状态控制器的load_ir信号控制。load_ir信号通过ena口输到指令寄存器,复位后,指令寄存器被清为零。
每条指令为两个字节,即16位。高3位是操作码,低13位是地址〈CPU的地址总线为13位,寻址空间为8K字节)。本设计的数据总线为8位,所以每条指令需取两次“先取高8位,后取低8位。而当前取的是高8位还是低8位·由变state记录。为0表示取的是8位,存入高8位寄存器,同时将变量state置为1.下次再寄存时,由于state为1,可知取的是低8位,存入低8位寄有器中。

 

累加器 ACCUM

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

 算术运算器ALU

地址多路器ADR 

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

程序计数器PC 

程序计数器如图所示。它用于提供指令地址,以便读取指令·指令按地址序存放在存储器中·有两种途径可形成指令地址;其一是顺序执行的情况,其二是遇到要改变顺序执行程序的情况,例如执行IMP指令后,需要形成新的指令地址。下面就来详细说明PC地址是如何建立的。


复位后.指令指针为零,即每次CPU重新启动将从ROM的零地址开始读取指令并执行·每条指令执行完需两个时钟,这时pc_addr,已被增2,指向下一条指令(因为每条指令占两个字节)-如正在执行的指令是跳转语句,这时CPU状态控制器将会输出load-pc信号,通过load口进人程序计数器·程序计数器(pc_addr)将装人目标地址〔ir-addr),而不是增2。

 

状态机控制器 

状态控制器如图所示·它由两部分组成:
(1)状态机(图中的MACHINE部分〕;
(2)状态控制器(图中的MACHINECTL部分).
状态机控制器接收复位信号RST,当RST有效时,通过信号ena使其为0,输人到状态机中,以停止状态机的工作。
状态控制器的VerilogHDL程序见下面模块;


状态机是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件生CPU何时进行读指令来读写I/O端囗及RAM区等操作,都是由状态机来控制的。状态机的当前状态,由变最state记录,state的值就是当前这个指令周期中已经过的时钟数〈从零计起)。指令周期是由8个时钟周期组成,每个时钟周期都要完成固定的搡作,即
(1)第0个时钟,CPU状态控制器的输出rd和load_ir为高电平,其余均为低电平·指令寄存器寄存由ROM送来的高8位指令代码。
(2)第1个时钟,与上一时钟相比只是inc_pc从0变为1,故PC增1,ROM送来低8位指令代码,指令寄存器存该8位代码。
(3)第2个时钟,空操作
〔4)第3个时钟,增1,指向下一条指令。若搡作符为HL六输出信号HLT为高。如果操作符不为HLT,除了PC增一外(指向下一条指令).其他各控制线输出为零“
(5)第4个时钟,若操作符为AND,ADD,XOR或LDA,读相应地址的数据,若为JMP,将目的地址送给程序计数器i若为STO,出累加器数据。
(6)第5个时钟,若操作符为ANDD.ADD或XORR,算术运箅器就进行相应的运算;若为LDA,就把数据通过算数运算器送给累加器;若为SKZ,先判断累加器的值是否为如果为0,PC就增1,否则保持原值:若为JMP,锁存目的地址若为STO,将数据写人地处。
(7)第6个时钟,空操作。
〈8)第7个时钟,若操作符为SKZ且禦加器值为0,则PC值再增1,跳过一条指令,否则PC无变化。
状态机和状态机控制器组成了状态控制器。

外围:ROM\RAM\地址译码器 
1.地址译码器:用于产生选通信号,选通ROM或RAM



2.ROM和RAM

 

cpu的操作和时序 

一个微机系统为了完成自身的功能,需要CPU执行许多操作。以下是RISC-CPU的主要操作,
(1)系统的复位和启动搡作;
(2)总线读操作
(3)总线写操作

系统的复位和启动搡作
RISC-CPU的复位和启动操作是通过reset引脚的信号触发执行的·当reset信号一进入高电平,RISC-CPU就会结束现行操作,并且只要reset停留在高电平状态,CPU就维持在复位状态。在复位状态,CPU各内部寄存器都被设为初值,全部为零·数据总线为高阻态,地址总线为佣00H,所有控制信号均为无效状态。reset回到低电平后,接着到来的第一个fetch上升沿将启动RISC-CPU开始工作,
从ROM的000处开始读取指令并执行相应操作。
总线读操作
每个指令周期的前0~3个时钟周期用于读指令,在状态控制器中已详细讲述,这里就不再重复;第3·5个周期处,存储器或端口地址就输出到地址总线上;第4~6个时钟周期,读信号rd有效,数据送到数据总线上,以备累加器锁存,或参与算术、逻辑运算;第7个时钟周期,读信号无效,第7,5个时钟周期,地址总线输出pc地址,为下一个指令做好准备。
总线写操作​​​​​​​​​​​​​​
每个指令周期的第3.5个时钟周期处,写的地址就建立了;第4个时钟周期输出数据;第5个时钟周期输出写信号;至第6个时钟结束,数据无效;第7,5个时钟地址输出为PC地址,为下一个指令周期做好准备。图17,13为CPU对存储器或端口写数据的时序。

CPU的寻址方式和指令系统 

模块的综合 

仿真文件cputop


 

 

 

 

由于笔者比较懒 所以没有具体代码块 后续会补充上的 见谅见谅

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yvonnae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值