Search the Community
Showing results for tags 'sequence'.
-
How can I write the following sequence? If sequence A happens, then sequence A may not happen again until either sequence B or sequence C happens. An example of the sequences might be: sequence seqA; ($rose(A)) ##1 $fell(A); //single cycle A pulse endsequence sequence seqB; B[->1]; //B high for 1 cycle endsequence sequence seqC; (1[*10]); //10 clk cylces endsequence It is important in this question that seqA is a sequence, so that we are not just checking seqA |-> (!A throughout (seqB or seqC)) (For this simple example, afte
-
Hi All, I have a sequence sending a created and randomized item using `uvm_send. The driver receives an item using try_next_item. Upon receiving, it drives the item and calls item_done. Using debug message after item_done, I can clearly see that item_done is called and returned but `uvm_send in sequence is still blocked and not doing forward to send next item (it implements a loop). Can anyone help me with possible reasons why `uvm_send would not return even when driver has called item_done and come out of item_done. Thanks in advance! Ninad
-
Hi All, I have a scenario where i need to send n random bytes and out of n bytes i should able to corrupt few selected bytes. I have used Queue for selecting error bytes list. Transaction : rand bit [7:0] tx_data_byte[`MAX_DATA:0] ; // data byte array rand int unsigned tx_no_of_bytes_to_send ; // number of data bytes to send rand byte tx_err_bytes[$] ; //queue contains byte positions to be corrupted Example : consider i am sending 5 data bytes and I have to corrupt 2,4,5 bytes (corrupting data bytes is handled in driver) Sequence : `u
- 7 replies
-
- Queues
- Inline Constraints
-
(and 1 more)
Tagged with:
-
*, Is one of these ways to have a sequence wait on an event preferred? If so, why? The following are code snippets from inside a sequence. 1) Create transaction and engage w/ driver, then wait for event. `uvm_create(req) start_item(req); m_state.wait_on_smthg(); // <--- wait here 2) Wait for event, then proceed m_state.wait_on_smthg(); // <--- wait here `uvm_create(req) start_item(req); In this case, the event being waited for is that data of a certain type is available.
-
I am trying to synchronize when sequences are sent to the DUT. I send one transaction to the DUT at the beginning, and then I need to wait for the DUT to send out a transaction (much later) before I continue with my sequence. Right off the top, I was thinking I would add an analysis_imp, and when the DUT sends the transaction, have the agent broadcast it, and my sequence could trigger an event in say, the write function. I don't believe this makes sense though, as I don't believe ports were meant to be created in transient types, like a uvm_sequence. It appears as the only real "connect
-
In the body of a virtual sequence I have a sequence running inside fork join, which is then killed by disabling the thread, like so: virtual task body(); .... fork:seq_thread `uvm_do_on(my_seq, my_seqr) join @(negedge reset_b ); disable seq_thread; ... ... endtask; On doing this, we get the following error from the sequencer: [sEQREQZMB] The task responsible for requesting a wait_for_grant on sequencer 'uvm_test_top.env.my_seqr' for sequence 'uvm_test_top.env.soc_v_sequencer.my_vseq.my_seq' has been killed, to avoid a deadlock the sequence wi
-
Following is the sequence code class basic_sequence extends from uvm_sequence(#sequence_item); sequence_item item; task body() fp1 =fscanf("abc.txt", addr, data); `uvm_do_with(item,{ item.addr = addr; item.data = data; }); endtask endclass I have constrained addr and data from file reading data. It is not happening with the above code. data_item is getting a random value. I have written a user-defined task to solve this problem like below task do_rw(int addr
- 5 replies
-
- uvm_do_with
- sequence
-
(and 1 more)
Tagged with:
-
Following is the example class my_sequence extends uvm_sequence... string file_name; `uvm_object_utils_begin(mysequence) `uvm_field_string(file_name,UVM_DEFAULT) `uvm_object_utils_end endclass class basic_test extends from uvm_test function build_phase(..) set_config_string("*", "file_name", abc.txt); endfunction endclass.. I am passing file_name(abc.txt) from test with set_config_string, but, it is not taking effect. I did the same thing in driver. it worked well. does UVM supports, overriding local variables in sequence. Please let me know...
- 2 replies
-
- set_config_string
- sequence
-
(and 1 more)
Tagged with:
-
I am learning UVM. So far I was able to create the following environment for my DUT. Agents with monitors, drivers and sequences for all of the input-output interfaces from my DUT. A top level UVM env. Sequences to send valid data to DUT. I yet to implement scoreboard. I'm having some trouble to understand how to handle scenarios like following: For one of my tb->dut interfaces, TB needs to wait for an event (or transaction) from DUT. Once it receives the transaction from DUT, TB needs to send back a response. What is the best way to implement this? How can I monitor DUT transacti
-
`uvm_do_with(m_top_seq, {m_sub_seq.num_of_trans == 0;}) The above example results in a runtime null object failure for m_sub_seq Is there a way to overcome this without copying all m_sub_seq random variables to m_top_seq ?
-
I've run into the following issue using the built-in UVM register tests. The built-in UVM register tests (seem to) start R/W-ing immediately after top-level reset is released. This was fine, initially. See attached image "Capture". We now have some delay between the release of top-level reset and the actual reset going to the register block. This is resulting in a read occurring before reset to the rtl regblock is released, and causes the test to hang. See attached image "Capture2". Without modifying the built-in register tests/sequences, how would anyone suggest that we cleanly
- 1 reply
-
- register layer
- register
-
(and 3 more)
Tagged with:
-
Hello Everyone, I am trying to control a sub virtual sequencer's non-virtual sub sequencers using a top level virtual sequencer. It looks like this diagram. <start of diagram> .------------------------------------------------------. | my_test | .--------------------------------------------------. | | | sequences | | | '--------------------------------------------------' |
- 5 replies
-
- sequencer
- virtual sequencer
-
(and 2 more)
Tagged with:
-
When a driver returns a response to the sequence, it calls 'set_id_info()' to set the identifiers of the transactions returned. This way, the originating sequence can correlate the response and the originating transaction, by matching the 2 fields sequence_id and transaction_id. This has a couple of drawbacks : the sequence writer must set this field 'transaction_id' by hand the transanction_id may not be unique - a bug can be introduced (sequence/driver) and go unnnoticed when the wrong matching occurs - worst scenario is when a user simply forgets to set it, and the matching still oc
-
- fix
- improvement
-
(and 3 more)
Tagged with: