zoukankan      html  css  js  c++  java
  • verification TLM传输数据导致多线程访问同一个数据

    TLM传输数据导致多线程访问同一个数据

    原因

    TLM发送数据跟mailbox类似,都是发送的引用,这样发送端和接收端的引用都指向同一个数据,这样就会出现发送端修改数据会影响到接收端,比如发送的时候数据时A,接收端接收后,发送端又修改了这个数据为B,就会导致接收端接收的是B。

    举例

    monitor发送数据个RM

    monitor伪代码

    while(1)begin
        tr.a = bus.a;
        @(bus)
        port.put(tr);
    end
    

    RM伪代码

    while(1)begin
        port.get(tr);
        if(tr.a == 'hA)begin
            $display("A");
        end else begin
            $display("B");
        end
    end
    

    在上面的例子中,monitor发送完数据后,就立马采用数据,修改transaction,如果monitor先修改,RM后判断tr.a,那么就会出现问题(如果这个顺序是固定的还好,就是差一拍,问题是一部数据使用差一拍一部分数据使用又不差就出问题了)

    解决办法

    在使用TLM发送transaction的时候先copy一份再发送,或者TLM接收数据后拷贝一份再使用

  • 相关阅读:
    String painter HDU
    GCD Counting-树形DP
    XOR UVALive
    BZOJ-9-3295: [Cqoi2011]动态逆序对
    E
    Stars HDU
    二维单调队列(理想的正方形+修筑绿化带)
    P3622 [APIO2007]动物园
    COJ1160[一本通 5.3 例 1」Amount of Degrees
    [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/14734106.html
Copyright © 2011-2022 走看看