1

In my verification environment, there are few sequences running simultaneously on the same driver (there is no matter when an item gets the bus in relation to other sequences' items).

BUT, now I need to add additional sequence, that will run simultaneously to other sequences, that executes atomic read-modify-write. My new sequence looks something like this:

// Atomic READ-MODIFY-WRITE
body() @driver.clock is only {

    do read_item keeping {
        .cmd                == RD; 
        .addr               == addr;
    };

    // Wait random time;

    do write_item keeping {
        .cmd                == WR;
        .addr               == addr;
        .data               == data;  
    };
};

The problem is that between the read_item and write_item, items from other sequences get the bus. Do you have any idea how the driver's item queue can be locked from a sequence? So I can prevent other sequences to add their items in between my read and write items?

Thank you for your help

Halona
  • 1,475
  • 1
  • 15
  • 26

1 Answers1

2

You can use the grab(...) and ungrab(...) methods of any_sequence to get exclusive access to the sequence driver:

// Atomic READ-MODIFY-WRITE
body() @driver.clock is only {

    grab(driver);

    do read_item keeping {
        .cmd                == RD; 
        .addr               == addr;
    };

    // Wait random time;

    do write_item keeping {
        .cmd                == WR;
        .addr               == addr;
        .data               == data;  
    };

    ungrab(driver);
};

While the driver is grabbed, no other sequence can send items to the it.

Tudor Timi
  • 7,453
  • 1
  • 24
  • 53