0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

三种write mode,你真的理解吗?

电子工程师 来源:lp 2019-03-20 16:55 次阅读

无论是用XPM_MEMORY还是IP Core的方式调用各种类型的RAM(单端口、简单双端口或真双端口),都会遇到这样一个参数:Write Mode。该参数有三个可选值,分别为write_first、read_first和no_change。那么这三个值到底有什么区别呢?应用场景又如何?本质上,这个参数是用来解决读写冲突即同时对同一地址进行读写操作时,写入该地址的数据是什么,读出该地址的数据是什么。

write_first

首先看write_first(又称为Read after Write,即先写后读或写优先),如图1所示,相应的读写时序如图2所示。不难看出,当写使能WEA有效时(高有效),此时读依然有效,故该模式下从地址bb和cc读出的是新写入的数据1111和2222,也意味着写入地址bb和cc的数据分别为1111和2222。

图1

图2

read_first

再看read_first(又称为Read before Write,即先读后写或读优先),如图3所示,相应的读写时序如图4所示。此时,从时序图中可以看出读出的是该地址上的原有数据,同时会把新数据写入该地址。

图3

图4

no_change

最后我们看看no_change(No Read on Write,保持模式),如图5所示,相应的读写时序如图6所示。可以看出,一旦写操作有效,读操作即无效,此时输出端口保持写操作之前读出的数据不变。

图5

图6

三种模式让很多初学者觉得困惑。实际上,这并没有什么神秘感,我们可以通过RTL代码实现这三种功能,如图7~图9所示。可以看到write_first由if else语句完成,we有效时写入新数据,同时输出等于输入,无效时输出等于该地址原有数据。read_first由if语句完成,写法类似于移位寄存器,这就是为什么写有效时读出的是该地址上的原有数据。no_change由if else语句完成,dout在if分支上没有被赋值,故保持不变,这是实现no_change的关键点。

write_fisrt Verilog代码:

图7

read_fisrt Verilog代码:

图8

no_change Verilog代码:

图9

从代码风格的角度而言,实现这三种功能是非常容易的。这也进一步验证了RTL代码风格对设计的影响。因此,对于初学者而言,可以多花些时间研究代码风格,很可能会有事半功倍的效果。

思考一下:

对于一个单端口RAM,采用RTL代码描述,如何在同一个模块中实现如下功能:

(1)宽度可配置

(2)深度可配置

(3)写模式可配置

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6509

    浏览量

    87556
  • 代码
    +关注

    关注

    30

    文章

    4553

    浏览量

    66664
  • 读写操作
    +关注

    关注

    0

    文章

    5

    浏览量

    7089

原文标题:write_first/read_first/no_change什么区别

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    运放的三种应用

    运放在电路中主要存在三种应用,放大器,滤波器,振荡器。再这三种应用电路中,运放的两大特点虚短虚断仍然成立吗? 在阻尼振荡器中,工作过程是否按照我描述的这样,在反相输入端加一个近似锯齿波的电流源,正半
    发表于 01-26 16:18

    三种SMA接口pcb封装

    `三种SMA接口pcb封装`
    发表于 01-25 16:04

    三种主流芯片架构

    三种主流芯片架构简单比较三种主流芯片架构  1. ARM ARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比
    发表于 08-14 10:11

    SRAM的基础模块存有三种情况

    介绍的是关于SRAM的基础模块存有三种情况:standby(空余),read(读)和write(写)。 第一情况:standby假如WL沒有选为上拉电阻,那么M5和M62个做为操纵用的晶体
    发表于 09-02 11:56

    启动Spring Boot项目应用的三种方法

    基础。我们知道了Spring Boot是个什么了,那么我们又该如何启动Spring Boot应用呢?这里小编给大家推荐常用的三种方法。分别是IDEA编辑器启动、命令启动、java命令jar文件启动。下面
    发表于 01-14 17:33

    关于In-Cell、On-Cell、OGS三种屏幕技术的知识点看完就懂了

    关于In-Cell、On-Cell、OGS三种屏幕技术的知识点看完就懂了
    发表于 06-03 06:22

    STM32的三种开发方式

    1 STM32的三种开发方式通常新手在入门STM32的时候,首先都要先选择一要用的开发方式,不同的开发方式会导致编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会通
    发表于 08-05 06:56

    STM32有三种启动模式

    01STM32的三种启动模式STM32有三种启动模式:FLASH启动、SRAM启动和系统存储器启动,通常三种启动方式由外部引脚boot0和boot1的电平决定。每个系列boot0和boot1电平对应
    发表于 08-18 07:52

    STM32支持三种启动方式

    正文不得不提的启动方式STM32支持三种启动方式 1. FLASH启动 2. SRAM启动 3. 系统存储器启动这三种启动顺序决定了上电后第一条指令的位置。如果选择FLASH启动,则上电复位后PC
    发表于 08-23 06:03

    STM32的三种开发方式分享

    STM32的三种开发方式通常新手在入门STM32的时候,首先都要先选择一要用的开发方式,不同的开发方式会导致编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会...
    发表于 12-01 07:59

    STM32的三种boot模式介绍

    浅识STM32的三种boot模式文章目录浅识STM32的三种boot模式任务摘要一、认识boot1.三种BOOT模式介绍2.开发BOOT模式选择3.STM32三种启动模式4.
    发表于 12-10 07:46

    STM32的三种Boot模式的差异

    如有错误,欢迎指正,谢谢!目录一、STM32的三种Boot模式的差异二、创建基于MDK创建纯汇编语言的STM32工程模板、汇编基本语法的学习四、编程练习一、STM32的三种Boot模式的差异参考自
    发表于 12-20 07:54

    是否真的理解点灯了

    是否真的理解点灯了?
    发表于 01-24 06:22

    真的理解SPI是怎么通信的吗

    基于DSP***的模拟SPI————真的理解SPI通信吗?​ 真的理解SPI是怎么通信的吗?
    发表于 02-17 06:37

    记录三种DMA模式

    串口模式实现有三种1.普通模式:在主函数中接收函数2.中断模式:产生的不影响主程序运行3. DMA模式:与主函数互不影响,独立运行本文记录三种DMA模式。
    发表于 02-28 07:54