BMG核中的Collision Behavior

参考文档:UG473,PG058

 

                       碰撞(冲突)行为


  Block Memory Generator核支持双端口RAM实现。 每个端口都是等效且独立的,但它们访问的是同一块内存空间。 在这种安排中,是否可能发生数据的冲突呢。 

1.异步时钟冲突

    使用异步时钟读写时,当一个端口将数据写入一个内存位置时,另一个端口不可在某一指定的时间内读取或写入该位置。 该时钟到时钟(clock-to-clock)的建立时间在器件数据手册中定义。

2.同步时钟冲突

    同步时钟会导致许多特殊情况下的碰撞情况,如下所述。

  •  同步写Write-Write冲突:如果两个端口都试图去写存储器中的同一地址(准确说是同一位置)的存储单元,就会发生Write-Write Collision。这样的后果就是内存中该位置的内容是未知的。

            请注意,与只影响数据输出,不影响存储器内容的Write - Read冲突相反,写 - 写冲突会影响存储器内容。

  • 使用Byte-Write:当使用Byte-writes时,如果在同一数据字中写入单独的字节,则不会损坏存储器内容。 仅当两个端口尝试写入相同的字节时,RAM内容才会损坏。 图3-15说明了这种情况。 假设addra = addrb = 0。

  • 同步Write-Read冲突:

         这种同步写-读冲突的情况发生在两个端口(要留意!!!):一个端口试图写数据到某一个存储单元,而另一个端口要读这一个单元。 在写 - 读冲突中存储器内容未被破坏时,输出数据的有效性取决于写端口操作模式

           (1)若写端口工作在READ_FIRST模式,则另一端口可以正确读取原有的存储器中的内容。

           (2)若写端口工作在WRITE_FIRST模式或NO_CHANGE模式下,则读端口输出的数据就是无效的

           (3)在使用Byte_Write的情况下,

图3-16描述了Write-Read以及byte-write的影响。图中分别展示了读端口分别在写端口在WRITE_FIRST模式和READ_FIRST模式下,DOUBT的输出情况。这里假设读写地址都为0,并且B端口的读使能一直有效(Always Enabled),所有存储位置都被初始化为0,RAM中的数据在写-读冲突中永不被破坏。

 3.简单双端口RAM的冲突

    对于简单双端口 RAM而言,无论时钟如何(即不管同步还是异步??)三种操作模式都可以使用。需要注意的是,AXI接口类型中的操作模式不可选

     简单双端口RAM一段只写不读,而另一端口只读不写。这就好像是真双端口RAM中,A端口只连接的写接口,而B端口中只连接了读接口。这时,操作模式定义了A端口(或B端口)中的Write-to-Read关系,并且只会在  地址冲突期间     影响A端口与B端口之间的关系。

     同步时钟下发生的冲突期间,可以配置端口A的写模式,以便端口B上的读操作产生数据(像READ_FIRST一样),或产生未定义的数据(X)。因此,当配置为简单双端口RAM(SDP RAM)时,始终建议使用READ_FIRST。

     对于异步时钟,Xilinx建议将端口A的写模式设置为WRITE_FIRST以确保冲突安全。
     对于7系列器件,当RAM_MODE设置为TDP时,所选的工作模式将传递到Block RAM。对于RAM_MODE设置为SDP的原语,写模式为READ_FIRST用于同步时钟,WRITE_FIRST用于异步时钟。
    对于基于UltraScale架构的器件,没有任何限制,所选的工作模式总是传递给Block RAM原语,而与时钟无关。

4.Additional Memory Collision Restritictions:Address Space Overlap(地址空间重叠)

     7系列FPGA的Block RAM存储器在以下配置的情况下具有其他的冲突限制:

  • 当配置为TDP模式下;
  • 当CLKA(PORTA)核CLKB(PORTB)是异步的时候;
  • 在同时执行读写操作时候;
  • 当端口A,端口B或两个端口的Write Mode配置为READ_FIRST时。

 当使用Write Mode= READ_FIRST(TDP-RF模式)的TDP存储器和异步时钟时,请参见7系列FPGA存储器资源用户指南(UG473)的“冲突避免”部分。


UG473

Conflict Avoidance

7系列FPGA中的Block RAM是True Dual Port RAM,即两个端口中在任何时间都可以访问任何位置。但是,从两个端口访问相同的内存位置时,必须遵守某些限制。

    有两个完全不同的情况:两个端口要么具有公共时钟(同步时钟),要么两个端口的时钟频率和相位不同(异步时钟)。

(1)异步时钟

异步时钟是更为常见的情况,两个时钟的有效沿不是同时发生:

  • 两个端口执行读操作时没有时序限制。
  • 当一个端口执行写操作时,另一个端口不能读取或写入访问相同的内存位置。 因此,在真正的异步应用程序中应避免使用READ_FIRST模式,因为无法保证将读取旧数据(在TDP和SDP模式下)。 当异步时钟可能会导致对同一端口地址同时进行读/写操作时,WRITE_FIRST模式是推荐模式。 如果违反此条件,仿真模型会产生错误。 如果忽略此限制,则读取或写入操作会产生不可预测的结果。 但是,设备没有物理损坏的风险。 如果依旧执行读取和写入操作,则写入操作会将有效数据存储在写入位置。

(2)同步时钟

         同步时钟是特殊情况,两个端口时钟的有效边沿同时发生:

  • 同步时钟定义为两个时钟输入引脚由同一时钟驱动。
  • 两个端口执行读操作时没有时序限制
  • 当一个端口执行写操作时,另一个端口不能写入相同的位置,除非两个端口都写入相同的数据。
  • 当一个端口执行写操作时,写操作成功; 如果写端口处于READ_FIRST模式,则另一个端口可以可靠地从同一位置读取数据。 然后两个端口上的DATA_OUT反映先前存储的数据。
  • 如果写端口处于WRITE_FIRST或NO_CHANGE模式,则读端口上的DATA_OUT将变为无效(不可靠)。 读取端口的模式设置不会影响此操作。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值