Jump to content

Bas Arts

  • Posts

  • Joined

  • Last visited

  • Days Won


Bas Arts last won the day on September 29

Bas Arts had the most liked content!


Recent Profile Visitors

841 profile views

Bas Arts's Achievements

Advanced Member

Advanced Member (2/2)



  1. Using the "notifying_thread" as you describe, simply shifts the issue from the arbiter to the notifying thread and therefore doesn't solve it. The fixed amount of waiting time in the arbiter is also arbitrary (no pun intended) as you indicated that the input FIFOs are untimed. Hence, we need more details about your design to solve it elegantly. Can you share a picture of all modules involved, their interconnections and their inner timings?
  2. I deduct from this that somewhere in your design, timing is involved, most probably in the part that triggers/feeds the input threads. If not, your simulation would finish in zero time + x delta cycles, which "at this time stamp" seems to contradict. So, you have to define what "at this time stamp" means. Is it exactly the simulation time at which the first FIFO notifies the arbiter? In that case, David's solution applies. Do you have clocks (e.g. wait statements with time indication) in your design? Maybe your arbiter can only be sure at the end of a clock cycle? Maybe another part of your design must tell the arbiter that "at this time stamp" has finished, and the arbiter can assume that no new transactions will come in?
  3. You seem to incorrectly use the sc_start function. Please read up on sc_start (paragraph of 1666-2011 (https://ieeexplore.ieee.org/document/6134619)) and post your code afterwards, if still necessary.
  4. Just out of curiosity: did you consider/discuss to use XML as a data modeling language i.s.o. JSON, for example to ease integration into or connection with IP-XACT?
  5. It is (typically) part of your vendor's tool installation. Inside the installation, look for "ubus" and/or "integrated". For example: $ find <path_to_vendor_installation> -name *ubus* If $UVM_HOME has been set correctly, you can also use $ find $UVM_HOME -name *ubus* Or simply use your favorite search engine on the web with terms "integrated", "ubus" and "uvm".
  6. Hi Sumit, I cannot test with gcc 9.3.0, but with SystemC 2.3.3 and gcc 9.1.0 using c++14 the following code doesn't give any problems: int sc_main(int argc, char* argv[]) { Blah myblah {"myblah"}; myblah.LetsWrite(); myblah.ThisOneFailsToo(); return 0; }
  7. It seems that you are mixing compiler versions and/or settings between the different packages you use. At least, your SystemC installation has not been built with the default GCC 4.8.5. Although not strictly necessary, I'd recommend to build SystemC, UVM-SystemC and SCV with the same compiler version and -options. I can confirm that with GCC 4.8.5, the SCV 'make check' also runs successfully.
  8. Hi Josep, After building SCV, did you run 'make check'? Did all tests pass? If so, could you share a small example that reproduces your problem? For me, 'make check' runs successfully using SystemC 2.3.3 and g++ 9.1.0. Thanks
  9. In addition, if your SystemC model contains ports of type double, you need to convert them in the test harness to 64 bit vectors first.
  10. On a side note, you might also consider moving to SystemC 2.3.3; SystemC 2.3.1 is fairly old.
  11. I guess the return value reflects either successful (zero) or non-successful (non-zero). E.g. the following code prints a non-zero value (in my case, 256 although I would have expected 1): module foo; int val; initial begin val = $system("test -f thisfileprobablydoesnotexist"); $display(val); end endmodule
  12. If you separate application code and read/write implementation code, you can keep your C code application and compile it still for your CPU module. Yes, you will need a C++ compiler then, but it also allows you to port your application to e.g. a commercial CPU model which could use plain C. You'd only need to replace your read/write C++ implementation with a C implementation. // C header file #ifndef C_H #define C_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void mywrite(uint32_t address, uint32_t value); void myread (uint32_t address, uint32_t *value); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* C_H */
  • Create New...