实验五、单周期 CPU 设计与实现——十条指令 CPU

一、实验目的: 

通过设计并实现支持10 条指令的CPU,进一步理解和掌握CPU 设计的基本原理和过程。 

二、实验内容: 

设计和实现一个支持如下十条指令的单周期CPU。 

Ø非访存指令
u清除累加器指令CLA
u累加器取反指令COM
u算术右移一位指令SHR:将累加器ACC 中的数右移一位,结果放回ACC 

u循环左移一位指令CSL:对累加器中的数据进行操作
u停机指令STP 

Ø访存指令 

u 加法指令ADD 

u 存数指令STA 

u 取数指令LDA 

Ø转移类指令 

u 无条件转移指令JMP imm:signExt(imm) -> PC 

u 有条件转移(负则转)指令BAN X: ACC 最高位为1 则(PC)+ X -> PC,否则PC 不变 

三、实验原理

1、约定机器字长、指令字长和存储字长均为16位。

2、约定指令格式如下图所示,高4位为指令的操作码字段,低12位为指令的地址码或者立即寻址的操作数。

3、指令和相应的操作码对照表

CPU 原理图 

四、实验步骤

4.1 CPU 各模块Verilog 实现  

1) PC 模块

输入 

时钟信号clk、重置信号 rst 、停机信号stop、无条件转移信号wr、条件转移信号judge、 pc修改量jmp(12位)

 

输出 

 

指令地址addr(12 位) 

功能 

每个时钟上升沿 addr 的值自动加 1,并输出

如果wr为1,修改addr为 jmp - 1

如果judge为1,修改addr为 addr + jmp

如果rst为1,修改addr为0

 

Verilog 关键代码:

2) 指令存储器模块 

该模块中已经初始化了10条指令,并且刚好串在一起,可以作为一组逻辑统一的整体。

输入 

12位指令地址 addr 

输出 

16 位指令 ins 

功能 

存放待执行的指令(初始化),并根据地址输出指令 

Verilog 关键代码:

3) 累加器

输入 

时钟信号clk、读写控制线 wr、输入数据 indata

输出 

输出数据outdata

功能 

ACC数据从outdata输出,如果wr有效,在clk下降沿将会把indata写入ACC中。

Verilog 关键代码:

4) ALU 

表4.4 ALU 模块功能描述 

输入 

操作数 in1 和in2、操作选择信号alu_op 

输出 

 

ALU 运算结果 Z 

 

功能 

根据操作选择信号计算in1 和in2 的运算结果 Z 

Verilog 关键代码:

5) 控制单元 

表4.5 控制单元模块功能描述 

输入 

指令(操作码) 

输出 

停机信号stop、PC读写控制线 pcwr、ACC读写控制线 accwr 、数据存储器读写控制线 datamemorywr、ALU 的操作选择信号 op 

功能 

根据当前指令功能对stop、pcwr、accwr、datamemorywr和op 赋值 

Verilog 关键代码:

6) 数据存储器模块 

该模块中初始化了2条数据,一个用于测试各种运算功能,另一个用于测试条件转移。

输入 

时钟信号clk、读写控制线wr、12位指令地址 addr、输入数据 indata 

输出 

16 位输出数据 outdata 

功能 

存放数据,可以读出,或在clk下降沿写入。 

Verilog 关键代码:

4.2 CPU 顶层文件封装实现 

在这个文件中,声明了pc,insmemory,datamemory,acc,cu,alu等模块。

并且声明了几个wire类型的变量用于连接各个部件。

Verilog 关键代码:

4.3 CPU 模拟仿真 

1、TestBench关键代码 

CPU的测试文件如下,主要功能就是产生了时钟信号,并且使用rst信号初始化pc。

clk信号每1ns反转一次,一个时钟周期2ns。

20ns后结束测试,刚好测试完10条指令。

2、ModelSim仿真及分析 

指令1 LDA 取数指令

这条指令在指令存储器的地址000000000000处。传送给ALU的命令是0110。

将数据地址为000000000000处的数据0000000000000010存储进ACC中。

