If I tun the switch "-uvmcontrol=all" on and set "+uvm_set_config_int=*, recording_detail, 400". ,is Questasim going to automatically create streams for all the UVM transaction ? Or, I have to the do_record function the `uvm_record_field thing ?
For sequences, yes it will automatically create the streams for you. All other transactions you have to record() manually.
In reply to dave_59:
Can anyone tell me where can I find the automatic created streams (for sequences) ? I am not seeing anything in the structure window.
In reply to daniel.hc.tai:
Honestly, I hate to say this, but mentor’s document about this issue is really poor.
I was trying to look for this information by myself, but none of the video or document clearly explain how to do this.
I am talking about a three years old feature. And I found a lot of people in this forum ask the same question.
Hi Daniel,
The UVM will automatically record transactions - the sequences and sequence items that you use in your testbench. But in order to see attributes of those transactions you should implement the do_record() function. We (Mentor) do NOT recommend using the field_automation macros.
With the do_record() implemented, then the next thing to do is to tell the UVM to record. That is the “recording_detail” setting which you already did.
Finally, Questa needs to be told to put those UVM transactions into the WLF file. That’s the ‘-uvmcontrol=all’ switch for vsim.
What version of Questa are you using? In the latest versions of Questa, there is a UVM Details window, which lists all the transaction streams for you.
Please let me know if you run into any trouble.
Best regards,
rich
In reply to richedelman:
rich,
Our team is using Questa 10.1d. For the stability of the simulation result, we are stick to this version.
I thought this feature has been there for three years. Can you just point to me there are the streams in 10.1d ?
Thanks.
Daniel
In reply to daniel.hc.tai:
I am using ubus in uvm-1.1c as a testbed for Questasim UVM debugging feature.
I found the following problem in recorder questa-recorder.svh of Questasim UVM package questa_uvm_pkg-1.2
The recorder has problem dealing with dynamic array (or any array ?). So, when automatic recording is on. I got following error.
UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa-recorder.svh(368) @ 430: reporter [ILLEGALNAME] 'data[0]' is not a legal c identifier name, changed to
UVM_WARNING verilog_src/questa_uvm_pkg-1.2/src/questa-recorder.svh(370) @ 430: reporter [ILLEGALNAME] ‘data_0_’. Attributes must be named as a legal c identifier.
UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa-recorder.svh(368) @ 430: reporter [ILLEGALNAME] ‘wait_state[0]’ is not a legal c identifier name, changed to
UVM_WARNING verilog_src/questa_uvm_pkg-1.2/src/questa-recorder.svh(370) @ 430: reporter [ILLEGALNAME] ‘wait_state_0_’. Attributes must be named as a legal c identifier
Because data and wait_state are arrays.
rand bit [7:0] data;
rand bit [3:0] wait_state;
I I also got this error message
UVM_ERROR verilog_src/questa_uvm_pkg-1.2/src/questa-recorder.svh(796) @ 1440: reporter [uvm_link_transaction] Link not performed
Can you tell me how to make it work in the ubus examples in uvm-1.1c release ?
Thanks.
Hi Daniel,
Questa has had transaction recording and viewing for a long time. 10.1d is a good version to be using for the latest features and updates.
The two issues you have run into with the UBUS example can be ignored if you want. Ignoring these messages won’t change your simulation results. The ILLEGALNAME warning is just annoying. The “Link Not Performed” means that you won’t be able to use the Waveform relationship functionality, and you will be accumulating ERRORs.
If you want to know the details, you can read on.
Have you tried transaction recording on a real design? That UBUS design has many undesirable characteristics. I would advise against using it as a model for good testbenches.
The UBUS example creates uvm scopes and names that are not legal C identifiers. Questa expects that names are simple C identifiers. That problem can be ignored or turned off. Turning it off is easiest if you put a UVM messaging control very early in your testbench (best is before run_test()).
begin
uvm_component c;
c = uvm_root::get();
c.set_report_id_action_hier("ILLEGALNAME",UVM_NO_ACTION);
end
run_test();
Or even easier, turn it off from the Questa simulation command line:
+uvm_set_action=*,ILLEGALNAME,UVM_WARNING,UVM_NO_ACTION
For the second problem, there can be many causes of this, but it is usually that a parent sequence has ended before a child sequence. Sometimes the UVM itself causes these kinds of things, sometimes it is the testbench. I don’t remember why it does this in the UBUS example. This one is best just to ignore for now.
rich
Hi Daniel,
You can find the streams by using the Structure (Sim) tab/window with the Objects Window. Look for the items that are blue cross.
You can do the following:
add wave /uvm_root/uvm_test_top/ubus_example_tb0/ubus0/bus_monitor/main
add wave /uvm_root/uvm_test_top/ubus_example_tb0/ubus0/main
add wave /uvm_root/uvm_test_top/ubus_example_tb0/ubus0/loop_read_modify_write_seq
add wave /uvm_root/uvm_test_top/ubus_example_tb0/ubus0/slave_memory_seq
rich
In reply to richedelman:
rich,
Thanks.
Finally, I got the stream and see it in the waveform.
My suggestion is this, put it into a document or a video somewhere. Because the stream are automatic created, I have no idea where they are and I don’t know blue cross is a stream. Even I know the blue cross are streams,if you didn’t point them to me, I have to go up and down all the structure to find them. And my gut feeling is that they should be in the sequencer (Of course I was wrong, in this case).
Now I understand that why in the forum people suggest to dump all the signals, then find the streams. Which seems ridiculous to me but it does work.
Again, this is a three years feature. If you create a feature, you should make it easy to use instead of hiding it. And, if streams is created, a easier way should be provided to find it.
So, is there general rule to find the automatic created streams ? And, if I do do_record() function on a transaction, where can I find the streams ?
In reply to daniel.hc.tai:
As Rich stated earlier, we have listened to user’s suggestions and made it much easier to find the streams and documented it in the latest version of Questa. From the Questa User Guide the UVM details window: “Stream mode displays any existing transaction streams that exist at or below the UVM component hierarchy selected in the Structure window. You can drag UVM stream objects into the Wave window.”
Unfortunately, we cannot go back in time and add this feature to software and documentation that has already been released.