先加点自己的总结:真双口RAM可以在任意时间访问任意地址,两个端口的地址是一样的,即共享内存和地址。这就会带来一个问题:同时读写一个地址会发生冲突。基于这个点矛盾就要设置限制条件,这个在Xilinx IP core中会设置,在RTL中也可以通过控制相应的使能端,进而控制不同时读写一个地址,详情参见,Xilinx官方文档UG383中Conflict Avoidance部分和PG058。

一、 RAM 分类

XILINX 的 RAM 可分为三种,分别是:单口 RAM,简化双口 RAM 和真双口 RAM。如下 图所示:

图1 单口 RAM

图2 简化双口 RAM A 口写入数据,B 口读数据

图3 真双口 RAM A,B 任意一个口都可以读写数据,可从 A 写入,B 读数据

二、选择数据位宽和深度

Block RAM 的数据位宽为 1-1152bit,深度取决于所选择 FPGA 器件中 block 的数量。超出地址范围之外的写操作,写进去的数据不会与存储器件中的数据冲突。 读超出地址范围之 外数据将会返回无效数据。注意, 当对超出范围的地址进行操作的时候, 不能置位 set 或 reset信号,因为这仍然会读出无效数据。

三、操作模式

每个端口的操作模式决定了此端口的读和写之间关系。端口 A 和 B 可以独立配置为以 下三种模式中任一模式:写优先模式,读优先模式,不改变模式。这些模式详解见下面。当 A 和 B 端口地址有冲突时,操作模式就会影响 A 和 B 口之间关系。

1.写优先模式(write first mode):

在写优先模式中,输入数据被自动写入存储器件中,并且出现在数据输出端口。时序见下图。这种传输模式增强了在同一端口写操作时使用数据输出总线的灵活性。(即输入数据的同时自动写进存储器和驱动数据到数据输出端)

图4 写优先操作模式

2.读优先模式(read first mode):

在读优先模式中,预先存储在写地址中的数据会被输出,而输入数据被存入存储器件中。这种模式见下图。(即以前写进当前写地址的数据出现在数据输出端,此时输入的数据被保存到存储器中)

图5 读优先模式

3.不改变模式(no-change mode):

在不改变模式中,输出锁存在写操作时候保持不变,见下图。在同一端口 的写操作不会对数据输出端口产生影响,输出仍然是以前的读数据。(即输出锁存器保持不改变在写操作期间。说明在写期间输出端不会输出写期间地址的数据,不管以前保存数据还是现在的输入数据)

图6 不改变模式

四、数据位宽比例

Block RAM 产生器支持端口 A 和 B 的位宽不同。即DINA,DINB,DOUA,DOUTB 位宽可以互 不相同。支持 1:32 到 32:1 之间的比例,端口 A 的宽度最大可达端口 B 的 32 倍,反之亦然。

例如一个 A 口位宽 32bit 深度 2048 的真双口RAM, 如果 B 端口宽度为 8bit 深度为 8192。 那么 A 地址总线位宽为11bits, 地址总线位宽为 13bits。 B 数据存在 little-endian 中, 见下图。 An 是相对 A 端口在地址 n 的数据,Bn 是相对于 B 端口在地址 n 的数据。A0 由 B3,B2,B1,B0 构成。(双端口有独立的地址和数据总线以及控制信号,但仍访问同一个存储空间,数据宽度可以不相同,深度和数据宽度比例成反比。各端口地址是各自端口读或写的最宽地址的宽度。)

图7 数据位宽比例示意图

五、比特写功能(Byte_Write)

比特写功能在 8bit 或 9bit 一字节时候都有效。当使用 8bit 一字节时候,没有优先级位,而且存储宽度限定为 8bit 的倍数。当用 9bit 一字节时候,每一个字节都包含一个优先级位,存储位宽限定为9bit 的倍数。

