手撸MIPS32——5、利用Vivado IP设计指令存储器和数据存储器
指令存储器
我用的是vivado 2019.1其他版本应该差不多
1、建立工程
名字填你想要的,这里我填inst_rom,板卡目前随便选不影响仿真
32位存储,8KB相当于2048个存储单元每个4*2048=8K每个存储单元宽度32位
User ENA pin带有使能为ena
不勾选Primitives Output Register保证上升沿采集到的访存地址信号,不然多一个时钟周期。
Coe文件相当于初始化存储器内容
init.coe
;Memory Width:16,Memory Depth:32
memory_initialization_radix=16;
memory_initialization_vector=
4000063c,00608640,00688040,00001d3c,
e01fbd27,01001c3c,00909c27,00000734,
1300e000,00001834,11000003,86000008,
21f0a003,0000c0af,01000224,0400c2af;
Summary给出存储器类型、所消耗的Block Memory、读延迟、地址端口宽度
添加TextBeach文件
直接点ok,yes
inst_rom_tb.v
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2020/05/20 22:01:00
// Design Name:
// Module Name: inst_rom_tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module inst_rom_tb();reg clka,ena;
reg [10:0] addra;
wire [31:0] douta;inst_rom uut(.clka(clka), //input wire clka.ena(ena), //input wire ena.addra(addra), //input wire [10:0] addra.douta(douta) //output wire [31:0] douta
);initial beginclka=0;ena=0;addra=0;#100 ena=1;addra=1;#50 addra =3;#50 addra =6;#50 addra =10;#50 $finish;
endalways begin#10 clka=~clka;
endendmodule
可以看到ena不使能不好用,然后addra对应coe,比如地址1是00608540
到此指令存储器相当于设计结束了,接下来的数据存储器和它操作很像。
数据存储器
建一个data_ram工程(图略)
然后:
建立TB文件
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2020/05/20 22:43:52
// Design Name:
// Module Name: data_ram_tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module data_ram_tb;reg clka,ena;reg [3:0] wea;reg [10:0] addra;reg [31:0] dina;wire [31:0] douta;data_ram uut(.clka(clka), //input wire clka.ena(ena), //input wire ena.wea(wea), //inpur wire [3:0] wea.addra(addra), //input wire [10;0] addra.dina(dina), //input wire [31:0] dina.douta(douta) //output wire [31:0] douta);initial beginclka=0;ena=0;#100 ena=1;wea=4'b1111;addra=0;dina=32'h12345678;#100 wea=4'b1001;addra=0;dina=32'habcdef90;#100 wea=4'b0000;addra=0;endalways #10 clka=~clka;endmodule
可以看到,100ns是全写,所以读出来是12345678,200ns是改1,4字节,所以变成了ab345690,然后300ns就是读出来了。
手撸MIPS32——5、利用Vivado IP设计指令存储器和数据存储器相关推荐
- 手撸MIPS32——2、基本流水线设计与实现(理论部分)
什么是流水线 流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术.流水线是Intel首次在486芯片中开始使用的.在CPU中由5-6个不同功能的电路单元组成一条 ...
- 如何手撸一个较为完整的RPC框架
[文章作者/来源]一个没有追求的技术人/https://sourl.cn/sJ4Brp 缘 起 最近在公司分享了手撸RPC,因此做一个总结. 概 念 篇 RPC 是什么? RPC 称远程过程调用(Re ...
- 如何手撸一个较为完整的RPC框架?
点击关注公众号,实用技术文章及时了解 来源:juejin.cn/post/6992867064952127524 缘起 最近在公司分享了手撸RPC,因此做一个总结. 概念篇 RPC 是什么? RPC ...
- 手撸架构,Nginx 面试40问
技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...
- 手撸架构,Elasticsearch 面试25问
技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...
- 手撸架构,Kafka 面试42问
技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...
- 手撸架构,MongDB 面试50问
技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...
- 手撸架构,Redis面试41问
技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...
- 手撸架构,Spring 面试63问
技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...
- 手撸架构,Mysql 面试126问
技术栈 传送门 JAVA 基础 手撸架构,Java基础面试100问_vincent-CSDN博客 JAVA 集合 手撸架构,JAVA集合面试60问_vincent-CSDN博客 JVM 虚拟机 手撸架 ...
最新文章
- Redis热点Key发现及常见解决方案
- 在国企当程序员是怎么样的体验?
- 【HTML】框架集(Framesets)
- python在线编译-在线编译python
- StringUtils详解
- 设计模式1实践-开篇
- 白盒测试工具 - sonar报告常见示例分析,sonar代码质量问题分析演示
- php 23种设计模型 - 组合模式(合成模式)
- 关于外键,再唠叨一下下
- leetcode-6-Z字形变换
- Qt4_使用SAX读取XML
- 如何安装win10与linux双系统,Windows10与CentOS 双系统共存完美教程
- 编写QT代码实现与FlightGear通信
- c语言读取gps模块数据类型,GPS数据读取与处理(一)之GPS模块的数据格式
- LeetCode题解:幂集
- imx 290 支持25fps
- matlab连接段端子怎么画,matlab在电路仿真PPT课件
- 错排公式——n封信放入n个信封,要求全部放错,共有多少种放法
- mysql中year()_MySQL year()函数
- 贝壳找房算数(中等)