实验二 CPU 部件实现之 ALU 和寄存器堆

这篇具有很好参考价值的文章主要介绍了实验二 CPU 部件实现之 ALU 和寄存器堆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1.1设计要求

理解和掌握 CPU 中的算术逻辑运算部件(ALU)和寄存器堆(Register File)的工作原理,并使用 Verilog 和 ModelSim 进行设计和仿真。

1. 使用 Verilog 完成 ALU 的设计,并编写测试仿真文件验证其正确性。要求:

ALU 支持 16 位的加、减、与、或以及移位运算。

2. 使用 Verilog 完成通用寄存器堆的设计,并编写测试仿真文件验证其正确性。要求:

寄存器堆包含 8 个 16 位的寄存器;

寄存器堆有两个读端口和一个写端口。

    1. 方案设计

(1)ALU方案设计

我们所要设计的ALU需要实现16位的加、减、乘、除、与非、或非、同或、异或、逻辑左移、算术左移、逻辑右移、算术右移的功能。

实验二 CPU 部件实现之 ALU 和寄存器堆

 

图 1.1 ALU算术逻辑单元图

实验二 CPU 部件实现之 ALU 和寄存器堆

 

图 1.2 ALU模块电路图

(2)寄存器堆方案设计

CPU内部通常包含若干个通用寄存器,以暂存参加运算的数据和中间结果。寄存器速度快,个数少,但是RISC CPU的设计强调设置大量的寄存器。例如,Intel 80x86系列CPU中只有8个寄存器,而SPARC RISC CPU中却有120个寄存器。MISP CPU中有32个32位的寄存器堆。

  所谓寄存器堆,就是一个寄存器的集合,为方便访问其中的寄存器,对寄存器堆中的寄存器进行统一编码,称为寄存器号或者寄存器地址,每个寄存器均通过制定寄存器好进行访问。

实验二 CPU 部件实现之 ALU 和寄存器堆

 

图 1.3 寄存器堆模块电路图

      1. Verilog 关键代码实现

(1)ALU关键代码实现

 

实验二 CPU 部件实现之 ALU 和寄存器堆

图 1.4 ALU模块描述

ALU 模块的输入输出功能及特点描述如图1.4所示,该模块的verilog 代码如下所示:

 实验二 CPU 部件实现之 ALU 和寄存器堆

 

(2)寄存器堆关键代码实现

实验二 CPU 部件实现之 ALU 和寄存器堆

 

图1.5 寄存器堆模块描述

寄存器堆模块的功能描述如表 1.2 所示,模块的verilog 代码如下:

实验二 CPU 部件实现之 ALU 和寄存器堆

 

      1. 测试文件(test)关键代码描述
  1. ALU测试代码

实验二 CPU 部件实现之 ALU 和寄存器堆

 

(2)寄存器堆测试代码

实验二 CPU 部件实现之 ALU 和寄存器堆

 

    1. 实验步骤
  1. 明确实验要求

1.1实验目的

理解和掌握 CPU 中的算术逻辑运算部件(ALU)和寄存器堆(Register File)的工作原理,并使用 Verilog 和 ModelSim 进行设计和仿真。

1.2实验内容

1.2.1 使用 Verilog 完成 ALU 的设计,并编写测试仿真文件验证其正确性。

要求:ALU 支持 16 位的加、减、与、或以及移位运算。

2. 使用 Verilog 完成通用寄存器堆的设计,并编写测试仿真文件验证其正确性。要求:寄存器堆包含 8 个 16 位的寄存器;寄存器堆有两个读端口和一个写端口。

  1. 设计实验方案

包括设计实验的功能表和电路图。

实验功能表见图1.4与1.5;

电路图如下:

实验二 CPU 部件实现之 ALU 和寄存器堆

 

图 1.6 ALU实验电路图

实验二 CPU 部件实现之 ALU 和寄存器堆

 

 

图1.7寄存器堆实验电路图

  1. 完成实验代码并调试和仿真

实验代码见1.2方案分析,调试见1.4故障与调试,仿真见1.5仿真及分析。

    1. 故障与调试
      1. 故障1

故障现象:

ModelSim中成功调试,却仿真失败。

原因分析:

首先分析项目文件名称是否有中文;其次,可能是软件安装过程中有些环境没有配置好,需要检查配置的环境。

解决方案:

项目文件名需要替换为英文;卸载ModelSim,安装Vicado,检查配置环境,直至可以正常仿真。

      1. 故障2

故障现象:

运算结果无法写入。

原因分析:

Input_Data冲突的问题。

解决方案:

将运算结果F做为输出,定义一个ALU_F作为中间变量。ALU_F和Input_Data设计一个二选一控制电路,外加一个控制信号。

      1. 故障3

故障现象:

Vivado闪退,点击 RTL ANALYSIS 下面的Open Elaborated Design闪退。

原因分析:

