FPGA初学者(6)

数字电路实用篇

第二章 RAM简介

伪双端口 RAM 设计

伪双端口 RAM 有两个读写端口,但是一个端口只能读,一个端口只能写。一般 FIFO 设计中都是使用的伪双端口 RAM。伪双端口 RAM 指的是有两个读写口,就是有两组数据线和地址线,一组是写数据线,一组是读数据线,同一个时刻写和读可以同时访问。
在这里插入图片描述
在这里插入图片描述
从 Xilinx 伪双端口 RAM 的端口信号我们也可以看出,伪双端口 RAM 读写要控制的主要的端口都是写使能、读使能、写数据、写地址、读地址和读数据

RAM 读延迟,就是 RAM 发起读,然后读数据有效的周期数。这个延迟一般是 1,如果 RAM 输出再因为改善时序寄存一拍,那么 RAM 的读延迟就是 2。如下所示,在读使能为 1 且地址有效的情况下(enb为 1),下一拍 doutb即为读到的数据,一般来说,读使能和读地址不发生变化,doutb不会发生变化
在这里插入图片描述
另外 RAM 读数据我们建议只使用 RAM 读有效时的读数据,没有发起读的时候,读数据一般不建议使用,因此此时的读数据依赖于 RAM 模型的特性,有可能是不确定的值。
在这里插入图片描述
有一个问题,不知道大家有没有想过,就是读和写有两个端口,两个端口可以同时发起读和写,那么如果读和写同时有效且读和写是同一个地址时,此时读数据是否还是正确的数据呢,这个情况属于RAM 读写冲突,属于逻辑设计中非常重要的一个特性处理。一般设计中发起读写冲突,此时的读数据很可能是无效的读数据,因此一般读写冲突时候,会把最新的写数据直接赋给读数据,此时叫做写穿通到读。如下图所示:
在这里插入图片描述
从图中我们可以看出,Cycle 2 读和写地址不同,读可以正常读到数据,但是到 Cycle 3 时,读和写地址相同且读写都有效,此处如果不做特殊处理,那么读数据是无效的。需要我们把写数据寄存一拍同步到读侧。Verilog 一般先产生一个冲突信号,使用时序逻辑产生,读写冲突的下一拍有效,然后用这个信号做判断,如信号有效,则 dout 使用 din_dly1赋值,否则用 q 。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值