Jump to content

All Activity

This stream auto-updates     

  1. Today
  2. following are codes from apb_master read task this.sigs.mck.paddr <= addr; this.sigs.mck.pwrite <= '0; this.sigs.mck.psel <= '1; @ (this.sigs.mck); this.sigs.mck.penable <= '1; @ (this.sigs.mck); data = this.sigs.mck.prdata; this.sigs.mck.psel <= '0; this.sigs.mck.penable <= '0; Here sigs is virtual interface for apb_if and mck is clocking block defined in apb_if. paddr, pwrite, psel and penable are output signals with no skew (ie default skew of #0) (please refer apb_master class in example codes supplied by accellera) and prdata is input signal with no skew (ie default skew of #1step). Now in above codes, before an event on mck (ie 1st @ (this.sigs.mck)) , output paddr, pwrite and psel are driven, which values effectively appear on corresponding (paddr, pwite and ppsel) interface signals in re-NBA region of posedge clk event. penable clockvar is driven (this.sigs.mck.penable <= '1) after observed region of the same 1st clock event. Now refer following dut.sv codes in codec example, which supplies read data. always @ (posedge clk) begin if (rst) begin ..... end else begin // Wait for a SETUP+READ or ENABLE+WRITE cycle if (apb.psel == 1'b1 && apb.penable == apb.pwrite) begin pr_data <= 32'h0; if (apb.pwrite) begin casex (apb.paddr) 16'h0000: if (apb.pwdata[8]) SA = 0; ..... endcase end else begin casex (apb.paddr) 16'h0000: pr_data <= IntReq; 16'h0004: pr_data <= IntMask; 16'h0010: pr_data <= TxEn; 16'h0014: pr_data <= TxLWM; 16'h0020: pr_data <= {aligned, RxEn}; ..... endcase end end end …. end if condition of apb.psel == 1 and apb.penable == apb.pwrite (when both penable and pwrite are 1'b0) is true in 2nd clock cycle and pr_data local variable in dut is driven with data value using non-blocking assignment. so updated pr_data will be available after NBA region of 2nd clock tick, Now look at apb_master code that local var data (which is output port in read task) is receiving value from clockvar prdata (data = this.sigs.mck.prdata). As per SV (1800-2012) specification this event will be executed in observed region and prdata input clockvar will be updated when interface signal prdata is updated using continuous assign as under (refer dut.sv codes in codec example of UVM) assign apb.prdata = (apb.psel && apb.penable && !apb.pwrite) ? pr_data : 'z; here apb.penable becomes 1 only after re-NBA region of 2nd clocking block mck event in apb_master codes. therefore apb.prdata is updated with desired pr_data after re-NBA region while output data is picked-up in observed region (ie before re-NBA region) in same clock cycle, so my simulator is reading 'z value. Here I am following SV spec (1800-2012), which states that default #0 output skew drives signals in re-NBA region of clocking event, while inputs are updated before clocking block event @ (this.sigs.mck) ie prdata var is updated before observed region. In my view 1 more clock delay is required before output data is read (data = this.sigs.mck.prdata) in apb_master codes to read correct data from dut or there may be something wrong in my understanding of drives on clockvars. Please , if anyone can help me to understand this issue?
  3. Yesterday
  4. sHeshmat

    Checking ports for power estimations

    thanks a lot sir it really worked and helped a lot .. would you please tell how to use the value_changed_event().. thanks
  5. Roman Popov

    What effect option DISABLE_VIRTUAL_BIND has?

    When you don't manually set CMAKE_INSTALL_PREFIX, it tries to install into ${SYSTEMC_HOME} or ${SYSTEMC_ROOT_DIR}. One nasty thing about SystemC CMake build system is that it exports targets from build directory, so you can use find_package even without installing SystemC. This may be very confusing. (But some people find it convenient - you don't need to install, just build and use) This is probably what you are encountering - You have old C++98 SystemC build directory somewhere, and find_package founds it, instead of installed modern C++ SystemC build. So I would recommend to print some informational messages in your application CMakeLists.txt: find_package(SystemCLanguage CONFIG REQUIRED) message("Using SystemC from ${SystemCLanguage_DIR}") message("Using C++ Standard: ${SystemC_CXX_STANDARD}") set (CMAKE_CXX_STANDARD ${SystemC_CXX_STANDARD}) When you run cmake it will print something like this: Using SystemC from F:/work/systemc-2.3.3/cmake-build-debug Using C++ Standard: 17
  6. Last week
  7. Then my bet is that on your system CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT is defined somehow. Otherwise line 541 if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) prevents to define, among others CMAKE_INSTALL_PREFIX After that I commented out that conditional, I also succeeded. BTW: what that conditional makes there? I do not think it is properly used According to CMake docs, that is, when I run CMake for the first time, it will not set CMAKE_INSTALL_PREFIX at all, that is it will be installed to the default path, independently of whether I have defined my own (initially obviously experimental) path. So, my initial attempt with a new version will fail. I would suggest to make an install attempt on a virgin system, before making a new release public.
  8. Eyck

    Checking ports for power estimations

    Well this a little bit about data representation. old_data is a pointer to a uint8_t and this is what you see in the variables view. It has the value of 0x7ff..fdb10. The memory at this address is 2 which is the lowest byte of the first element in your struct (x of type int). Actually using the struct the compiler orders the 2 elements in a row. Depending on the platform and the compiler the members might be 32 or 64 bit long. Lets assume the int is 32bit and the long is 64 (gcc on 64bit Linux). The layout is as follows (the suffix denote the byte number): old_data -> x.0 x.1 x.2 x.3 y.0 y.1 y.2 y.3 y.4 y.5 y.6 y.7 So the value 2 is the lowest byte of the old_val.x variable having the value of 2 (or 258,...) Well, the struct shown above is not entirely correct. The compiler might choose to put padding bytes inbetweeen the members for performance reasons. In this case above there will be 4 byte of padding between x and y so that y is at an aligned address (a multiple of 8). So you would declare it as struct __attribute__ ((__packed__)) my_data { int x; long y; }; to avoid the paddng. See also https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html#Common-Type-Attributes Back to your question: you use the pointer like in an array. the notion *(old_data+i) is equivalent to old_data[i] So in the for loop you iterate over every byte belonging to the struct. BR
  9. sHeshmat

    Checking ports for power estimations

    i have uploaded a print screen , concerning my first question. i tried to make your example with value x= 2 , and y = 8 for the struct , but after making the reinterpret_cast the values appearing in the debug mode are very strange and i can not understand how i can use them in binary manner. NB : i made red squares around the points in need thanks a lot
  10. Roman Popov

    What effect option DISABLE_VIRTUAL_BIND has?

    You don't need to run configure if you use CMake. configure is for autotools, another build system. Most likely you have it in CMake Cache. Read how CMake set(...) works here : https://cmake.org/cmake/help/latest/command/set.html Because SystemC standard is written on top of C++03. Unfortunately it looks like we will have to wait another year or two for next IEEE SystemC standard on top of more modern C++. Because SystemC 2.3.1 had no C++11 features. But Accellera releases after 2.3.1 start to include some features made with modern C++. Thus, SystemC 2.3.3 compiled with -std=c++11 and -std=c++98 may be incompatible. More on that here: http://forums.accellera.org/topic/5738-support-for-c1114-in-systemc-232/ Yes, basically the only thing you need to do is to recompile SystemC library with C++ standard you use for your application. I linked SystemC with GTest without any issues. In general, I understand your frustration, because if you use modern Linux with gcc or clang, you get used to good binary compatibility between compiler and libraries versions. However the rest of the world is not like that. On Windows/MSVC for example you usually have to match compiler versions and flags for all libraries you link. If you are unlucky to work in semiconductor industry, you will soon find out that you are forced not only to use specific C++ standard, but also specific Linux (RHEL) and specific outdated GCC version.
  11. Hi: The .configure files between systemC and scv behave very differently. To get this to work, I had to do the following: export CXX='g++ -std=c++11' export CC='gcc -std=c++11' ./configure --libexecdir ${rootPath}/lib --with-systemc=${rootPath}/build/systemc-2.3.3
  12. Hello Ameya Vikram Singh , this issue really makes me crazy. I am compiling SystemC from source. (I made a clean build, both for SystemC and my own app) I do have in the main CMakeLists file the line set (CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to build all targets. Supported values are 98, 11, and 14.") I make ../configure, too. When I make the build, I receive tons of absolutely obsolete messages, but I cannot find out this crucial parameter: which standard was finally utilized? BTW: why? And why today a 20-years old standard is the default? What else shall I do to compile for standard other than the default? Why it is an issue for 2.3.>1, while it is not for 2.3.1, which I can install with no problem? ( I mean to build it together with libraries like gtest and Qt) Is there any option to build in the same way as 2.3.1? Is it only me who uses also another libraries in combination with SystemC? I make two debug prints in my root CMakeLists file, it says My C++ standard is ;98 Despite that I have changed to 14. Also, in my application directory My C++ standard is ;98 It looks like I cannot overwrite the default. What else shall I do? Is there any way to find out which standard uses a library I installed? Thanks for your help.
  13. sHeshmat

    Checking ports for power estimations

    thanks a lot sir for your perfect example , but may i know the return value for this event , cause i tried to use it and never succeeded . i always receive compile error , which means i do have error in the programming syntex. thanks a lot
  14. Hello @katang, I am not an expert on this topic. But here is an article which summarizes the C++ Standard Changes after(C++98/03): https://developers.redhat.com/blog/2015/02/05/gcc5-and-the-c11-abi/ One thing to understand is the standards body and the compiler teams came with solution to handle such underlying core changes, without the end user needing to completely rewriting their application and library implementations. With just a recompilation with newer standard flags gave most of the applications/libraries to start using the latest C++ standards features. Having a consistent compiler standards and other flags provides one with confidence that the application/library that one is shipping is meeting their expectations. And trust me you don't want to debug issues in library that got linked with slightly flags or slightly different API's and you are getting different run-time behavior of the application at every execution run(https://en.wikipedia.org/wiki/Heisenbug). Hope this helps. Regards, Ameya Vikram Singh
  15. Yes, probably you are right. But, I am finding SystemC in the root CMake file, and the printout comes from the leaf and it seems to be correct. BTW: what was the intention of with introducing such a degree of incompatibility with the compiler version? Was not enough the confusion with the different versions of the libraries? What if I use 6-8 different libraries with different (sometimes incompatible) versions per project, and now I must maintain also which version of which library was compiled with which standard?
  16. Hello @katang, It seems the issue is due to mismatch between the C++ compiler flags between your SystemC build and your application. Can you check if they are consistent? Regards, Ameya Vikram Singh
  17. You know, in the makefile I use (as advised) set(CXXFLAGS -DCMAKE_CXX_STANDARD=${SystemC_CXX_STANDARD}) message("My C++ standard is " ${CMAKE_CXX_STANDARD}) The corresponding message on the screen is My C++ standard is ;98 Which is the default of the SystemC package. What else shall I do? The option in the main makefile mentions the incompatibility with TLM, but not any more potential issues.
  18. This message indicates that you link 2 libraries or object files into one executable which are build against 2 different versions/configurations of the SystemC library. Actually this (or a similar) symbol created during the build of libsystemc and part of the libsystemc. It ensures that the header configuration and the compiled library match. It does not relate to TLM at all. One reason could be an inconsistence wrt the use of C++11, see here: https://stackoverflow.com/questions/46875731/setting-up-a-systemc-project-with-cmake-undefined-reference-to-sc-core Best regards
  19. When I build my app with 2.3.3, I receive the error message in phase of linking: /usr/local/systemc/include/sysc/kernel/sc_ver.h:182: error: undefined reference to `sc_core::sc_api_version_2_3_3_cxx201103L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_3_cxx201103L(sc_core::sc_writer_policy)' However, I am not (yet) using TLM, neither bind() in this simple test. What effect option "(DISABLE_VIRTUAL_BIND "Disable the definition of bind() member functions of ports and exports as \"virtual\", which is incompatible with old TLM library implementations (< 2.0.2)." OFF)" has? Shall I switch it on, or how otherwise can I eliminate its effect?
  20. Eyck

    Checking ports for power estimations

    I'm not sure if I get your first question right. Essentially this is a C++ question. But what you could do is a type erase of your (POD) data, use it as a byte array and count the changed bits using XOR (be carefull to you plain data, no classes). Something like: struct my_data { int x; long y; }; my_data old_val, new_val; uint8_t* old_data = reinterpret_cast<uint8_t*>(&old_val); uint8_t* new_data = reinterpret_cast<uint8_t*>(&new_val); unsigned toggles=0; for(size_t i=0; i<sizeof(my_data); ++i){ uint8_t diff = *(old_data+i)^*(new_data+i); uint8_t mask=1; for(size_t j=0; j<8; ++j, mask<<=1) if(mask&diff) ++toggles; } Regarding your second question: you transport the data via a signal which implements the signal_in_if. This interface has a value_changed_event() getter which returns an event firing when the value of the signal changes. Just wait for this event.
  21. Hi 1- i am facing a problem , many developers on working on power estimation they count the transitions from 0 to 1. if i am sending a packet of data that is user defined via sc_signal to communicate between two sc_port who also have user defined data types. how it is possible to see the data transmitted and received in a binary manner. 2- how to know in systemc if a certain line or link switched from high to low and vice versa thanks a lot.
  22. Hello @pmeyeratdatest, Can you specify the C++ Standard flag to the compilation command line parameters. # E.g.: g++ -std=c++11 <your_project_sources.cpp> -c <other_compiler_flags> Since It does not have any effect at link time. Thanks and Regards, Ameya Vikram Singh
  23. What I am wondering is: Have I correctly built the respective systemC (2.3.2) and SCV (2.0.1) libraries? (i.e. inclusion of std=c++11, optimizations, etc.) Are there other compiler options I should be running with when building main and linking? (-fPIC ???, etc). Peter
  24. Results with shared object files only: g++-4.8 -g -Wall -ggdb -std=c++11 -O0 -D GCC48 -Wall ./main.o -o testCMD -L../build/systemc-2.3.2/lib-linux64 ../../CPP-NumericalMethods/libNumericalMethods.a -lscv -lsystemc -lpthread -lm ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x50): undefined reference to `_scv_extension_util::get_short_name() const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x78): undefined reference to `_scv_extension_type_int::get_enum_details(std::list<char const*, std::allocator<char const*> >&, std::list<int, std::allocator<int> >&) const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x148): undefined reference to `_scv_extension_rw_int::assign(std::string const&)' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x178): undefined reference to `_scv_extension_rw_int::get_string() const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x248): undefined reference to `_scv_extension_util::_set_name(std::string const&)' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x50): undefined reference to `_scv_extension_util::get_short_name() const' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x78): undefined reference to `_scv_extension_type_int::get_enum_details(std::list<char const*, std::allocator<char const*> >&, std::list<int, std::allocator<int> >&) const' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x148): undefined reference to `_scv_extension_rw_int::assign(std::string const&)' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x178): undefined reference to `_scv_extension_rw_int::get_string() const' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x248): undefined reference to `_scv_extension_util::_set_name(std::string const&)' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x50): undefined reference to `_scv_extension_util::get_short_name() const' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x78): undefined reference to `_scv_extension_type_int::get_enum_details(std::list<char const*, std::allocator<char const*> >&, std::list<int, std::allocator<int> >&) const' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x148): undefined reference to `_scv_extension_rw_int::assign(std::string const&)' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x178): undefined reference to `_scv_extension_rw_int::get_string() const' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x248): undefined reference to `_scv_extension_util::_set_name(std::string const&)' ../build/systemc-2.3.2/lib-linux64/libscv.so: undefined reference to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)'
  25. I can get the same errors if I only run with the shared objects. I have tried creating a static library only with the .a files, but this introduces more linking errors. ../build/systemc-2.3.2/lib-linux64/libscv.a(libscv_la-scv_constraint.o): In function `__static_initialization_and_destruction_0': /home/pmeyer/WORK/DA-Test/SW/SystemC/build/systemc-2.3.2/include/sysc/kernel/sc_ver.h:179: undefined reference to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)' ../build/systemc-2.3.2/lib-linux64/libscv.a(libscv_la-scv_constraint_range.o): In function `__static_initialization_and_destruction_0': /home/pmeyer/WORK/DA-Test/SW/SystemC/build/systemc-2.3.2/include/sysc/kernel/sc_ver.h:179: undefined reference to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)' ../build/systemc-2.3.2/lib-linux64/libscv.a(libscv_la-scv_debug.o): In function `__static_initialization_and_destruction_0': /home/pmeyer/WORK/DA-Test/SW/SystemC/build/systemc-2.3.2/include/sysc/kernel/sc_ver.h:179: undefined reference to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)' ../build/systemc-2.3.2/lib-linux64/libscv.a(libscv_la-scv_expression.o): In function `__static_initialization_and_destruction_0': /home/pmeyer/WORK/DA-Test/SW/SystemC/build/systemc-2.3.2/include/sysc/kernel/sc_ver.h:179: undefined reference to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)' ../build/systemc-2.3.2/lib-linux64/libscv.a(libscv_la-scv_introspection.o): In function `__static_initialization_and_destruction_0': /home/pmeyer/WORK/DA-Test/SW/SystemC/build/systemc-2.3.2/include/sysc/kernel/sc_ver.h:179: undefined reference to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)' ../build/systemc-2.3.2/lib-linux64/libscv.a(libscv_la-scv_random.o):/home/pmeyer/WORK/DA-Test/SW/SystemC/build/systemc-2.3.2/include/sysc/kernel/sc_ver.h:179: more undefined references to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)' follow ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x50): undefined reference to `_scv_extension_util::get_short_name() const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x78): undefined reference to `_scv_extension_type_int::get_enum_details(std::list<char const*, std::allocator<char const*> >&, std::list<int, std::allocator<int> >&) const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x148): undefined reference to `_scv_extension_rw_int::assign(std::string const&)' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x178): undefined reference to `_scv_extension_rw_int::get_string() const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x248): undefined reference to `_scv_extension_util::_set_name(std::string const&)' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x50): undefined reference to `_scv_extension_util::get_short_name() const' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x78): undefined reference to `_scv_extension_type_int::get_enum_details(std::list<char const*, std::allocator<char const*> >&, std::list<int, std::allocator<int> >&) const' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x148): undefined reference to `_scv_extension_rw_int::assign(std::string const&)' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x178): undefined reference to `_scv_extension_rw_int::get_string() const' ./main.o:(.rodata._ZTV19scv_extensions_baseIiE[_ZTV19scv_extensions_baseIiE]+0x248): undefined reference to `_scv_extension_util::_set_name(std::string const&)' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x50): undefined reference to `_scv_extension_util::get_short_name() const' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x78): undefined reference to `_scv_extension_type_int::get_enum_details(std::list<char const*, std::allocator<char const*> >&, std::list<int, std::allocator<int> >&) const' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x148): undefined reference to `_scv_extension_rw_int::assign(std::string const&)' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x178): undefined reference to `_scv_extension_rw_int::get_string() const' ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x248): undefined reference to `_scv_extension_util::_set_name(std::string const&)'
  26. Earlier
  27. Hi, I have a question related to appropriate CCI usage in case of composite IP with top-level configuration parameters. Let's imagine we have a composite IP A that consists of IP B and C, making the A a composite IP, since it consists of multiple IPs. Now let's imagine IP B and C have clock frequency parameter associated. The name of parameter in IP A is clk_frequency and the name of parameter in IP B is clock_frequency. For a sake of better user experience let's image that IP A (a top level one, aggregating B and C) wants to provide a convince top level parameter named clk_freq to manipulate the value of two underlying parameters. And value of clk_freq parameter is not used in the IP A. Acc to example 11 provided in the CCI package a value of multiple parameters can be synchronized using the post write callback mechanism. So this approach can be used for synchronizing values of clk_frequency parameter of IP A with value of clock_frequency parameter of IP B. It's not particularly clear to me what is the best way to implement a top-level convenience parameter in A. The most straight forward way seems to be to implement a regular CCI parameter (cci::cci_param<T> param_name;) at IP A level and synchronize with one of the parameters of B or C. Such an approach seems to involve quite some coding, also a "dummy" parameter have to be created, since clk_freq parameter is not used in the IP A. So it makes me wonder if there is a more appropriate way how this functionality can be achieved. Maybe it's possible to create a handle at a level of IP A and somehow expose it to external configurator? Also that would be interesting to know if it's possible to hide parameters of IP B and C from external configurator. I am pretty sure that described use-case scenario was considered during CCI creation and I am simply missing some obvious point here. I'd appreciate any inputs you can provide to help me to understand what is the most appropriate way to implement that. Thanks.
  28. Hello @pmeyeratdatest, This line indicates the different command line parameters for the creation of the object files. Also, why are the library specified on the command line twice?(i.e. [-lscv and -lsystemc] and [../build/systemc-2.3.2/lib-linux64/libscv.a and ../build/systemc-2.3.2/lib-linux64/libsystemc.a] Can try this command, and let us know if the message changes g++-4.8 -g -Wall -ggdb -std=c++11 -O0 -D GCC48 -Wall ./main.o -o testCMD -L../build/systemc-2.3.2/lib-linux64 ../../CPP-NumericalMethods/libNumericalMethods.a ../build/systemc-2.3.2/lib-linux64/libscv.a ../build/systemc-2.3.2/lib-linux64/libsystemc.a -lscv -lsystemc -lpthread -lm Hope this helps. Regards, Ameya Vikram Singh
  29. Hi: Related question, but a different platform. On linux (x86_64): I've built systemC-2.3.2 with CXXFLAGS=' -std=c++11 ' I've built scv_2.0.1 with CXXFLAGS=' -std=c++11 --with-systemc=${myPath}/build/systemc-2.3.2 I have main.cpp that compiles. when I attempt to link: I get: g++-4.8 -g -Wall -ggdb -std=c++11 -O0 -D GCC48 -Wall ./main.o -lscv -lsystemc -lpthread -lm -L../build/systemc-2.3.2/lib-linux64 ../../CPP-NumericalMethods/libNumericalMethods.a ../build/systemc-2.3.2/lib-linux64/libscv.a ../build/systemc-2.3.2/lib-linux64/libsystemc.a -o testCMD ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x50): undefined reference to `_scv_extension_util::get_short_name() const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x78): undefined reference to `_scv_extension_type_int::get_enum_details(std::list<char const*, std::allocator<char const*> >&, std::list<int, std::allocator<int> >&) const' ./main.o:(.rodata._ZTV14scv_extensionsIiE[_ZTV14scv_extensionsIiE]+0x148): undefined reference to `_scv_extension_rw_int::assign(std::string const&)' etc..... ./main.o:(.rodata._ZTV23scv_extension_callbacksIiE[_ZTV23scv_extension_callbacksIiE]+0x248): undefined reference to `_scv_extension_util::_set_name(std::string const&)' ../build/systemc-2.3.2/lib-linux64/libscv.so: undefined reference to `sc_core::sc_api_version_2_3_2_cxx199711L<&sc_core::SC_DISABLE_VIRTUAL_BIND_UNDEFINED_>::sc_api_version_2_3_2_cxx199711L(sc_core::sc_writer_policy)' I can see the symbols defined in ../build/systemc-2.3.2/lib-linux64/libscv.so using the nm tool. What am I missing....? Thanks! Peter
  1. Load more activity
×