数字IC设计系列----单端口RAM、双端口RAM、同步FIFO、异步FIFO

news2024/11/17 15:53:56

一、单端口RAM原理及实现

1.1、概念/原理

在内存空间中开辟出一段固定大小的内存用于存储数据,每一个数据所占的bit位称之为位宽,这段内存空间中数据的总数称之为深度。例如reg [7:0] mem [255:0],这段内存空间中每一个数据的位宽为8bit,深度为256。

在这段内存空间中,每个数据分配给一个地址,如上例深度为256,可以用8bit的地址来表示所有的数据,0000_0000则表示第0个数据,1111_1111则表示第255个数据。

外部信号通过固定的时钟节拍,通过使能信号地址信号来读取RAM中特定位置的数据或者向RAM中特定位置写入数据。

1.2接口

1.3、Verilog实现

module Single_Port_RAM
(
	//system input
	 input 		clk
	,input		rst_n
	
	//data input
	,input 						enable_wr		//allow the user to read or write the data
														//when enable_wr == 0,it means to write the data from RAM
														//when enable_wr == 1,it means to read the data from RAM
	,input		 	[7:0]		data_write
	,input			[7:0]		address
	
	//data output
	,output	reg 	[7:0]		data_read
);
 
//setup RAM which has the width of 8 and depth of 256
localparam 	mem_width = 7;
localparam	mem_depth = 255;
reg	[mem_width:0]		mem	[mem_depth:0];
 
always @ (posedge clk or negedge rst_n)
begin
	if (!rst_n)
		data_read <= 8'd0;
	else if (!enable_wr)
		mem[address] <= data_write;
	else if (enable_wr)
		data_read <= mem[address];
end
endmodule

1.4、优缺点分析

缺点:同一时刻只能对同一地址进行读操作或者写操作,而不能同时进行;地址处的数据为0时也会读取,可能会发生错误。

优点:简单,不需要协调读写操作;

1.5、TB

验证策略: 先写厚读

写: 在enable为低时,从0地址开始,每次地址加1时加到255,每次给/写一个随机数。查看相应地址中的数据和给/写的输出是否相同,相同则写成功。

读: 在enable为高时,从0地址开始,每次地址加1时加到255,每次一个数。查看读出的数和相应地址中的数据是否相同,相同则读成功。

2、双端口RAM原理及实现

2.1、原理

参考如上的单端口RAM,双端口RAM在单端口RAM的基础上,将使能信号分为读使能信号写使能信号,将地址信号分为读地址信号写地址信号

2.2 接口

2.3、Verilog实现

module Dual_Port_RAM
(
	//system input
	 input			clk
	,input			rst_n
	
	//signal of read
	,input						read_en				//when read_en == 1,read the data from mem according to read_addr
	,input			[7:0]		read_addr
	,output	reg 	[7:0]		read_data
	
	//signal of write
	,input						write_en				//when write_en ==1,write the data to mem according to write_addr
	,input			[7:0]		write_addr
	,input			[7:0]		write_data
);
 
//setup RAM which has the width of 8 and depth of 256
localparam 	mem_width = 7;
localparam	mem_depth = 255;
reg	[mem_width:0]		mem	[mem_depth:0];
reg	[7:0]		i;
 
always @ (posedge clk or negedge rst_n)
begin
	if (~rst_n)                            
		for (i=0;i<=(mem_depth);i=i+1)        //ram初始化
			mem[i] <= 8'd0;
	else if (write_en)
		mem[write_addr] <= write_data;
end
 
always @ (posedge clk or negedge rst_n)
begin
	if (~rst_n)
		read_data <= 8'd0;		             //数据初始化
	else if (read_en)									
		read_data <= mem[read_addr];
	else
		read_data <= read_data;				//when read_en is disabled, read_data maintains the data before 	
end
endmodule

 2.4、优缺点分析

优点:因为地址分为读地址和写地址,所以可以同时对RAM进行读写操作。

1.5、TB

和单端口类似

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

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

相关文章

VS2019中使用printf函数报错处理方法

