计算机组成原理实验报告四

实验四  数据通路的组织

  • 实验内容

(1) 了解数据通路的组织方法。

(2) 掌握指令执行过程的控制原理。

(3) 设计一个单总线结构的数据通路,支持 Demo_IS 指令系统的取数(LD)、减法(SUB)、双字长分支(JNZ)指令。

(4) 将测试程序存入主存,根据程序执行过程的μOPCmd(微操作命令)序列,控制所设计数据通路,来验证数据通路的正确性。

二、电路设计与实现

  1. 需求分析:本实验要求支持Demo_IS指令系统的取数(LD)、减法(SUB)、双字长分支(JNZ)指令,其功能分别为:RD←M[(RS)]、RD←(RD)-(RS)、ZF=0 时 PC←addr。其中,RD、RS表示寄存器编号,(Rx)、M[(Rx)]表示寄存器、存储单元的内容,addr为直接寻址方式的地址码,ZF 为上一条指令所产生的结果状态标志。
  2. 模块划分:由Demo_IS指令系统分析结果可见,ALU应具有加法、减法功能,需产生状态标志ZF,可使用实验二设计的ALU来实现;GPRs应包含4个8位寄存器,具有1个读端口和1个写端口,可使用实验一设计的寄存器组来实现;MEM的容量应≤256×8位,可使用实验三设计的存储模块来实现。为了简化控制,假设PC具有计数功能,可用 Quartus II 提供的lpm_counter 模块来实现。
  3. 引脚组织与器件选择:为了满足Demo_IS中3条指定指令的要求,数据通路的功能部件应包括ALU、寄存器组GPRs、状态寄存器PSR、存储器MEM、程序计数器PC、指令寄存器IR,以及地址寄存器MAR、数据寄存器MDR。
  4. 电路组成:

三、电路正确性验证

1、电路仿真

电路图:

波形图:

  1. 结果分析

    前两组时钟周期实现RD←M[(RS)],将rom中0号单元的内容(44)读入0号寄存器,将rom中1号单元的内容(11)读入1号寄存器,延时分析:由于实验三中使用了lpm_latch(锁存器,在时钟上升沿存入),在第二个时钟周期到来时才有输出。故第二组时钟周期先输出的是latch在第一个时钟周期内存入的地址读出的数据(44),再输出新存入的(11),仿真结果正常。(该延时在后面的PC的JNZ也有体现)

    第三到五组时钟周期分别实现Y←(RS),Z←(RD)-(RS),输出结果Z,保证每次只有一个数据流动在总线上,即可避免输出。44-11=33,结果正确。

    最后一组时钟周期实现JNZ指令,由于PC连接总线输出总与读取主存产生的输出冲突,故增加输出,专用于PC。使用计数器,在时钟周期开始,将sclr置为高电平对PC进行初始化,此后每个时钟周期自动+1,sload是置数端,load恒置一,ZF=1控制跳转,(为了方便,ZF手动输入,不从ALU接入),此时PC=8,读取主存,ROM第8个单位值为28,在第二个时钟周期上升沿读出,而第一个时钟周期,计数器已完成置数而latch并未存入新地址,读出的上一次地址产生的11,结果正确。

  2. 实验小结
  3. 本实验的总线仅有output左边的一小段,将所有器件的输出连接上三态门再连接output,实际上属于局部的点点互连,并不完全是单总线,为了防止冲突,bus_input没有直接连接output,pc也没有直接连接output,是不美观的。

### 计算机组成原理实验的内容概述 #### 实验目的 计算机组成原理课程中的实验是关于指令系统的深入研究和实现。通过该实验,学生能够掌握基本指令集的设计原则以及如何利用这些指令完成特定的任务[^1]。 #### 主要内容 本实验主要围绕着构建一个简单的处理器模型展开工作,重点在于理解并实践不同类型的机器级操作命令。具体来说: - **指令格式设计**:学习定义每种指令的操作码长度及其功能字段布局方式。 - **数据通路搭建**:根据所选微架构特点连接各个硬件组件形成完整的执行路径。 - **控制逻辑编写**:开发相应的状态机来协调各阶段的动作顺序以确保程序正确运行。 #### 关键知识点解析 为了更好地理解和实施上述任务,在此之前还需要复习一些基础概念,比如寄存器文件的工作机制、ALU 的运算特性等[^2]。 ```python # Python伪代码展示部分核心算法思路 def execute_instruction(instruction): opcode = instruction[:4] # 获取前位作为操作码 if opcode == '0000': # 加法指令示例处理流程 result = register_file[instruction[8:12]] + \ register_file[instruction[12:]] store_result(result) def store_result(value): address = get_destination_address() memory[address] = value ``` #### 工具支持 对于此类动手型的学习活动,《计算机组成原理实验箱教程》提供了详细的设备说明和技术参数指南,帮助使用者熟悉实际环境中可能遇到的各种情况[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值