实验2 存储器设计与实现【计算机组成原理】

news2024/11/20 0:47:34

实验2 存储器设计与实现【计算机组成原理】

  • 实验2 存储器设计与实现
    • 一、实验目的
    • 二、实验环境
    • 三、实验原理
    • 四、实验任务
    • 五、实验结果:
    • 六、心得体会:

实验2 存储器设计与实现

一、实验目的

  1. 掌握单端口RAM和ROM原理和设计方法。
  2. 掌握32位数据的读出和写入方法。
  3. 掌握ModelSim和ISE\Vivado工具软件。
  4. 掌握基本的测试代码编写和FPGA开发板使用方法。

二、实验环境

  1. 装有ModelSim和ISE\Vivado的计算机。
  2. Sword\Basys3\EGo1实验系统。

三、实验原理

片内存储器分为RAM和ROM两大类。RAM是随机存储器,存储单元的内容可按需随意取出或存入。这种存储器在断电后将丢失所有数据,因此一般用来存储一些短时间内使用的程序和数据。

ROM即只读存储器,是一种只能读出事先存储的数据的存储器,其特性是存入的数据无法改变。也就是说,这种存储器只能读不能写。由于ROM在断电之后数据不会丢失,所以通常用在不需经常变更的电子资料。
通常情况下,存储器系统是按照字节(Byte)编址,但CPU访问时,通常按照字(Word)读取,因此地址就有字节地址和字地址的区别。以32位处理器为例,如图2所示。

图2 32位处理器字节编址与字地址示意图

四、实验任务

  1. 用Verilog HDL设计深度为1K个字单元、每个单元位宽为32 bit的单端口ROM,在Modelsim上完成仿真测试,要求用组合逻辑完成,按照字地址读取,要求读取采用组合逻辑。
  2. 用Verilog HDL设计深度为1K个字单元、每个单元位宽为32 bit的单端口RAM,在Modelsim上完成仿真测试,要求能够按照字地址进行读和写操作,其中读取用组合逻辑完成,写入用时序逻辑完成。

图3 32位存储器物理结构示意图

五、实验结果:

(1)ROM
1.运算程序:

module ROM(addr, data, oe);
	output [31:0] data;
	input [31:0] addr;
	input oe;
	reg[31:0] mem [0:1023];
	assign  data= (oe==0)?mem[addr[11:2]]:8'hzz;
	initial
	  begin 
	   mem[0]=32'hffff_ffff;
	   mem[1]=32'h1111_1111;
	   mem[2]=32'h8888_8888;
	   mem[3]=32'h2222_2222;
	   mem[4]=32'haaaa_aaaa;
	  end
endmodule

2.测试程序:

module ROM(addr, data, oe);
	output [31:0] data;
	input [31:0] addr;
	input oe;
	reg[31:0] mem [0:1023];
	assign  data= (oe==0)?mem[addr[11:2]]:8'hzz;
	initial
	  begin 
	   mem[0]=32'hffff_ffff;
	   mem[1]=32'h1111_1111;
	   mem[2]=32'h8888_8888;
	   mem[3]=32'h2222_2222;
	   mem[4]=32'haaaa_aaaa;
	  end

endmodule
3.仿真图
在这里插入图片描述

(2) RAM
1.运算程序:

module RAM(
    input wire [31:0] addr,
    input wire [31:0] inData,
    input wire cs,
    input wire we,
    input wire clk,
    input wire [31:0] outData
);
    reg [31:0] memData [1023:0];
    assign outData=(!cs&&we)?(memData[addr[11:2]]):(32'hzz);
    always@(posedge clk)
	if(!cs&&!we)
	    memData[addr[11:2]]=inData;
	else;
endmodule

2.测试程序:

module RAM_tb;
   reg [31:0]addr;
   reg [31:0]inData;
   reg cs,we;
   reg clk;
   wire [31:0]outData;
   RAM U1(addr,inData,cs,we,clk,outData);
   always #10 clk=~clk;
   initial 
       begin
          cs=0;we=0;
          clk=0;addr=0;inData=11;
       #50 addr=4;inData=12;
       #50 addr=8;inData=13;
       #50 we=1;
       #50 addr=0;
       #50 addr=4;
       #50 addr=8;
       end
endmodule

3.仿真图

在这里插入图片描述

六、心得体会:

通过本次实验的学习,我掌握了单端口RAM和ROM原理和设计方法;掌握了32位数据的读出和写入方法;掌握了ModelSim和ISE\Vivado工具软件;掌握了基本的测试代码编写和FPGA开发板使用方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode-中等】343. 整数拆分(详解)

题目 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 力扣:题目链接 方法1:动态规划 完全不了解动态规划? 动态规划…

图像运算和图像增强九

图像运算和图像增强九 图像锐化之 Roberts、Prewitt 算子实现边缘检测 (1)图像锐化 图像锐化的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是图像受到了平均或积分运算,因此可以对…

LeetCode刷题(python版)——Topic70. 爬楼梯

一、题设 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例…

Flutter混编之路IOS插件0基础开发(mac环境)

本文默认你安装了Android Studio、Xcode具备flutter开发环境,并且会dart语言的基础使用,Android、ios原生开发不会也没啥关系,就是会很费劲啦。 1.创建插件 在Android studio 点击File-->new Flutter Project-->Flutter 取好名字&…

Web大学生网页作业成品:基于html制作中国科技发展网站设计题材【航天之路7页】HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Celery快速使用(定时任务、Django中使用Celery、秒杀逻辑、双写一致性)

文章标题一、Celery快速使用二、Celery包结构三、Celery异步任务 延时任务 定时任务四、Django中使用Celery五、秒杀逻辑六、双写一致性1)路飞项目接口加缓存2)Celery定时任务实现双写一致性一、Celery快速使用 简单介绍Celery Celery官网:http://www.…

