双端口RAM读数据延迟问题(modelsim验证通过)_winson_c的博客-程序员秘密

闲来无事玩玩异步FIFO,然而该过程发现自己对,双端口RAM不了解,导致有些问题无法debug,故特地花了两个小时研究了一下双端口RAM。那么为什么要使用双端口的RAM,原因很简单:在异步FIFO中数据就存放于RAM中,那通过例化IP的形式是最简便的,难道不是吗?简单聊一聊我对RAM读写操作的理解。

当读使能信号write_en有效时,如果这个时候wdata有数据,则会写入到RAM中。随着waddr的增加,数据写入的地址不同。如:write_en = 1(高电平有效),wdata=11,12,13,14,15(包含5个clock的数据待写入RAM中)waddr = 0~4(0-4分别表示RAM中不同地址),在wclk的作用下,wdata= 11,12,13,14,15,分别写入RAM中0, 1, 2, 3, 4的地址中。非常关键的一点,写入不存在延时任何一个clock。如下图所示
在这里插入图片描述
本次讨论的重点是,RAM的读数据过程。同样读数据时需要读使能信号,read_en(高电平有效)或者是write_en = 0(写时1有效,读时0有效)。在rclk的作用下,raddr= 0~4(表示要读的数据位于RAM中的0-4的地址中,如raddr= 4,读出数据rdata = 15。)注意注意注意,当raddr = 4 时,此时在同一竖线前方对应的数据并不是15,即radata 不为15,而是14。相信不了解问题所在的同学就会大呼惊讶,这是什么鬼,读的数据不对吗,为啥会变成raddr=3对应的数据。完了肯定出错了。别急别急,其实是读数据时存在1个clock的延时,这是RAM读写本身存在的问题,是无法避免的。所以我们看到raddr = 4 对应于raddr = 2时的数据。如下图所示。如果你有强迫症你可以把raddr信号延迟2个clock,让raddr和rdata数据对齐。

在这里插入图片描述

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/winson_cys/article/details/101372581

智能推荐

高效开发#在Eclipse工具中如何导入JDK类库源码,配置操作*全程看图*_CRUD_CODER_LIN的博客-程序员秘密_怎么导入jdk类库

【高效开发】在Eclipse中如何快速查找Java源码,配置操作<全程看图>就行▲主要是引入本地安装好jdk中src.zip包,如图所示:实现步骤(演示配置的jdk1.8资源):第一步:在代码编写界面,Ctrl键选中类或方法即可。第二步:Ctrl键选中后,自动跳转到.class文件界面,点击Attach Source按钮。第三步:选中External location,...

查询V$SYSSTAT计算出QPS和TPS_allway2的博客-程序员秘密

QPS:前后两次差值/时间差select value from v$sysstat where name = 'execute count';1TPS:前后两次差值/时间差select (select value from v$sysstat where name = 'user commits') +(select value from v$sysstat where name = 'user rollbacks') as TPS from dual;其他v$sys...

oracle语句报错 * ERROR at line 2: ORA-00923: FROM keyword not found where expected_minions_222的博客-程序员秘密

报错信息:            *ERROR at line 2:ORA-00923: FROM keyword not found where expected运行语句1一直报这个错误,运行语句2成功用编辑器打开才发现语句1case后是tab键,语句2case后是空格键,tab键导致sql语句在执行时casewhen是连接在一起的,用记事本看了半天。_1671465600

一个关于Definer和Invoker的权限问题_bisal(Chen Liu)的博客-程序员秘密_oracle definer involker

前两天有位朋友,微信公众号提了一个问题,原文描述如下,1. 我的需求是在tag库中执行一个处理,使得tag中所有用户seq的nextval与src库中一致。2. 我在tag库的user1中创建了一个存储过程,代码逻辑为通过dblink(指向src库的user1,user1有读取dba视图的权限)查询源库的dba_sequence与tag库的对比,找出两库间nextval相差1000以上的,并在ta

SDM660平台使能I2C或者UART口开不起机_mengluoxixiang的博客-程序员秘密_sdmm660-mtp

当使能一个I2C或者UART功能导致系统开不起机的情况,一般有两点原因:1、Pin脚被占用2、在TZ那边,Pin脚给的权限不够以SDM660平台的I2C_3为例:我在sdm660-mtp.dtsi文件中使能了i2_3:&i2c_3 { status = "ok";};结果原本能开机的系统开不起来了……i2c的配置在sdm660-blsp.dtsi文件中,我...

数据库 23---数据库事务处理技术之故障恢复_hala-22的博客-程序员秘密

导读1.数据库的故障类型及其影响 2.事务故障的恢复 3.日志

随便推点

uva 10600 最小与次小生成树_sdjzujxc的博客-程序员秘密_0_10_uva10600

Problem AACM CONTEST AND BLACKOUT In order to prepare the “The First National ACM School Contest”(in 20??) the major of the city decided to provide all the schools with a reliable source of po

腾讯开源库QMUI FaceView使用教程_DevMeteor的博客-程序员秘密

腾讯的QMUI已经问世好长时间了,然而官方至今也没有给出一个详细的文档。为了方便大家使用,我就把我用过的控件的使用方法记录下来。1.QMUIQQFaceView先来个效果图,由于我没有现成的表情图片,只好先用软件图标代替了。官方说QMUIQQFaceView实质上并不是TextView,所以用法和TextView还是有差异的。首先,自定义一个控件继承QMUIQQFaceVi...

HTML Email_青崖林夕的博客-程序员秘密_htmlemail

带格式的邮件,其实就是一张网页,正式名称叫做HTML Email。它能否正常显示,完全取决于邮件客户端。大多数的邮件客户端(比如Outlook和Gmail),会过滤HTML设置,让邮件面目全非。我发现,编写HTML Email的窍门,就是使用15年前的网页制作方法。下面就是我整理的编写指南。1. Doctype目前,兼容性最好的Doctype是XHTML 1.0 Strict,事实上Gmail和Hotmail会删掉你的Doctype,换上这个Doctype。<!DOCTYPE htm

网络编程——多种I/O函数_cqu_shuai的博客-程序员秘密

参考《TCP/IP网络编程》 尹圣雨多种I/O函数send和recv函数Linux中的send和recv(1)send#include <sys/socket.h>ssize_t send(int sockfd, const void* buf, size_t nbytes, int flags);成功时返回发送的字节数,失败时返回-1sockfd:表示与数据传输对象的连接的套接字文件描述符buf:保存待传输数据的缓冲地址值nbytes:待传输的字节数flags

IOS NSDate 扩展(自定义日历、日期对比、今天判断、昨天判断、本周判断、本月判断等)_蟒蛇_AutoFire的博客-程序员秘密_ios 判断nsdata是否在本月本周

#import <Foundation/Foundation.h>@interface NSDate(ZXLExtension)/** 是否为今天 */-(BOOL)isToday;/** 是否为昨天 */- (BOOL)isYesterday;/** 是否为本周内 */- (BOOL)isThisWeak;/** 是否为本月 */- (BOOL)isThi...

qt5 可停靠控件和工具栏_Qt5.9中工具栏类QToolBar的用法_weixin_39632379的博客-程序员秘密

本文主要总结菜单栏类QMenu和工具栏类QToolBar的用法,具体的用法,将通过一个实例进行讲解。1.1新建一个widget工程,不要勾选ui界面设计,然后分别在widget.h,widget.cpp,main.cpp分别添加如下代码。widget.h#ifndef WIDGET_H#define WIDGET_H#include #include #include #include #incl...

推荐文章

热门文章

相关标签