1.1 FPGA项目问题 之 RAM的collision
来源:互联网 发布:ubuntu ss 全局翻墙 编辑:程序博客网 时间:2024/06/05 14:23
最近项目碰到个问题,维特比译码仿真的时候,出现了如下情况:
blk_mem_gen_v7_3 collision detected at time: 216430000, A write address: 1, B read address: 5
楼主环境,ISE14.7+自带isim,vivado2016.4
意思是,这个核发生了冲突,冲突原因是,读写的时机冲突。这个代码有一定地可靠性,因为实际项目都跑过。经过查阅书籍,发现一丝端倪。
一:Block Mem介绍
主要介绍RAM,因为ROM就是读没啥问题。模式方面,主要有如下几个模式
SP模式:单端口,要么读要么写,不会发生冲突。
SDP:简单的双端口RAM,A Port只写,B Port只读,支持同时地读写操作。但是,当读操作和写操作同时对同一个地址单元时,SDP的输出或者是不确定值。
TDP:真正的双端口,上边的AB都支持读写,两个同时读,两个同时写,都可以。当两个端口同时向同一个地址写,写冲突会发生,存储是未知的。WEA、WEB为高,则是写,低是读
另外两个ROM先不介绍。
本项目是采用SDP模式,然后会有同时读写的情况。因此会出现仿真中的警告(modelsim,vivado也会有这个警告)有点模糊,这是书上说的冲突部分。(一点疑惑,他说的是地址重合,而这个warning并不一定地址重合,而是同时读写,或喜欢这个冲突直接是error吧)
意思就是,当clk不同源的时候,且读写地址为同一个时,会发生冲突。
另外书上推荐,对于同一个时钟驱动的RDCLK和WRCLK,SDP模式,使用Read_first。假如是不同时钟,请使用Write_first模式。
在 WRITE_FIRST 模式下,输入数据同时写入存储器并存入数据输出(透明写)
在 READ_FIRST 模式下,原存储在写地址的数据出现在输出锁存器上,而输入数据则存入存储器(先读后写)。
在 NO_CHANGE 模式下,输出锁存器在写操作过程中保持不变。
二。查阅官方手册
看到了针对IP核某一个选项的解释。
我的理解是:默认不勾选,意思就是,你可能同步,也可能不同步,我就都给你warning。但要是你是肯定同步的,通过勾选那个disable,是可以不显示warning。
而我们的项目是synchronous clk,同源的,因此,可以通过勾选这个,来消除warning。
还有一个可以解决的办法,应该就是TDP了。
2017.9.1更新
去研究所调试了,vivado下,有的处理方式和上文一致
有的,在配置界面会存在一个叫“common clk”,鼠标放在上面会提示你,假如你的CLKA,CLKB是同一个是中,请勾选上,在勾选这个之后,仿真就不会出现warning了。
- 1.1 FPGA项目问题 之 RAM的collision
- FPGA开发之RAM IP的使用
- FPGA之RAM
- 七、FPGA设计之RAM
- FPGA里的RAM使用
- FPGA学习笔记之LPM RAM使用
- FPGA中block ram和distributed ram的区别
- fpga资源中的block ram和分布式ram的区别
- Lattice FPGA中假双口RAM控制器的设计
- FPGA图像处理项目(二)--FIFO FFT RAM
- 有关 Hash Collision DoS 的一些问题
- FPGA实现RAM--LPM_RAM
- FPGA实现RAM--LPM_RAM
- 基于FPGA的双口RAM设计方法
- FPGA开发之Tcl的基于项目设计
- IAR之RAM的操作
- Hash Collision DoS 问题
- FPGA开发之问题一
- unp源码文件编译安装
- postman测接口
- 九天学会Java,第二天,算术运算
- Android模拟器访问本地服务器
- 【备忘】2017PYTHON零基础到大师视频教程
- 1.1 FPGA项目问题 之 RAM的collision
- Ubuntu16.04 + ZED Camera 调试
- Unity前向渲染路径细节(Forward Rendering Path Details)
- hdu3605-二分图多重匹配
- 深入理解分布式事务,高并发下分布式事务的解决方案
- 动态规划-试题(3)-年终奖
- 清华2017研究生开学典礼摘录
- screen相关对象
- 归并排序