busybox的实现原理分析(C语言实现简易版的busybox)

1、linux中实现命令的两种方式 1.1、命令都是单独的可执行程序 aston:~$ ls -l /bin/ls -rwxr-xr-x 1 root root 138208 2鏈 8 2022 /bin/ls aston:~$ aston:~$ ls -l /bin/mkdir -rwxr-xr-x 1 root root 68096 2鏈 8 2022 /bin/mkdir aston:~$ aston:~$ file /bin/ls…

元数据性能大比拼:HDFS vs S3 vs JuiceFS

元数据是存储系统的核心大脑,元数据性能对整个大数据平台的性能和扩展能力至关重要。尤其在处理海量文件的时候。在平台任务创建、运行和结束提交阶段,会存在大量的元数据 create,open,rename 和 delete 操作。因此,在…

Sass 使用说明

CSS 样式表越来越大、 越来越复杂、越来越难以维护。这就是预处理可以提供帮助的地方。 Sass 为你提供了 CSS 中还不存在的特性,例如变量、 嵌套、混合、继承和其它实用的功能,让编写 CSS 代码变得有意思。 最直接的方式就是在命令行中调用 sass 命令。安…

java和vue的狱警管理系统监狱系统狱务管理系统

简介 狱警管理系统监狱系统狱务管理系统,主要是管理罪犯教育改造、劳动改造、案件管理,罪犯信息管理等 演示视频 https://www.bilibili.com/video/BV1VG411P7YL/?zw&vd_sourcefa4ffd66538a5ca679a754398a6fdb5f 技术:springbootvueel…

git的下载与安装

1. 下载地址 根据自己的电脑配置信息,选用合适的版本进行下载即可,我的电脑上64位win11,所以我选择了64位的widnows版本,下面其他内容也以此版本展开。 windows:Git - Downloading Package macOS:Git - …

Linux-进程管理

基本介绍 在Linux中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号(pid) 程序运行起来就产生了进程 ps ps命令用来查看在目前系统中,有哪些正在执行的进程,以及他们执行的状况,可以不加任何参…

K_A05_004 基于 STM32等单片机驱动2X2块(8X8)点阵模块(MAX7219)显示0-9与中文

目录 一、资源说明 二、基本参数 1、参数 2、引脚说明 三、通信协议说明 工作时序 对应程序: 四、部分代码说明 1、接线说明 1.1、STC89C52RC2X2块(8X8)点阵模块(MAX7219) 1.2、STM32F103C8T62X2块(8X8)点阵模块(MAX7219) 2、亮…

年产10000吨餐厨垃圾制备氨基酸有机肥工厂设计

目录 摘 要 I Abstract II 第1章 餐厨垃圾概况 1 1.1餐厨垃圾性质 1 1.2餐厨垃圾无害化处理的必要性 1 1.3餐厨垃圾资源化处理工艺 1 1.3.1加工有机肥 2 1.3.2好氧堆肥 3 1.3.3厌氧消化 3 第2章 项目概述 4 2.1氨基酸有机肥的介绍 4 2…2 氨基酸有机肥的性质 4 2.3 氨基酸有机肥…

重温Python基础,都是最基础的知识点

前言 最近有很多朋友刚接触python学的还是有点模糊 还有的朋友就是想重温一下基础内容,毕竟基础不牢地动山摇 行吧,就总结了以下的一些知识点,可以都看看哈 一、开发环境搭建 更多学习资料.点击领取即可 1.1 Python解释器的安装 Python解…

三个最常见OSPF故障的实操检测步骤

大家好,我是小咖老师。 OSPF排错咱们已经讲过几期了,有同学反馈说看不懂,内容太多也不好记,今天咱就挑最常见的三个,给大家分析讲解一下。 1、OSPF邻居建立不成功 2、OSPF不能发现其他区域的路由 3、CPU过高问题 O…

-1- threejs 场景常见的方法和属性

场景常见的方法和属性场景的作用场景的坐标系常用的属性常用的方法场景的作用 场景(THREE.Scene)用于存储物体、光源、摄像机及其渲染所需要的其他的对象集合。THREE.Scene 对象又是被称为场景图,它不仅仅是一个对象数组,还包含了整个场景图树形结构中的…

Android API—序列化与反序列化学习+案例

概述 序列化是指将对象的状态信息转换为可以存储或传输形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后可以通过从存储区中读取或者反序列化对象的状态,重新创建该对象. 序列化:利用ObjectOutputStream,把对象的信息,按照固定的格式转成一串字节值输…

论文笔记: 数据驱动的地震波形反演--健壮性与泛化性研究

摘要: 分享对论文的理解, 原文见 Zhongping Zhang and Youzuo Lin, Data-driven seismic waveform inversion: A study on the robustness and generalization. 1. 论文贡献 提供实时预测的 VelocityGAN与其他基于编码器-解码器的数据驱动地震波形反演方法不同, VelocityGAN …

c++ - 第11节 - stack和queue类

1.标准库中的stack类 1.1.stack类 stack类的文档介绍:https://cplusplus.com/reference/stack/stack/?kwstack 注: 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提…