FPGA下RAM的工作模式
1、前言
Vivado在生成memory的时候,有个Operating Mode选项。
本篇将专门分析这些工作模式的含义。
2、具体含义
官方解释如下:
“WRITE_FIRST” 模式,写操作时,输出端口会将当前写的数据输出。(ASIC中又称“write through”,或AWT,Async)
“READ_FIRST” 模式,写操作时,输出端口会将当前写地址的原数据输出。
“NO_CHANGE”模式,写操作时,输出端口会保持原值不变。只有在读操作的过程中输出端口才会变化。
不好理解没关系,下面列出图示和时序波形:
- “WRITE_FIRST” 模式(ASIC中又称“write through”)
- 写入的数据一边写到RAM内核,一边输出到端口。
- “READ_FIRST” 模式
- 写入的数据写到RAM内核,写地址指向的RAM数据输出到端口。
- “READ_FIRST” 模式
- 写入的数据写到RAM内核。输出端口的数据(实际上有个寄存器)保持不变。
下面列出对应的代码,有人习惯从RTL代码上理解。此代码是可以被Vivado工具直接识别的。
- “WRITE_FIRST”代码,可综合
- //write port
- always @(posedge clk) begin
- if(en && we)
- RAM[addr] <= di;
- end
- //read port
- always @(posedge clk) begin
- if(en)
- if(we)
- dout <= di;
- else
- dout <= RAM[addr];
- end
- “READ_FIRST”代码,可综合
- //write port
- always @(posedge clk) begin
- if(en && we)
- RAM[addr] <= di;
- end
- //read port
- always @(posedge clk) begin
- if(en)
- dout <= RAM[addr];
- end
- “NO_CHANGE”代码,可综合
- //write port
- always @(posedge clk) begin
- if(en && we)
- RAM[addr] <= di;
- end
- //read port
- always @(posedge clk) begin
- if(en && !we)
- dout <= RAM[addr];
- end
其实,RTL还是更好理解一些的。
注意,http://www.elecfans.com/d/887964.html这篇文章的RTL部分“READ_FIRST” 代码和“NO_CHANGE”代码写的有问题。
3、应用和背景
在IC设计领域,FPGA主要用来做AISC的原型验证,即在FPGA上要实现一个与ASIC完全一致的设计,以此加速仿真,方便快速找到AISC设计的问题。
分享两个故事:
一个故事发生在前东家,有次生成FPGA的ram时,错把Operation Mode选成了“READ_FIRST” ,而恰好暴露出来一个之前没验证到的bug。为什么会这样呢?
Bug是这样的,这位designer把当前cycle写入ram的值,下一cycle直接在读接口上采样并使用了,这实际是利用了“WRITE_FIRST”(ASIC中叫“write through”)的特性。
在设计中,这样的操作是不允许的,虽然这样可以省掉一个read cycle,但这种设计的通用性很差,一旦更换ram,就会出问题。当时的项目就是迁移到新工艺节点,ram由原来的“write through”(对应FPGA的“WRITE_FIRST”)更新到了“no write through”(对应FPGA的“NO_CHANGE”),这样此designer的设计出问题了。
为什么ASIC仿真没有发现这个问题呢?
IC公司在ASIC仿真时为了加速,一般都是用自己写的ram sim model来做仿真模型的。工艺节点升级了,ram行为也由write through变成了no write through模式,而ram sim model却没有更新。因此,ASIC仿真并没有暴露出来这个问题。
幸亏这个bug在RTL freeze前暴露出来了,若是没有检查出来而流片了,那后果不堪设想。
另一个故事发生在现公司,遇到的问题也是类似原因。
Bug是这样的,一位designer设计时没有考虑好读写端口的配合,导致某种场景下会出现读的数据没来及取走,就已经向这个地址覆盖了新的数据的情况,且这种情况只会冲刷一个cycle。
若ram是write through模式,则会丢失一个数据;若是no write through模式,则恰好利用了读端口的保持特性规避了丢数据的问题。
本质上讲,这样的设计也是错误的,肯定要改设计,只不过项目已经进展到RTL freeze阶段,只能靠这种方式来规避了。
4、总结
上述提到的两处bug,都是因为设计者(包括写ram model的验证者)不了解ram的特性导致的。
- 建议要用脚本语言来生成FPGA、ASIC的ram,用GUI生成则很容易出错,且不好检查。
- 建议要用FPGA、ASIC的ram工具生成的ram model来做仿真,不要手写ram model。
- 设计者要用标准的读写时序进行设计,必须避免“利用端口特性的不规则设计”,
FPGA下RAM的工作模式相关推荐
- vsftpd 的工作模式
首先,讲下FTP的工作模式,FTP般有2个通道分别为: 控制通道:管理用户登录等,常用端口号:TCP的21:客户端主动与服务器建立连接 数据通道:用户传输数据时所要用到的,如,浏览目录,上传.下载等: ...
- 查看无线网卡工作模式
查看无线网卡工作模式 查看无线网卡工作模式,一般情况下,无线网卡有四种工作模式,分别是Managed模式.Master模式.Ad hoc模式和Monitor模式.大学霸IT达人查看无线网卡工作模式.默 ...
- linux查看无线网卡频率,查看无线网卡工作模式
一般情况下,无线网卡有四种工作模式,分别是Managed模式.Master模式.Ad hoc模式和Monitor模式.默认情况下,无线网卡工作模式为Managed,可以用来连接到无线网络.当用户实施无 ...
- 防火墙区域及工作模式
域(zone)是防火墙上的重要概念,防火墙通常放置在网络的边界,路由器通过接口来连接不同网段,防火墙则通过域来表示不同的网络. 安全策略:通过将接口加入域并且在安全区域之间启动安全检查,从而对流经不同 ...
- (133)FPGA面试题-Xilinx FPGA Block RAM的三种写模式是什么?
1.1 FPGA面试题-Xilinx FPGA Block RAM的三种写模式是什么? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Xilinx FP ...
- STM32 烧录程序后上电不工作,但调试模式下可正常工作的解决办法
学习STM32的时候遇到的小问题: 用CubeMX生成初始代码,程序内容只包括呼吸灯工作和一个中断调用printf重定向函数向串口发送内容: 在STM32F103C8T6最小系统板烧录程序后上电不工作 ...
- 网络穿透与音视频技术(2)——NAT的概念及工作模式(下)
(接上文<网络穿透与音视频技术(1)--NAT的概念及工作模式(上)>) 3.四种NAT映射实现方式 上文中我们已经提到三种NAT映射模式,它们是静态映射(Static NAT).动态映射 ...
- BUCK在轻载下的工作模式
在上一篇文章电源系列之BUCK电感工作模式中,我们详细介绍了BUCK电源电感的两种工作模式CCM和DCM,及其各模式下各点波形的不同之处.本篇将介绍在负载电流继续减小时,电源工作模式有哪些,以及各有什 ...
- 光伏储能并网发电模型,根据储能电池SOC的工作区间,光伏有MPPT、恒功率输出两种控制方式,在电池健康工况下光伏处于MPPT模式
光伏储能并网发电模型,根据储能电池SOC的工作区间,光伏有MPPT.恒功率输出两种控制方式,在电池健康工况下光伏处于MPPT模式,在电池处于极限工况下,光伏处于恒功率模式,通过boost连接到公共点, ...
- linux文件编辑器的三种模式,Linux中文本编辑器三种工作模式切换及vi编辑器三种工作模式下命令详解...
文本编辑器的作用 创建或修改文本文件 维护Linux系统中的各种配置文件 Linux中最常用的文本编辑器 Linux中最常用的文本编辑器 vi:类UNIX操作系统的默认文本编辑器 vim:vim时vi ...
最新文章
- Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决
- easymailobjects php,用easymailobject组件处理exchange邮件源代码(6)_asp实例
- shell,自动挂载磁盘
- clang编译c语言开o优化,针对gcc或clang的LTO可以跨C和C方法进行优化
- angelica类似_亲爱的当归(Angelica)是第一个让我哭泣的VR体验
- 如何导入数据模板到MVC
- java 数据结构详解,数组,集合,HashMap
- android 库编译报错,Android Studio编译项目报错
- SharePoint 创建 Lookup 类型的Site Column解决跨站问题
- 【深入理解JVM】引用,句柄,指针分别是什么?
- C++函数指针和仿函数【转】
- php如何无水印解析快手,快手短视频无水印解析过程及代码
- Win32 Application和Win32 Console Application
- 肿瘤 材料 计算机模拟,PeerJ: 计算机模拟揭示癌症多样性
- ArcGIS数据生产与精细化制图之中国年降水量分布图的制作(转载)
- 第7-5课:格式化文件读写与 PCX 图像文件
- ping无盘服务器值高,服务器PING值过高的原因
- crash工具分析sysdump使用
- 线性代数学习笔记(二十九)——方程组解的结构(一)
- 分享怎么才能防止域名被劫持