• 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接收数据后拷贝一份再使用

  • 相关阅读:
    正则表达式
    运算符重载 hash原理 Equals方法
    接口 类型转换 try-catch(学习笔记)
    综合练习:词频统计
    组合数据类型综合练习
    Python基础综合练习
    熟悉常用的Linux操作
    大数据概述
    递归下降分析法
    有穷状态自动机
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/14734106.html
Copyright © 2020-2023  润新知