CU会向ACC发出写信号,在时钟的下降沿写入数据。

指令2 COM 取反指令

这条指令在指令存储器的地址000000000001处。传送给ALU的命令是0001。

将ACC中的数据0000000000000010取反后得到1111111111111101。

CU会向ACC发出写信号,在时钟的下降沿写入数据。

指令3 SHR 算数右移指令

这条指令在指令存储器的地址000000000010处。传送给ALU的命令是0010。

将ACC中的数据1111111111111101算数右移后得到1111111111111110。

CU会向ACC发出写信号,在时钟的下降沿写入数据。

指令4 CSL 循环左移指令

这条指令在指令存储器的地址000000000011处。传送给ALU的命令是0011。

将ACC中的数据1111111111111110循环左移后得到1111111111111101。

CU会向ACC发出写信号,在时钟的下降沿写入数据。

指令5 CLA 清除指令

这条指令在指令存储器的地址000000000100处。传送给ALU的命令是0000。

将ACC中的数据1111111111111101清零后得到0000000000000000。

CU会向ACC发出写信号,在时钟的下降沿写入数据。

指令6 ADD 加法指令

这条指令在指令存储器的地址000000000101处。传送给ALU的命令是0100。

将ACC中的数据0000000000000000和数据存储器的地址为000000000001处的数据相加得到1000000000000000再保存到ACC中。

CU会向ACC发出写信号,在时钟的下降沿写入数据。

指令7 STA 存数指令

这条指令在指令存储器的地址000000000110处。传送给ALU的命令是0101。

ACC中的数据存储到数据存储器地址为000000000010的单元。

可以从图中看到000000000010单元的值由不确定变为1000000000000000。

CU会向数据存储器发出写信号,在时钟的下降沿写入数据。

指令8 JMP 无条件转移指令

这条指令在指令存储器的地址000000000111处。传送给ALU的命令是1111。

这条指令使用地址码采用立即寻址方式向PC传送跳转的目标地址。

这里我们跳转到指令存储器地址为000000001001的单元(该单元保存了条件转移指令)。

可以看到下降沿的时候PC的值被修改为000000001000而不是000000001001,因为下一个时钟周期上升沿PC自动加1会进行修正。

CU会向PC发出写信号,在时钟的下降沿写入数据。

指令9 BAN 条件转移指令

这条指令在指令存储器的地址000000001001处。传送给ALU的命令是0111。

这里我这条指令设置为会判断ACC最高位是否位1,如果为1,会把PC增加2。

注意这里不需要进行PC的修正,直接在下降沿将PC加2修改000000001011。

因为在相对寻址中,位移量是以条件转移指令的下一条指令的地址为基准的做偏移的。

而指令字长刚好是一个存储字,所以最终会跳转到地址为000000001100的指令存储器单元。该单元内的指令为停机指令。

ALU会根据判断的结果向PC发出写信号judge,如果为1,在时钟的下降沿修改PC。

指令10 STP 停机指令

这条指令在指令存储器的地址000000001100处。传送给ALU的命令是1111。

这条指令会将PC内的标志位state设置为0。

如果state为0的话,PC在每个时钟上升沿将不会自动加1。

在图中可以看到下一个时钟上升沿到来的时候,地址保持000000001100无变化。

CU会向PC发出停机信号STOP,使PC不再自动增加。

五、总结

Verilog语法简洁优雅大方,给人以美的享受。

 

