stdlib: Adding clock_domain to GUPSGenerators

This change adds clock domain as a parameter to the GUPSGen
classes. This way the generator and other components can
work on different clock frequencies.

Change-Id: If916877a57b3c3a61073dad075e35f3f93af8459
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/53163
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
diff --git a/src/python/gem5/components/processors/gups_generator.py b/src/python/gem5/components/processors/gups_generator.py
index 191be6b..41d1812 100644
--- a/src/python/gem5/components/processors/gups_generator.py
+++ b/src/python/gem5/components/processors/gups_generator.py
@@ -25,15 +25,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-from ...utils.override import overrides
+from typing import Optional
 from m5.objects import Addr
+from ...utils.override import overrides
 
 from ..boards.mem_mode import MemMode
-
-from .gups_generator_core import GUPSGeneratorCore
-
 from .abstract_processor import AbstractProcessor
 from ..boards.abstract_board import AbstractBoard
+from .gups_generator_core import GUPSGeneratorCore
 
 
 class GUPSGenerator(AbstractProcessor):
@@ -42,6 +41,7 @@
         start_addr: Addr,
         mem_size: str,
         update_limit: int = 0,
+        clk_freq: Optional[str] = None,
     ):
         """The GUPSGenerator class
         This class defines the interface for a single core GUPSGenerator, this
@@ -63,6 +63,7 @@
                     start_addr=start_addr,
                     mem_size=mem_size,
                     update_limit=update_limit,
+                    clk_freq=clk_freq,
                 )
             ]
         )
diff --git a/src/python/gem5/components/processors/gups_generator_core.py b/src/python/gem5/components/processors/gups_generator_core.py
index 8ce921e..f315b8b 100644
--- a/src/python/gem5/components/processors/gups_generator_core.py
+++ b/src/python/gem5/components/processors/gups_generator_core.py
@@ -24,10 +24,11 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from m5.objects import Port, GUPSGen, Addr
 
+from typing import Optional
 from ...utils.override import overrides
 from .abstract_generator_core import AbstractGeneratorCore
+from m5.objects import Port, GUPSGen, Addr, SrcClockDomain, VoltageDomain
 
 
 class GUPSGeneratorCore(AbstractGeneratorCore):
@@ -36,14 +37,24 @@
         start_addr: Addr,
         mem_size: str,
         update_limit: int,
+        clk_freq: Optional[str],
     ):
         """
         Create a GUPSGeneratorCore as the main generator.
         """
         super().__init__()
         self.generator = GUPSGen(
-            start_addr=start_addr, mem_size=mem_size, update_limit=update_limit
-        )
+                start_addr=start_addr,
+                mem_size=mem_size,
+                update_limit=update_limit,
+            )
+        if clk_freq:
+            clock_domain = SrcClockDomain(
+                clock=clk_freq, voltage_domain=VoltageDomain()
+            )
+            self.generator.clk_domain = clock_domain
+
+
 
     @overrides(AbstractGeneratorCore)
     def connect_dcache(self, port: Port) -> None:
diff --git a/src/python/gem5/components/processors/gups_generator_ep.py b/src/python/gem5/components/processors/gups_generator_ep.py
index 203a88c..da27494 100644
--- a/src/python/gem5/components/processors/gups_generator_ep.py
+++ b/src/python/gem5/components/processors/gups_generator_ep.py
@@ -25,17 +25,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-from ...utils.override import overrides
+from typing import Optional
 from m5.objects import Addr
-from m5.util.convert import toMemorySize
-
 from ..boards.mem_mode import MemMode
-
-from .gups_generator_core import GUPSGeneratorCore
-
+from ...utils.override import overrides
+from m5.util.convert import toMemorySize
 from .abstract_processor import AbstractProcessor
 from ..boards.abstract_board import AbstractBoard
-
+from .gups_generator_core import GUPSGeneratorCore
 
 class GUPSGeneratorEP(AbstractProcessor):
     def __init__(
@@ -44,6 +41,7 @@
         start_addr: Addr,
         mem_size: str,
         update_limit: int = 0,
+        clk_freq: Optional[str] = None,
     ):
         """The GUPSGeneratorEP class
         This class defines the interface for multi core GUPSGenerator, this
@@ -64,6 +62,7 @@
                 start_addr=start_addr,
                 mem_size=mem_size,
                 update_limit=update_limit,
+                clk_freq=clk_freq,
             )
         )
 
@@ -73,6 +72,7 @@
         start_addr: Addr,
         mem_size: str,
         update_limit: int,
+        clk_freq: Optional[str],
     ):
         """
         Helper function to create cores.
@@ -85,6 +85,7 @@
                 start_addr=start_addr + i * chunk_size,
                 mem_size=table_size,
                 update_limit=update_limit,
+                clk_freq=clk_freq
             )
             for i in range(num_cores)
         ]
diff --git a/src/python/gem5/components/processors/gups_generator_par.py b/src/python/gem5/components/processors/gups_generator_par.py
index aad360a..12e8d4c 100644
--- a/src/python/gem5/components/processors/gups_generator_par.py
+++ b/src/python/gem5/components/processors/gups_generator_par.py
@@ -25,17 +25,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-from ...utils.override import overrides
+from typing import Optional
 from m5.objects import Addr
+from ...utils.override import overrides
 
 from ..boards.mem_mode import MemMode
-
-from .gups_generator_core import GUPSGeneratorCore
-
 from .abstract_processor import AbstractProcessor
 from ..boards.abstract_board import AbstractBoard
-
-
+from .gups_generator_core import GUPSGeneratorCore
 class GUPSGeneratorPAR(AbstractProcessor):
     def __init__(
         self,
@@ -43,6 +40,7 @@
         start_addr: Addr,
         mem_size: str,
         update_limit: int = 0,
+        clk_freq: Optional[str] = None,
     ):
         """The GUPSGeneratorPAR class
         This class defines the interface for multi core GUPSGenerator, this
@@ -63,6 +61,7 @@
                 start_addr=start_addr,
                 mem_size=mem_size,
                 update_limit=update_limit,
+                clk_freq=clk_freq,
             )
         )
 
@@ -72,6 +71,7 @@
         start_addr: Addr,
         mem_size: str,
         update_limit: int,
+        clk_freq: Optional[str],
     ):
         """
         Helper function to create cores.
@@ -81,8 +81,9 @@
                 start_addr=start_addr,
                 mem_size=mem_size,
                 update_limit=update_limit / num_cores,
+                clk_freq=clk_freq,
             )
-            for i in range(num_cores)
+            for _ in range(num_cores)
         ]
 
     @overrides(AbstractProcessor)