summaryrefslogtreecommitdiff
path: root/src/systemc
AgeCommit message (Collapse)Author
2018-09-05systemc: Implement pending activity related functionsGabe Black
Track the number of notifications/timeouts that are scheduled at any given time. This lets us implement sc_pending_activity_at_current_time, sc_pending_activity_at_future_time, and sc_time_to_pending_activity. Change-Id: Ia3fcd29bdbfe1a6c77eb52ce4836982d4705263c Reviewed-on: https://gem5-review.googlesource.com/12032 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement sc_pause, sc_stop, and re-sc_start-ing.Gabe Black
This change further modifies the scheduler to implement the sc_pause and sc_stop functions, and to ensure that calling sc_start again works. Also, some small changes were made to how processes and contexts are hooked up. Now, rather than checking whether a process is running to determine wether it started on its own or needs to be started manually, there's a bool which explicitly tracks whether it needs this step. The problem was that once a thread finished, it wasn't considered running any more. In that case it had run but finished, but that was indistinguishable from it needing to run but not having been started. Change-Id: I3aefb5493f91d9efa1a1382586196339b67925fe Reviewed-on: https://gem5-review.googlesource.com/12031 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement sc_get_current_process_handle's other personality.Gabe Black
When run during simulation, sc_get_current_process_handle returns a handle for the currently running process or a invalid handle if no process is running (ie sc_main is running). When run during elaboration, it returns a handle to the most recently created process. This second context is what this change handles. Change-Id: I3fb247b9b7bf83891c782966cfef474753159158 Reviewed-on: https://gem5-review.googlesource.com/12030 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Handle suspended processes and handle sensitivity overload.Gabe Black
This change keeps track of whether a process would have become ready but was suspended so that it can become ready when the process is resumed. Also, this makes a process ignore its static sensitivity while a dynamic sensitivity is in place. Change-Id: If3f6c62f370051e574f81bf227746db8c43527e2 Reviewed-on: https://gem5-review.googlesource.com/11715 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement next_trigger and wait.Gabe Black
These set up dynamic sensitivity. Change-Id: I6cf2c2e4f93fe001eb7df8377753d51846b57d32 Reviewed-on: https://gem5-review.googlesource.com/11714 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement the sensitivity mechanism.Gabe Black
This change lets processes be sensitive to events, timeouts, etc. Change-Id: If30a256dfa8a2e92192c1f9c96b48e2aa28ec27e Reviewed-on: https://gem5-review.googlesource.com/11713 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Hook up sc_time_stamp sc_delta_count.Gabe Black
sc_time_stamp reports the current simulation time. sc_delta_count was hooked up to a dummy value. This change hooks it up to the scheduler so that it returns the real value. Change-Id: I354c4be32161eabeea86af653f5cb0a5d384645b Reviewed-on: https://gem5-review.googlesource.com/11712 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement much of events, event lists and event exprs.Gabe Black
Three things aren't yet implemented, waking up processes which are sensitive to the event, triggering of events, and garbage collecting list objects which came from expression objects. The garbage collection aspect is problematic since there doesn't seem to be a correct way to implement it given the constraints in the spec, including the way that's implemented by Accellera. It's something that will need to be dealt with at some point, but in the interest of forward progress it's being ignored for now. Change-Id: Ic4e3c219ff482729f1f1302ab10181a798d48041 Reviewed-on: https://gem5-review.googlesource.com/11711 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement channel updates and rework the scheduler.Gabe Black
This change implements channel updates, and also reworks the scheduler to delegate more to the gem5 event queue by taking advantage of event priorities to ensure things happen in the right order. There's a lengthy comment in scheduler.hh describes how that all works. Change-Id: I5dee71b86b2e612bb720a4429f3a72e4b7c6d01f Reviewed-on: https://gem5-review.googlesource.com/11710 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Partially implement the scheduler.Gabe Black
This change implements the "evaluate" part of the delta cycles, and sketches out a function to run delta cycles and the initialization phase. The kernel object now schedules an event at time zero which runs the initialization phase. Also, some small places which were stubbed out pending a way to check the currently running process have been filled in now that that's being tracked. Change-Id: I6899569eb0195ff1c059fa4e68e90ef162b2f2df Reviewed-on: https://gem5-review.googlesource.com/11709 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Fill out sc_process_handle and create Process classes.Gabe Black
The sc_process_handle class now primarily delegates to a Process object it points at. The Process object does book keeping as far as its internal state, but doesn't yet have a way to run its target function or to schedule itself or inject exceptions into its context of execution. Change-Id: I98389778abe29aa26e3e3a91bf02e6721acc8a9c Reviewed-on: https://gem5-review.googlesource.com/11613 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement some basic plumbing in sc_module.hh.Gabe Black
Take care of some low hanging fruit as far as wrapper methods and the sc_bind_proxy class. Change-Id: I7f55a37eeaa82338bd608218c0261fbc39e65fc2 Reviewed-on: https://gem5-review.googlesource.com/11612 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement most of sc_object.Gabe Black
To avoid making it hard to change sc_object's implementation in the future, this change keeps most of the data members out of sc_object and keeps them in a seperate Object which is managed independently but still matches to the sc_objects one to one. This change also moves away from the SystemC/sc_gem5 namespace pair in favor of sc_gem5. Having two namespaces with classes, etc, living in both was complicating things. Having to use a namespace that doesn't fit in one scheme or the other isn't great, but it's the lesser of two evils. Change-Id: Ib59c3c515ca98c7fe519c59e9fe9270304b71cc0 Reviewed-on: https://gem5-review.googlesource.com/11611 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Get sc_main to work even when dynamically linked.Gabe Black
Unfortunately multiply defined weak symbols don't work like they're supposed to when the different versions are across dynamic linking boundaries. Fortunately, a weak symbol with no definition at all will still consistently evaluate as 0, and a singularly defined weak symbol will still resolve correctly. Instead of relying on a weak version of sc_main being overridden by a strong/non-default definition, this change leaves it as undefined and detects at run time whether the symbol resolves to 0 or to an actual code location. Change-Id: I31c4ff769b0c52277c6cf4845ca3f85000009583 Reviewed-on: https://gem5-review.googlesource.com/11610 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Implement the sc_attr classes.Gabe Black
Change-Id: Ibbe6da957b1b36687178f226e80718adc0f4ab81 Reviewed-on: https://gem5-review.googlesource.com/11609 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Disable tests which use sensitive_(pos|neg).Gabe Black
Those members are deprecated and not worth supporting. Change-Id: I30b64b36ba3201bb0bcbb541da512676c2bf8510 Reviewed-on: https://gem5-review.googlesource.com/11357 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Enable some more sc_simcontext related tests.Gabe Black
Now that we bit the bullet and stubbed out sc_simcontext and related functions a little bit, we can enable a couple more tests. This change also adds in some functions the new tests expect sc_simcontext to have. Change-Id: I00b5cc0c6eb658eb689b9c85ed171f290009768d Reviewed-on: https://gem5-review.googlesource.com/11356 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Add m_cur_val and m_new_val to sc_signal.Gabe Black
These members are referred to in one of the tests. Change-Id: Iab0110a0e3acf627986664069622704f17b703a1 Reviewed-on: https://gem5-review.googlesource.com/11355 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Add the "implementation defined" vport function.Gabe Black
This function is in an "implementation defined" class body in the spec, and has a comment next to it which says "(for internal use only)" next to it, but it is still used directly in one of the tests. Change-Id: Ib3727c93cc531ddd31a24897291dc7e7c97c2b58 Reviewed-on: https://gem5-review.googlesource.com/11354 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-09-05systemc: Add the nonstandard sc_join class and sc_thread_handle type.Gabe Black
Change-Id: I09905bad4797d9c456229afe601006ce16977394 Reviewed-on: https://gem5-review.googlesource.com/11353 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Minimally implemented the deprecated sc_simcontext.Gabe Black
This is supposed to be deprecated, but is still used in a small way by the tests. Change-Id: I94fc32f9e0f03d50c00ce5421926203859064020 Reviewed-on: https://gem5-review.googlesource.com/11352 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add a minimal version of the deprecated sc_process_b.Gabe Black
This type is deprecated, but some tests still rely on it. This change adds just enough of it to satisfy the tests, and also the several different mechanisms for retrieving the sc_process_b which refers to the currently active process. Change-Id: Id122ae5df23744b5de1e1c97573412f97a73b77a Reviewed-on: https://gem5-review.googlesource.com/11351 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add bind() to sc_port_base.Gabe Black
sc_port_base is supposed to be implementation defined, but internal details of it are relied on by the systemc tests. Change-Id: I53d84e708a5543a2cf4bd0deffc2efea1c008d97 Reviewed-on: https://gem5-review.googlesource.com/11350 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Make the verify.py --list option print a total count.Gabe Black
Make the --list option of verify.py print a count of how many tests it printed. Because --list respects the filter options, this is an easy way to check how many tests have certain properties. Change-Id: I03fac349a946631c20c8e6b49e0ad8934872898e Reviewed-on: https://gem5-review.googlesource.com/11288 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Disable a few more tests that aren't going to work.Gabe Black
One would never have worked as far as I can tell, and the others depend on a feature that breaks building the systemc library. Change-Id: Ia3db31a15675ca6df2db16362ee2d9c8700cd0af Reviewed-on: https://gem5-review.googlesource.com/11287 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Disable the phase_callbacks set of tests.Gabe Black
This feature is experimental, nonstandard, and would in some cases be difficult to implement in gem5. Change-Id: Ic7fe77e6a2e9dbc5aba06579fb85fd2f055cb6b1 Reviewed-on: https://gem5-review.googlesource.com/11285 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add the nonstandard sc_user exception type.Gabe Black
This type is not in the spec but is used in the tests. Change-Id: I4537a33b0b5dcb3c72a091276d601c244c4a3862 Reviewed-on: https://gem5-review.googlesource.com/11284 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add the nonstandard sc_trace_params and sc_trace_params_vec.Gabe Black
These two types are supposedly only for internal use in the Accellera implementation based on a big warning in all caps, but they still appear in the tests and examples in that version of systemc. Change-Id: Icfb3ffdf1e78988def5dac145172bf28f93d7d38 Reviewed-on: https://gem5-review.googlesource.com/11283 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Make some functions static in conflict with the spec.Gabe Black
The spec is likely wrong in this case since a lot of the other neighboring functions are static, and the Accellera implementation and the tests seem to assume they're static. Change-Id: Ia12a3735497b50f8a2419a52c83ef256416e7bc5 Reviewed-on: https://gem5-review.googlesource.com/11282 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add the nonstandard time_stamp function.Gabe Black
Change-Id: I608c390b125611e5b62483c7e8567bb5479df553 Reviewed-on: https://gem5-review.googlesource.com/11281 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add the nonstandard sc_hierarchical_name_exists function.Gabe Black
Change-Id: I1340bb6cb0ae29d81b5d73b3dd39ebb11c14802c Reviewed-on: https://gem5-review.googlesource.com/11280 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add the nonstandard timed_out function.Gabe Black
Change-Id: If14a5f98f03448c712827b7f92d2a36992541518 Reviewed-on: https://gem5-review.googlesource.com/11279 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add some deprecated sc_module constructors.Gabe Black
Change-Id: Ibe2bfe63536af33fca6040f4aef999ee928d876b Reviewed-on: https://gem5-review.googlesource.com/11278 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add the non-standard sc_time_tuple class.Gabe Black
Change-Id: Ia3d6a6a4ea3383c82605653faac570ced7bebb70 Reviewed-on: https://gem5-review.googlesource.com/11277 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add non-standard sc_status constants.Gabe Black
Change-Id: I02f52df318473906062035b188348fb875daad08 Reviewed-on: https://gem5-review.googlesource.com/11276 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add deprecated sc_time constructors.Gabe Black
Change-Id: Iffae751272302ff2996258a1ab31b086e12bbb8d Reviewed-on: https://gem5-review.googlesource.com/11275 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add an sc_event_finder::find_event method.Gabe Black
The guts of sc_event_finder are supposed to be implementation defined, but the tests reach in and call this particular method on that class. Change-Id: I21c18fa68ccce7bc1a13122ee3b452ecb81b713a Reviewed-on: https://gem5-review.googlesource.com/11274 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add some deprecated sc_time factory methods.Gabe Black
Change-Id: I0d9a7040a48b9f0d0079e9daecaf44ea78c186de Reviewed-on: https://gem5-review.googlesource.com/11273 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add some common test include files.Gabe Black
These are "common" in the sense that they're not in a particular test directory, but I think they're only used by one test. Change-Id: I4ffd209d04ed0e5253085810913827b87412b302 Reviewed-on: https://gem5-review.googlesource.com/11272 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-28systemc: Add some nonstandard, undocumented sc_report_* functions.Gabe Black
The tests use these functions. Change-Id: I3cdc10d433d9388742a20fb3a97a1a3efa699e11 Reviewed-on: https://gem5-review.googlesource.com/11271 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add deprecated default time unit management functions.Gabe Black
Having default time units is deprecated, and so are the functions that manage them. Change-Id: Ie21f9a5fca9868dd4f0adcd9f32c568fbec1fa72 Reviewed-on: https://gem5-review.googlesource.com/11270 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add deprecated notify_delayed functions.Gabe Black
Change-Id: I8ec68920b35f9207b6856a0b1ddfdf7545b7148a Reviewed-on: https://gem5-review.googlesource.com/11269 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add some nonstandard cthread related sc_module functions.Gabe Black
Change-Id: I73f9868b80f9b75e7bd90df6e894daea60a203a1 Reviewed-on: https://gem5-review.googlesource.com/11268 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add the deprecated sc_trace_delta_cycles function.Gabe Black
This function enables or disables tracing of delta cycles in a particular trace file. Change-Id: I53164a792856d071de1fefc76977cca8eb5fd735 Reviewed-on: https://gem5-review.googlesource.com/11267 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add a nonstandard sc_signal constructor.Gabe Black
This constructor takes an initial value to set the sc_signal to, and is used in the tests. Change-Id: I197218846d9a79f9237238c78b1bbd8a7f55443f Reviewed-on: https://gem5-review.googlesource.com/11266 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add some nonstandard (get|set)_catch_actions functions.Gabe Black
These are used by the tests. Change-Id: I09bbe81854f0faa524a4c6aa0ef31d80e4a8de24 Reviewed-on: https://gem5-review.googlesource.com/11265 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Exclude another test which exercises sc_string.Gabe Black
Change-Id: Ic05fe3d34ef403dd6ad9348478f73c6ed50cc7bc Reviewed-on: https://gem5-review.googlesource.com/11264 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add the nonstandard, undocumented halt function.Gabe Black
Used in the tests. Change-Id: I9b4f10600a50e0def1b5d55428cb4ad49e401295 Reviewed-on: https://gem5-review.googlesource.com/11263 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Define the nonstandard sc_event_queue_port typedef.Gabe Black
Used in the tests. Change-Id: Ic4b4a313b2bd02e5cb3ec07c4f7ee79219728881 Reviewed-on: https://gem5-review.googlesource.com/11262 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
2018-08-22systemc: Add some nonstandard SC_WAIT* macros.Gabe Black
These are not in the standard, but are defined by Accellera and used in the tests. Change-Id: I4cbddac4eb75c58d8ae3eb77d1f291dac3c51cd6 Reviewed-on: https://gem5-review.googlesource.com/11261 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>