1. Jun 11, 2024
    • jeffnye-gh's avatar
      regress fails on unknown mnemonic csrrw (#172) · bcd1691a
      jeffnye-gh authored
      
      
      I have regression fails, tried on riscv-perf-model and on my fork. 
      
      Please check my work. I did not see any previous reference to this error
      but I could have missed it.
      
      MavisUnit.cpp was missing this file:
      isa_file_path + "/isa_rv64zicsr.json",
      
      these tests failed for me on regress
      	  1 - olympia_json_test (Subprocess aborted)
      	  2 - olympia_json_test_report_text (Subprocess aborted)
      	  3 - olympia_json_test_report_text_direct (Subprocess aborted)
      	  4 - olympia_json_test_report_html (Subprocess aborted)
      
      ...
      Exception while running
      Unknown mnemonic 'csrrw' in ExtractorDirectInfo
      ...
      terminate called after throwing an instance of 'mavis::UnknownMnemonic'
        what():  Unknown mnemonic 'csrrw' in ExtractorDirectInfo
      ...
      
      Co-authored-by: default avatarJeff Nye <jeff@www.condorcomputing.com>
      bcd1691a
  2. Jun 06, 2024
  3. Apr 16, 2024
    • jeffnye-gh's avatar
      1st commit of fusion capable decoder, json support (#163) · a0f965f6
      jeffnye-gh authored
      
      
      fusion decoder implementation. This is suitable for analysis.
      
      Adds fusion parameters to fusion.yaml. And specifies external file
      definition of fusion groups using JSON
      
      New statistics for fused instructions and fusion group stats
      
      HCache as separate structure in fusion/fusion
      
      Includes the FSL.md domain language description
      
      Inst.hpp modified to add FUSED and FUSION_GHOST status as extended
      status
      
      Support for non-sequential program ID. Each instr has a PID increment
      value, and methods
      
      Formatting, clean up of Inst.hpp
      
      JSON support added to Fusion.hpp
      
      New exceptions for JSON errors
      
      Fusion default transform no longer modifies the input buffer
      
      HCache testbench functions
      
      ---------
      
      Co-authored-by: default avatarJeff Nye <jeff@www.condorcomputing.com>
      a0f965f6
  4. Apr 09, 2024
    • ah-condor's avatar
      Fix to Support SYS Instructions with Register Rename (#162) · 2ed051be
      ah-condor authored
      
      
      All instructions including SYS can possibly go through register rename.
      A problem occurs when a SYS instr gets a renamed dest register. SYS
      instrutions do not go in any execution pipe. In current code renamed
      registers can only be made ready in an execution pipe. So SYS
      instructions with dest register rename can never become ready. So any
      subsequent instruction waiting on the destination register just hangs.
      The solution I made was to give the ROB a scoreboard view and make the
      dest register ready when the ROB does the flush upon retiring SYS
      instructions. In an unrelated fix in the same block of code I also added
      a line to set the expected_flush_ variable to true or else the flush
      fails.
      
      How was this tested:
      make regress passed 72/72
      
      ---------
      
      Co-authored-by: default avatarAnthony Hung <anthony.hung@CONDORMAC14.local>
      2ed051be
    • Suraj Shirvankar's avatar
      Add documentation for LSU (#161) · 83effcd9
      Suraj Shirvankar authored
      83effcd9
  5. Mar 25, 2024
  6. Mar 12, 2024
  7. Feb 14, 2024
  8. 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
  9. Feb 08, 2024
  10. 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
  11. Feb 02, 2024
  12. Feb 01, 2024
  13. 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
  14. Jan 09, 2024
  15. Jan 06, 2024
  16. 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
  17. 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
  18. Dec 15, 2023
  19. Dec 14, 2023
  20. Dec 08, 2023
  21. Dec 06, 2023
  22. 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
  23. 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
  24. Nov 09, 2023
  25. Nov 08, 2023
  26. Oct 14, 2023
  27. Oct 13, 2023
  28. Oct 09, 2023
  29. Oct 06, 2023
  30. Sep 28, 2023