当打开比特写功能时候, WEA 或 WEB 总线位宽为 N 位。等于DINA 或 DINB 总线的字节数。N 写使能总线的最高位对应着输入字的最高字节。只有写使能总线在写操作时候置位, 相应的 字节才会存入存储器中。 选择 8bit 字节时候,DIN 和 DOUT 总线都由 8bit的字节构成,没有优先级。当选择 9bit 字节 时候,DIN 和 DOUT 总线由 9bit 的字节,每一个字节的第 9 位都做为相应字节的优先级位。 字节写功能一般用于连接数据位宽方面,这可能限制了数据位宽选择的灵活性。然而,它不 太可能用于 NO_CHANGE 操作模式。

下面是一个单端 RAM 数据位宽 24bits,写使能总线 WEA 为3bits 的字节写功能的示意图。

图8 字节写功能示意图

六、冲突

Block 模块支持双口 RAM,每一个口都是独立且平等的,这样就会有数据冲突。下面分别在异步和同步时钟域中描述这种冲突的后果。

1.冲突和异步时钟:

使用异步时钟时候,当一个端口往某个存储地址中写数据时,另一个端口在指定的时间就不能从此存储地址读或写数据。在器件手册中定义了此clock- to-clock 置位时间,和其它 block ram 的转换特性。(对于异步时钟,当一个端口写数据到存储空间,另一个端口不能读或写那个存储空间为一段时间。)

2.冲突和同步时钟:

同步时钟倒是一系列特殊的冲突,如下:

A、同步写-写冲突。

当两个端口都往存储器中同一个地址写数据时候,就会发生冲突。这会导致此存储地址中的内容是未知的。注意,写-写冲突只会影响存储内容,与之相反写-读冲突只影响数据输出。

B、使用字节写。

使用字节写功能,当分散的字节写入同样数据字,存储内容不会腐烂。RAM 内容只有在每个端口都写入相同的字节。下图描述了当ADDRA=ADDRB=0 时候的情况。

图9 写-写冲突示例

C、同步读-写冲突。

当一个端口写数据,另一个端口从同样地址读数据时就会产生同步写-读冲突。当存储内容在读-写冲突时候没有腐烂,输出数据的有效性就取决于写端口的操作模式。

a) 如果写端口是读优先模式,那么另一个口就很可能读取旧的存储内容。

b) 如果写端口是写优先或不改变模式,那么读端口的输出数据是无效的。

c) 如果打开字节写功能,读端口输出只有最新的字节是无效的。

下图描述了字节写的写-读冲突的影响。当端口 A 为写优先模式和读优先模式时的 DOUTB。 假设 ADDRA=ADDRB=0,端口 B 一直在读,所有的存储地址都初始化为 0.RAM 内容在写-读 冲突中从没有corrupt。

图10 写读冲突示例

 

七、冲突和简单双口 RAM

对于简单双口 RAM,操作模式是不可选的,但是会自动设置为要么读优先或写优先模式,这个取决于目标器件和时钟配置。操作模式决定了 A 或 B 端口的读写关系,只有在地址冲突时候才会影响 A 和 B 端口之间关系。

转载自:http://blog.csdn.net/skyplain1984/article/details/54971963

