精选文章 异步简单双口RAM的实现

异步简单双口RAM的实现

作者:梅菜扣肉鱼丸粗面 时间: 2020-08-05 04:59:36
梅菜扣肉鱼丸粗面 2020-08-05 04:59:36

RAM的分类

RAM,随机存取存储器,有单口和双口之分,单口RAM只有一个数据线和地址线,不能同时进行读取操作,双口RAM有读和写两个地址线和数据线。因此双口RAM使用要比单口RAM广泛。

双口RAM有真双口和简单双口之分,真双口有两个读端口和两个写端口,简单双口只有一个读端口和一个写端口,一般读写要求不高时,简单双口RAM就能满足我们的需求。另外根据时钟的不同,RAM还有同步异步之分,同步RAM是指读写采用同一个时钟,异步RAM是指读写的时钟不同。

异步简单双口RAM的实现

实现的双口RAM的功能是:建立一个宽度为8bit深度为8的RAM,然后把0-7写入,并在尚未完全写完时就开始读取数据,最终全部读出。程序如下:

module single_dualram(
	input	wire		clk1,//写时钟
	input	wire		clk2,//读时钟
	input	wire		we,//写使能
	input	wire		rd,//读使能
	input	wire [2:0]	we_addr,//写地址
	input 	wire [2:0]  rd_addr,//读地址
	input	wire [7:0]  datain,//写数据
	output  reg  [7:0]  dataout//读数据
	);
reg [7:0]mem[7:0];

always @(posedge clk1) begin
	if (we == 1'b1) begin
		mem[we_addr] <= datain;
	end
end

always @(posedge clk2) begin
	if (rd == 1'b1) begin
		dataout <= mem[rd_addr];
	end
end

endmodule

testbench模块:

`timescale 1ns/1ns
module tb_single_dualram();
reg				clk1,clk2;
reg				we,rd;
reg	[7:0]		we_addr,rd_addr;
reg	[7:0]		datain;
wire[7:0]		dataout;

initial begin
	clk1 = 0;
	clk2 = 0;
	we   = 0;
	rd 	 = 0;
	we_addr = 0;
	rd_addr = 0;
	datain  = 0;
end

always #10 clk1 = ~clk1;
always #10 clk2 = ~clk2;

initial begin
	#25
	we = 1;
	#50
	rd = 1;
	#100
	we = 0;
end

initial begin
	#20
	repeat(7)
	#20
	begin
		we_addr = we_addr +1;
		datain  = datain + 1;
	end
end
initial begin
	#75
	repeat(7)
	#20
	begin
		rd_addr = rd_addr +1;
	end
end

initial
#240
rd = 0;

single_dualram inst_single_dualram(
	.clk1    (clk1),
	.clk2    (clk2),
	.we      (we),
	.rd      (rd),
	.we_addr (we_addr),
	.rd_addr (rd_addr),
	.datain  (datain),
	.dataout (dataout)
	);

endmodule

波形图如下,可以看到效果达到预期:

异步简单双口RAM的实现1

在modelesim中检查存储器信息,可以发现已经将0-7存入RAM,如下图所示:

异步简单双口RAM的实现2 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:JDK与IDE的安装与配置

下一篇:逆向地理编码(坐标-地址)

您可能感兴趣

  • 阿里面试,208道Java高频题首发,拿下高薪offer不是梦

    Java 基础 1. JDK 和 JRE 有什么区别? 2. == 和 equals 的区别是什么? 3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗? 4. final 在 Java 中有什么作用? 5. Java 中的 Math. round(-1. 5) 等于多少? 6. String 属于基础的数据类型吗? 7. Java 中操作字符串都有...

  • 对云桌面、桌面云、私有云的一些看法

    最近整理了一下自2017年以来自己对私有云服务平台构建的一些认识,并以刚刚为某后勤保障部队单位提供的小规模私有云服务平台为例阐述。 私有云平台、云计算服务与虚拟化: 我个人认为这三个名称分别指涉了三个不同的事物: 私有云平台:在实践中,私有云平台时包含了服务端软硬件集成和客户端软硬件集成的一整套特定业务需求场景的、已经处于落地实施阶段的解决方案项目。 比如某后勤保障部队为简化征兵流程、节省相...

  • Java面试题全集(上)33 - 64

    原帖:https://blog.csdn.net/jackfrued/article/details/44921941 个人认为原帖的排版不太好,所以复制过来重新排下版,有少量的修改 本帖主要是给自己看的,有不懂的地方可以看下原帖 33、一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以,但一个源文件中最多只能有一个 public 类且文件名必须和公开类的类名完全...

  • 210道面试官必问经典面试题总结分享|Java+JVM+数据库+算法+Spring+中间件+设计模式超详细整理

    “金九银十”的秋招热潮已经来了,由于疫情影响、今年的秋招来的格外早。小编从今天六月份开始备战,不负众望的成功拿下了一些大厂的offer。经过这么多次的面试,凭借自己的面试成功经验和这两个月的准备,小编整理了一份面试清单分享给大家,希望能给和我一样为了秋招奋战多时的码农亲人们一点帮助(java方向),觉得有帮助的同学可以转发点个赞哦~~祝大家面试顺利,一举拿下大厂offer! 一、JAVA基础...

  • 2020前端面试专题整理

    全是从网上整理的(狗头保命) vue3.0 与vue2.0的区别:https://juejin.im/post/6844904128628391944 目录结构发生变化: 移除了配置文件目录(config与build文件夹),但是多了env.production与env.development,除了文件位置,实际配置和2.0没有什么不同,没有config文件,跨域配置转移到vue.confi...

  • WebRTC学习

    一. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底, 那时Google已经在Android源码中加入了webrtc源码,放在/external/webrtc/, 但是Android并没有用到它,更没有被浏览器使用。 当时试图在Android 2.3(Gingerbread)高通平台的手机上 用H.264 硬件codec替换掉WebRTC缺省使用的VP8...

  • 《深入浅出玩转FPGA》笔记

    关于这本书,算是囫囵吞枣地读完了。网上很多人推荐这本书,评价很不错。以我的观点来看,确实是本不错的关于FPGA方面的书,作者确实经验丰富,书中有很多值得学习的东西,但是可能不是很适合初学者看,比较适合有一定项目经验的人读。因为这本书本身就是将作者许多自己的亲身经历总结出来的经验编纂出来的,可能作者也是看烦了市面上一众读物都秉持着介绍某类知识一定要事无巨细地从头说到尾的风格,所以作者对基础的介...

  • 计算机必备专用英语词汇

    非常好的单词整理,转载一下当作笔记 1.单词说明:   command n. 命令,指令 [kə'mɑ:nd]   单词拼写 名词 单词含义 音标(发音)   提示:着重记忆单词对应的意思,有能力最好词性也记忆。 2.词性说明: n v vi vt conj prep pron adj adv 名词 动词 非及物动词 及物动词 连词 介词 代词 形容词 副词 3.单词列表: 1.file,n...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。