Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by SeanChou

  1. yes, I agree with you that the on-the-fly reset idea could be implemented by only sequence without any phase jump. However, my situation now is the 2 existing environments already implemented the on-the-fly reset by using phase jump from main_phase to pre_reset_phase(). In integrated environment, The phase jump on-the-fly reset seems still works veritcally, Besides the 2 interfaces are reseted in same time (i guess because they works in the phase in default), for the purpose the separte them temporally. I try to separate them into different domains. Still thanks for your suggestion, could you let me know the reason and we may not to implment on-the-fly reset by phase jump in the future.
  2. Hi, UVM Exports, I am writing a test to put 2 uvm_env A and B together and hope to separate them in different domains. I hope to give each environment his own run_phases time line. how could I do this? thanks! hope you could provide some hints or several lines of code for my reference. thanks a lot!
  3. mainly for bug fixed for 1.1, should be transparent to users. http://www.accellera.org/downloads/standards/uvm/uvm-1.1c_release-notes.txt
  4. Hi UVM Connect exports, As title, druing developing, we sometimes hope to replace std::vector with __gnu_debug::vector for debugging purpose. However, this replacement makes uvmc to encounter a fatal error as below (with Questa 10.1) ** Fatal: (SIGABRT) Bad handle or reference ... Fatal error in Module uvmc_pkg at ....uvmc2.2/src/connect/sv/uvmc_tlm1.sv line 36 is there any suggestion how to handle this? thanks! insert a std to gnu_debuger converter could help, however, its not convinent any more.
  5. Hi, UVM Connect exports, As title, some existed TLM channels exchanges primitive datas without class wrapped, however, when I connect them to another langange via UVM connect, this problem happnes because the uvmc linvokes new(), which could infer the lhs must be a class object. is the any way I can do besides packaging them with classes? thanks!
  6. Hi UVM connect export, I hope to use tlm_analysis_port in direction SV report to SC (I could only find the other direction in uvmc example) so I try to write my own as following. By printing some message I found the analysis port in SV side has been written, however the SC side write did not be invoked, could some one give some hint to the problem or how to debug it has been connected correctly? (I am new to SC so there could be some stupid mistake, please forgive me if any) thanks! SC: class my_subscriber : public sc_module, public tlm_analysis_if <my_pkt> { virtual void write (const my_pkt &pt) { //... } } int sc_main (int argc, char** argv[]) { my_subscriber sub("sub"); // uvm_connect(sub, "my_ap"); // I modified previous line to following 2 lines // because ambiguous call due to multiple inheritance uvmc_analysis_port<my_pkt> port (sub.name(), "my_ap"); port.bind(cons); sc_start(); return 0; } SV: uvmc_tlm1 #(my_pkt)::connect(uvm_ap, "my_ap");
  7. UVM exports, After debug, I thought the second argument (SEQR) missed in "__seq.set_item_context(this);" which implies to set_sequencer = NULL and cause the sequence could not find its sequencer and stop. could some one verify this? thanks! For my case the SEQ_OR_ITEM is an uvm_sequence, I am not sure the same error happens when its an item. `define uvm_rand_send_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS) \ begin \ uvm_sequence_base __seq; \ if (!$cast(__seq,SEQ_OR_ITEM)) start_item(SEQ_OR_ITEM, PRIORITY);\ else __seq.set_item_context(this); \ if ((__seq == null || !__seq.do_not_randomize) && !SEQ_OR_ITEM.randomize() with CONSTRAINTS ) begin \ `uvm_warning("RNDFLD", "Randomization failed in uvm_rand_send_with action") \ end\ if (!$cast(__seq,SEQ_OR_ITEM)) finish_item(SEQ_OR_ITEM, PRIORITY);\ else __seq.start(__seq.get_sequencer(), this, PRIORITY, 0);\ end
  8. thanks Dave to let me know the OS need to be updated. The issue was fixed after using another machine.
  9. Hi Exports, I hope to run the UVM connect example and in the stage of compiling uvmc pkg. uvmc-2.2/lib $ make uvmc QuestaSim sccom 10.1 compiler 2011.12 Dec 5 2011 ** Error: (sccom-6137) Unsupported "Linux release 4.6" - CentOS release 4.6 (Final). Refer to the QuestSim release notes for a list of supported Linux operating system releases. Is there any workaround for this? thanks!
  10. This problem persists when using -uvm or -uvmhome to replace the original UVM arguments.
  11. Uwes, I got the same error with Synopsys Discovery APB VIP in 10.20s100 or 12.10-p001. TOOL: ncelab 12.10-p001 OS: Linux 2.6.9-67... MESSAGE: sv_seghandler - trapno -1 addr(0x00000017) Any hint how to handle this? thanks!
  12. Hi UVM Reg Exports, In the uvm_reg_field::do_predict() function as following: • why not clear field_val when (acc == “WSRCâ€) after read? • why not set field_val when (acc == “WCRSâ€) after read? is there some reason or simply missing this type? function void uvm_reg_field::do_predict(….) //…………………… UVM_PREDICT_READ: // line 1136 in uvm_reg_field.svh of uvm-1.1b begin uvm_reg_field_cb_iter cbs = new(this); if (rw.path == UVM_FRONTDOOR || rw.path == UVM_PREDICT) begin string acc = get_access(rw.map); if (acc == "RC" || acc == "WRC" || acc == "W1SRC" || acc == "W0SRC") field_val = 0; // (clear) else if (acc == "RS" || acc == "WRS" || acc == "W1CRS" || acc == "W0CRS") field_val = ('b1 << m_size)-1; // all 1's (set) else if (acc == "WO" || acc == "WOC" || acc == "WOS" || acc == "WO1") return; end
  13. The reason why this user define UVM_REG_NO_INDIVIDUAL_FIELD_ACCESS is he want to filter the following warning. if (!m_individually_accessible) begin `uvm_warning("RegModel", {"Individual field access not available for field '", get_full_name(), "'. Accessing complete register instead."}) return 0; end However, is that normal to have a lot of wanring in this kind in log? do you suggest to filter it by uvm_report_catcher in default?
  14. Another problem line1504 should be: // rw.value = value_adjust ; rw.value[0] = value_adjust ; rw.value is a dynamic array there. same problem in 1614.
  15. I was told there is a missing ";" in src/reg/uvm_reg_field.svh line 1505 today. please be aware and thanks! `ifdef UVM_REG_NO_INDIVIDUAL_FIELD_ACCESS rw.element_kind = UVM_REG; rw.element = m_parent; rw.value = value_adjust; m_parent.do_write(rw) // line 1505, missing ";" here. `else
  16. Hi UVM Experts, I oringally do it in run_phase() since backward compatible, however, there is a signals conflict problem between normal access and reset_phase(). Later I modify it in main_phase(), however, sometimes I hope to use it in configure_phase(). How is your suggest? thanks!
  17. Hi simulator exports, UVM already helps a lot to make our TB works with multiple simulators. however, this makes us found some existed RTL is eval order dependent. which cause the simulation results are wrong if we changed the simulators. Theretically we could fix it after which is found. however, designer depends and not willing to fix since the RTL is already silicon proven. so this confusing us a lot. Is there any static or more systematic way to make our DUT eval order independent? Thanks a lot in advanced!
  18. Hi UVM exports, We are recently migrating some register tests from VMM to UVM and find UVM adds many new kinds of registers compared with VMM. however, why there are 3 types of registers A0, A1 and RU have been removed? Is it because reigster model does not actually care DUT updates the register value during operation. Thanks!
  19. Thanks for mastrick's sharing, In my understand, uvm_phase::jump only set the next phase to go, and it will really go to the phase when all drop. that's why I need to clear it explicitly. About the driver's problem, for example, the driver: 1. set jump from main_phase to pre_reset_phase 2. get the item at 1ns and plan to invoke item_done in 3ns 3. phase.done.clear in 2ns 4. I originally think the driver stops executing main_phase and to pre_reset_phase() at this monent, and will not execute item_done, so the probelm stated before will not happen, am I correct?
  20. Hi UVM Experts, I am trying to organize a guideline to achieve the on-the-fly reset discussed in the Cypress' paper. http://events.dvcon.org/events/proceedings.aspx?id=131-2 The steps: 1. component: reset valuables, queue in pre_reset_phase. 2. sequence: release all resources such as semaphores in do_kill() 3. execute the on-the-fly reset in uvm_test as the example below. virtual task main_phase(uvm_phase phase); // after some events or random phase.jump(uvm_pre_reset_phase::get()); phase.phase_done.clear(); // Question 1 foreach (sqr[i]) sqr[i].stop_sequences(); // Question 2 endtask: main_pahse Question 0: It already works in my simple example, however, I am not sure is there anything that I did not take into consideration? please give me some hints and thanks! Question 1: do you suggest to use "phase.phase_done.clear(); directly to end the main_phase? is there any risk or there exists better alternative. Question 2: to make sequence::do_kill() invoked by all sequences, is there better way than finding all sequencer handles and perform stop_sequences()? thanks in advanced!
  21. Phuynh, Do you also suggest users to use uvm_config_db during run phases, if yes, why? if not, is there any suggested alternative for it and thanks!
  • Create New...