用于读写任务的UVM reg原子性

时间:2019-07-10 07:21:30

标签: uvm

我注意到每个uvm_reg类都有一个本地信号量m_atomic,它由m_atomic = new(1);初始化为1,当我们进行reg.write(不覆盖任何任务)时,将有两个对{{1}的调用}这给信号灯添加了两个键,因此丢失了寄存器访问的整个原子概念。如果我忽略了某些东西,有人可以阐明吗?

这是代码段

XatomicX(0);

因此,缺少的是在将密钥放回原位之前,将密钥放回原位时在task uvm_reg::write(...); XatomicX(1); ... do_write(...); ... XatomicX(0); endtask task uvm_reg::do_write(...); XatomicX(1); ... XatomicX(0); endtask task uvm_reg::XatomicX(bit on); process m_reg_process; m_reg_process=process::self(); if (on) begin if (m_reg_process == m_process) return; m_atomic.get(1); m_process = m_reg_process; end else begin // Maybe a key was put back in by a spurious call to reset() void'(m_atomic.try_get(1)); m_atomic.put(1); m_process = null; end endtask: XatomicX 任务中进行了过程检查。

0 个答案:

没有答案