譬如CU中的这一段关键代码,既滴水不漏地实现了功能,还十分简洁。

 

  • 31
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
### 回答1: 单周期 CPU 设计实现是一种基于单指令CPU 架构,它的特点是每个指令的执行时间相同,即一个时钟周期。这种设计简单易懂,但效率较低,因为每个指令都需要占用一个时钟周期,无法实现指令流水线和乱序执行等高级优化技术。 ### 回答2: 单周期 CPU 是计算机的一种设计方式,主要是为了实现简单而高效的执行过程。单周期 CPU 的核心思想是每一条指令只需要完成一个时钟周期,可靠性高且可维护性好,每条指令都有一个预分配的时钟周期,这种方法会带来额外的负担和延迟,同时还有占用额外资源的风险。而单指令 CPU 设计是在单周期 CPU 基础上的一种改进,它通过限制计算机的功能,使得每一条指令都具有高度相似的指令格式和执行过程。这种设计方式,有很多的优点,使得它能够更加灵活适应各种不同的需求。 单指令 CPU 设计最重要的优点是它比较容易实现,因为所有指令都具有相似的执行过程,硬件设计也就比较简单,可以节省大量的成本和时间。同时,由于指令格式的统一,程序员将更容易编写出清晰和可读性较高的代码,也有助于减少不同指令间的对齐限制等问题。此外,由于单指令 CPU 可以根据需求动态配置,因此可以适应不同的应用环境,比如平面图形、音效处理等。因此,单指令 CPU 执行效率比较低,但它的灵活性却是非常好的。 对于单指令 CPU实现,主要需要考虑硬件的设计.硬件中要求处理器尽快完成运算,以达到更高的执行速度,同时要保证所耗费的位数不会影响运算结果。为了实现这些目标,有很多种方法可以用于设计实现。计算机工程师可以借助数字逻辑、逆向工程、调试技术等一系列工具,较为轻松地完成实现。但是,由于单指令 CPU 的原理和设计都比较简单,可能无法满足更复杂的计算需求,在这种情况下,工程师会尝试更高级别的计算机设计技术,比如微处理器或高级计算系统,以实现更高性能的计算机系统。 总的来说,单指令 CPU 是一种比较特殊的设计方式,具有一定的优点和缺点,不同场景的计算需求也会影响该方法的实现方式。计算机设计师可以根据实际情况选择不同的设计策略,以满足不同的性能和实现需求。 ### 回答3: 随着计算机科技的不断进步,单周期CPU被认为是计算机结构设计的最基础单元之一。在单周期CPU中,每个指令在一个时钟周期内执行完成,因此称之为单指令CPU。接下来,我们将深入探讨单周期CPU设计实现,并对其优缺点进行比较。 单指令CPU设计针对的是简单指令集架构。在这个架构中,每个指令都是通过单个指令来完成的。对于指令集中所包含的每个指令,单指令CPU均为其分配一个固定的时钟周期。但是这种方案的缺点在于,不同指令所需要的时钟周期数是不同的,因此,在执行某些指令时,CPU会在执行完其本身所需要的时钟周期之后等待更多的时钟周期,直到总时钟周期数等于该指令的时钟周期数,这会浪费很多时间。 此外,在单指令CPU中,所有指令均以相同的速率运行,即使某些指令可能需要更多的时间来完成。尽管如此,在多数情况下,单指令CPU的优点在于其设计简单、易于理解和实现。 当谈到单周期CPU实现时,一般情况下它被分为个主要的阶段,即指令获取、指令解码、执行操作、访问存储和写回。指令获取阶段的目的是从内存中获取将要执行的指令。在指令解码阶段,CPU会解码指令,理解其意义以及所需要的具体操作。在执行操作阶段,CPU需要根据指令类型执行各种不同的操作,如算术、逻辑和分支操作等。在访问存储阶段,CPU会根据指令类型读取或写入存储器。最后,在写回阶段,结果将会被写入通用寄存器,供后续的指令使用。 在单指令CPU的优缺点方面,由于其简单性,单指令CPU通常比多指令CPU更低成本。此外,由于其设计简单、易于理解和实现,单指令CPU在启动时通常需要很少的时间。然而,由于单指令CPU的每个指令都需要相同的时钟周期,因此在执行某些指令时效率可能会较低。 综上所述,单周期CPU设计实现是计算机结构设计中最为基础的部分,但它并不是最优解。单指令CPU的优缺点主要取决于具体情况下所需求解的问题。如果要求计算机系统运行速度更快,关键在于将每个指令的执行时间限制在最短时间内。如果要求计算机系统设计更加简单和稳定,单指令CPU则是更适合的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值