1. Apr 04, 2024
  2. Mar 25, 2024
  3. Mar 12, 2024
  4. Feb 14, 2024
  5. Feb 12, 2024
    • Aaron Chan's avatar
      Sparta Assert for Target Pipe without Execution Unit (#151) · 71e636be
      Aaron Chan authored
      Forgot to add an assert to check that there is a dispatcher (thus a
      subsequent issue queue/execution unit) that can handle a target pipe of
      an instruction. If one forgets to define one, i.e you forget to define
      an execution unit to handle `DIV` target pipe, the simulator will end
      early, but no error will be thrown.
      71e636be
  6. Feb 08, 2024
  7. Feb 05, 2024
    • Knute's avatar
      Add an example of PEvent generation (#145) · 8694a717
      Knute authored
      
      
      This SHA is an example of how to generate PEvents (Performance Events)
      typically used for correlation
      efforts between a perf model and hardware.
      
      PEvents are a more "compact" form of the pipeout collection pairs,
      allowing a modeler to specify more direct items
      for collection. Pipeout pairs can be more elaborate/detailed. However,
      with some clever coding, there can be
      reuse -- it's not done here.
      
      To generate performance events, use the command line parameter
      `--pevents <filename> <pevent1,pevent2,...|all>`.
      
      Examples:
      ```
      # All pevents
      ./olympia traces/dhry_riscv.zstf --pevents retire.out all -i100
      
      # Just RETIRE pevent
      ./olympia traces/dhry_riscv.zstf --pevents retire.out RETIRE -i100
      
      # RETIRE and COMPLETE pevent
      ./olympia traces/dhry_riscv.zstf --pevents retire.out COMPLETE,RETIRE -i100
      ```
      
      While I was at it, I removed the generated annotation for pipeline
      collection for LoadStore/MemoryAccess classes -- uses NVP which
      generates faster, as well as creates smaller pipeouts.
      
      ---------
      
      Signed-off-by: default avatarKnute <56927209+klingaard@users.noreply.github.com>
      8694a717
  8. Feb 02, 2024
  9. Feb 01, 2024
  10. Jan 12, 2024
    • danbone's avatar
      Add execute flushing (#137) · ce29ae25
      danbone authored
      
      
      - Fix pipeline flush mechanisms by removing inflight instructions inside
      functional units, recovering the rename map, and adding trace rewind
      functionality
      - Add FlushCriteria class for requesting flushes to and from the
      FlushManager
      - Update FlushManager to handle and arbitrate between multiple flush
      sources
      - Add flush request port from ExecutePipe to FlushManager intended to be
      used for mispredicted branches
      - Delay completing instructions in ExecutePipe by a cycle to fix execute
      flush race conditions
      - Add branch identification methods for Inst
      - Add test to send random flushes from the branch unit
      
      ---------
      
      Signed-off-by: default avatardanbone <daniel.d.bone@gmail.com>
      Co-authored-by: default avatarDaniel Bone <daniel.bone@imgtec.com>
      ce29ae25
  11. Jan 09, 2024
  12. Jan 06, 2024
  13. Dec 22, 2023
  14. Dec 21, 2023
    • Suraj Shirvankar's avatar
      Raise exception in LSU when ROB is drained (#108) · e3e14121
      Suraj Shirvankar authored
      
      
      This PR adds a notification from ROB to the entire simulation that the ROB
      is about to or is expecting simulation to correctly terminate.  If a unit listens
      for that notification, it can use that information to determine if simulation 
      ended improperly, meaning, it might still have work to do, but didn't expect
      simulation to stop.  An example of how this can happen: a unit is NOT 
      scheduling an event to do work (a bug) because of a missed path to "wake"
      it up.  
      
      If the sparta::Scheduler ends simulation because it has no events to 
      run, the unit will not receive the end-of-simulation notification from the ROB
      and can throw an exception in this case.
      
      ---------
      
      Signed-off-by: default avatarSuraj Shirvankar <surajshirvankar@gmail.com>
      Co-authored-by: default avatarKnute Lingaard <klingaard@gmail.com>
      e3e14121
  15. Dec 20, 2023
    • Suraj Shirvankar's avatar
      Lsu allow spec load exec (#92) · f4088b86
      Suraj Shirvankar authored
      
      
      This PR introduces the following
      - Allows loads to perform Virtual address to Physical address
      translation before older loads complete
        This can be configured using a parameter in the LSU (`allow_speculative_load_exec`)
      - Allow non blocking cache lookup requests. Depends on #91 for the cache
      to support this feature
      - Implements Ready queue - simulator-only structure to speed up
      instruction lookup in the LSU
      - Mitigates data hazards introduced by instructions running out of order
      - The length of the different stages of the LSU pipeline can be
      configured through the parameters.
      
      ---------
      
      Co-authored-by: default avatarKnute Lingaard <klingaard@gmail.com>
      f4088b86
  16. Dec 15, 2023
  17. Dec 14, 2023
  18. Dec 09, 2023
  19. Dec 08, 2023
  20. Dec 06, 2023
  21. Dec 05, 2023
    • Aaron Chan's avatar
      Ignore Renaming of x0 (#120) · aeaf7c66
      Aaron Chan authored
      Fix renaming to skip renaming of x0 outlined in
      https://github.com/riscv-software-src/riscv-perf-model/issues/118
      
      .
      
      Changes:
      - `renameInstructions_()` now checks if a source is x0, if it is and is
      a data operand for a LSU operation, we still create a data register for
      it, as we need to check in LSU for x0 before issuing instruction
      - Added a boolean `x0` field to `Reg` struct in `RenameData` that tracks
      if a data register is an `x0` instruction. This helps on reclamation of
      rename credits in `getAckFromROB_()` to make sure we don't decrement for
      an x0 data register
      - Updated logic to handle for destination reclamation in
      `getAckFromROB_()` to ensure when we reclaim credits/freelist
      registers/references, we don't process them for x0 destinations
      - Fixed initial allocation of freelist registers for `RF_INTEGER` to
      only map registers for x1 - x31, before we were mapping from x0 - x31,
      so we should technically see a performance improvement as we gained 1
      extra freelist register from not renaming x0
      
      ---------
      
      Signed-off-by: default avatarAaron Chan <achn357@gmail.com>
      Co-authored-by: default avatarKnute <56927209+klingaard@users.noreply.github.com>
      aeaf7c66
  22. Nov 14, 2023
    • Knute's avatar
      New gen_layout commands (#107) · fdf08ff0
      Knute authored
      Removed the old perl generator; uses the new python generator in Sparta.
      
      These changes make a few assumptions: 
      1. The user is using a newer version of sparta map_v2
      2. The path to the clone of map is next to the clone of olympia
      fdf08ff0
    • jeffnye-gh's avatar
      jeffnye-gh/dromajo_stf_update (#119) · 75bdc947
      jeffnye-gh authored
      
      
      improve performance when stf tracing is enabled, issue #55 
       
      retain n_cycles=10000 until the stf trace opc is detected. 
      Once the stop opc is detected restore n_cycles=10000
      
      result is better interactivity under linux, improving overall
      performance and usability when not actively generating a trace.
      
      This is a re-implementation of previous draft PR.
      
      trace opc trigger detection is done in dromajo_template.
      trace record creation and handling is done in dromajo_stf.cpp
      headers gathered into dromajo_stf.h
      
      ---------
      
      Co-authored-by: default avatarjeff <jeffnye-gh@github.com>
      75bdc947
  23. Nov 09, 2023
  24. Nov 08, 2023
  25. Oct 14, 2023
  26. Oct 13, 2023
  27. Oct 09, 2023
  28. Oct 06, 2023