电脑环境不兼容,或者文件运行中出现问题

解决方案:

点击项目文件夹的.xpr文件进入vivado而不是打开vivado再打开项目。

    1. 仿真及分析

仿真结果如以下:

ALU仿真测试用例见表 1.3。

表 1.3 ALU仿真测试用例

实验二 CPU 部件实现之 ALU 和寄存器堆

 

寄存器堆仿真测试用例见表 1.4。

表 1.4 寄存器堆仿真测试用例

实验二 CPU 部件实现之 ALU 和寄存器堆 

注:修改仿真文件后需要先进行保存,之后再进行测试仿真。 文章来源地址https://www.toymoban.com/news/detail-428242.html

到了这里,关于实验二 CPU 部件实现之 ALU 和寄存器堆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CPU运算器、控制器、寄存器

    CPU内部主要由运算器、控制器、寄存器三大部分组成。 运算器 负责算术运算(+ - * / 基本运算和附加运算)和逻辑运算(包括 移位、逻辑测试或比较两个值等)。 控制器 负责应对所有的信息情况,调度运算器把计算做好。 寄存器 它们可用来暂存指令、数据和地址。既要对

    2024年02月15日
    浏览(34)
  • 【寄存器实验】

    一、实验目的 1.熟悉通用寄存器的数据通路。 2.了解通用寄存器的构成和运用。 二、实验要求 掌握通用寄存器R3~R0的读写操作。 三、实验原理 实验中所用的通用寄存器数据通路如下图所示。由四片8位字长的74LS574组成R1 R0(CX)、R3 R2(DX)通用寄存器组。图中X2 X1 X0定义输出

    2024年01月18日
    浏览(37)
  • 【单周期CPU】LoongArch | 32位寄存器DR | 32位的程序计数器PC | 通用寄存器堆Registers | 32位RAM存储器

    前言: 本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中基本时序逻辑部件设计。 💻环境:一台内存4GB以上,装有64位Windows操作系统和Vivado 2017.4以上版本软件的PC机。 💎本章所采用的指令为

    2024年02月12日
    浏览(45)
  • 计算机组成原理实验——二、寄存器实验

    1.掌握寄存器堆的工作原理和接口。 2.掌握寄存器堆的实现方法。 3.掌握寄存器堆在微处理器中承担的功能。 设计一32*32bit 的寄存器文件,即32 个 32 位的寄存器文件(寄存器组) –具备两组读端口及一组写端口; –通过读端口可从0~31 号的任意地址读取 数据; –通过写端口可

    2024年02月06日
    浏览(46)
  • 北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分  二.管脚分配 三.实现过程讲解及效果 shift_register.v d

    2024年02月05日
    浏览(60)
  • 【机组】通用寄存器单元实验的解密与实战

    ​ 🌈个人主页: Sarapines Programmer 🔥 系列专栏: 《机组 | 模块单元实验》 ⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 ​ 目录 🌺一、 实验目的 🌼二、 实验内容 🌻三、 实验详情 实验1:数据输入通用寄存器 实验2:寄存器内

    2024年01月18日
    浏览(43)
  • STM32-ADC电压采样实验(寄存器版)

    STM32F10X系列支持三路ADC,其ADC通道及对应IO口如下表所示: 其能接受的电压输入范围一般为0-3.3V(V REF- ≤ V IN ≤ V REF+ ),因此,如果需要测量超出0-3.3v量程范围的电压数据,需要在外围硬件增加分压电阻,将电路转换到0-3.3V量程范围内再进行采集。 这里用于做ADC采集的引脚使

    2024年02月15日
    浏览(52)
  • 深度理解STM32的串口实验(寄存器)【保姆级教程】

    USART—通用同步异步收发接收器,是一个串行通信设备,可以和外部设备进行灵活的全双工数据交换,有别于USART还有一个UART(在原来的基础上裁剪掉了同步通信功能(时钟同步)),串行通信一般是以帧格式传输数据,一帧一帧的传。 协议层: 串口通信的一个数据包包含从

    2023年04月15日
    浏览(40)
  • 南京邮电大学电工电子(数电)实验报告——计数器 & 移位寄存器

    1、掌握计数器的逻辑功能及应用方法 2、掌握任意进制计数器的设计方法 3、掌握数字电路多个输出波形相位关系的正确测试方法 4、了解非均匀周期信号波形的测试方法 设计一个分频比N=5的整数分频电路,观察并记录时钟脉冲和输出波形。 选用cb4cle二进制计数器模块,采用

    2024年02月03日
    浏览(83)
  • 设计一个8位双向循环移位寄存器vhdl

    设计一个8位双向循环移位寄存器vhdl 状态表如下: CLK RESET LOAD M 工作状态 × 0 × × 复位 ↑ 1 1 × 置数 ↑ 1 0 1 左移 ↑ 1 0 0 右移 (4)不考虑串行输出,移动不能用移位操作符。

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包