VS2019中使用printf函数报错处理方法 在使用vs2019学习OpenCV的过程中&#xff0c;使用简单的printf函数&#xff0c;竟然编译不过去&#xff0c;VS2019报错&#xff1b; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 ‘sprintf’: This function or variable may…

基础概念回顾:云原生应用交付

原文链接&#xff1a;基础概念回顾&#xff1a;云原生应用交付 转载来源&#xff1a;NGINX 开源社区 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 尽管云原生应用开发诞生于 21 世纪初&#xff0c;但是在术语使用方面还是非常混乱。本文将带您了解常见的术语和问题。…

图像处理领域之►边缘检测大合集◄【应该是全网仅有的了吧】

图像处理领域之►边缘检测‧大合集◄ 概述 {\color{Brown}概述} 概述 数据集 {\color{Purple}数据集} 数据集 实践 {\color{Red}实践} 实践 深度学习方法 {\color{Blue} 深度学习方法} 深度学习方法 机器学习方法 {\color{Blue} 机器学习方法} 机器学习方法 基于传统方法 {\col…

如何隐藏或修改Docker容器中的Nginx响应头中的Server

背景介绍 现在大部分项目通过Nginx作为反向代理&#xff0c;实际由于安全审计要求需要隐藏或修改响应头的Server信息&#xff0c;传统的项目直接部署在nginx服务器中&#xff0c;只需要在nginx服务器安装ngx_http_headers_more_filter_module插件&#xff0c;然后通过修改ngin…

Linux服务器占用处理手记

磁盘占用定位处理 查看磁盘占用情况&#xff1a; df -h 查看每个目录的占用情况&#xff1a; du -h -x --max-depth1 查找大文件和目录 du -sh /* du -sh /home/* 可参考&#xff1a; Linux垃圾清理指北_linux 清理垃圾_智商二五零_的博客-CSDN博客 查看CPU和内存占用情…

SpringBoot底层原理----配置优先级/Bean管理/springboot原理

配置优先级 最终得到以下配置优先级:(从低到高) Bean管理 获取bean bean作用域 第三方bean Springboot原理 起步依赖 原理就是依赖传递-通过引入web依赖将所有必要的都同时引入 自动配置--面试高频题目 即:在pom文件中引入依赖后,他是如何自动配置给IOC容器的 springboot采…

Xilinx SDK编译完成自动生成SREC文件(适用于ISE、Vivado、Vitis)

把elf转换成srec格式的常规方式&#xff0c;是打开Program Flash Memory界面&#xff0c;选择elf文件&#xff0c;点击Convert ELF to SREC 会在hardware目录下的cache文件夹下生产srec文件。 可以通过配置编译后执行命令&#xff0c;在每次编译完成自动生产srec文件。 会在…

安卓备份基带分区 备份字库 步骤解析 以免误檫除分区或者“格机” 后悔莫及

玩机搞机---安卓机型mtk和高通芯片查看分区 导出分区 备份分区的一些工具分析 修复基带 改串码 基带qcn 改相关参数 格机危害 手机基带的重要性前面几期博文我都有相关的说明。他区别于别的分区。而且目前手机的安全性越来越高。基带分区基本都是专机专用。而不像早期机型一…

小皮面板配置Xdebug,调用单个php文件

小皮面板配置Xdebug 首先下载phpstrom&#xff0c;和小皮面板 打开小皮面板&#xff0c;选中好要使用的php版本 然后点击【管理】> 【php扩展】> 【xdebug】 然后打开选中好版本的php位置 D:\Program_Files\phpstudy_pro\Extensions\php\php7.4.3nts打开php.ini文件…

【数据结构】—从直接插入排序升级到希尔排序究极详解(含C语言实现)

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f525;这就不得不推荐此专栏了&#xff1a;C语言 ♈️今日夜电波&#xff1a;透明で透き通って何にでもなれそうで—HaKU 2:05 ━━━━━━️&#x1f49f;──────── 5:38 …

干货分享 | 关于同星硬件接口卡及TSMaster软件常见问题QA指南

TSMaster是同星智能开发的一款国产汽车总线工具链软件平台&#xff0c;是全方位汽车总线设计、仿真、分析、诊断和标定的专业工具&#xff0c;支持从需求分析到系统实现的整个系统开发过程。同星智能硬件接口卡可以提供CAN, CAN FD, LIN, FlexRay, 与Ethernet等网络的开发、仿真…

李宏毅-hw7-利用Bert完成QA

一、查漏补缺、熟能生巧&#xff1a; 只有熬过不熟练的时期&#xff0c;反复琢磨&#xff0c;才会有熟练之后&#xff0c;藐视众生的时刻 1.关于transformers中的tokenizer的用法的简单介绍&#xff1a; from transformers import BertTokenizerFast# 加载预训练的BERT模型to…

uniapp Echart X轴Y轴文字被遮挡怎么办,或未能铺满整个容器

有时候布局太小&#xff0c;使用echarts&#xff0c;x轴y轴文字容易被遮挡&#xff0c;怎么解决这个问题呢&#xff0c;或者是未能铺满整个容器。 方法1&#xff1a; 直接设置 containLabel 字段 options: { grid: { containLabel: true, },} 方法2: 间接设置&#xff0c;但是…

微信小程序页面栈超出导致页面卡死

微信小程序页面栈不能超出10个 超出10个之后无法进行点击选择跳转 解决方法&#xff1a; 跳转的时候&#xff0c;判断之前页面栈里是否存在要跳转的页面&#xff0c; 如果存在之前页面&#xff0c;就navigateBack返回之前页面&#xff0c; 如果不存在之前页面&#xff0c;判断…

RocketMQ 核心编程模型以及生产环境最佳实践

文章目录 1、RocketMQ的消息模型2、深入理解RocketMQ的消息模型2.1、RocketMQ客户端基本流程2.2、消息确认机制2.2.1、 发送消息的方式第一种称为单向发送第二种称为同步发送第三种称为异步发送 2.2.2、状态确认机制2.2.3、消费者也可以自行指定起始消费位点 2.3、广播消息2.4、…

nginx 报错[emerg]: unknown directive “锘? in E:\nginx-1.18.0/conf/nginx.conf:3

报错&#xff1a;nginx 报错[emerg] 32408#14080: unknown directive "锘? in E:\nginx-1.18.0/conf/nginx.conf:3 原因&#xff1a;使用nginx服务时&#xff0c;用txt记事本打开编辑了nginx.conf文件&#xff0c;类似WINDOWS自带的记事本等软件&#xff0c;在保存一个以…

mysql触发器triggers

文章目录 1、创建触发器2、 查看触发器3、删除触发器 1、创建触发器 语法&#xff1a; CREATE TRIGGER 触发器名称 BEFORE/AFTER INSERT/UPDATE/DELETE ON 表名 FOR EACH ROW BEGIN SQL逻辑 END;BEFORE 或 AFTER 表示之前 还是 之后触发 INSERT 或 UPDATE 或 DELETE 表示监听…

PostgreSQL 查询某个属性相同内容出现的次数

查询某个数据库表属性 name 相同内容出现出现的次数&#xff0c;并按次数从大到小排序 SELECT name, COUNT(*) AS count FROM your_table GROUP BY name ORDER BY count DESC;示例 select project_id, COUNT(*) AS count from app_ads_positions group by project_id order b…

(WRF/Chem)在大气环境领域实践技术应用

随着我国经济快速发展&#xff0c;我国面临着日益严重的大气污染问题。近年来&#xff0c;严重的大气污染问题已经明显影响国计民生&#xff0c;引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果&#xff0c;同时气象因…

智能报修管理系统的作用和功能

智能报修管理系统针对不同的服务对象、不同的服务内容、不同的紧急情况&#xff0c;不同的区域&#xff0c;自定义设定响应指标&#xff0c;承诺客户在多长时间内响应或是解决问题&#xff0c;保障服务质量。随着报修、后勤、运维等规模日趋庞大&#xff0c;许多单位每日需处理…