XILINX之RAM使用指南(加个人总结)的更多相关文章

  1. Xilinx之RAM使用指南

    一. RAM 分类XILINX 的 RAM 可分为三种,分别是:单口 RAM,简化双口 RAM 和真双口 RAM.如下 图所示: 图1 单口 RAM 图2 简化双口 RAM A 口写入数据,B 口读数 ...

  2. MSIL实用指南-加载null、string、long、float、double等值

    本篇讲述怎么加载null.string值.long值.float值.double值. 加载null不需要参数值,只要 Emit ldnull 其它几个命令要 Emit <指令> <值 ...

  3. MSIL实用指南-加载bool、sbyte、byte、char、short等值

    这一篇讲解怎么加载bool值.sbyte值.byte值.char值.short值. 加载bool值在.NET程序实际运行中,是没有true和false值的,实际上是以1和0表示它们,加载它们的指令是L ...

  4. MSIL实用指南-加载和保存参数

    本篇讲解怎么加载和保存参数,以及参数起始序号的确定. 参数的加载加载参数的指令是Ldarg.Ldarg_S.Ldarg_0.Ldarg_1.Ldarg_2.Ldarg_3.Ldarg_0是加载第0个参 ...

  5. MSIL实用指南-加载int值

    这一篇讲的是怎样加载整数值到运算栈上.这一类的指令都是以Ldc_I4开头. Ldc_I4类OpCodes的Ldc_I4字段的功能是把一个int值压入运算栈上.它的使用方法是ilGenerator.Em ...

  6. FPGA的嵌入式RAM

    FPGA中的嵌入式RAM分为两种:专用的BRAM和分布是RAM(用LUT实现的).这两种RAM又可以配置成单端口和双端口的RAM和ROM.双端口RAM又可以根据读写地址是否在同一块分为Double P ...

  7. Xilinx HLS

    Xilinx 的高层次综合(High Level Synthesis, HLS)技术是将C/C++/SystemC软件语言转换成Verilog或VHDL硬件描述语言的技术.现已应用在SDAccel,S ...

  8. FPGA内部RAM的初始化

    Altera的RAM初始化文件格式是mif和hex. QuartusII自带的RAM初始化工具很方便产生初始化文件. Xilinx的RAM初始化文件格式是coe, 在vivado中软件会将coe文件变 ...

  9. 每天进步一点点------Modelsim添加Xilinx仿真库的详细步骤

    Modelsim,可以选型SE和XE两个版本.Modelsim XE可以直接被ISE调用,而Modelsim SE需要手动添加仿真库.但SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的 ...

随机推荐

  1. 使用mysql 统计函数 结果为null时返回值改为0

    SELECT COALESCE(SUM(total),0)  FROM test_table

  2. 安装apache+php记录

    安装apache yum install httpd 修改apache配置文件,可以修改apache的默认端口号,根目录等 /etc/httpd/conf/httpd.conf 启动/重启apache ...

  3. Oracle 之 获取当前日期及日期格式化

    Oracle 获取当前日期及日期格式: 获取系统日期:  SYSDATE 格式化日期: TO_CHAR(SYSDATE, 'YY/MM/DD HH24:MI:SS)                   ...

  4. 文件的上传Commons FileUpload(web基础学习笔记十六)

    一.表单设置 <form action="<%=request.getContextPath()%>/jsp/admin/doAdd.jsp" enctype=& ...

  5. 圆形Camera预览实现

    需求 最近有个需求要求界面上使用圆形相机预览进行面部检测 , 具体需求如下图 关于Camera之前接触得比较多 , 主要就是通过SurfaceView显示预览视图 , 因此需要展示圆形预览界面, 只需 ...

  6. java thread dump日志分析

    jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注)  执行中,Runnable 等待资源,Waiting on conditio ...

  7. NGINX原理 之 SLAB分配机制(转)

    1 引言 众所周知,操作系统使用伙伴系统管理内存,不仅会造成大量的内存碎片,同时处理效率也较低下.SLAB是一种内存管理机制,其拥有较高的处理效率,同时也有效的避免内存碎片的产生,其核心思想是预分配. ...

  8. css3中-moz、-ms、-webkit 是什么意思

    -moz代表firefox浏览器私有属性-ms代表IE浏览器私有属性-webkit代表chrome.safari私有属性 私有属性例如:设置div圆角的大小 -webkit-border-radius ...

  9. 查看tomcat启动文件都干点啥---catalina.bat(转)

    在上一次查看tomcat启动文件都干点啥一文中,我们总结出,startup.bat文件的作用就是找到catalina.bat文件,然后把参数传递给它,在startup.bat中,调用catalina. ...

  10. laravel5.4中{{$name}} 和 {{!! $name !!}} 的区别:后者原生输出。前者转义