diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 7d2e8556..65812eea 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -7,13 +7,6 @@ assignees: ''
---
-**Note**
-We're fortunate to have a community of highly skilled system engineers and reverse engineers contributing to HyperDbg. However, as an open-source, community-driven debugger, our resources and developer time are limited.
-
-Since most HyperDbg users are professional programmers, we encourage you to contribute by submitting pull requests (PRs) whenever possible. While we will address issues created by users, we greatly appreciate your efforts to resolve issues independently and submit PRs. If you're unable to create a PR, please feel free to create an issue, and we'll do our best to address it.
-
-Thank you for reporting issues and for your contributions! ❤️
-
**Describe the bug**
A clear and concise description of what the bug is.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index e7f6d791..bbcbbe7d 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -7,13 +7,6 @@ assignees: ''
---
-**Note**
-We're fortunate to have a community of highly skilled system engineers and reverse engineers contributing to HyperDbg. However, as an open-source, community-driven debugger, our resources and developer time are limited.
-
-Since most HyperDbg users are professional programmers, we encourage you to contribute by submitting pull requests (PRs) whenever possible. While we will address requests for new features created by users, we greatly appreciate your efforts to add them independently and submit PRs. If you're unable to create a PR, please feel free to create your request, and we'll do our best to address it. You can also create issues or discussions to discuss the possible features that you want to add to HyperDbg.
-
-Thank you for requesting new features and for your contributions! ❤️
-
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
diff --git a/.github/git/git-help.md b/.github/git/git-help.md
index 61ad99df..9505f465 100644
--- a/.github/git/git-help.md
+++ b/.github/git/git-help.md
@@ -44,32 +44,6 @@ To remove the effects of `git add .` and `git commit -m "test"` or just `git add
git reset --soft HEAD~1
```
-To remove **all uncommitted and untracked changes** in Git and reset your working tree to the last commit:
-
-```bash
-git reset --hard
-git clean -fd
-```
-
-To modify the last pushed commit:
-
-```bash
-# Undo the last commit but keep the changes in your working tree
-git reset --soft HEAD~1
-
-# Make your additional modifications
-# edit files...
-
-# Stage everything
-git add .
-
-# Create a new commit
-git commit -m "Updated commit message"
-
-# Force-push to replace the remote commit
-git push --force-with-lease
-```
-
---------------
## Releasing instructions
diff --git a/.github/workflows/vs2022.yml b/.github/workflows/vs2022.yml
index aa834a05..dc844290 100644
--- a/.github/workflows/vs2022.yml
+++ b/.github/workflows/vs2022.yml
@@ -1,31 +1,26 @@
name: vs2022-ci
on:
- workflow_dispatch:
-
-# Disabled, uncomment the below line and remove the above lines to activate
-# on:
-# push:
-# branches:
-# - master
-# - dev
-# tags:
-# - 'v*'
-# paths-ignore:
-# - '.gitignore'
-# - '.gitattributes'
-# - '**.cmd'
-# - '**.bat'
-# - '**.md'
-#
-# pull_request:
-# paths-ignore:
-# - '.gitignore'
-# - '.gitattributes'
-# - '**.cmd'
-# - '**.bat'
-# - '**.md'
-
+ push:
+ branches:
+ - master
+ - dev
+ tags:
+ - 'v*'
+ paths-ignore:
+ - '.gitignore'
+ - '.gitattributes'
+ - '**.cmd'
+ - '**.bat'
+ - '**.md'
+
+ pull_request:
+ paths-ignore:
+ - '.gitignore'
+ - '.gitattributes'
+ - '**.cmd'
+ - '**.bat'
+ - '**.md'
env:
# WDK for Windows 11, version 22H2
WDK_URL: https://go.microsoft.com/fwlink/?linkid=2196230
@@ -78,12 +73,12 @@ jobs:
# working-directory: ${{env.GITHUB_WORKSPACE}}
# run: msbuild /m /p:Configuration="Release MT" /p:Platform=${{matrix.PLATFORM}} /target:zydis /target:zycore /p:OutDir=${{ github.workspace }}/hyperdbg/libraries/zydis/ ${{ github.workspace }}/hyperdbg/dependencies/zydis/msvc/Zydis.sln
- - name: Build HyperDbg solution
+ - name: Build Hyperdbg solution
working-directory: ${{env.GITHUB_WORKSPACE}}
run: msbuild /m /p:Configuration=${{matrix.BUILD_CONFIGURATION}} /p:Platform=${{matrix.PLATFORM}} ${{env.SOLUTION_FILE_PATH}}
- name: Upload build directory
- uses: actions/upload-artifact@v4.4.0
+ uses: actions/upload-artifact@v3
with:
name: build_files_${{matrix.BUILD_CONFIGURATION}}
path: ${{ env.BUILD_BIN_DIR }}
@@ -91,12 +86,12 @@ jobs:
deploy-release:
name: Deploy release
needs: win-amd64-build
- runs-on: windows-2022
+ runs-on: windows-2019
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Download build files from "build" job
- uses: actions/download-artifact@v4.1.7
+ uses: actions/download-artifact@v3
with:
name: build_files_release
path: ${{ env.BUILD_BIN_DIR }}
diff --git a/.github/workflows/vs2026.yml b/.github/workflows/vs2026.yml
deleted file mode 100644
index 0e587b16..00000000
--- a/.github/workflows/vs2026.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-name: vs2026-ci
-
-on:
- push:
- branches:
- - '**' # matches all branch names, including ones with slashes
- tags:
- - 'v*'
- paths-ignore:
- - '.gitignore'
- - '.gitattributes'
- - '**.cmd'
- - '**.bat'
- - '**.md'
-
- pull_request:
- paths-ignore:
- - '.gitignore'
- - '.gitattributes'
- - '**.cmd'
- - '**.bat'
- - '**.md'
-
-env:
- SOLUTION_FILE_PATH: ./hyperdbg/hyperdbg.sln
- RELEASE_ZIP_FILE_NAME: hyperdbg
- BUILD_BIN_DIR: ./hyperdbg/build/bin/
-
-jobs:
- win-amd64-build:
- runs-on: windows-2025-vs2026
- strategy:
- matrix:
- BUILD_CONFIGURATION: [release, debug]
- PLATFORM: [x64]
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- submodules: recursive
-
- - name: Checkout submodules recursively
- run: git submodule update --init --recursive --remote
-
- - name: Add MSBuild to PATH
- uses: microsoft/setup-msbuild@v3
-
- - name: Setup NuGet
- uses: NuGet/setup-nuget@v2
-
- - name: Restore NuGet packages
- run: nuget restore ${{ env.SOLUTION_FILE_PATH }}
-
- - name: Setup Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.x'
-
- - name: Update vcxproj files
- run: python utils/replace-sdk-wdk.py
-
- - name: Build HyperDbg solution
- working-directory: ${{env.GITHUB_WORKSPACE}}
- run: msbuild /m /p:Configuration=${{matrix.BUILD_CONFIGURATION}} /p:Platform=${{matrix.PLATFORM}} ${{env.SOLUTION_FILE_PATH}}
-
- - name: Upload build directory
- uses: actions/upload-artifact@v4.4.0
- with:
- name: build_files_${{matrix.BUILD_CONFIGURATION}}
- path: ${{ env.BUILD_BIN_DIR }}
-
- deploy-release:
- name: Deploy release
- needs: win-amd64-build
- runs-on: windows-2025-vs2026
- if: startsWith(github.ref, 'refs/tags/')
- steps:
- - name: Download build files from "build" job
- uses: actions/download-artifact@v4.1.7
- with:
- name: build_files_release
- path: ${{ env.BUILD_BIN_DIR }}
-
- - name: Archive release
- uses: thedoctor0/zip-release@master
- with:
- path: ${{ env.BUILD_BIN_DIR }}release/
- type: 'zip'
- filename: ${{env.RELEASE_ZIP_FILE_NAME}}-${{ github.ref_name }}.zip
-
- - name: Release
- uses: softprops/action-gh-release@v1
- if: startsWith(github.ref, 'refs/tags/')
- with:
- files: |
- ${{env.RELEASE_ZIP_FILE_NAME}}-${{ github.ref_name }}.zip
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 0c2f68c0..c38435e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -377,26 +377,16 @@ MigrationBackup/
!/hyperdbg/libraries/DIA/x84/*
!/hyperdbg/libraries/DIA/x64/*
-# kdserial libraries
+# KdSerial Libraries
!/hyperdbg/libraries/kdserial/*
!/hyperdbg/libraries/kdserial/x86/*
!/hyperdbg/libraries/kdserial/x64/*
!/hyperdbg/libraries/kdserial/arm/*
!/hyperdbg/libraries/kdserial/arm64/*
-# Ignore keystone libraries
-!/hyperdbg/libraries/keystone/release/
-!/hyperdbg/libraries/keystone/debug/
-!/hyperdbg/libraries/keystone/release/*
-!/hyperdbg/libraries/keystone/debug/*
# Code review tools
compile_commands.json
StructLayoutSettings.json
-*.metaproj
-
-#ignore clion config files
-.idea
-cmake-build-debug
-/hyperdbg/hyperhv/zydis/
+*.metaproj
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index bc4340e1..c15beeab 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,12 +1,12 @@
-[submodule "hyperdbg/tests/script-engine-test"]
- path = hyperdbg/tests/script-engine-test
- url = https://github.com/HyperDbg/script-engine-test.git
-[submodule "hyperdbg/miscellaneous/constants/pciid"]
- path = hyperdbg/miscellaneous/constants/pciid
- url = https://github.com/HyperDbg/pciids
[submodule "hyperdbg/dependencies/ia32-doc"]
path = hyperdbg/dependencies/ia32-doc
url = https://github.com/HyperDbg/ia32-doc.git
+[submodule "hyperdbg/dependencies/phnt"]
+ path = hyperdbg/dependencies/phnt
+ url = https://github.com/HyperDbg/phnt.git
+[submodule "hyperdbg/script-engine/modules/script-engine-test"]
+ path = hyperdbg/script-engine/modules/script-engine-test
+ url = https://github.com/HyperDbg/script-engine-test
[submodule "hyperdbg/dependencies/pdbex"]
path = hyperdbg/dependencies/pdbex
url = https://github.com/HyperDbg/pdbex.git
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f4f7ddac..21c6c2ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,412 +4,6 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [0.21.0.0] - 2026-07-05
-New release of the HyperDbg Debugger.
-
-### Added
-- Added structure for the hyperperf (Hardware Performance Counter) project ([link](https://github.com/HyperDbg/HyperDbg/commit/c17ebc09c4d199a642352e66feebb3159582196c))
-- The 'unload' command checks whether any module is loaded or not ([link](https://docs.hyperdbg.org/commands/debugging-commands/unload))
-- Exported SDK API for checking whether any module is loaded or not ([link](https://github.com/HyperDbg/HyperDbg/commit/19e47c804f50f5dbb698f314e66b7d685a87ac1f))
-- Added user mode and kernel mode PT parameter parser ([link](https://github.com/HyperDbg/HyperDbg/pull/631))
-- Added thread (TID) and process (PID) helper functions for Intel PT ([link](https://github.com/HyperDbg/HyperDbg/pull/633))
-
-### Changed
-- Separated SDK libraries for user mode and kernel mode modules ([link](https://github.com/HyperDbg/HyperDbg/commit/c17ebc09c4d199a642352e66feebb3159582196c))
-- Added hypertrace, hyperevade, and hyperperf DLL files to SDK ([link](https://github.com/HyperDbg/HyperDbg/commit/c17ebc09c4d199a642352e66feebb3159582196c))
-- Fix pool manager uninitialize list corruption ([link](https://github.com/HyperDbg/HyperDbg/pull/629))
-- Fix 'access denied' error on loading all modules using 'load all' ([link](https://docs.hyperdbg.org/commands/debugging-commands/load))([link](https://github.com/HyperDbg/HyperDbg/commit/2b818a5116d80d466aab7b343d4aa9d1d640f082))
-- Fix the concatenation error for the "hyperkd" string on the hypertrace project (https://github.com/HyperDbg/HyperDbg/commit/2b0cc18899ff532d9d590a71bf880fee5456c15f))
-- Organized header files for the libhyperdbg project ([link](https://github.com/HyperDbg/HyperDbg/pull/632))
-
-## [0.20.0.0-beta] - 2026-06-21
-New release of the HyperDbg Debugger.
-
-### Added
-- Added the libipt library to the project and the SDK
-- Added Intel Processor Trace (PT) example app
-- Added Linux distinction and pragmas together with new platform functions ([link](https://github.com/HyperDbg/HyperDbg/commit/9c3e0ed23b5f4bb64bd305e546dd0e86ee1910d9))
-- Added interfaces to Linux port for the serial devices ([link](https://github.com/HyperDbg/HyperDbg/commit/31b514f8df40d81d44ae07a2328c02360ce488c3))
-- Added platform IOCTL interface ([link](https://github.com/HyperDbg/HyperDbg/pull/619))
-- Added typecast for wchar, mismatch on Linux and Windows ([link](https://github.com/HyperDbg/HyperDbg/commit/10576b064a9824ab655e7bea0e35e9556ee68ca4))
-- Added missing IOCTLs for Intel PT ([link](https://github.com/HyperDbg/HyperDbg/commit/df12e9fd79851c8f378ec82a45066da510da507a))
-- Added NuGet packages for Windows SDK and WDK
-- Added Signal handler platform API for Linux ([link](https://github.com/HyperDbg/HyperDbg/pull/627))
-- Added contribution guidelines for Linux ([link](https://github.com/HyperDbg/HyperDbg/tree/master/hyperdbg/linux#readme))
-
-### Changed
-- Moved to Visual Studio 2026 ([link](https://github.com/HyperDbg/HyperDbg/pull/626))
-- Zydis and pdbex submodules are updated to VS2026
-- Fix the new form of loading and unloading in the example app and PT app ([link](https://github.com/HyperDbg/HyperDbg/commit/9ad48d30dcf6b409ae86b2d08262584cd06f606e))
-- Check whether the top-level hypervisor is Hyper-V and disable/enable VPIDs based on that, thanks to [@Idov31](https://github.com/Idov31) ([link](https://github.com/HyperDbg/HyperDbg/pull/625))
-- Fix PT operation IOCTL buffer size ([link](https://github.com/HyperDbg/HyperDbg/commit/dabf132d31503843f90949f35f8dce4601d43126))
-- CI/CD updated with NuGet packages for Visual Studio 2026 ([link](https://github.com/HyperDbg/HyperDbg/commit/5a0fad490124268550f955f594d1211d5c74f03d))
-
-## [0.19.0.0-beta] - 2026-06-10
-New release of the HyperDbg Debugger.
-
-### Added
-- First release of the HyperTrace module ([link](https://url.hyperdbg.org/hypertrace))
-- HyperTrace now enables/disables VM-entry/VM-exit controls for Load and Save IA32_DEBUGCTL MSR
-- Added Legacy LBR support to the HyperTrace module
-- Added Architectural LBR support to the HyperTrace module
-- Added the '!lbr' command for performing different Last Branch Record (LBR) operations ([link](https://docs.hyperdbg.org/commands/extension-commands/lbr))
-- Added the '!lbrdump' command for dumping saved Last Branch Record (LBR) entries ([link](https://docs.hyperdbg.org/commands/extension-commands/lbrdump))
-- Added **lbr_save()** and **lbr_print()** functions in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/tracing/lbr/lbr_save))([link](https://docs.hyperdbg.org/commands/scripting-language/functions/tracing/lbr/lbr_print))
-- Added mock application for compiling SDK for Linux
-- Added '!help' alias for the '.help' command
-- Added 'vm' alias for the 'load' command ([link](https://docs.hyperdbg.org/commands/debugging-commands/load))
-- Added **lbr_check()** and **lbr_restore()** functions in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/tracing/lbr/lbr_check))([link](https://docs.hyperdbg.org/commands/scripting-language/functions/tracing/lbr/lbr_restore))
-- Added **lbr_restore_by_filter(filter)** function in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/tracing/lbr/lbr_restore_by_filter))
-- Added the 'kd' module in the 'load' command ([link](https://docs.hyperdbg.org/commands/debugging-commands/load))
-- Added the 'trace' module in the 'load' command ([link](https://docs.hyperdbg.org/commands/debugging-commands/load))
-- Exported SDK API for detecting CPU vendors
-- Initial codes for the HyperTrace project by using Intel Processor Trace (PT), thanks to [@masoudrahimi01](https://github.com/masoudrahimi01) ([link](https://github.com/HyperDbg/HyperDbg/pull/589))
-- Exported SDK APIs for loading and unloading the 'kd' and the 'trace' modules
-- Exported SDK APIs for starting (installing) the 'kd' driver
-- Exported SDK APIs for loading/unloading all modules
-- Added tests for checking PE parser in 'hyperdbg-test' project
-- Added example for loading HyperDbg in VMI mode directly from libhyperdbg
-- Fix action cleanup list removal in debugger events ([link](https://github.com/HyperDbg/HyperDbg/pull/601))
-- Added transparent-mode evade mask selection thanks to [@jtaw5649](https://github.com/jtaw5649) ([link](https://github.com/HyperDbg/HyperDbg/pull/602))
-- Added synthetic MSR handling thanks to [@Idov31](https://github.com/Idov31) ([link](https://github.com/HyperDbg/HyperDbg/pull/605))
-- Added use of relative RSDS fixture paths when loading PDB symbols, thanks to [@jtaw5649](https://github.com/jtaw5649) ([link](https://github.com/HyperDbg/HyperDbg/pull/607))
-
-### Changed
-- Fix the problem of not applying the EAX index in the CPUID event extension command ([link](https://docs.hyperdbg.org/commands/extension-commands/cpuid#parameters))
-- Refactoring the IOCTL parameter checks and status routines
-- All basic types are now defined for Linux
-- VMX instructions are ported to platform-independent files to support Linux
-- All CPU-related intrinsic instructions are ported to platform-independent files to support Linux
-- HyperDbg SDK now compiles on Linux (GCC) for both user-mode and kernel-mode
-- Fix the 'wrmsr' command IOCTL checks by receiving output in the buffer ([link](https://docs.hyperdbg.org/commands/debugging-commands/wrmsr))
-- Extensive refactoring of code base (doxygen, variables, function names)
-- Building certain modules on Linux and fixing CMake files thanks to [@maxraulea](https://github.com/maxraulea) ([link](https://github.com/HyperDbg/HyperDbg/pull/592))
-- Fix the '!hide' command's HyperEvade activation guard thanks to [@jtaw5649](https://github.com/jtaw5649) ([link](https://github.com/HyperDbg/HyperDbg/pull/593))
-- Fix synchronous debugger device IOCTL handles thanks to [@jtaw5649](https://github.com/jtaw5649) ([link](https://github.com/HyperDbg/HyperDbg/pull/595))
-- PE parser ('.pe' command) now supports richer DOS/NT/COFF/optional-header output, section bounds checking, data directory reporting, import/export parsing, TLS/debug/PDB/load-config metadata, overlay reporting, and malformed metadata warnings thanks to [@jtaw5649](https://github.com/jtaw5649) ([link](https://github.com/HyperDbg/HyperDbg/pull/598))([link](https://docs.hyperdbg.org/commands/meta-commands/.pe))
-- Building the script engine module on Linux (GCC) thanks to [@maxraulea](https://github.com/maxraulea) ([link](https://github.com/HyperDbg/HyperDbg/pull/596))
-- The pool manager moved from 'hyperhv' to 'hyperkd'
-- The 'load' command could load all modules using a new alias 'load all' ([link](https://docs.hyperdbg.org/commands/debugging-commands/load))
-- The 'unload' command could remove all modules using two new aliases 'unload all' and 'unload remove all' ([link](https://docs.hyperdbg.org/commands/debugging-commands/unload))
-- Change device handle checks with module loading status checks for IOCTLs ([link](https://github.com/HyperDbg/HyperDbg/pull/610))
-- Fix standard callbacks for the VMM module ([link](https://github.com/HyperDbg/HyperDbg/pull/610))
-- Fix race condition bug within the pool manager
-
-## [0.18.1.0] - 2026-04-09
-New release of the HyperDbg Debugger.
-
-### Added
-- HyperTrace now works with HyperDbg VMM ([link](https://github.com/HyperDbg/HyperDbg/pull/568))
-- Progress on implementing Last Branch Recode (LBR) ([link](https://github.com/HyperDbg/HyperDbg/commit/1dd73675e9cd78737e013ffb35bc712f385f387e))
-- Applying LBR registers on the VMCS instead of the DEBUGCTL MSR ([link](https://github.com/HyperDbg/HyperDbg/commit/15f8b3cca15448acd18d7e198740464a19ce4fe2))
-
-### Changed
-- Fix the problem of the '!epthook' not finding the PML1 entry ([link](https://docs.hyperdbg.org/commands/extension-commands/epthook))
-- Fix the problem of getting the PML1 entry of the target address on Intel Core Ultra processors (#567) ([link](https://github.com/HyperDbg/HyperDbg/issues/567))
-- Fix the '.clang-format' formatting error
-- Restructure of the HyperTrace project
-- Add starting structure for supporting Intel Processor Trace (PT)
-
-## [0.18.0.0] - 2026-02-16
-New release of the HyperDbg Debugger.
-
-### Added
-- Script engine now supports writing libraries using the '#include' keyword thanks to [@xmaple555](https://github.com/xmaple555) ([link](https://docs.hyperdbg.org/commands/scripting-language/casting-and-inclusion))([link](https://github.com/HyperDbg/HyperDbg/issues/557))([link](https://github.com/HyperDbg/HyperDbg/pull/561))
-- Initial codes for the HyperTrace project by using Intel Last Branch Record (LBR) and Branch Trace Store (BTS) thanks to [@harimishal1](https://github.com/harimishal1) ([link](https://github.com/HyperDbg/HyperDbg/tree/master/hyperdbg/hypertrace))
-- The HyperTrace project is now linked to the hyperkd
-- Initial efforts to port HyperDbg to Linux have started thanks to [@Alish14](https://github.com/Alish14) ([link](https://github.com/HyperDbg/HyperDbg/pull/563))
-
-### Changed
-- Fix compilation error in Zydis with the new Windows WDK ([link](https://github.com/HyperDbg/zydis/commit/e61f59332ce49f8853006573ca853e404fafdd08))
-
-## [0.17.0.0] - 2025-11-10
-New release of the HyperDbg Debugger. All credit for this release goes to [@xmaple555](https://github.com/xmaple555).
-
-### Added
-- Added 1D and 2D arrays (multidimensional arrays) in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/variables-and-assignments#multidimensional-array))([link](https://github.com/HyperDbg/HyperDbg/pull/554))
-- Added compound assignments in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/variables-and-assignments#compound-assignment))([link](https://github.com/HyperDbg/HyperDbg/pull/554))
-- Added multiple assignments in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/variables-and-assignments#multiple-assignment))([link](https://github.com/HyperDbg/HyperDbg/pull/554))
-
-### Changed
-- Fix bugs for interpreting 'db_pa, 'dd_pa', 'eb_pa', and 'ed_pa' keywords in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/assumptions-and-evaluations#keywords))([link](https://github.com/HyperDbg/HyperDbg/pull/507))
-- Fix variable types in the script engine ([link](https://github.com/HyperDbg/HyperDbg/commit/43b0245fa11b5c73ce4cd21d8b8787b86a05f89d))
-- Fix and update array index for boolean expressions in the script engine ([link](https://github.com/HyperDbg/HyperDbg/commit/ba2cec3c12c3ff45ddc0004051884983ff62a0b3))
-
-## [0.16.0.0] - 2025-09-08
-New release of the HyperDbg Debugger.
-
-### Added
-- The **!xsetbv** event command was added for handling the execution of the XSETBV instruction, thanks to HyperDbg group members ([link](https://docs.hyperdbg.org/commands/extension-commands/xsetbv))
-- Display of the number of blocked context switches in the '.switch' command ([link](https://docs.hyperdbg.org/commands/meta-commands/.switch))
-- Added support for step-in (the 't' command) in the user debugger ([link](https://docs.hyperdbg.org/commands/debugging-commands/t))
-- Added support for step-over (the 'p' command) in the user debugger ([link](https://docs.hyperdbg.org/commands/debugging-commands/p))
-- Added support to show all registers or a specific register in the user debugger ([link](https://docs.hyperdbg.org/commands/debugging-commands/r))
-- Exported SDK API for running scripts in either the kernel debugger or the user debugger
-- Added support to modify registers or a specific register in the user debugger ([link](https://docs.hyperdbg.org/commands/debugging-commands/r))
-- Added support to evaluate (run) scripts on the target thread in the user debugger ([link](https://docs.hyperdbg.org/commands/debugging-commands/eval))
-- Added an indication of a thread's running or paused state to the HyperDbg signature in the user debugger ([link](https://docs.hyperdbg.org/using-hyperdbg/prerequisites/signatures))
-- Added support for the '.formats' command in the user debugger ([link](https://docs.hyperdbg.org/commands/meta-commands/.formats))
-- Added support for interpreting parameters based on script engine expressions in the user debugger
-- Exported SDK API for evaluating expressions based on the context of the kernel debugger or the user debugger
-- Added a new mechanism for showing the 'printf' and the 'print' function messages in the user debugger ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/exports/printf))([link](https://docs.hyperdbg.org/commands/scripting-language/functions/exports/print))
-
-### Changed
-- Non-volatile XMM registers are no longer saved/restored on VM-exit handler ([link](https://learn.microsoft.com/en-us/cpp/build/x64-software-conventions?view=msvc-170))
-- Fix grammar and spelling errors throughout HyperDbg codebase ([link](https://github.com/HyperDbg/HyperDbg/pull/546))
-- Relocate extension command files into their corresponding VS directory
-- Fix infinite VM-exit bug for the '!monitor x' command thanks to [@unlockable](https://github.com/unlockable) ([link](https://github.com/HyperDbg/HyperDbg/pull/545))
-
-## [0.15.0.0] - 2025-08-18
-New release of the HyperDbg Debugger.
-
-### Added
-- Added the '!smi' command for performing operations related to System Management Interrupt (SMI) ([link](https://docs.hyperdbg.org/commands/extension-commands/smi))
-- Export the SDK functions for SMI operations ([link](https://docs.hyperdbg.org/commands/extension-commands/smi#sdk))
-- Check for Intel CET IBT (indirect branch tracking) support
-- Check for Intel CET shadow stack support
-- Added support to Intel CET for SYSCALL/SYSRET emulation ([link](https://docs.hyperdbg.org/commands/extension-commands/syscall))([link](https://docs.hyperdbg.org/commands/extension-commands/sysret))
-
-### Changed
-- The 'hyperhv' project now has build optimizations enabled
-- Reformat VMXOFF restoring routines to restore general-purpose and XMM registers correctly before moving to the previous stack
-- Fix unloading (VMXOFF) crash when restoring XMM registers
-- Fix the problem with restoring XMM registers (#468) ([link](https://github.com/HyperDbg/HyperDbg/issues/468))
-- Enhanced the '.pe' command to support PE Rich Headers thanks to [@Alish14](https://github.com/Alish14) ([link](https://github.com/HyperDbg/HyperDbg/pull/539))
-- Updated ia32-doc to fix VMCS PL3 SSP fields ([link](https://github.com/HyperDbg/ia32-doc))
-- Fix the terminating process issue of the '!syscall/!sysret' commands on 11 generation (Rocket Lake/Tiger Lake) and newer Intel processors ([link](https://github.com/HyperDbg/HyperDbg/issues/392))
-- Re-enable the support for the '.start' command in the Debugger mode ([link](https://docs.hyperdbg.org/commands/meta-commands/.start))
-- The '!mode' event command is now compatible with different EPT hook commands (e.g., !epthook, !epthook2, !monitor, .start, and .restart) ([link](https://docs.hyperdbg.org/commands/extension-commands/mode))
-- The '!mode' command doesn't need allocating extra EPTPs ([link](https://docs.hyperdbg.org/commands/extension-commands/mode))
-
-## [0.14.1.0] - 2025-07-27
-New release of the HyperDbg Debugger.
-
-### Changed
-- Restored the previous optimization on the release builds
-- Fixed the issue of not properly restoring registers after the 'CPUID' instruction
-- Fixed the building issues of the user debugger with the 'bp' and the '.start' commands
-
-## [0.14.0.0] - 2025-07-23
-New release of the HyperDbg Debugger.
-
-### Added
-- **microsleep(microseconds)** function in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/timings/microsleep))
-- **rdtsc()** and **rdtscp()** functions in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/timings/rdtsc))([link](https://docs.hyperdbg.org/commands/scripting-language/functions/timings/rdtscp))
-- Added functions to get system-call number from the running system ([link](https://github.com/HyperDbg/HyperDbg/commit/5d33cb7395c57fd6af170bfed90376598347679c))
-- Added the support for the '.start' command in the VMI mode ([link](https://docs.hyperdbg.org/commands/meta-commands/.start))
-- Added a new mechanism for finding the system-call number based on the running system ([link](https://github.com/HyperDbg/HyperDbg/commit/5d33cb7395c57fd6af170bfed90376598347679c))
-- Added hyperevade transparency project ([link](https://url.hyperdbg.org/hyperevade))
-- Added support to the '.attach' and '.detach' in the debugger mode ([link](https://docs.hyperdbg.org/commands/meta-commands/.attach))([link](https://docs.hyperdbg.org/commands/meta-commands/.detach))
-- Added support to the '.start' command in the VMI mode for the user debugger ([link](https://docs.hyperdbg.org/commands/meta-commands/.start))
-- Added support to setting the breakpoint using the 'bp' command in the VMI mode ([link](https://docs.hyperdbg.org/commands/debugging-commands/bp))
-- Added EPT page table support for MMIO addresses above 512 GB
-
-### Changed
-- Redesigned the '!mode' extension command without extra EPTP ([link](https://github.com/HyperDbg/HyperDbg/commit/a93b78dfadbf94d2d69f24413170c983ec379f48))
-- The user mode debugger now uses MBEC for preventing user-mode code execution ([link](https://github.com/HyperDbg/HyperDbg/commit/6893c1b19f1edaf57d0074bd60abcd518bf77338))
-- Apply transparent-mode based on dynamic system-calls ([link](https://github.com/HyperDbg/HyperDbg/commit/1eb960607331fc0c2622804d7aff65702c155649))
-- Breakpoint initialization is changed from kernel debugger to the regular debugger ([link](https://github.com/HyperDbg/HyperDbg/commit/e5326f895dcddb1adbc873a9fecede7af7eb7651))
-- Fixed the build issue on new Windows SDK for Token structures ([link](https://github.com/HyperDbg/HyperDbg/pull/530))
-- Fixed retrieving valid watching process IDs for the execution trap and user-mode execution prevention
-- Fixed crashing the driver if the hyperlog memory was not properly allocated
-- The target runner image for deploying HyperDbg (CI/CD) changed from Windows Server 2019 to 2022
-- Restored the pid and the process name parameters of the '!hide' command ([link](https://docs.hyperdbg.org/commands/extension-commands/hide))
-- Fixed crashing Windows when using 'TPAUSE' instruction on bare metal Windows 11 24h2
-- Check to avoid putting EPT hooks on physical addresses greater than 512 GB
-
-## [0.13.2.0] - 2025-05-26
-New release of the HyperDbg Debugger.
-
-### Added
-- Intercepting system-call return results using the TRAP flag for the transparent-mode
-- Added optional parameters and context for the transparent-mode system-call return interceptions
-
-### Changed
-- Set variable length (stack frames) for showing the callstack ([link](https://docs.hyperdbg.org/commands/debugging-commands/k))
-- Fixed VMCS layout corruption due to NMI injection (VMRESUME 0x7 error) in nested-virtualization on Meteor Lake processors
-- Restore RDMSR handler for VM-exits
-
-## [0.13.1.0] - 2025-04-14
-New release of the HyperDbg Debugger.
-
-### Added
-- Added new transparency methods for hiding nested virtualization environments thanks to [@CokeTree3](https://github.com/CokeTree3) ([link](https://github.com/HyperDbg/HyperDbg/pull/515))
-
-### Changed
-- Fix '.thread' command crash ([link](https://github.com/HyperDbg/HyperDbg/pull/510))
-- Update .clang-format format file based on the new version of LLVM
-- Update the list of required contributions
-
-## [0.13.0.0] - 2025-02-25
-New release of the HyperDbg Debugger.
-
-### Added
-- Added mitigation for the anti-hypervisor method in handling the trap flag for emulated instructions ([link](https://github.com/HyperDbg/HyperDbg/pull/497))
-- Export the SDK functions for enabling and disabling transparent mode ([link](https://docs.hyperdbg.org/commands/extension-commands/hide#sdk))([link](https://docs.hyperdbg.org/commands/extension-commands/unhide#sdk))
-- New description of changing script engine constants ([link](https://docs.hyperdbg.org/tips-and-tricks/misc/customize-build/change-script-engine-limitations))
-- Added the command for interpreting PCI CAM (PCI configuration space) fields ([link](https://docs.hyperdbg.org/commands/extension-commands/pcicam))
-- Added the command for dumping PCI CAM (PCI configuration space) memory ([link](https://docs.hyperdbg.org/commands/extension-commands/pcicam))
-- Checking for and unloading the older version of the driver (if it exists) ([link](https://github.com/HyperDbg/HyperDbg/pull/503))
-- **memcpy_pa()** function in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/memory/memcpy_pa))
-- **poi_pa**, **hi_pa**, **low_pa**, **db_pa**, **dd_pa**, **dw_pa**, and **dq_pa** keywords in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/assumptions-and-evaluations#keywords))
-- **eb_pa**, **ed_pa**, and **eq_pa** functions in the script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/memory/eb_pa-ed_pa-eq_pa))
-
-### Changed
-- Fix the 'lm' command issue of not showing kernel module addresses (KASLR leak mitigation) introduced in Windows 11 24h2 ([link](https://docs.hyperdbg.org/commands/debugging-commands/lm))
-- Deprecated TSC mitigation for the transparent mode ([link](https://docs.hyperdbg.org/commands/extension-commands/measure))
-- Changed the parameters of the '!hide' command ([link](https://docs.hyperdbg.org/commands/extension-commands/hide))
-- Changed the parameters of the '!unhide' command ([link](https://docs.hyperdbg.org/commands/extension-commands/unhide))
-- Fix containing backslash escape character in script strings ([link](https://github.com/HyperDbg/HyperDbg/pull/499))
-- Fix reading/writing into devices' physical memory (MMIO region) in VMI Mode ([link](https://github.com/HyperDbg/HyperDbg/pull/500))
-- All test cases for command parsing are now passed ([link](https://github.com/HyperDbg/HyperDbg/pull/504))
-- The '.sympath' command now requires the symbol server path to be within quotes, although it is not mandatory ([link](https://docs.hyperdbg.org/commands/meta-commands/.sympath))
-
-## [0.12.0.0] - 2025-01-02
-New release of the HyperDbg Debugger.
-
-### Added
-- Added the PCI tree command ([link](https://docs.hyperdbg.org/commands/extension-commands/pcitree))
-- Added the proper handling for the xsetbv VM exits thanks to [@Shtan7](https://github.com/Shtan7) ([link](https://github.com/HyperDbg/HyperDbg/pull/491))
-- Added the IDT command for interpreting Interrupt Descriptor Table (IDT) ([link](https://docs.hyperdbg.org/commands/extension-commands/idt))
-- Export SDK APIs for getting Interrupt Descriptor Table (IDT) entries
-
-### Changed
-- Fix buffer overflow in the symbols path converter thanks to [@binophism](https://github.com/binophism) ([link](https://github.com/HyperDbg/HyperDbg/pull/490))
-- Fix script engine's "printf" function to improve safety thanks to [@Reodus](https://github.com/Reodus) ([link](https://github.com/HyperDbg/HyperDbg/pull/489))
-
-## [0.11.0.0] - 2024-12-03
-New release of the HyperDbg Debugger.
-
-### Added
-- Added the local APIC command (xAPIC and x2APIC modes) ([link](https://docs.hyperdbg.org/commands/extension-commands/apic))
-- Added the I/O APIC command ([link](https://docs.hyperdbg.org/commands/extension-commands/ioapic))
-- The new link is added to help increase the number of EPT hook breakpoints in a single page ([link](https://docs.hyperdbg.org/tips-and-tricks/misc/customize-build/number-of-ept-hooks-in-one-page))
-- Export SDK APIs for Local APIC and X2APIC
-
-### Changed
-- The link for changing the communication buffer size is updated ([link](https://docs.hyperdbg.org/tips-and-tricks/misc/customize-build/increase-communication-buffer-size))
-- Update Microsoft's DIA SDK and symsrv
-
-## [0.10.2.0] - 2024-10-11
-New release of the HyperDbg Debugger.
-
-### Added
-- Automated test case parsing and test case compilation (generation) for the hwdbg debugger
-- Export hwdbg testing functions
-- Automated test case interpretation and emulation of hwdbg hardware scripts
-- Create JSON representation of hwdbg configs
-
-### Changed
-- Fix main command parser bugs according to test cases
-- Improvements in symbol structure, token structure, and stack buffer in the script engine
-- Fix compatibility mode program crash when terminating 32-bit process (#479) ([link](https://github.com/HyperDbg/HyperDbg/pull/479))
-- Extensive refactor of chip instance info interpretation codes of hwdbg debugger
-- Separating functions of hwdbg interpreter and script manager
-- Fix synthesize inconsistencies between Icarus iVerilog and Xilinx ISim
-- Fix runtime error for deallocating memory from separate DLLs
-- Exporting standard functions (import/export) for the script engine
-- Exporting standard functions (import/export) for the symbol parser
-- Avoid passing signals once the stage is not configured
-
-## [0.10.1.0] - 2024-09-08
-New release of the HyperDbg Debugger.
-
-### Added
-- Added feature to pause the debuggee immediately upon connection
-- The '.debug' command now supports pausing the debuggee at startup ([link](https://docs.hyperdbg.org/commands/meta-commands/.debug))
-- Export SDK API for assembling instructions
-- The 'struct' command now supports a path as output ([link](https://docs.hyperdbg.org/commands/debugging-commands/struct))
-- Export SDK API closing connection to the remote debuggee
-- Automated tests for the main command parser
-- Export SDK APIs for stepping and tracing instructions
-- Export SDK APIs for tracking execution
-
-### Changed
-- HyperDbg command-line comment sign is changed from '#' to C-like comments ('//' and '/**/')
-- Integrating a new command parser for the regular HyperDbg commands
-- Fix showing a list of active outputs using the 'output' command ([link](https://docs.hyperdbg.org/commands/debugging-commands/output))
-- Fix the issue of passing arguments to the '.start' command ([link](https://docs.hyperdbg.org/commands/meta-commands/.start))
-- Fix the problem with parsing multiple spaces within the events (#420) ([link](https://github.com/HyperDbg/HyperDbg/issues/420))
-- Fix the problem with escaping '{' in the command parser (#421) ([link](https://github.com/HyperDbg/HyperDbg/issues/421))
-- Fix nested brackets issues in the main command parser
-- Fix script engine bugs on order of passing arguments to functions (#453) ([link](https://github.com/HyperDbg/HyperDbg/issues/453))
-- Fix the script test case for factorial computation ([link](https://github.com/HyperDbg/script-engine-test/blob/main/semantic-test-cases/manual-test-cases_60-69.ds))
-- Fix the script test case for computation iterative Fibonacci ([link](https://github.com/HyperDbg/script-engine-test/blob/main/semantic-test-cases/manual-test-cases_60-69.ds))
-- Fix miscomputation of physical address width for physical address validity checks (#469) ([link](https://github.com/HyperDbg/HyperDbg/issues/469))
-
-## [0.10.0.0] - 2024-07-22
-New release of the HyperDbg Debugger.
-
-### Added
-- Support using assembly conditions and codes in all events ([link](https://docs.hyperdbg.org/using-hyperdbg/prerequisites/how-to-create-a-condition))([link](https://docs.hyperdbg.org/using-hyperdbg/prerequisites/how-to-create-an-action))
-- Added support for forwarding events to binary (DLL) modules ([link](https://docs.hyperdbg.org/tips-and-tricks/misc/event-forwarding))([link](https://docs.hyperdbg.org/commands/debugging-commands/output))([link](https://github.com/HyperDbg/event-forwarding-examples))
-- Added the assembler command 'a' for virtual memory ([link](https://docs.hyperdbg.org/commands/debugging-commands/a))
-- Added the assembler command '!a' for physical memory ([link](https://docs.hyperdbg.org/commands/extension-commands/a))
-- Providing a unified SDK API for reading memory in the VMI Mode and the Debugger Mode
-- Export SDK APIs for reading/writing into registers in the Debugger Mode
-- Export SDK API for writing memory in the VMI Mode and the Debugger Mode
-- Export SDK API for getting kernel base address
-- Export SDK API for connecting to the debugger and from debuggee in the Debugger Mode
-- Export SDK API for starting a new process
-- Add and export SDK API for unsetting message callback
-- Event commands are coming with more examples regarding scripts and assembly codes
-- Add message callback using shared memory
-- Add maximum execution limitation to the script IRs (#435) ([link](https://github.com/HyperDbg/HyperDbg/pull/435))
-
-### Changed
-- Fix clearing '!monitor' hooks on a different process or if the process is closed (#409) ([link](https://github.com/HyperDbg/HyperDbg/issues/409))
-- Fix triggering multiple '!monitor' hooks with different contexts (#415) ([link](https://github.com/HyperDbg/HyperDbg/issues/415))
-- Fix the problem of repeating commands once kHyperDbg is disconnected
-- Fix step-over hangs if the process terminates/excepts within call instruction (#406) ([link](https://github.com/HyperDbg/HyperDbg/issues/406))
-- Fix crash on editing invalid physical addresses (#424) ([link](https://github.com/HyperDbg/HyperDbg/issues/424))
-- Fix exporting VMM module load and install it in the SDK
-- Fix function interpretation issues and update the parser and the code execution (#435) ([link](https://github.com/HyperDbg/HyperDbg/pull/435))
-
-## [0.9.1.0] - 2024-06-30
-New release of the HyperDbg Debugger.
-
-### Added
-- Regular port/pin value read and modification in hwdbg
-- Conditional statement evaluation in hwdbg
-- Added automatic script buffer packet generator for hwdbg
-- Added support for @hw_pinX and @hw_portX registers
-- Added hwdbg instance information interpreter
-- Added stack buffer in vmx-root ([link](https://github.com/HyperDbg/HyperDbg/commit/5df4d2a5268a6b190dc126bf6cfe0527703296eb))
-- Exporting functions to support loading drivers with different names
-- Exporting function to connect and load HyperDbg drivers
-- Exporting function to connect and load HyperDbg drivers
-- **$date** and **$time** pseudo-registers are added ([link](https://docs.hyperdbg.org/commands/scripting-language/assumptions-and-evaluations#pseudo-registers))([link](https://github.com/HyperDbg/HyperDbg/issues/397))
-
-### Changed
-- Fix using constant WSTRINGs in the **wcsncmp** function ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/strings/wcsncmp))
-- Fix `phnt` build error with 24H2 SDK
-- `hprdbgctrl.dll` changed to `libhyperdbg.dll`
-- `hprdbgkd.sys` changed to `hyperkd.sys`
-- `hprdbghv.dll` changed to `hyperhv.dll`
-- Dividing user/kernel exported headers in the SDK
-
-## [0.9.0.0] - 2024-06-09
-New release of the HyperDbg Debugger.
-
-### Added
-- The **!monitor** command now physical address hooking ([link](https://docs.hyperdbg.org/commands/extension-commands/monitor))
-- **hwdbg** is merged to HyperDbg codebase ([link](https://hwdbg.hyperdbg.org))
-- **strncmp(Str1, Str2, Num)**, and **wcsncmp(WStr1, WStr2, Num)** functions in script engine ([link](https://docs.hyperdbg.org/commands/scripting-language/functions/strings/strncmp))([link](https://docs.hyperdbg.org/commands/scripting-language/functions/strings/wcsncmp))
-
-### Changed
-- Using a separate HOST IDT in VMCS (not OS IDT) (fix to this [VM escape](https://www.unknowncheats.me/forum/c-and-c-/390593-vm-escape-via-nmi.html) issues)
-- Using a dedicated HOST GDT and TSS Stack
-- Checking for race-condition of not locked cores before applying instant-events and switching cores
-- The error message for invalid address is changed ([more information](https://docs.hyperdbg.org/tips-and-tricks/considerations/accessing-invalid-address))
-- Fix the problem of not locking all cores after running the '.pagein' command
-
-## [0.8.4.0] - 2024-05-10
-New release of the HyperDbg Debugger.
-
-### Changed
-- Fixed the signedness overflow of the command parser
-
## [0.8.3.0] - 2024-05-03
New release of the HyperDbg Debugger.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4b0d2c53..86595a5f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,19 +2,21 @@
First off, thanks for taking the time to contribute! ❤️
-HyperDbg is a large-scale project that requires a lot of time and effort from the community. Given the current number of developers and their limited time and resources, we cannot develop every part simultaneously. Therefore, new developers are warmly welcomed to join and add their contributions to the project. Here, we made a list of potential improvements that you can contribute on. Feel free to open up an issue if you think you have any ideas that would make a good addition to the list.
+HyperDbg is a large-scale project that requires a lot of time and effort from the community. Given the current number of developers and their limited time and resources, we cannot develop every part simultaneously. Therefore, new developers are warmly welcomed to join and add their contributions to the project. Here, we made a list of potential improvements that you can contribute on. Feel free to open up an issue if you think you have any ideas that would make a good addition to the list, or if you want to implement one of the below items, or if you'd like to discuss a question you might have.
## Things to Work on
-Please make sure to create a [discussion](https://github.com/orgs/HyperDbg/discussions) or an [issue](https://github.com/HyperDbg/HyperDbg/issues), or even better, join the HyperDbg groups ([Telegram](https://t.me/HyperDbg), [Discord](https://discord.gg/anSPsGUtzN), [Matrix](https://matrix.to/#/#hyperdbg-discussion:matrix.org)) on social media. Discuss the way you want to implement your changes and inform developers, because we often see people simultaneously working on the same issue. To avoid this collision, make sure to inform us before you start developing.
+- Writing blog posts about use-cases of HyperDbg
+- Troubleshooting problems with running on Hyper-V's nested virtualization
+- Troubleshooting problems with running on VirtualBox's nested virtualization
+- Supporting kdnet (sending data over the net)
+- Adding an assembler to the project
+- Enhancing HyperDbg's [Transparent Mode](https://docs.hyperdbg.org/using-hyperdbg/prerequisites/operation-modes#transparent-mode), especially anti-hypervisor methods
+- Making a SoftICE-style GUI
+- Enhancing and adding more features to the ['.pe'](https://docs.hyperdbg.org/commands/meta-commands/.pe) command
+- Anything else you might find interesting ;)
-### Working on an Idea or a Task
-- We have a [wide range of ideas and tasks](https://github.com/orgs/HyperDbg/projects/2) that you might be interested in working on. You can choose a task and start working on it, and if you have any questions or need clarification, feel free to ask. This list will be updated frequently.
-
-### Other Things to Work on
-- Writing blog posts and creating videos about use-cases of HyperDbg (make sure to add it to the [awesome](https://github.com/HyperDbg/awesome) repository).
-- Fixing unresolved GitHub [issues](https://github.com/HyperDbg/HyperDbg/issues).
-- Any other interesting ideas you might find! (Let's have a discussion before working on them.)
+This list will be updated frequently.
## Fixing Bugs
diff --git a/CREDITS.md b/CREDITS.md
index 0d39ff7b..36bfb4ad 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -4,7 +4,7 @@ The list provided comprises individuals who have made significant contributions
## Credits:
-Just so you know – the attributions listed on this credits page are acknowledged without any particular order.
+The attributions listed on this credits page are acknowledged without any particular order.
- All of the [contributors](https://github.com/HyperDbg/HyperDbg/graphs/contributors)
- Sina Karvandi ([@Intel80x86](https://twitter.com/Intel80x86))
@@ -21,10 +21,4 @@ Just so you know – the attributions listed on this credits page are acknowledg
- Ddkwork ([@ddkwork](https://github.com/ddkwork)) for making GUI
- Mohammad K. Fallah ([@mkfallah11](https://github.com/mkfallah11)) for implementing the optimization algorithms
- Xandora Team ([xandora.io](https://www.xandora.io)) for [Keystone](https://github.com/keystone-engine/keystone) engine
-- xmaple555 ([@xmaple555](https://github.com/xmaple555)) for contributions in HyperDbg core and the script engine
-- Abbas Masoumi Gorji ([@AbbasMasoumiG](https://twitter.com/AbbasMasoumiG))
-- Björn Ruytenberg ([@0Xiphorus](https://twitter.com/0Xiphorus))
-- Marcis Zarins ([@CokeTree3](https://github.com/CokeTree3)) for his works on enhancing HyperEvade project
-- Artem Shishkin ([@honorary_bot](https://twitter.com/honorary_bot)) for always answering our hypervisor questions
-- unrustled.jimmies for helping us debug and fix issues, and his contributions in HyperDbg
-- Hari Mishal ([@harimishal1](https://github.com/harimishal1)) for his works on the hypertrace project for supporting Last Branch Record (LBR)
\ No newline at end of file
+- xmaple555 ([@xmaple555](https://github.com/xmaple555)) for contributions in HyperDbg core and the script engine
\ No newline at end of file
diff --git a/README.md b/README.md
index fae0672e..ef9a7374 100644
--- a/README.md
+++ b/README.md
@@ -6,40 +6,25 @@
+
# HyperDbg Debugger
-**HyperDbg Debugger** is a free (as in free beer), open-source, community-driven, hypervisor-assisted, user-mode, and kernel-mode Windows debugger with a focus on using modern hardware technologies. It is a debugger designed for analyzing, fuzzing, and reversing.
+HyperDbg Debugger is an open-source, community-driven, hypervisor-assisted, user-mode, and kernel-mode Windows debugger with a focus on using modern hardware technologies. It is a debugger designed for analyzing, fuzzing, and reversing.
-You can follow **HyperDbg** on **[Twitter](https://twitter.com/HyperDbg)** or **[Mastodon](https://infosec.exchange/@hyperdbg)** to get notified about new releases, or join any of the HyperDbg groups, where you can ask developers and open-source reversing enthusiasts for help setting up and using HyperDbg.
-
-- **[Telegram](https://t.me/HyperDbg)**
-- **[Discord](https://discord.gg/anSPsGUtzN)**
-- **[Matrix](https://matrix.to/#/#hyperdbg-discussion:matrix.org)**
+You can follow **HyperDbg** on **[Twitter](https://twitter.com/HyperDbg)** to get notified about new releases, or join the HyperDbg **[Telegram](https://t.me/HyperDbg)** group, where you can ask developers and open-source reversing enthusiasts for help with setting up and running HyperDbg.
## Description
-**HyperDbg** is designed with a focus on using modern hardware technologies to provide new features to the debuggers' world. It operates on top of Windows by virtualizing an already running system using Intel VT-x and EPT. This debugger aims not to use any APIs and software debugging mechanisms, but instead, it uses Second Layer Page Table (a.k.a. Extended Page Table or EPT) extensively to monitor both kernel and user executions.
+**HyperDbg** is designed with a focus on using modern hardware technologies to provide new features to the debuggers' world. It operates on top of Windows by virtualizing an already running system using Intel VT-x and Intel PT. This debugger aims not to use any APIs and software debugging mechanisms, but instead, it uses Second Layer Page Table (a.k.a. Extended Page Table or EPT) extensively to monitor both kernel and user executions.
-HyperDbg comes with features like hidden hooks, which are as fast as old inline hooks, but also stealth. It mimics hardware debug registers for (read & write) to a specific location, but this time invisible for both the Windows kernel and the programs, and of course, without any limitation in size or count!
+HyperDbg comes with features like hidden hooks, which are as fast as old inline hooks, but also stealth. It mimics hardware debug registers for (read & write) to a specific location, but this time entirely invisible for both Windows kernel and the programs, and of course, without any limitation in size or count!
-Using TLB-splitting and having features such as measuring code coverage and monitoring all mov(s) to/from memory by a function, makes HyperDbg a unique debugger.
+Using TLB-splitting, and having features such as measuring code coverage and monitoring all mov(s) to/from memory by a function, makes HyperDbg a unique debugger.
Although it has novel features, HyperDbg tries to be as stealthy as possible. It doesn’t use any debugging APIs to debug Windows or any application, so classic anti-debugging methods won’t detect it. Also, it resists the exploitation of time delta methods (e.g., RDTSC/RDTSCP) to detect the presence of hypervisors, therefore making it much harder for applications, packers, protectors, malware, anti-cheat engines, etc. to discover the debugger.
-## Why HyperDbg?
-
-HyperDbg is harder to set up and use, and also requires deeper low-level system knowledge compared to traditional debuggers. However, it provides two major advantages:
-
-1. **Full System & OS Control**
-HyperDbg operates at the hypervisor level, giving you powerful capabilities that are simply not possible with classic debuggers. This allows you to leverage hardware-assisted [features](https://github.com/HyperDbg/HyperDbg?tab=readme-ov-file#unique-features) for advanced reverse engineering and debugging scenarios.
-
-2. **Stealth & Detection Resistance**
-Since HyperDbg doesn't rely on standard OS debugging APIs, it is generally much harder (though not impossible) to detect. This makes it a strong choice when working against anti-debugging protections.
-
-These advantages open up entirely new debugging and reverse engineering techniques that go beyond what conventional debuggers can offer.
-
## Build & Installation
You can download the latest compiled binary files from **[releases](https://github.com/HyperDbg/HyperDbg/releases)**; otherwise, if you want to build HyperDbg, you should clone HyperDbg with the `--recursive` flag.
@@ -50,7 +35,7 @@ Please visit **[Build & Install](https://docs.hyperdbg.org/getting-started/build
## Tutorials
-The **OpenSecurityTraining2's "Reversing with HyperDbg (Dbg3301)**" tutorial series, available on [**OST2's website**](https://ost2.fyi/Dbg3301) (_preferred_) and [**YouTube**](https://www.youtube.com/playlist?list=PLUFkSN0XLZ-kF1f143wlw8ujlH2A45nZY) is the recommended way to get started with and learn HyperDbg. It guides you through the initial steps of using HyperDbg, covering essential concepts, principles, and debugging functionalities, along with practical examples and numerous reverse engineering methods that are unique to HyperDbg.
+The **[OpenSecurityTraining2's "Reversing with HyperDbg (Dbg3301)"](https://ost2.fyi/Dbg3301)** tutorial is the recommended way to get started with and learn HyperDbg, guiding you through the initial steps of using HyperDbg, covering essential concepts, principles, debugging functionalities, along with practical examples and numerous reverse engineering methods that are unique to HyperDbg.
If you're interested in understanding the internal design and architecture of hypervisors and HyperDbg, you can read the [**Hypervisor From Scratch**](https://rayanfam.com/tutorials) tutorials.
@@ -69,71 +54,26 @@ In case you use one of **HyperDbg**'s components in your work, please consider c
year={2022}
}
```
-
-Other paper built upon HyperDbg...
-
-**2. [hwdbg: Debugging Hardware Like Software (EuroSec'25)](https://dl.acm.org/doi/abs/10.1145/3722041.3723101)** [[PDF](https://dl.acm.org/doi/pdf/10.1145/3722041.3723101)]
+**2. [The Reversing Machine: Reconstructing Memory Assumptions](https://arxiv.org/pdf/2405.00298)** [[arXiv](https://arxiv.org/abs/2405.00298)]
```
-@inproceedings{karvandi2025hwdbg,
- title={hwdbg: Debugging Hardware Like Software},
- author={Karvandi, Mohammad Sina and Meghdadizanjani, Soroush and Monfared, Saleh Khalaj and van der Kouwe, Erik and Slowinska, Asia},
- booktitle={Proceedings of the 18th European Workshop on Systems Security},
- pages={56--62},
- year={2025}
+@misc{karvandi2024reversing,
+ Author = {Mohammad Sina Karvandi and Soroush Meghdadizanjani and Sima Arasteh and Saleh Khalaj Monfared and Mohammad K. Fallah and Saeid Gorgin and Jeong-A Lee and Erik van der Kouwe},
+ Title = {The Reversing Machine: Reconstructing Memory Assumptions},
+ Year = {2024},
+ Eprint = {arXiv:2405.00298},
}
```
-**3. [HyperEvade: Countering Anti-Debugging Techniques and Enhancing Transparency in Nested Virtualization using HyperDbg (DEBT'25)](https://www.jot.fm/contents/issue_2026_01/a8.html)** [[PDF](https://www.jot.fm/issues/issue_2026_01/a8.pdf)]
-
-```
-@article{ruytenberg2026hyperevade,
- title={HyperEvade: Countering Anti-Debugging Techniques and Enhancing Transparency in Nested Virtualization using HyperDbg},
- author={Ruytenberg, Bj{\"o}rn and Karvandi, Mohammad Sina},
- journal={Journal of Object Technology},
- volume={25},
- number={1},
- pages={1--3},
- year={2026},
- publisher={Association Internationale pour les Technologies Objets}
-}
-```
-
-**4. [Digital Hole: Bypassing Commercial Audio DRM Solutions with DReaMcatcher (EuroSys'26)](https://dl.acm.org/doi/abs/10.1145/3767295.3803583)** [[PDF](https://dl.acm.org/doi/pdf/10.1145/3767295.3803583)]
-
-```
-@inproceedings{ruytenberg2026digital,
- title={Digital Hole: Bypassing Commercial Audio DRM Solutions with DReaMcatcher},
- author={Ruytenberg, Bj{\"o}rn and Karvandi, Mohammad Sina and Bos, Herbert and van der Kouwe, Erik and Slowinska, Asia},
- booktitle={Proceedings of the 21st European Conference on Computer Systems},
- pages={484--496},
- year={2026}
-}
-```
-
-**5. [TRM: An Efficient Hypervisor-Based Framework For Malware Analysis and Memory Reconstruction (AsiaCCS'26)](https://dl.acm.org/doi/10.1145/3779208.3785293)** [[PDF](https://dl.acm.org/doi/pdf/10.1145/3779208.3785293)]
-
-```
-@inproceedings{karvandi2026trm,
- title={TRM: An Efficient Hypervisor-Based Framework For Malware Analysis and Memory Reconstruction},
- author={Karvandi, Mohammad Sina and Meghdadizanjani, Soroush and Arasteh, Sima and Monfared, Saleh Khalaj and Fallah, Mohammad K and Gorgin, Saeid and Lee, Jeong-A and Slowinska, Asia and van der Kouwe, Erik},
- booktitle={Proceedings of the ACM Asia Conference on Computer and Communications Security},
- pages={68--82},
- year={2026}
-}
-```
-
-
-
-You can also read [this article](https://research.hyperdbg.org/debugger/kernel-debugger-design/) as it describes the overall architecture, technical difficulties, design decisions, and internals of HyperDbg Debugger, [this article](https://research.hyperdbg.org/vmm/transparency/) about our efforts on vm-exit transparency, [this article](https://research.hyperdbg.org/debugger/chasing-bugs/) about chasing bugs within hypervisors, and [this article](https://research.hyperdbg.org/debugger/gaining-insights/) about new reverse engineering techniques introduced in HyperDbg. More articles, posts, and resources are available at the **[awesome](https://github.com/HyperDbg/awesome)** repo, and in addition, the **[slides](https://github.com/HyperDbg/slides)** repo provides presentation slides for further reference.
+You can also read [this article](https://research.hyperdbg.org/debugger/kernel-debugger-design.html) as it describes the overall architecture, technical difficulties, design decisions, and internals of HyperDbg Debugger, [this article](https://research.hyperdbg.org/debugger/transparency.html) about our efforts on vm-exit transparency, and [this article](https://research.hyperdbg.org/debugger/chasing-bugs.html) about chasing bugs within hypervisors. More articles, posts, and resources are available at the **[awesome](https://github.com/HyperDbg/awesome)** repo, and in addition, the **[slides](https://github.com/HyperDbg/slides)** repo provides presentation slides for further reference.
## Unique Features
-
+### First Release (v0.1.0.0)
* Advanced Hypervisor-based Kernel Mode Debugger [link][link][link]
* Classic EPT Hook (Hidden Breakpoint) [link][link][link]
* Inline EPT Hook (Inline Hook) [link][link]
-* Monitor Memory for R/W (Emulating Hardware Debug Registers Without Limitation) [link][link][link]
+* Monitor Memory For R/W (Emulating Hardware Debug Registers Without Limitation) [link][link][link]
* SYSCALL Hook (Disable EFER & Handle #UD) [link][link][link]
* SYSRET Hook (Disable EFER & Handle #UD) [link][link]
* CPUID Hook & Monitor [link][link]
@@ -143,15 +83,15 @@ You can also read [this article](https://research.hyperdbg.org/debugger/kernel-d
* RDPMC Hook & Monitor [link]
* VMCALL Hook & Monitor [link]
* Debug Registers Hook & Monitor [link]
-* I/O Port (IN Instruction) Hook & Monitor [link][link]
-* I/O Port (OUT Instruction) Hook & Monitor [link][link]
+* I/O Port (In Instruction) Hook & Monitor [link][link]
+* I/O Port (Out Instruction) Hook & Monitor [link][link]
* MMIO Monitor [link]
* Exception (IDT < 32) Monitor [link][link][link]
* External-Interrupt (IDT > 32) Monitor [link][link][link]
* Running Automated Scripts [link]
-* Transparent-mode and Hyperevade Project (Anti-debugging and Anti-hypervisor Resistance) [link][link][link]
-* Running Custom Assembly in Both VMX-root, VMX non-root (Kernel & User) [link]
-* Checking for Custom Conditions [link][link]
+* Transparent-mode (Anti-debugging and Anti-hypervisor Resistance) [link][link]
+* Running Custom Assembly In Both VMX-root, VMX non-root (Kernel & User) [link]
+* Checking For Custom Conditions [link][link]
* Process-specific & Thread-specific Debugging [link][link][link]
* VMX-root Compatible Message Tracing [link]
* Powerful Kernel Side Scripting Engine [link][link]
@@ -160,26 +100,30 @@ You can also read [this article](https://research.hyperdbg.org/debugger/kernel-d
* Event Forwarding (#DFIR) [link][link]
* Transparent Breakpoint Handler [link][link]
* Various Custom Scripts [link]
+
+### Second Release (v0.2.0.0)
* HyperDbg Software Development Kit (SDK) [link]
+
+### Third Release (v0.3.0.0)
* Event Short-circuiting [link][link]
-* Tracking Records of Function Calls and Return Addresses [link]
+* Tracking records of function calls and return addresses [link]
* Kernel-level Length Disassembler Engine (LDE) [link][link]
+
+### Fourth Release (v0.4.0.0)
* Memory Execution Monitor & Execution Blocking [link]
* Custom Page-fault Injection [link]
+
+### Fifth Release (v0.5.0.0)
* Different Event Calling Stages [link]
+
+### Sixth Release (v0.6.0.0)
* Injecting Custom Interrupts/Exceptions/Faults [link][link]
-* Instant Events in the Debugger Mode [link]
-* Detecting Kernel-to-user and User-to-kernel Transitions [link]
-* Physical Memory Monitoring Hooks [link]
-* Enumerating PCI/PCI-e Devices [link]
-* Interpreting and Dumping PCI/PCI-e Configuration Space (CAM) [link]
-* Dumping IDT Entries, I/O APIC, and Local APIC in XAPIC and X2APIC Modes [link][link][link]
-* Triggering and Counting System Management Mode (SMM) Interrupts (SMIs) [link]
-* Attaching to the User-mode Process and Preventing Execution [link]
-* Intercepting Execution of XSETBV Instructions [link]
-* Writing Library Script Files [link]
-* Enhanced Portable Executable (PE) Parser [link]
-* Tracing Branches using Last Branch Record (LBR) [link][link][link][link][link][link][link]
+
+### Seventh Release (v0.7.0.0)
+* Instant events in the Debugger Mode [link]
+
+### Eighth Release (v0.8.0.0)
+* Detect kernel-to-user and user-to-kernel transitions [link]
## How does it work?
@@ -191,17 +135,15 @@ You can read about the internal design of HyperDbg and its features in the [docu
## Scripts
-
You can write your **[scripts](https://github.com/HyperDbg/scripts)** to automate your debugging journey. **HyperDbg** has a powerful, fast, and entirely kernel-side implemented [script engine](https://docs.hyperdbg.org/commands/scripting-language).
## Contributing
-
Contributing to HyperDbg is super appreciated. We have made a list of potential [tasks](https://github.com/HyperDbg/HyperDbg/blob/master/CONTRIBUTING.md#things-to-work-on) that you might be interested in contributing towards.
If you want to contribute to HyperDbg, please read the [Contribution Guide](https://github.com/HyperDbg/HyperDbg/blob/master/CONTRIBUTING.md).
-## License
+## License
**HyperDbg**, and all its submodules and repos, unless a license is otherwise specified, are licensed under **GPLv3** LICENSE.
Dependencies are licensed by their own.
diff --git a/examples/README.md b/examples/README.md
deleted file mode 100644
index 47fa15b3..00000000
--- a/examples/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# User-Mode and Kernel-Mode Examples
-
-Examples for user-mode and kernel-mode are **NOT** yet completed and are currently **under construction**!
diff --git a/examples/kernel/README.md b/examples/kernel/README.md
deleted file mode 100644
index e509023b..00000000
--- a/examples/kernel/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-NOTE
-============
-Build it directly from the main HyperDbg solution file. Do not build it independently, as it requires dependency files from the main HyperDbg libraries to be built first.
\ No newline at end of file
diff --git a/examples/kernel/hyperdbg_driver/CMakeLists.txt b/examples/kernel/hyperdbg_driver/CMakeLists.txt
deleted file mode 100644
index 3b2ca0b2..00000000
--- a/examples/kernel/hyperdbg_driver/CMakeLists.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# Code generated by Visual Studio kit, DO NOT EDIT.
-set(SourceFiles
- "header/core/Core.h"
- "header/driver/Driver.h"
- "header/driver/Loader.h"
- "header/misc/Global.h"
- "header/pch.h"
- "code/core/Core.c"
- "code/driver/Driver.c"
- "code/driver/Ioctl.c"
- "code/driver/Loader.c"
-)
-include_directories(
- "../../../hyperdbg/include"
- "header"
-)
-wdk_add_driver(hyperdbg_driver
- KMDF 1.15
- ${SourceFiles}
-)
diff --git a/examples/kernel/hyperdbg_driver/packages.config b/examples/kernel/hyperdbg_driver/packages.config
deleted file mode 100644
index eb276766..00000000
--- a/examples/kernel/hyperdbg_driver/packages.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/user/README.md b/examples/user/README.md
deleted file mode 100644
index e509023b..00000000
--- a/examples/user/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-NOTE
-============
-Build it directly from the main HyperDbg solution file. Do not build it independently, as it requires dependency files from the main HyperDbg libraries to be built first.
\ No newline at end of file
diff --git a/examples/user/hyperdbg_app/CMakeLists.txt b/examples/user/hyperdbg_app/CMakeLists.txt
deleted file mode 100644
index 28460d83..00000000
--- a/examples/user/hyperdbg_app/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# Code generated by Visual Studio kit, DO NOT EDIT.
-set(SourceFiles
- "../../../platform/user/header/Environment.h"
- "header/pch.h"
- "code/hyperdbg-app.cpp"
-)
-include_directories(
- "../../../hyperdbg/include"
- "header"
-)
-add_executable(hyperdbg_app ${SourceFiles})
diff --git a/examples/user/hyperdbg_app/code/hyperdbg-app.cpp b/examples/user/hyperdbg_app/code/hyperdbg-app.cpp
deleted file mode 100644
index 095876bf..00000000
--- a/examples/user/hyperdbg_app/code/hyperdbg-app.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "pch.h"
-
-static int
-ShowMessages(const char * Text)
-{
- printf("%s", Text);
- return 0;
-}
-
-static int
-LoadVmm()
-{
- hyperdbg_u_set_text_message_callback((PVOID)ShowMessages);
-
- if (!hyperdbg_u_detect_vmx_support())
- {
- printf("[-] VT-x (VMX) is not supported / enabled on this processor\n");
- return 1;
- }
-
- printf("[*] loading HyperDbg VMM...\n");
- if (hyperdbg_u_install_kd_driver() == 1 || hyperdbg_u_load_vmm() == 1)
- {
- printf("[-] cannot load the HyperDbg VMM\n");
- return 1;
- }
-
- printf("[+] HyperDbg VMM is running\n");
-
- return 0;
-}
-
-int
-main(int argc, char ** argv)
-{
- return main2(argc, argv);
-
- if (LoadVmm() != 0)
- {
- return 1;
- }
-
- hyperdbg_u_run_command((CHAR*)"lm");
-
- printf("[*] unloading HyperDbg VMM...\n");
-
- //
- // Unload the driver
- //
- hyperdbg_u_unload_vmm();
- hyperdbg_u_unload_kd();
- hyperdbg_u_stop_kd_driver();
- hyperdbg_u_uninstall_kd_driver();
-
- printf("[+] done\n");
-
- return 0;
-}
diff --git a/examples/user/hyperdbg_app/code/hyperdbg-ipt.cpp b/examples/user/hyperdbg_app/code/hyperdbg-ipt.cpp
deleted file mode 100644
index aacd776f..00000000
--- a/examples/user/hyperdbg_app/code/hyperdbg-ipt.cpp
+++ /dev/null
@@ -1,583 +0,0 @@
-#include "pch.h"
-
-#include
-#include
-#include
-#include "../dependencies/libipt/intel-pt.h"
-#include
-
-#pragma comment(lib, "dbghelp.lib")
-
-static UINT64 g_ImageBase = 0;
-static UINT64 g_CodeBase = 0;
-static UINT64 g_CodeSize = 0;
-static UINT8 * g_Code = NULL;
-
-static int
-ShowMessages(const char * Text)
-{
- printf("%s", Text);
- return 0;
-}
-
-static int
-ReadImage(uint8_t * Buffer, size_t Size, const struct pt_asid * Asid, uint64_t Ip, void * Context)
-{
- (void)Asid;
- (void)Context;
-
- if (g_Code == NULL || Ip < g_CodeBase || Ip >= g_CodeBase + g_CodeSize)
- return -pte_nomap;
-
- uint64_t Available = g_CodeBase + g_CodeSize - Ip;
- size_t Count = (Size < Available) ? Size : (size_t)Available;
-
- memcpy(Buffer, g_Code + (Ip - g_CodeBase), Count);
- return (int)Count;
-}
-
-typedef struct _PROC_BASIC_INFO
-{
- LONG ExitStatus;
- PVOID PebBaseAddress;
- ULONG_PTR Reserved[4];
-} PROC_BASIC_INFO;
-
-typedef LONG(NTAPI * PFN_NT_QIP)(HANDLE, ULONG, PVOID, ULONG, PULONG);
-
-static BOOLEAN
-CaptureImage(HANDLE Process, UINT64 * TextStart, UINT64 * TextEnd)
-{
- HMODULE Ntdll = GetModuleHandleA("ntdll.dll");
- PFN_NT_QIP NtQip = Ntdll ? (PFN_NT_QIP)GetProcAddress(Ntdll, "NtQueryInformationProcess") : NULL;
- PROC_BASIC_INFO Pbi = {0};
- ULONG Ret = 0;
- SIZE_T Got = 0;
- UINT64 Base = 0;
- IMAGE_DOS_HEADER Dos;
- IMAGE_NT_HEADERS64 Nt;
- UINT64 SectionBase;
-
- if (NtQip == NULL || NtQip(Process, 0, &Pbi, sizeof(Pbi), &Ret) < 0 || Pbi.PebBaseAddress == NULL)
- return FALSE;
-
- if (!ReadProcessMemory(Process, (PBYTE)Pbi.PebBaseAddress + 0x10, &Base, sizeof(Base), &Got) || Base == 0)
- return FALSE;
-
- if (!ReadProcessMemory(Process, (PVOID)Base, &Dos, sizeof(Dos), &Got) || Dos.e_magic != IMAGE_DOS_SIGNATURE)
- return FALSE;
-
- if (!ReadProcessMemory(Process, (PBYTE)Base + Dos.e_lfanew, &Nt, sizeof(Nt), &Got) || Nt.Signature != IMAGE_NT_SIGNATURE)
- return FALSE;
-
- g_ImageBase = Base;
- SectionBase = Base + Dos.e_lfanew + FIELD_OFFSET(IMAGE_NT_HEADERS64, OptionalHeader) + Nt.FileHeader.SizeOfOptionalHeader;
-
- for (WORD i = 0; i < Nt.FileHeader.NumberOfSections; i++)
- {
- IMAGE_SECTION_HEADER Section;
-
- if (!ReadProcessMemory(Process, (PBYTE)SectionBase + (UINT64)i * sizeof(Section), &Section, sizeof(Section), &Got))
- return FALSE;
-
- if (memcmp(Section.Name, ".text", 6) != 0)
- continue;
-
- UINT64 Start = Base + Section.VirtualAddress;
- UINT64 Size = Section.Misc.VirtualSize ? Section.Misc.VirtualSize : Section.SizeOfRawData;
-
- if (Size == 0)
- return FALSE;
-
- g_Code = (UINT8 *)malloc((size_t)Size);
- if (g_Code == NULL)
- return FALSE;
-
- if (!ReadProcessMemory(Process, (PVOID)Start, g_Code, (SIZE_T)Size, &Got) || Got != Size)
- {
- free(g_Code);
- g_Code = NULL;
- return FALSE;
- }
-
- g_CodeBase = Start;
- g_CodeSize = Size;
- *TextStart = Start;
- *TextEnd = Start + Size - 1;
- return TRUE;
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-ResolveFunction(HANDLE Process, const char * Path, const char * Name, UINT64 * Start, UINT64 * End)
-{
- union
- {
- SYMBOL_INFO Info;
- BYTE Buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME];
- } Symbol = {0};
- BOOLEAN Ok = FALSE;
-
- SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);
- if (!SymInitialize(Process, NULL, FALSE))
- return FALSE;
-
- if (SymLoadModuleEx(Process, NULL, Path, NULL, (DWORD64)g_ImageBase, 0, NULL, 0) != 0)
- {
- Symbol.Info.SizeOfStruct = sizeof(SYMBOL_INFO);
- Symbol.Info.MaxNameLen = MAX_SYM_NAME;
-
- if (SymFromName(Process, Name, &Symbol.Info) && Symbol.Info.Address != 0)
- {
- *Start = Symbol.Info.Address;
- *End = Symbol.Info.Address + (Symbol.Info.Size ? Symbol.Info.Size : 0x200) - 1;
- Ok = TRUE;
- }
- }
-
- SymCleanup(Process);
- return Ok;
-}
-
-static BOOLEAN
-PtOperation(HYPERTRACE_PT_OPERATION_REQUEST_TYPE Type)
-{
- HYPERTRACE_PT_OPERATION_PACKETS Op = {};
- Op.PtOperationType = Type;
- return hyperdbg_u_pt_operation(&Op);
-}
-
-static BOOLEAN
-PtFilter(UINT32 ProcessId, UINT64 Start, UINT64 End)
-{
- HYPERTRACE_PT_OPERATION_PACKETS Op = {};
-
- Op.PtOperationType = HYPERTRACE_PT_OPERATION_REQUEST_TYPE_FILTER;
- Op.FilterOptions.TraceUser = 1;
- Op.EnableOptions.Pid = ProcessId;
-
- if (End > Start)
- {
- Op.FilterOptions.NumAddrRanges = 1;
- Op.FilterOptions.AddrRanges[0].Start = Start;
- Op.FilterOptions.AddrRanges[0].End = End;
- }
-
- if (!hyperdbg_u_pt_operation(&Op))
- return FALSE;
-
- printf("[+] PT filter: cr3=0x%llx traceuser=%u ranges=%u buffer=0x%llx\n",
- (unsigned long long)Op.EnableOptions.Cr3,
- Op.FilterOptions.TraceUser,
- Op.FilterOptions.NumAddrRanges,
- (unsigned long long)Op.BufferSize);
- return TRUE;
-}
-
-static const char *
-PacketName(enum pt_packet_type Type)
-{
- switch (Type)
- {
- case ppt_psb: return "PSB"; case ppt_psbend: return "PSBEND"; case ppt_pad: return "PAD";
- case ppt_fup: return "FUP"; case ppt_tip: return "TIP"; case ppt_tip_pge: return "TIP.PGE";
- case ppt_tip_pgd: return "TIP.PGD"; case ppt_tnt_8: return "TNT8"; case ppt_tnt_64: return "TNT64";
- case ppt_mode: return "MODE"; case ppt_pip: return "PIP"; case ppt_vmcs: return "VMCS";
- case ppt_cbr: return "CBR"; case ppt_tsc: return "TSC"; case ppt_tma: return "TMA";
- case ppt_mtc: return "MTC"; case ppt_cyc: return "CYC"; case ppt_ovf: return "OVF";
- case ppt_stop: return "STOP"; case ppt_exstop: return "EXSTOP"; case ppt_mnt: return "MNT";
- case ppt_ptw: return "PTW"; default: return "?";
- }
-}
-
-static uint64_t
-ReconstructIp(const struct pt_packet_ip * Packet, uint64_t * LastIp)
-{
- uint64_t Value = *LastIp;
-
- switch (Packet->ipc)
- {
- case pt_ipc_update_16: Value = (Value & ~0xffffull) | (Packet->ip & 0xffffull); break;
- case pt_ipc_update_32: Value = (Value & ~0xffffffffull) | (Packet->ip & 0xffffffffull); break;
- case pt_ipc_update_48: Value = (Value & ~0xffffffffffffull) | (Packet->ip & 0xffffffffffffull); break;
- case pt_ipc_sext_48:
- Value = Packet->ip & 0xffffffffffffull;
- if (Value & 0x800000000000ull)
- Value |= 0xffff000000000000ull;
- break;
- default: Value = Packet->ip; break;
- }
-
- *LastIp = Value;
- return Value;
-}
-
-static UINT64
-DecodeCorePackets(UINT32 Cpu, const UINT8 * Buffer, UINT64 Size)
-{
- struct pt_config Config;
- struct pt_packet_decoder * Decoder;
- UINT64 Count = 0;
- uint64_t LastIp = 0;
- int Status;
-
- pt_config_init(&Config);
- Config.begin = (uint8_t *)Buffer;
- Config.end = (uint8_t *)Buffer + Size;
-
- Decoder = pt_pkt_alloc_decoder(&Config);
- if (Decoder == NULL)
- {
- printf("[-] core %u: cannot allocate packet decoder\n", Cpu);
- return 0;
- }
-
- for (;;)
- {
- Status = pt_pkt_sync_forward(Decoder);
- if (Status < 0)
- break;
-
- for (;;)
- {
- struct pt_packet Packet;
-
- Status = pt_pkt_next(Decoder, &Packet, sizeof(Packet));
- if (Status < 0)
- break;
-
- Count++;
-
- switch (Packet.type)
- {
- case ppt_tnt_8:
- case ppt_tnt_64:
- printf(" %-8s %2u ", PacketName(Packet.type), Packet.payload.tnt.bit_size);
- for (uint8_t Bit = 0; Bit < Packet.payload.tnt.bit_size && Bit < 64; Bit++)
- putchar(((Packet.payload.tnt.payload >> (Packet.payload.tnt.bit_size - 1 - Bit)) & 1) ? 'T' : 'N');
- putchar('\n');
- break;
-
- case ppt_tip:
- case ppt_fup:
- case ppt_tip_pge:
- case ppt_tip_pgd:
- if (Packet.payload.ip.ipc == pt_ipc_suppressed)
- printf(" %-8s (ip suppressed)\n", PacketName(Packet.type));
- else
- {
- uint64_t Ip = ReconstructIp(&Packet.payload.ip, &LastIp);
- printf(" %-8s 0x%016llx exe+0x%llx\n",
- PacketName(Packet.type), (unsigned long long)Ip, (unsigned long long)(Ip - g_ImageBase));
- }
- break;
-
- case ppt_pip:
- printf(" %-8s cr3=0x%llx\n", PacketName(Packet.type), (unsigned long long)Packet.payload.pip.cr3);
- break;
-
- case ppt_cbr:
- //printf(" %-8s ratio=%u\n", PacketName(Packet.type), Packet.payload.cbr.ratio);
- break;
-
- case ppt_tsc:
- printf(" %-8s tsc=0x%llx\n", PacketName(Packet.type), (unsigned long long)Packet.payload.tsc.tsc);
- break;
-
- default:
- //printf(" %-8s\n", PacketName(Packet.type));
- break;
- }
- }
- }
-
- pt_pkt_free_decoder(Decoder);
- return Count;
-}
-
-static UINT64
-DecodeCore(UINT32 Cpu, const UINT8 * Buffer, UINT64 Size)
-{
- struct pt_config Config;
- struct pt_insn_decoder * Decoder;
- struct pt_image * Image;
- UINT64 Count = 0;
- int Status;
-
- pt_config_init(&Config);
- Config.begin = (uint8_t *)Buffer;
- Config.end = (uint8_t *)Buffer + Size;
-
- Decoder = pt_insn_alloc_decoder(&Config);
- if (Decoder == NULL)
- {
- printf("[-] core %u: cannot allocate instruction decoder\n", Cpu);
- return 0;
- }
-
- Image = pt_insn_get_image(Decoder);
- pt_image_set_callback(Image, ReadImage, NULL);
-
- for (;;)
- {
- Status = pt_insn_sync_forward(Decoder);
- if (Status < 0)
- break;
-
- for (;;)
- {
- struct pt_insn Insn;
-
- while (Status & pts_event_pending)
- {
- struct pt_event Event;
- Status = pt_insn_event(Decoder, &Event, sizeof(Event));
- if (Status < 0)
- break;
- }
-
- if (Status < 0 || (Status & pts_eos))
- break;
-
- Status = pt_insn_next(Decoder, &Insn, sizeof(Insn));
- if (Status < 0)
- break;
-
- ZydisDisassembledInstruction Disasm;
- ZydisMachineMode Mode = (Insn.mode == ptem_32bit) ? ZYDIS_MACHINE_MODE_LEGACY_32 : ZYDIS_MACHINE_MODE_LONG_64;
-
- if (ZYAN_SUCCESS(ZydisDisassembleIntel(Mode, Insn.ip, Insn.raw, Insn.size, &Disasm)))
- printf(" 0x%016llx exe+0x%-6llx %s\n",
- (unsigned long long)Insn.ip,
- (unsigned long long)(Insn.ip - g_ImageBase),
- Disasm.text);
- else
- printf(" 0x%016llx (undecodable)\n", (unsigned long long)Insn.ip);
-
- Count++;
- }
-
- if (Status >= 0 && (Status & pts_eos))
- break;
- }
-
- pt_insn_free_decoder(Decoder);
- return Count;
-}
-
-static void
-RunAndTrace(const char * Path, const char * Function, BOOLEAN Packets, int PinCore)
-{
- STARTUPINFOA Startup = {0};
- PROCESS_INFORMATION Process = {0};
- HYPERTRACE_PT_MMAP_PACKETS Mmap = {0};
- HYPERTRACE_PT_OPERATION_PACKETS Sizes = {0};
- UINT64 TextStart = 0;
- UINT64 TextEnd = 0;
- UINT64 FilterStart = 0;
- UINT64 FilterEnd = 0;
- UINT64 Total = 0;
-
- Startup.cb = sizeof(Startup);
-
- if (!CreateProcessA(Path, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &Startup, &Process))
- {
- printf("[-] cannot launch '%s' (error 0x%x)\n", Path, GetLastError());
- return;
- }
-
- printf("[+] launched '%s' (pid %u, suspended)\n", Path, Process.dwProcessId);
-
- if (PinCore >= 0)
- {
- DWORD_PTR Mask = (DWORD_PTR)1 << PinCore;
- if (SetProcessAffinityMask(Process.hProcess, Mask))
- printf("[+] pinned target to core %d (all trace should land on this core)\n", PinCore);
- else
- printf("[!] could not pin to core %d (error 0x%x); running unpinned\n", PinCore, GetLastError());
- }
- else
- {
- printf("[*] target unpinned (scheduler may migrate it across cores)\n");
- }
-
- if (!CaptureImage(Process.hProcess, &TextStart, &TextEnd))
- {
- printf("[-] cannot read target image / .text section\n");
- TerminateProcess(Process.hProcess, 1);
- goto Cleanup;
- }
-
- printf("[+] image base 0x%llx, .text 0x%llx-0x%llx (%llu bytes)\n",
- (unsigned long long)g_ImageBase,
- (unsigned long long)TextStart,
- (unsigned long long)TextEnd,
- (unsigned long long)g_CodeSize);
-
- FilterStart = TextStart;
- FilterEnd = TextEnd;
-
- if (Function != NULL && ResolveFunction(Process.hProcess, Path, Function, &FilterStart, &FilterEnd)) {
- printf("[+] IP filter narrowed to '%s' 0x%llx-0x%llx (%llu bytes)\n",
- Function,
- (unsigned long long)FilterStart,
- (unsigned long long)FilterEnd,
- (unsigned long long)(FilterEnd - FilterStart + 1));
- }
- else
- {
- printf("[!] IP filter: whole .text (symbol '%s' not found - build the target with a PDB)\n",
- Function ? Function : "(none)");
- }
-
- if (!PtFilter(Process.dwProcessId, FilterStart, FilterEnd) ||
- !PtOperation(HYPERTRACE_PT_OPERATION_REQUEST_TYPE_ENABLE))
- {
- printf("[-] cannot enable Intel PT\n");
- TerminateProcess(Process.hProcess, 1);
- goto Cleanup;
- }
-
- if (!hyperdbg_u_pt_mmap(&Mmap))
- {
- printf("[-] pt_mmap failed\n");
- PtOperation(HYPERTRACE_PT_OPERATION_REQUEST_TYPE_DISABLE);
- TerminateProcess(Process.hProcess, 1);
- goto Cleanup;
- }
-
- printf("[+] PT enabled, %u per-core buffers mapped\n", Mmap.NumCpus);
- printf("[*] resuming target and waiting for it to exit...\n");
-
- ResumeThread(Process.hThread);
- WaitForSingleObject(Process.hProcess, INFINITE);
- printf("[+] target exited, decoding trace\n");
-
- PtOperation(HYPERTRACE_PT_OPERATION_REQUEST_TYPE_PAUSE);
-
- Sizes.PtOperationType = HYPERTRACE_PT_OPERATION_REQUEST_TYPE_SIZE;
- if (!hyperdbg_u_pt_operation(&Sizes))
- {
- printf("[-] cannot query PT sizes\n");
- PtOperation(HYPERTRACE_PT_OPERATION_REQUEST_TYPE_DISABLE);
- goto Cleanup;
- }
-
- for (UINT32 i = 0; i < Mmap.NumCpus; i++)
- {
- UINT32 Cpu = Mmap.Cpus[i].CpuId;
- UINT64 Bytes = (Cpu < Sizes.NumCpus) ? Sizes.BytesPerCpu[Cpu] : 0;
-
- if (Bytes == 0)
- continue;
-
- if (Bytes > Mmap.Cpus[i].Size)
- Bytes = Mmap.Cpus[i].Size;
-
- printf("\n[*] core %u: %llu bytes of trace\n", Cpu, (unsigned long long)Bytes);
- Total += Packets
- ? DecodeCorePackets(Cpu, (const UINT8 *)(ULONG_PTR)Mmap.Cpus[i].UserVa, Bytes)
- : DecodeCore(Cpu, (const UINT8 *)(ULONG_PTR)Mmap.Cpus[i].UserVa, Bytes);
- }
-
- printf("\n[+] decoded %llu %s total\n", (unsigned long long)Total, Packets ? "packet(s)" : "instruction(s)");
-
- PtOperation(HYPERTRACE_PT_OPERATION_REQUEST_TYPE_DISABLE);
-
-Cleanup:
- if (g_Code != NULL)
- {
- free(g_Code);
- g_Code = NULL;
- }
- if (Process.hThread != NULL)
- CloseHandle(Process.hThread);
- if (Process.hProcess != NULL)
- CloseHandle(Process.hProcess);
-}
-
-static int
-LoadVmmAndTrace()
-{
- hyperdbg_u_set_text_message_callback((PVOID)ShowMessages);
-
- if (!hyperdbg_u_detect_vmx_support())
- {
- printf("[-] VT-x (VMX) is not supported / enabled on this processor\n");
- return 1;
- }
-
- printf("[*] loading HyperDbg VMM...\n");
- if (hyperdbg_u_install_kd_driver() == 1 || hyperdbg_u_load_vmm() == 1)
- {
- printf("[-] cannot load the HyperDbg VMM\n");
- return 1;
- }
-
- printf("[+] HyperDbg VMM is running\n");
-
- printf("[*] loading HyperTrace...\n");
-
- if ( hyperdbg_u_load_hypertrace_module() == 1)
- {
- printf("[-] cannot load the HyperDbg HyperTrace\n");
- return 1;
- }
-
- printf("[+] HyperDbg HyperTrace is running\n");
-
- return 0;
-}
-
-int
-main2(int argc, char ** argv)
-{
- const char * function = "main";
- BOOLEAN packets = FALSE;
- int pinCore = 0;
-
- if (argc < 2)
- {
- printf("HyperDbg Intel PT tracer\n");
- printf("usage: %s [function] [-p] [-c core]\n", argv[0]);
- printf(" [function] symbol to IP-filter (default 'main'; pass '*' for whole .text)\n");
- printf(" -p dump raw PT packets (TNT/TIP/FUP/PSB/...) instead of instructions\n");
- printf(" -c core pin the target to this logical core (default 0; -1 = unpinned)\n");
- return 1;
- }
-
- for (int i = 2; i < argc; i++)
- {
- if (strcmp(argv[i], "-p") == 0 || strcmp(argv[i], "--packets") == 0)
- packets = TRUE;
- else if (strcmp(argv[i], "-c") == 0 && i + 1 < argc)
- pinCore = atoi(argv[++i]);
- else if (strcmp(argv[i], "*") == 0)
- function = NULL;
- else
- function = argv[i];
- }
-
- if (LoadVmmAndTrace() != 0)
- {
- return 1;
- }
-
- RunAndTrace(argv[1], function, packets, pinCore);
-
- printf("[*] unloading HyperDbg VMM...\n");
-
- //
- // Unload the driver
- //
- hyperdbg_u_unload_vmm();
- hyperdbg_u_unload_kd();
- hyperdbg_u_stop_kd_driver();
- hyperdbg_u_uninstall_kd_driver();
-
- printf("[+] done\n");
-
- return 0;
-}
diff --git a/examples/user/hyperdbg_app/header/example-ipt.h b/examples/user/hyperdbg_app/header/example-ipt.h
deleted file mode 100644
index 90f00b87..00000000
--- a/examples/user/hyperdbg_app/header/example-ipt.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @file example-ipt.h
- * @author Sina Karvandi (sina@hyperdbg.org)
- * @brief Headers for Intel PT example
- * @details
- *
- * @version 0.20
- * @date 2026-06-13
- *
- * @copyright This project is released under the GNU Public License v3.
- *
- */
-#pragma once
-
-int
-main2(int argc, char** argv);
\ No newline at end of file
diff --git a/hwdbg/.github/workflows/test.yml b/hwdbg/.github/workflows/test.yml
deleted file mode 100644
index cbd456fa..00000000
--- a/hwdbg/.github/workflows/test.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-name: Continuous Integration
-
-on:
- push:
- tags: ['*']
- branches: ['main']
- pull_request:
- workflow_dispatch:
-
-env:
- verilator-version: v5.012
- verilator-install-dir: verilator-install
-
-jobs:
- ci:
- name: ci
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Cleanup
- run: sed -i "s/%NAME%/test/g" build.sc
- - name: Cache Scala
- uses: coursier/cache-action@v6
- - name: Setup Scala
- uses: coursier/setup-action@v1
- with:
- jvm: adopt:11
- apps: sbt mill
- - name: Setup Dependencies
- run: |
- sudo apt-get install ccache
- - name: Get Cached Verilator
- id: get-cached-verilator
- uses: actions/cache@v4
- with:
- path: ${{ env.verilator-install-dir }}
- key: verilator-${{ env.verilator-version }}
- - name: Install Verilator
- if: steps.get-cached-verilator.outputs.cache-hit != 'true'
- run: |
- sudo apt-get install git help2man perl python3 make autoconf g++ flex bison numactl perl-doc libfl-dev
- git clone https://github.com/verilator/verilator
- unset VERILATOR_ROOT
- cd verilator
- git checkout ${{ env.verilator-version }}
- autoconf
- ./configure --prefix=$(pwd)/../${{ env.verilator-install-dir }}
- make
- make install
- - name: Set PATH
- run: |
- echo "$(pwd)/${{ env.verilator-install-dir }}/bin" >> $GITHUB_PATH
- echo VERILATOR_ROOT="$(pwd)/${{ env.verilator-install-dir }}/share/verilator" >> $GITHUB_ENV
- ln -sf $(pwd)/${{ env.verilator-install-dir }}/bin/verilator_bin $(pwd)/${{ env.verilator-install-dir }}/share/verilator/verilator_bin
- - name: SBT Test
- run: sbt test
- - name: mill Test
- run: mill _.test
diff --git a/hwdbg/.gitignore b/hwdbg/.gitignore
deleted file mode 100644
index 6404852f..00000000
--- a/hwdbg/.gitignore
+++ /dev/null
@@ -1,366 +0,0 @@
-### Project Specific stuff
-test_run_dir/*
-### XilinxISE template
-# intermediate build files
-*.bgn
-*.bit
-*.bld
-*.cmd_log
-*.drc
-*.ll
-*.lso
-*.msd
-*.msk
-*.ncd
-*.ngc
-*.ngd
-*.ngr
-*.pad
-*.par
-*.pcf
-*.prj
-*.ptwx
-*.rbb
-*.rbd
-*.stx
-*.syr
-*.twr
-*.twx
-*.unroutes
-*.ut
-*.xpi
-*.xst
-*_bitgen.xwbt
-*_envsettings.html
-*_map.map
-*_map.mrp
-*_map.ngm
-*_map.xrpt
-*_ngdbuild.xrpt
-*_pad.csv
-*_pad.txt
-*_par.xrpt
-*_summary.html
-*_summary.xml
-*_usage.xml
-*_xst.xrpt
-
-# project-wide generated files
-*.gise
-par_usage_statistics.html
-usage_statistics_webtalk.html
-webtalk.log
-webtalk_pn.xml
-
-# generated folders
-iseconfig/
-xlnx_auto_0_xdb/
-xst/
-_ngo/
-_xmsgs/
-### Eclipse template
-*.pydevproject
-.metadata
-.gradle
-bin/
-tmp/
-*.tmp
-*.bak
-*.swp
-*~.nib
-local.properties
-.settings/
-.loadpath
-
-# Eclipse Core
-.project
-
-# External tool builders
-.externalToolBuilders/
-
-# Locally stored "Eclipse launch configurations"
-*.launch
-
-# CDT-specific
-.cproject
-
-# JDT-specific (Eclipse Java Development Tools)
-.classpath
-
-# Java annotation processor (APT)
-.factorypath
-
-# PDT-specific
-.buildpath
-
-# sbteclipse plugin
-.target
-
-# TeXlipse plugin
-.texlipse
-### C template
-# Object files
-*.o
-*.ko
-*.obj
-*.elf
-
-# Precompiled Headers
-*.gch
-*.pch
-
-# Libraries
-*.lib
-*.a
-*.la
-*.lo
-
-# Shared objects (inc. Windows DLLs)
-*.dll
-*.so
-*.so.*
-*.dylib
-
-# Executables
-*.exe
-*.out
-*.app
-*.i*86
-*.x86_64
-*.hex
-
-# Debug files
-*.dSYM/
-### SBT template
-# Simple Build Tool
-# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control
-
-target/
-lib_managed/
-src_managed/
-project/boot/
-.history
-.cache
-### Emacs template
-# -*- mode: gitignore; -*-
-*~
-\#*\#
-/.emacs.desktop
-/.emacs.desktop.lock
-*.elc
-auto-save-list
-tramp
-.\#*
-
-# Org-mode
-.org-id-locations
-*_archive
-
-# flymake-mode
-*_flymake.*
-
-# eshell files
-/eshell/history
-/eshell/lastdir
-
-# elpa packages
-/elpa/
-
-# reftex files
-*.rel
-
-# AUCTeX auto folder
-/auto/
-
-# cask packages
-.cask/
-### Vim template
-[._]*.s[a-w][a-z]
-[._]s[a-w][a-z]
-*.un~
-Session.vim
-.netrwhist
-*~
-### JetBrains template
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
-
-*.iml
-
-## Directory-based project format:
-.idea/
-# if you remove the above rule, at least ignore the following:
-
-# User-specific stuff:
-# .idea/workspace.xml
-# .idea/tasks.xml
-# .idea/dictionaries
-
-# Sensitive or high-churn files:
-# .idea/dataSources.ids
-# .idea/dataSources.xml
-# .idea/sqlDataSources.xml
-# .idea/dynamic.xml
-# .idea/uiDesigner.xml
-
-# Gradle:
-# .idea/gradle.xml
-# .idea/libraries
-
-# Mongo Explorer plugin:
-# .idea/mongoSettings.xml
-
-## File-based project format:
-*.ipr
-*.iws
-
-## Plugin-specific files:
-
-# IntelliJ
-/out/
-
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
-# JIRA plugin
-atlassian-ide-plugin.xml
-
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-### C++ template
-# Compiled Object files
-*.slo
-*.lo
-*.o
-*.obj
-
-# Precompiled Headers
-*.gch
-*.pch
-
-# Compiled Dynamic libraries
-*.so
-*.dylib
-*.dll
-
-# Fortran module files
-*.mod
-
-# Compiled Static libraries
-*.lai
-*.la
-*.a
-*.lib
-
-# Executables
-*.exe
-*.out
-*.app
-### OSX template
-.DS_Store
-.AppleDouble
-.LSOverride
-
-# Icon must end with two \r
-Icon
-
-# Thumbnails
-._*
-
-# Files that might appear in the root of a volume
-.DocumentRevisions-V100
-.fseventsd
-.Spotlight-V100
-.TemporaryItems
-.Trashes
-.VolumeIcon.icns
-
-# Directories potentially created on remote AFP share
-.AppleDB
-.AppleDesktop
-Network Trash Folder
-Temporary Items
-.apdisk
-### Xcode template
-# Xcode
-#
-# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
-
-## Build generated
-build/
-DerivedData
-
-## Various settings
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-xcuserdata
-
-## Other
-*.xccheckout
-*.moved-aside
-*.xcuserstate
-### Scala template
-*.class
-*.log
-/.bsp
-
-# sbt specific
-.cache
-.history
-.lib/
-dist/*
-target/
-lib_managed/
-src_managed/
-project/boot/
-project/plugins/project/
-
-# Scala-IDE specific
-.scala_dependencies
-.worksheet
-### Java template
-*.class
-
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
-
-# Package Files #
-*.jar
-*.war
-*.ear
-
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
-
-# Visual Studio Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-!.vscode/*.code-snippets
-
-# Local History for Visual Studio Code
-.history/
-
-# Built Visual Studio Code Extensions
-*.vsix
-
-# Scala metals
-.metals/*
-
-# Scala metals
-.bloop/
-
-# Temporary disable the generated verilog files
-generated/
-
-# BRAM emulation content
-# bram_instance_info.txt
\ No newline at end of file
diff --git a/hwdbg/.mill-version b/hwdbg/.mill-version
deleted file mode 100644
index 62d5dbdf..00000000
--- a/hwdbg/.mill-version
+++ /dev/null
@@ -1 +0,0 @@
-0.11.5
diff --git a/hwdbg/.scalafmt.conf b/hwdbg/.scalafmt.conf
deleted file mode 100644
index 18f480ad..00000000
--- a/hwdbg/.scalafmt.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-version = "3.8.1"
-runner.dialect = scala213
-maxColumn = 150
-docstrings.style = Asterisk
-docstrings.oneline = unfold
diff --git a/hwdbg/CODE_OF_CONDUCT.md b/hwdbg/CODE_OF_CONDUCT.md
deleted file mode 100644
index b8d25f92..00000000
--- a/hwdbg/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, sex characteristics, gender identity and expression,
-level of experience, education, socio-economic status, nationality, personal
-appearance, race, religion, or sexual identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment
-include:
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an appointed
-representative at an online or offline event. Representation of a project may be
-further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at sina@rayanfam.com. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
-
-[homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
diff --git a/hwdbg/LICENSE b/hwdbg/LICENSE
deleted file mode 100644
index f288702d..00000000
--- a/hwdbg/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- Copyright (C)
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
diff --git a/hwdbg/README.md b/hwdbg/README.md
deleted file mode 100644
index 317a6f0a..00000000
--- a/hwdbg/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-## Description
-The **hwdbg** debugger chip generator is a gate-level debugging tool designed to make configurable and synthesizable hardware debuggers for white-box and black-box chip fuzzing, testing, and reverse engineering. The primary goal of **hwdbg** is to provide control over hardware, enabling monitoring and modification of signals down to the granular level of a single clock cycle. It is written in Chisel and Verilog.
-
-- ⚠️ This project is a work in progress and is not yet ready for testing.
-
-**hwdbg** is a highly customizable debugger designed to ease hardware debugging by bringing software debugging concepts into the hardware debugging domain. **hwdbg** aims to help with the complexities associated with debugging hardware, including chips and IP cores. Key features of **hwdbg** include the ability to step through the hardware design at the clock-cycle level, visualize waveforms, inspect values (e.g., like a logical analyzer), and modify signals. Moreover, it is synthesizable into [FPGAs](https://github.com/HyperDbg/hwdbg-fpga) and has the potential for fabrication into physical chips.
-
-```
- ┏━━━━━━━━━━━━━━━━━━━━━━━┓
- _ _ _ ┃
- | |_ _ _ _ _| || |_ ___ ┃
- | . || | | |/ . || . \/ . | ┃
- |_|_||__/_/ \___||___/\_. | ┃
- <___' ┃
- ┃ ╱|、
- HyperDbg's chip-level debugger ┃ (˚ˎ 。7
- ┃ |、 ˜〵
- ┗━━━━━━━━━━━━━━━━━━━━━━━┛ じしˍ,)ノ
-```
-## Publications
-
-In case you use **hwdbg** in your work, please consider citing our paper.
-
-**[hwdbg: Debugging Hardware Like Software (EuroSec'25)](https://dl.acm.org/doi/abs/10.1145/3722041.3723101)** [[PDF](https://dl.acm.org/doi/pdf/10.1145/3722041.3723101)]
-
-```
-@inproceedings{karvandi2025hwdbg,
- title={hwdbg: Debugging Hardware Like Software},
- author={Karvandi, Mohammad Sina and Meghdadizanjani, Soroush and Monfared, Saleh Khalaj and van der Kouwe, Erik and Slowinska, Asia},
- booktitle={Proceedings of the 18th European Workshop on Systems Security},
- pages={56--62},
- year={2025}
-}
-```
-
-## Deployment Board
-
-[This repository](https://github.com/HyperDbg/hwdbg-fpga) contains pre-built TCL files to facilitate project creation for running **hwdbg** on various FPGA development boards.
-
-## Output
-
-For generating SystemVerilog files, you need to install [Chisel](https://www.chisel-lang.org/docs/installation). Once installed, use the following commands:
-
-```sh
-$ sbt run
-```
-
-This command prompts you to select a component. The `hwdbg.Main` class contains the debugger for synthesis purposes, while the `hwdbg.MainWithInitializedBRAM` class includes a pre-initialized Block RAM (BRAM), primarily for simulation and testing.
-
-After selecting the appropriate class for synthesis (option `1`) or simulation (option `2`), the output should look like this:
-
-```sh
-$ sbt run
-[info] welcome to sbt 1.9.7 (Eclipse Adoptium Java 17.0.10)
-[info] loading settings for project -build-build-build from metals.sbt ...
-[info] loading project definition from /home/sina/HyperDbg//project/project/project
-[info] loading settings for project -build-build from metals.sbt ...
-[info] loading project definition from /home/sina/HyperDbg//project/project
-[success] Generated .bloop/-build-build.json
-[success] Total time: 1 s, completed Apr 16, 2024, 1:49:05 PM
-[info] loading settings for project -build from metals.sbt,plugins.sbt ...
-[info] loading project definition from /home/sina/HyperDbg//project
-[success] Total time: 0 s, completed Apr 16, 2024, 1:49:05 PM
-[info] loading settings for project root from build.sbt ...
-[info] set current project to hwdbg (in build file:/home/sina/HyperDbg/hwdbg/)
-
-Multiple main classes detected. Select one to run:
- [1] hwdbg.Main
- [2] hwdbg.MainWithInitializedBRAM
-
-Enter number: 2
-[info] running hwdbg.MainWithInitializedBRAM
-```
-
-The generated code for the debugger can be found in the `generated` directory.
-
-## Testbenches
-
-To test **hwdbg**, [cocotb](https://www.cocotb.org/) should be installed. After that, first, run the debugger (generated SystemVerilog files) and then run the following commands:
-
-```sh
-cd sim/hwdbg/DebuggerModuleTestingBRAM
-./test.sh
-```
-
-The above command generates a waves file at `./sim/hwdbg/DebuggerModuleTestingBRAM/sim_build/DebuggerModuleTestingBRAM.fst` which can be read using [GTKWave](https://gtkwave.sourceforge.net/).
-
-```sh
-cd sim/hwdbg/DebuggerModuleTestingBRAM
-gtkwave ./sim_build/DebuggerModuleTestingBRAM.fst
-```
-
-### ModelSim
-
-If you prefer to use ModelSim instead of GTKWave, you can configure the `modelsim.config` file. Please visit here for more information.
-
-## API
-
-If you want to create the latest version of API documentation, you can run the following command:
-
-```sh
-$ sbt doc
-```
-
-This will generate documentation at `./target/scala-{version}/api/index.html`.
-
-## License
-
-**hwdbg** and all its submodules and repos, unless a license is otherwise specified, are licensed under **GPLv3** LICENSE.
diff --git a/hwdbg/build.sbt b/hwdbg/build.sbt
deleted file mode 100644
index cf4b4ab5..00000000
--- a/hwdbg/build.sbt
+++ /dev/null
@@ -1,29 +0,0 @@
-// See README.md for license details.
-
-ThisBuild / scalaVersion := "2.13.12"
-ThisBuild / version := "0.1.0"
-ThisBuild / organization := "org.hyperdbg"
-
-val chiselVersion = "6.2.0"
-
-lazy val root = (project in file("."))
- .settings(
- name := "hwdbg",
- libraryDependencies ++= Seq(
- "org.chipsalliance" %% "chisel" % chiselVersion,
- "org.scalatest" %% "scalatest" % "3.2.16" % "test",
- "io.circe" %% "circe-core" % "0.14.3",
- "io.circe" %% "circe-generic" % "0.14.3",
- "io.circe" %% "circe-parser" % "0.14.3"
- ),
- scalacOptions ++= Seq(
- "-language:reflectiveCalls",
- "-deprecation",
- "-feature",
- "-Xcheckinit",
- "-Ymacro-annotations"
- ),
- addCompilerPlugin(
- "org.chipsalliance" % "chisel-plugin" % chiselVersion cross CrossVersion.full
- )
- )
diff --git a/hwdbg/build.sc b/hwdbg/build.sc
deleted file mode 100644
index 1880b58f..00000000
--- a/hwdbg/build.sc
+++ /dev/null
@@ -1,30 +0,0 @@
-// import Mill dependency
-import mill._
-import mill.define.Sources
-import mill.modules.Util
-import mill.scalalib.TestModule.ScalaTest
-import scalalib._
-// support BSP
-import mill.bsp._
-
-object hwdbg extends SbtModule { m =>
- override def millSourcePath = os.pwd
- override def scalaVersion = "2.13.12"
- override def scalacOptions = Seq(
- "-language:reflectiveCalls",
- "-deprecation",
- "-feature",
- "-Xcheckinit",
- )
- override def ivyDeps = Agg(
- ivy"org.chipsalliance::chisel:6.0.0",
- )
- override def scalacPluginIvyDeps = Agg(
- ivy"org.chipsalliance:::chisel-plugin:6.0.0",
- )
- object test extends SbtModuleTests with TestModule.ScalaTest {
- override def ivyDeps = m.ivyDeps() ++ Agg(
- ivy"org.scalatest::scalatest::3.2.16"
- )
- }
-}
diff --git a/hwdbg/project/build.properties b/hwdbg/project/build.properties
deleted file mode 100644
index b19d4e1e..00000000
--- a/hwdbg/project/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-sbt.version = 1.9.7
diff --git a/hwdbg/project/metals.sbt b/hwdbg/project/metals.sbt
deleted file mode 100644
index ac57eb45..00000000
--- a/hwdbg/project/metals.sbt
+++ /dev/null
@@ -1,8 +0,0 @@
-// format: off
-// DO NOT EDIT! This file is auto-generated.
-
-// This file enables sbt-bloop to create bloop config files.
-
-addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.18")
-
-// format: on
diff --git a/hwdbg/project/plugins.sbt b/hwdbg/project/plugins.sbt
deleted file mode 100644
index 5708f81a..00000000
--- a/hwdbg/project/plugins.sbt
+++ /dev/null
@@ -1 +0,0 @@
-logLevel := Level.Warn
diff --git a/hwdbg/project/project/metals.sbt b/hwdbg/project/project/metals.sbt
deleted file mode 100644
index ac57eb45..00000000
--- a/hwdbg/project/project/metals.sbt
+++ /dev/null
@@ -1,8 +0,0 @@
-// format: off
-// DO NOT EDIT! This file is auto-generated.
-
-// This file enables sbt-bloop to create bloop config files.
-
-addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.18")
-
-// format: on
diff --git a/hwdbg/project/project/project/metals.sbt b/hwdbg/project/project/project/metals.sbt
deleted file mode 100644
index ac57eb45..00000000
--- a/hwdbg/project/project/project/metals.sbt
+++ /dev/null
@@ -1,8 +0,0 @@
-// format: off
-// DO NOT EDIT! This file is auto-generated.
-
-// This file enables sbt-bloop to create bloop config files.
-
-addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.18")
-
-// format: on
diff --git a/hwdbg/sim/.gitignore b/hwdbg/sim/.gitignore
deleted file mode 100644
index 85f87a22..00000000
--- a/hwdbg/sim/.gitignore
+++ /dev/null
@@ -1,164 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-
-# cocotb folders and files
-sim_build/
-results.xml
\ No newline at end of file
diff --git a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/Makefile b/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/Makefile
deleted file mode 100644
index 6f5989ca..00000000
--- a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-# Makefile
-
-TOPLEVEL_LANG = verilog
-
-VERILOG_SOURCES += $(shell pwd)/../../../generated/DebuggerModuleTestingBRAM.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/InitRegMemFromFile.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/DebuggerMain.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/SendReceiveSynchronizer.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/DebuggerPacketReceiver.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/DebuggerPacketSender.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/DebuggerPacketInterpreter.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/InterpreterInstanceInfo.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/InterpreterSendSuccessOrError.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/ScriptExecutionEngine.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/InterpreterScriptBufferHandler.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/ScriptEngineGetValue.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/ScriptEngineSetValue.sv
-VERILOG_SOURCES += $(shell pwd)/../../../generated/ScriptEngineEval.sv
-
-TOPLEVEL = DebuggerModuleTestingBRAM
-MODULE = test_DebuggerModuleTestingBRAM
-
-include $(shell cocotb-config --makefiles)/Makefile.sim
\ No newline at end of file
diff --git a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/bram_instance_info.txt b/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/bram_instance_info.txt
deleted file mode 100644
index f84b6a6e..00000000
--- a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/bram_instance_info.txt
+++ /dev/null
@@ -1,261 +0,0 @@
-Content of BRAM after emulation:
-
-PS to PL area:
-mem_0: 0000005a | Checksum
-mem_1: 00000000 | Checksum
-mem_2: 52444247 | Indicator
-mem_3: 48595045 | Indicator
-mem_4: 00000004 | TypeOfThePacket
-mem_5: 00000001 | RequestedActionOfThePacket
-mem_6: 00000000 | Start of Optional Data
-mem_7: 00000000
-mem_8: 00000000
-mem_9: 00000000
-mem_10: 00000000
-mem_11: 00000000
-mem_12: 00000000
-mem_13: 00000000
-mem_14: 00000000
-mem_15: 00000000
-mem_16: 00000000
-mem_17: 00000000
-mem_18: 00000000
-mem_19: 00000000
-mem_20: 00000000
-mem_21: 00000000
-mem_22: 00000000
-mem_23: 00000000
-mem_24: 00000000
-mem_25: 00000000
-mem_26: 00000000
-mem_27: 00000000
-mem_28: 00000000
-mem_29: 00000000
-mem_30: 00000000
-mem_31: 00000000
-mem_32: 00000000
-mem_33: 00000000
-mem_34: 00000000
-mem_35: 00000000
-mem_36: 00000000
-mem_37: 00000000
-mem_38: 00000000
-mem_39: 00000000
-mem_40: 00000000
-mem_41: 00000000
-mem_42: 00000000
-mem_43: 00000000
-mem_44: 00000000
-mem_45: 00000000
-mem_46: 00000000
-mem_47: 00000000
-mem_48: 00000000
-mem_49: 00000000
-mem_50: 00000000
-mem_51: 00000000
-mem_52: 00000000
-mem_53: 00000000
-mem_54: 00000000
-mem_55: 00000000
-mem_56: 00000000
-mem_57: 00000000
-mem_58: 00000000
-mem_59: 00000000
-mem_60: 00000000
-mem_61: 00000000
-mem_62: 00000000
-mem_63: 00000000
-mem_64: 00000000
-mem_65: 00000000
-mem_66: 00000000
-mem_67: 00000000
-mem_68: 00000000
-mem_69: 00000000
-mem_70: 00000000
-mem_71: 00000000
-mem_72: 00000000
-mem_73: 00000000
-mem_74: 00000000
-mem_75: 00000000
-mem_76: 00000000
-mem_77: 00000000
-mem_78: 00000000
-mem_79: 00000000
-mem_80: 00000000
-mem_81: 00000000
-mem_82: 00000000
-mem_83: 00000000
-mem_84: 00000000
-mem_85: 00000000
-mem_86: 00000000
-mem_87: 00000000
-mem_88: 00000000
-mem_89: 00000000
-mem_90: 00000000
-mem_91: 00000000
-mem_92: 00000000
-mem_93: 00000000
-mem_94: 00000000
-mem_95: 00000000
-mem_96: 00000000
-mem_97: 00000000
-mem_98: 00000000
-mem_99: 00000000
-mem_100: 00000000
-mem_101: 00000000
-mem_102: 00000000
-mem_103: 00000000
-mem_104: 00000000
-mem_105: 00000000
-mem_106: 00000000
-mem_107: 00000000
-mem_108: 00000000
-mem_109: 00000000
-mem_110: 00000000
-mem_111: 00000000
-mem_112: 00000000
-mem_113: 00000000
-mem_114: 00000000
-mem_115: 00000000
-mem_116: 00000000
-mem_117: 00000000
-mem_118: 00000000
-mem_119: 00000000
-mem_120: 00000000
-mem_121: 00000000
-mem_122: 00000000
-mem_123: 00000000
-mem_124: 00000000
-mem_125: 00000000
-mem_126: 00000000
-mem_127: 00000000
-
-PL to PS area:
-mem_128: 00000000 | Checksum
-mem_129: 00000000 | Checksum
-mem_130: 52444247 | Indicator
-mem_131: 48595045 | Indicator
-mem_132: 00000005 | TypeOfThePacket
-mem_133: 00000002 | RequestedActionOfThePacket
-mem_134: 00000100 | Start of Optional Data
-mem_135: 00000020
-mem_136: 00000008
-mem_137: 00000002
-mem_138: 00000002
-mem_139: 00000002
-mem_140: 00000001
-mem_141: 00000400
-mem_142: 00000000
-mem_143: 00000200
-mem_144: 00000020
-mem_145: 00000002
-mem_146: 01ff9efb
-mem_147: 00000000
-mem_148: 0000000d
-mem_149: 00000020
-mem_150: 0000000c
-mem_151: 00000014
-mem_152: 00000000
-mem_153: 00000000
-mem_154: 00000000
-mem_155: 00000000
-mem_156: 00000000
-mem_157: 00000000
-mem_158: 00000000
-mem_159: 00000000
-mem_160: 00000000
-mem_161: 00000000
-mem_162: 00000000
-mem_163: 00000000
-mem_164: 00000000
-mem_165: 00000000
-mem_166: 00000000
-mem_167: 00000000
-mem_168: 00000000
-mem_169: 00000000
-mem_170: 00000000
-mem_171: 00000000
-mem_172: 00000000
-mem_173: 00000000
-mem_174: 00000000
-mem_175: 00000000
-mem_176: 00000000
-mem_177: 00000000
-mem_178: 00000000
-mem_179: 00000000
-mem_180: 00000000
-mem_181: 00000000
-mem_182: 00000000
-mem_183: 00000000
-mem_184: 00000000
-mem_185: 00000000
-mem_186: 00000000
-mem_187: 00000000
-mem_188: 00000000
-mem_189: 00000000
-mem_190: 00000000
-mem_191: 00000000
-mem_192: 00000000
-mem_193: 00000000
-mem_194: 00000000
-mem_195: 00000000
-mem_196: 00000000
-mem_197: 00000000
-mem_198: 00000000
-mem_199: 00000000
-mem_200: 00000000
-mem_201: 00000000
-mem_202: 00000000
-mem_203: 00000000
-mem_204: 00000000
-mem_205: 00000000
-mem_206: 00000000
-mem_207: 00000000
-mem_208: 00000000
-mem_209: 00000000
-mem_210: 00000000
-mem_211: 00000000
-mem_212: 00000000
-mem_213: 00000000
-mem_214: 00000000
-mem_215: 00000000
-mem_216: 00000000
-mem_217: 00000000
-mem_218: 00000000
-mem_219: 00000000
-mem_220: 00000000
-mem_221: 00000000
-mem_222: 00000000
-mem_223: 00000000
-mem_224: 00000000
-mem_225: 00000000
-mem_226: 00000000
-mem_227: 00000000
-mem_228: 00000000
-mem_229: 00000000
-mem_230: 00000000
-mem_231: 00000000
-mem_232: 00000000
-mem_233: 00000000
-mem_234: 00000000
-mem_235: 00000000
-mem_236: 00000000
-mem_237: 00000000
-mem_238: 00000000
-mem_239: 00000000
-mem_240: 00000000
-mem_241: 00000000
-mem_242: 00000000
-mem_243: 00000000
-mem_244: 00000000
-mem_245: 00000000
-mem_246: 00000000
-mem_247: 00000000
-mem_248: 00000000
-mem_249: 00000000
-mem_250: 00000000
-mem_251: 00000000
-mem_252: 00000000
-mem_253: 00000000
-mem_254: 00000000
-mem_255: 00000000
diff --git a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/script_buffer_response.txt b/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/script_buffer_response.txt
deleted file mode 100644
index 3c75ec44..00000000
--- a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/script_buffer_response.txt
+++ /dev/null
@@ -1,261 +0,0 @@
-Content of BRAM after emulation:
-
-PS to PL area:
-mem_0: 00000017 | Checksum
-mem_1: 00000000 | Checksum
-mem_2: 52444247 | Indicator
-mem_3: 48595045 | Indicator
-mem_4: 00000004 | TypeOfThePacket
-mem_5: 00000002 | RequestedActionOfThePacket
-mem_6: 00000033 | Start of Optional Data
-mem_7: 00000006
-mem_8: 0000000a
-mem_9: 00000003
-mem_10: 00000001
-mem_11: 0000000f
-mem_12: 00000000
-mem_13: 0000000f
-mem_14: 00000000
-mem_15: 00000006
-mem_16: 00000013
-mem_17: 00000003
-mem_18: 00000001
-mem_19: 00000004
-mem_20: 00000000
-mem_21: 00000007
-mem_22: 00000000
-mem_23: 00000006
-mem_24: 00000016
-mem_25: 00000003
-mem_26: 00000013
-mem_27: 00000007
-mem_28: 00000000
-mem_29: 00000000
-mem_30: 00000000
-mem_31: 00000006
-mem_32: 00000018
-mem_33: 00000003
-mem_34: 00000000
-mem_35: 00000000
-mem_36: 00000000
-mem_37: 00000004
-mem_38: 00000002
-mem_39: 00000006
-mem_40: 00000018
-mem_41: 00000003
-mem_42: 00000000
-mem_43: 00000000
-mem_44: 00000000
-mem_45: 00000004
-mem_46: 00000003
-mem_47: 00000006
-mem_48: 00000015
-mem_49: 00000003
-mem_50: 00000028
-mem_51: 00000000
-mem_52: 00000000
-mem_53: 00000000
-mem_54: 00000000
-mem_55: 00000006
-mem_56: 00000013
-mem_57: 00000003
-mem_58: 00000001
-mem_59: 00000004
-mem_60: 00000001
-mem_61: 00000007
-mem_62: 00000000
-mem_63: 00000006
-mem_64: 00000016
-mem_65: 00000003
-mem_66: 00000022
-mem_67: 00000007
-mem_68: 00000000
-mem_69: 00000000
-mem_70: 00000000
-mem_71: 00000006
-mem_72: 00000018
-mem_73: 00000003
-mem_74: 00000000
-mem_75: 00000000
-mem_76: 00000000
-mem_77: 00000004
-mem_78: 00000004
-mem_79: 00000006
-mem_80: 00000018
-mem_81: 00000003
-mem_82: 00000000
-mem_83: 00000000
-mem_84: 00000000
-mem_85: 00000004
-mem_86: 00000005
-mem_87: 00000006
-mem_88: 00000015
-mem_89: 00000003
-mem_90: 00000028
-mem_91: 00000000
-mem_92: 00000000
-mem_93: 00000000
-mem_94: 00000000
-mem_95: 00000006
-mem_96: 00000018
-mem_97: 00000003
-mem_98: 00000000
-mem_99: 00000000
-mem_100: 00000000
-mem_101: 00000004
-mem_102: 00000006
-mem_103: 00000006
-mem_104: 00000018
-mem_105: 00000003
-mem_106: 00000000
-mem_107: 00000000
-mem_108: 00000000
-mem_109: 00000004
-mem_110: 00000007
-mem_111: 00000000
-mem_112: 00000000
-mem_113: 00000000
-mem_114: 00000000
-mem_115: 00000000
-mem_116: 00000000
-mem_117: 00000000
-mem_118: 00000000
-mem_119: 00000000
-mem_120: 00000000
-mem_121: 00000000
-mem_122: 00000000
-mem_123: 00000000
-mem_124: 00000000
-mem_125: 00000000
-mem_126: 00000000
-mem_127: 00000000
-
-PL to PS area:
-mem_128: 00000000 | Checksum
-mem_129: 00000000 | Checksum
-mem_130: 52444247 | Indicator
-mem_131: 48595045 | Indicator
-mem_132: 00000005 | TypeOfThePacket
-mem_133: 00000001 | RequestedActionOfThePacket
-mem_134: 7fffffff | Start of Optional Data
-mem_135: 00000000
-mem_136: 00000000
-mem_137: 00000000
-mem_138: 00000000
-mem_139: 00000000
-mem_140: 00000000
-mem_141: 00000000
-mem_142: 00000000
-mem_143: 00000000
-mem_144: 00000000
-mem_145: 00000000
-mem_146: 00000000
-mem_147: 00000000
-mem_148: 00000000
-mem_149: 00000000
-mem_150: 00000000
-mem_151: 00000000
-mem_152: 00000000
-mem_153: 00000000
-mem_154: 00000000
-mem_155: 00000000
-mem_156: 00000000
-mem_157: 00000000
-mem_158: 00000000
-mem_159: 00000000
-mem_160: 00000000
-mem_161: 00000000
-mem_162: 00000000
-mem_163: 00000000
-mem_164: 00000000
-mem_165: 00000000
-mem_166: 00000000
-mem_167: 00000000
-mem_168: 00000000
-mem_169: 00000000
-mem_170: 00000000
-mem_171: 00000000
-mem_172: 00000000
-mem_173: 00000000
-mem_174: 00000000
-mem_175: 00000000
-mem_176: 00000000
-mem_177: 00000000
-mem_178: 00000000
-mem_179: 00000000
-mem_180: 00000000
-mem_181: 00000000
-mem_182: 00000000
-mem_183: 00000000
-mem_184: 00000000
-mem_185: 00000000
-mem_186: 00000000
-mem_187: 00000000
-mem_188: 00000000
-mem_189: 00000000
-mem_190: 00000000
-mem_191: 00000000
-mem_192: 00000000
-mem_193: 00000000
-mem_194: 00000000
-mem_195: 00000000
-mem_196: 00000000
-mem_197: 00000000
-mem_198: 00000000
-mem_199: 00000000
-mem_200: 00000000
-mem_201: 00000000
-mem_202: 00000000
-mem_203: 00000000
-mem_204: 00000000
-mem_205: 00000000
-mem_206: 00000000
-mem_207: 00000000
-mem_208: 00000000
-mem_209: 00000000
-mem_210: 00000000
-mem_211: 00000000
-mem_212: 00000000
-mem_213: 00000000
-mem_214: 00000000
-mem_215: 00000000
-mem_216: 00000000
-mem_217: 00000000
-mem_218: 00000000
-mem_219: 00000000
-mem_220: 00000000
-mem_221: 00000000
-mem_222: 00000000
-mem_223: 00000000
-mem_224: 00000000
-mem_225: 00000000
-mem_226: 00000000
-mem_227: 00000000
-mem_228: 00000000
-mem_229: 00000000
-mem_230: 00000000
-mem_231: 00000000
-mem_232: 00000000
-mem_233: 00000000
-mem_234: 00000000
-mem_235: 00000000
-mem_236: 00000000
-mem_237: 00000000
-mem_238: 00000000
-mem_239: 00000000
-mem_240: 00000000
-mem_241: 00000000
-mem_242: 00000000
-mem_243: 00000000
-mem_244: 00000000
-mem_245: 00000000
-mem_246: 00000000
-mem_247: 00000000
-mem_248: 00000000
-mem_249: 00000000
-mem_250: 00000000
-mem_251: 00000000
-mem_252: 00000000
-mem_253: 00000000
-mem_254: 00000000
-mem_255: 00000000
diff --git a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/test.sh b/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/test.sh
deleted file mode 100755
index a83ca694..00000000
--- a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/test.sh
+++ /dev/null
@@ -1 +0,0 @@
-make SIM=icarus WAVES=1
diff --git a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/test_DebuggerModuleTestingBRAM.py b/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/test_DebuggerModuleTestingBRAM.py
deleted file mode 100644
index 3d8323e7..00000000
--- a/hwdbg/sim/hwdbg/DebuggerModuleTestingBRAM/test_DebuggerModuleTestingBRAM.py
+++ /dev/null
@@ -1,570 +0,0 @@
-##
-# @file test_DebuggerModuleTestingBRAM.py
-#
-# @author Sina Karvandi (sina@hyperdbg.org)
-#
-# @brief Testing module for DebuggerModuleTestingBRAM
-#
-# @details
-#
-# @version 0.1
-#
-# @date 2024-04-21
-#
-# @copyright This project is released under the GNU Public License v3.
-#
-
-import random
-import re
-
-import cocotb
-from cocotb.clock import Clock
-from cocotb.triggers import Timer
-from cocotb.types import LogicArray
-
-maximum_number_of_clock_cycles = 1000
-
-'''
- input clock,
- reset,
- io_en,
- io_inputPin_0,
- io_inputPin_1,
- io_inputPin_2,
- io_inputPin_3,
- io_inputPin_4,
- io_inputPin_5,
- io_inputPin_6,
- io_inputPin_7,
- io_inputPin_8,
- io_inputPin_9,
- io_inputPin_10,
- io_inputPin_11,
- io_inputPin_12,
- io_inputPin_13,
- io_inputPin_14,
- io_inputPin_15,
- io_inputPin_16,
- io_inputPin_17,
- io_inputPin_18,
- io_inputPin_19,
- io_inputPin_20,
- io_inputPin_21,
- io_inputPin_22,
- io_inputPin_23,
- io_inputPin_24,
- io_inputPin_25,
- io_inputPin_26,
- io_inputPin_27,
- io_inputPin_28,
- io_inputPin_29,
- io_inputPin_30,
- io_inputPin_31,
- output io_outputPin_0,
- io_outputPin_1,
- io_outputPin_2,
- io_outputPin_3,
- io_outputPin_4,
- io_outputPin_5,
- io_outputPin_6,
- io_outputPin_7,
- io_outputPin_8,
- io_outputPin_9,
- io_outputPin_10,
- io_outputPin_11,
- io_outputPin_12,
- io_outputPin_13,
- io_outputPin_14,
- io_outputPin_15,
- io_outputPin_16,
- io_outputPin_17,
- io_outputPin_18,
- io_outputPin_19,
- io_outputPin_20,
- io_outputPin_21,
- io_outputPin_22,
- io_outputPin_23,
- io_outputPin_24,
- io_outputPin_25,
- io_outputPin_26,
- io_outputPin_27,
- io_outputPin_28,
- io_outputPin_29,
- io_outputPin_30,
- io_outputPin_31,
- input io_plInSignal,
- output io_psOutInterrupt
-'''
-
-#
-# Define a function to extract the numeric part of the string
-#
-def extract_number(s):
- return int(s.split('_')[1])
-
-def print_bram_content(dut):
- """Printing contents of Block RAM and saving them to a file"""
-
- #
- # Print the instances and signals (which includes the ports) of the design's toplevel
- #
- print("===================================================================")
- # print("Onstances and signals (which includes the ports) of the design's toplevel:")
- # print(dir(dut))
- # print("===================================================================")
-
- #
- # Print the instances and signals of "inst_sub_block" under the toplevel
- # which is the instance name of a Verilog module or VHDL entity/component
- #
- # print("Onstances and signals of 'dataOut_initRegMemFromFileModule' under the toplevel:")
- # print(dir(dut.dataOut_initRegMemFromFileModule))
-
- items_inside_bram_emulator = dir(dut.dataOut_initRegMemFromFileModule)
- mem_items = []
-
- for item in items_inside_bram_emulator:
- if item.startswith("mem_"):
- mem_items.append(item)
-
- #
- # Sort the list using the custom key function
- #
- sorted_list = sorted(mem_items, key=extract_number)
-
- with open("script_buffer_response.txt", "w") as file:
- # with open("bram_instance_info.txt", "w") as file:
- file.write("Content of BRAM after emulation:\n")
- print("Content of BRAM after emulation:")
-
- #
- # The second half of the BRAM is used for PL to PS communication
- #
- address_of_ps_to_pl_communication = "mem_0"
- address_of_ps_to_pl_communication_checksum1 = "mem_0"
- address_of_ps_to_pl_communication_checksum2 = "mem_1"
- address_of_ps_to_pl_communication_indicator1 = "mem_2"
- address_of_ps_to_pl_communication_indicator2 = "mem_3"
- address_of_ps_to_pl_communication_type_of_packet = "mem_4"
- address_of_ps_to_pl_communication_requested_action_of_the_packet = "mem_5"
- address_of_ps_to_pl_communication_start_of_data = "mem_6"
-
- len_of_sorted_list_div_by_2 = int(len(sorted_list) / 2)
- address_of_pl_to_ps_communication = "mem_" + str(len_of_sorted_list_div_by_2)
- address_of_pl_to_ps_communication_checksum1 = "mem_" + str(len_of_sorted_list_div_by_2 + 0)
- address_of_pl_to_ps_communication_checksum2 = "mem_" + str(len_of_sorted_list_div_by_2 + 1)
- address_of_pl_to_ps_communication_indicator1 = "mem_" + str(len_of_sorted_list_div_by_2 + 2)
- address_of_pl_to_ps_communication_indicator2 = "mem_" + str(len_of_sorted_list_div_by_2 + 3)
- address_of_pl_to_ps_communication_type_of_packet = "mem_" + str(len_of_sorted_list_div_by_2 + 4)
- address_of_pl_to_ps_communication_requested_action_of_the_packet = "mem_" + str(len_of_sorted_list_div_by_2 + 5)
- address_of_pl_to_ps_communication_start_of_data = "mem_" + str(len_of_sorted_list_div_by_2 + 6)
-
- print("Address of PL to PS communication: " + address_of_pl_to_ps_communication)
-
- for item in sorted_list:
- element = getattr(dut.dataOut_initRegMemFromFileModule, item)
-
- #
- # Print the target register in binary format
- #
- # print(str(element))
-
- #
- # Convert binary to int
- #
- int_content = int(str(element.value), 2)
-
- #
- # Convert integer to hexadecimal string with at least 8 characters
- #
- hex_string = f'{int_content:08x}'
-
- final_string = ""
- if len(item) == 5:
- final_string = item + ": " + hex_string
- elif len(item) == 6:
- final_string = item + ": " + hex_string
- else:
- final_string = item + ": " + hex_string
-
- #
- # Make a separation between PS and PL area
- #
- if item == address_of_ps_to_pl_communication:
- file.write("\nPS to PL area:\n")
- print("\nPS to PL area:")
- elif item == address_of_pl_to_ps_communication:
- file.write("\nPL to PS area:\n")
- print("\nPL to PS area:")
-
- if item == address_of_ps_to_pl_communication_checksum1 or \
- item == address_of_ps_to_pl_communication_checksum2 or \
- item == address_of_pl_to_ps_communication_checksum1 or \
- item == address_of_pl_to_ps_communication_checksum2:
- final_string = final_string + " | Checksum"
- elif item == address_of_ps_to_pl_communication_indicator1 or \
- item == address_of_ps_to_pl_communication_indicator2 or \
- item == address_of_pl_to_ps_communication_indicator1 or \
- item == address_of_pl_to_ps_communication_indicator2:
- final_string = final_string + " | Indicator"
- elif item == address_of_ps_to_pl_communication_type_of_packet or \
- item == address_of_pl_to_ps_communication_type_of_packet:
- final_string = final_string + " | TypeOfThePacket"
- elif item == address_of_ps_to_pl_communication_requested_action_of_the_packet or \
- item == address_of_pl_to_ps_communication_requested_action_of_the_packet:
- final_string = final_string + " | RequestedActionOfThePacket"
- elif item == address_of_ps_to_pl_communication_start_of_data or \
- item == address_of_pl_to_ps_communication_start_of_data:
- final_string = final_string + " | Start of Optional Data"
-
- #
- # Print contents of BRAM
- #
- file.write(final_string + "\n")
- print(final_string)
-
- print("\n===================================================================\n")
-
-
-#
-# Define a function to extract value of symbol
-#
-def get_symbol_value(dut, value):
- element_value = getattr(dut.debuggerMainModule.outputPin_scriptExecutionEngineModule, value)
- hex_string_value = ""
- try:
- int_content_value = int(str(element_value.value), 2)
- hex_string_value = f'{int_content_value:x}'
- except:
- hex_string_value = str(element_value.value)
-
- final_string_value = f'{value}: 0x{hex_string_value}' + " (bin: " + str(element_value.value) + ")"
- return final_string_value
-
-#
-# Define a function to extract type of symbol
-#
-def get_symbol_type(dut, type):
- element_type = getattr(dut.debuggerMainModule.outputPin_scriptExecutionEngineModule, type)
- hex_string_type = ""
- try:
- int_content_type = int(str(element_type.value), 2)
- hex_string_type = f'{int_content_type:x}'
- except:
- hex_string_type = str(element_type.value)
-
- final_string_type = f'{type} : 0x{hex_string_type}' + " (bin: " + str(element_type.value) + ")"
- return final_string_type
-
-#
-# Define a function to extract stage index
-#
-def get_stage_index(dut, stage_index):
- stage_index_str = "stageRegs_" + str(stage_index) + "_stageIndex"
- element_stage_index = getattr(dut.debuggerMainModule.outputPin_scriptExecutionEngineModule, stage_index_str)
- hex_string_stage_index = ""
- try:
- int_content_stage_index = int(str(element_stage_index.value), 2)
- hex_string_stage_index = f'{int_content_stage_index:x}'
- except:
- hex_string_stage_index = str(element_stage_index.value)
-
- final_string_stage_index = f'{stage_index}: 0x{hex_string_stage_index}' + " (bin: " + str(element_stage_index.value) + ")"
- return final_string_stage_index
-
-#
-# Define a function to extract content of stages
-#
-def extract_stage_details(dut):
-
- print("Script Stage Registers Configuration:\n")
- all_elements = dir(dut.debuggerMainModule.outputPin_scriptExecutionEngineModule)
-
- #
- # Define the pattern to match
- #
- pattern_value = re.compile(r'stageRegs_\d+_stageSymbol_Value')
- pattern_type = re.compile(r'stageRegs_\d+_stageSymbol_Type')
- pattern_stage_index = re.compile(r'stageRegs_\d+_stageIndex')
-
- #
- # Filter the list using the patterns
- #
- filtered_strings_values = [s for s in all_elements if pattern_value.match(s)]
- filtered_strings_types = [s for s in all_elements if pattern_type.match(s)]
- filtered_strings_stage_index = [s for s in all_elements if pattern_stage_index.match(s)]
-
- #
- # Sort the lists
- #
- sorted_values = sorted(filtered_strings_values, key=extract_number)
- sorted_types = sorted(filtered_strings_types, key=extract_number)
- sorted_stage_index = sorted(filtered_strings_stage_index, key=extract_number)
-
- #
- # Print the filtered strings
- #
- # print(sorted_values)
- # print(sorted_types)
- # print(sorted_stage_index)
-
- for index, element in enumerate(sorted_values):
-
- try:
- final_string_type = get_symbol_type(dut, sorted_types[index])
-
- #
- # Print the type
- #
- print(final_string_type)
- except:
- print("This stage does not contain a 'type'")
-
- try:
- final_string_value = get_symbol_value(dut, sorted_values[index])
-
- #
- # Print the value
- #
- print(final_string_value)
- except:
- print("Unable to get stage 'value' configuration details")
-
- try:
- final_string_stage_index = get_stage_index(dut, index)
-
- #
- # Print the stage index
- #
- print("index: " + final_string_stage_index)
-
- except:
- print("index: " + str(index) +": This stage does not contain a 'stage index'")
-
- print("\n")
-
-
- #
- # Check stage enable bit
- #
- try:
- stage_enabled = "stageRegs_" + str(index) + "_stageEnable"
- is_stage_enabled = getattr(dut.debuggerMainModule.outputPin_scriptExecutionEngineModule, stage_enabled)
- print("\t Stage enabled bit: " + str(is_stage_enabled))
- except:
- print("\t Stage enabled bit: (unavailable)")
-
- try:
- final_string_value = get_symbol_value(dut, "stageRegs_" + str(index) + "_getOperatorSymbol_0_Value")
- final_string_type = get_symbol_type(dut, "stageRegs_" + str(index) + "_getOperatorSymbol_0_Type")
-
- print("\t Get (0) | " + final_string_type)
- print("\t Get (0) | " + final_string_value)
- except:
- print("\t stage at:" + str(index) + " does not contain a Get (0) buffer")
-
- print("\n")
-
- try:
- final_string_value = get_symbol_value(dut, "stageRegs_" + str(index) + "_getOperatorSymbol_1_Value")
- final_string_type = get_symbol_type(dut, "stageRegs_" + str(index) + "_getOperatorSymbol_1_Type")
-
- print("\t Get (1) | " + final_string_type)
- print("\t Get (1) | " + final_string_value)
- except:
- print("\t stage at:" + str(index) + " does not contain a Get (1) buffer")
-
- print("\n")
-
- try:
- final_string_value = get_symbol_value(dut, "stageRegs_" + str(index) + "_setOperatorSymbol_0_Value")
- final_string_type = get_symbol_type(dut, "stageRegs_" + str(index) + "_setOperatorSymbol_0_Type")
-
- print("\t Set (0) | " + final_string_type)
- print("\t Set (0) | " + final_string_value)
- except:
- print("\t stage at:" + str(index) + " does not contain a Set (0) buffer")
-
- print("\n\n")
-
-def set_input_pins(dut):
- dut.io_inputPin_0.value = 1
- dut.io_inputPin_1.value = 1
- dut.io_inputPin_2.value = 1
- dut.io_inputPin_3.value = 1
- dut.io_inputPin_4.value = 1
- dut.io_inputPin_5.value = 1
- dut.io_inputPin_6.value = 1
- dut.io_inputPin_7.value = 1
- dut.io_inputPin_8.value = 1
- dut.io_inputPin_9.value = 1
- dut.io_inputPin_10.value = 1
- dut.io_inputPin_11.value = 1
- dut.io_inputPin_12.value = 1
- dut.io_inputPin_13.value = 1
- dut.io_inputPin_14.value = 1
- dut.io_inputPin_15.value = 1
- dut.io_inputPin_16.value = 1
- dut.io_inputPin_17.value = 1
- dut.io_inputPin_18.value = 1
- dut.io_inputPin_19.value = 1
- dut.io_inputPin_20.value = 1
- dut.io_inputPin_21.value = 1
- dut.io_inputPin_22.value = 1
- dut.io_inputPin_23.value = 1
- dut.io_inputPin_24.value = 1
- dut.io_inputPin_25.value = 1
- dut.io_inputPin_26.value = 1
- dut.io_inputPin_27.value = 1
- dut.io_inputPin_28.value = 1
- dut.io_inputPin_29.value = 1
- dut.io_inputPin_30.value = 1
- dut.io_inputPin_31.value = 1
-
-@cocotb.test()
-async def DebuggerModuleTestingBRAM_test(dut):
- """Test hwdbg module (with pre-defined BRAM)"""
-
- #
- # Assert initial output is unknown
- #
- assert LogicArray(dut.io_outputPin_0.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_1.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_2.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_3.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_4.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_5.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_6.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_7.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_8.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_9.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_10.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_11.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_12.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_13.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_14.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_15.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_16.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_17.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_18.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_19.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_20.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_21.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_22.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_23.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_24.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_25.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_26.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_27.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_28.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_29.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_30.value) == LogicArray("X")
- assert LogicArray(dut.io_outputPin_31.value) == LogicArray("X")
-
- #
- # Create a 10ns period clock on port clock
- #
- clock = Clock(dut.clock, 10, units="ns")
-
- #
- # Start the clock. Start it low to avoid issues on the first RisingEdge
- #
- cocotb.start_soon(clock.start(start_high=False))
-
- dut._log.info("Initialize and reset module")
-
- #
- # Initial values
- #
- dut.io_en.value = 0
- dut.io_plInSignal.value = 0
-
- #
- # Reset DUT
- #
- dut.reset.value = 1
- for _ in range(10):
- await Timer(10, units="ns")
- dut.reset.value = 0
-
-
- dut._log.info("Enabling an interrupting chip to receive commands from BRAM")
-
- #
- # Enable chip
- #
- dut.io_en.value = 1
-
- #
- # Set initial input value to prevent it from floating
- #
- dut._log.info("Initializing input pins")
- # set_input_pins(dut)
-
- #
- # Tell the hwdbg to receive BRAM results
- #
- dut.io_plInSignal.value = 1
- await Timer(10, units="ns")
- dut.io_plInSignal.value = 0
-
- #
- # Synchronize with the clock. This will regisiter the initial `inputPinX` value
- #
- await Timer(10, units="ns")
-
- #
- # Wait until the debuggee sends an interrupt to debugger
- #
- clock_counter = 0
- interrupt_not_delivered = False
-
- while str(dut.io_psOutInterrupt) != "1":
-
- # print("State of interrupt: '" + str(dut.io_psOutInterrupt) + "'")
-
- if clock_counter % 10 == 0:
- print("Number of clock cycles spent in debuggee (PL): " + str(clock_counter))
-
- clock_counter = clock_counter + 1
- await Timer(10, units="ns")
-
- #
- # Apply a limitation to the number of clock cycles that
- # can be executed to avoid infinite time
- #
- if (clock_counter >= maximum_number_of_clock_cycles):
- interrupt_not_delivered = True
- break
-
- #
- # Being here means either the debuggee sent an interrupt to the PS
- # or the maximum clock cycles reached
- #
- if interrupt_not_delivered:
- print("Maximum clock cycles reached")
- else:
- print("Debuggee (PL) interrupted Debugger (PS)")
-
- #
- # Run one more clock cycle to apply the latest BRAM modifications
- #
- await Timer(10, units="ns")
-
- #
- # Print contents of BRAM
- #
- print_bram_content(dut)
-
- #
- # Print the script stage configuration
- #
- extract_stage_details(dut)
-
- #
- # Check the final input on the next clock and run the circuit for a couple
- # of more clock cycles
- #
- for _ in range(100):
- set_input_pins(dut)
- await Timer(10, units="ns")
diff --git a/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/Makefile b/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/Makefile
deleted file mode 100644
index 8678f015..00000000
--- a/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# Makefile
-
-TOPLEVEL_LANG = verilog
-VERILOG_SOURCES = $(shell pwd)/../../../../generated/DebuggerPacketReceiver.sv
-TOPLEVEL = DebuggerPacketReceiver
-MODULE = test_DebuggerPacketReceiver
-
-include $(shell cocotb-config --makefiles)/Makefile.sim
diff --git a/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/test.sh b/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/test.sh
deleted file mode 100644
index a83ca694..00000000
--- a/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/test.sh
+++ /dev/null
@@ -1 +0,0 @@
-make SIM=icarus WAVES=1
diff --git a/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/test_DebuggerPacketReceiver.py b/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/test_DebuggerPacketReceiver.py
deleted file mode 100644
index e3c19085..00000000
--- a/hwdbg/sim/hwdbg/communication/DebuggerPacketReceiver/test_DebuggerPacketReceiver.py
+++ /dev/null
@@ -1,187 +0,0 @@
-##
-# @file test_DebuggerPacketReceiver.py
-#
-# @author Sina Karvandi (sina@hyperdbg.org)
-#
-# @brief Testing module for DebuggerPacketReceiver
-#
-# @details
-#
-# @version 0.1
-#
-# @date 2024-04-22
-#
-# @copyright This project is released under the GNU Public License v3.
-#
-
-import random
-
-import cocotb
-from cocotb.clock import Clock
-from cocotb.triggers import Timer
-from cocotb.types import LogicArray
-
-'''
- input clock,
- reset,
- io_en,
- io_plInSignal,
- output [12:0] io_rdWrAddr,
- input [31:0] io_rdData,
- output [31:0] io_requestedActionOfThePacketOutput,
- output io_requestedActionOfThePacketOutputValid,
- input io_noNewDataReceiver,
- io_readNextData,
- output io_dataValidOutput,
- output [31:0] io_receivingData,
- output io_finishedReceivingBuffer
-'''
-
-@cocotb.test()
-async def DebuggerPacketReceiver_test(dut):
- """Test DebuggerPacketReceiver module"""
-
- #
- # Assert initial output is unknown
- #
- assert LogicArray(dut.io_rdWrAddr.value) == LogicArray("XXXXXXXXXXXXX")
- assert LogicArray(dut.io_requestedActionOfThePacketOutput.value) == LogicArray("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
- assert LogicArray(dut.io_requestedActionOfThePacketOutputValid.value) == LogicArray("X")
- assert LogicArray(dut.io_dataValidOutput.value) == LogicArray("X")
- assert LogicArray(dut.io_receivingData.value) == LogicArray("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
- assert LogicArray(dut.io_finishedReceivingBuffer.value) == LogicArray("X")
-
- clock = Clock(dut.clock, 10, units="ns") # Create a 10ns period clock on port clock
-
- #
- # Start the clock. Start it low to avoid issues on the first RisingEdge
- #
- cocotb.start_soon(clock.start(start_high=False))
-
- dut._log.info("Initialize and reset module")
-
- #
- # Initial values
- #
- dut.io_en.value = 0
- dut.io_readNextData.value = 0
- dut.io_noNewDataReceiver.value = 0
- dut.io_plInSignal.value = 0
-
- #
- # Reset DUT
- #
- dut.reset.value = 1
- for _ in range(10):
- await Timer(10, units="ns")
- dut.reset.value = 0
-
- dut._log.info("Enabling chip")
-
- #
- # Enable chip
- #
- dut.io_en.value = 1
-
- for test_number in range(10):
-
- dut._log.info("Enable receiving data on the chip (" + str(test_number) + ")")
-
- #
- # Tell the receiver to start receiving data (This mainly operates based on
- # a rising-edge detector, so we'll need to make it low)
- #
- dut.io_plInSignal.value = 1
- await Timer(10, units="ns")
- dut.io_plInSignal.value = 0
-
- #
- # Wait until the receive operation is done (finished)
- #
- for i in range(30):
-
- if (dut.io_finishedReceivingBuffer.value == 1):
- break
- else:
- match dut.io_rdWrAddr.value:
- case 0x0: # checksum
- dut.io_rdData.value = 0x00001234
- case 0x8: # indicator
- dut.io_rdData.value = 0x48595045 # first 32 bits of the indicator
- case 0x10: # type
- dut.io_rdData.value = 0x4 # debugger to hardware packet (DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL)
- case 0x14: # requested action
- dut.io_rdData.value = 0x14141414
- case 0x18: # General output
- dut.io_rdData.value = 0x18181818
- case 0x1c: # General output
- dut.io_rdData.value = 0x1c1c1c1c
- case 0x20: # General output
- dut.io_rdData.value = 0x20202020
- case 0x24: # General output
- dut.io_rdData.value = 0x24242424
- case 0x28: # General output
- dut.io_rdData.value = 0x28282828
- case 0x2c: # General output
- dut.io_rdData.value = 0x2c2c2c2c
- case 0x30: # General output
- dut.io_rdData.value = 0x30303030
- case 0x34: # General output
- dut.io_rdData.value = 0x34343434
- case 0x38: # General output
- dut.io_rdData.value = 0x38383838
- case 0x3c: # General output
- dut.io_rdData.value = 0x3c3c3c3c
- case 0x40: # General output
- dut.io_rdData.value = 0x40404040
- case 0x44: # General output
- dut.io_rdData.value = 0x44444444
- case 0x48: # General output
- dut.io_rdData.value = 0x48484848
- case 0x4c: # General output
- dut.io_rdData.value = 0x4c4c4c4c
- case 0x50: # General output
- dut.io_rdData.value = 0x50505050
- case _:
- assert "invalid address in the address line"
-
- if dut.io_requestedActionOfThePacketOutputValid.value == 1:
-
- #
- # No new data needed to be received
- #
- if test_number % 3 == 0:
- dut.io_noNewDataReceiver.value = 1
- await Timer(10, units="ns")
- dut.io_noNewDataReceiver.value = 0
- else:
- #
- # Make change to the io_readNextData signal as it operates mainly
- # based on a rising-edge detector
- #
- if dut.io_readNextData.value == 0:
- dut.io_readNextData.value = 1
- else:
- dut.io_readNextData.value = 0
-
-
- #
- # Go to the next clock cycle
- #
- await Timer(10, units="ns")
-
- if test_number % 3 != 0:
- dut.io_noNewDataReceiver.value = 1
- await Timer(10, units="ns")
- dut.io_noNewDataReceiver.value = 0
-
- #
- # Run extra waiting clocks
- #
- for _ in range(10):
- await Timer(10, units="ns")
-
- #
- # Check the final input on the next clock
- #
- await Timer(10, units="ns")
diff --git a/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/Makefile b/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/Makefile
deleted file mode 100644
index 16ee52f3..00000000
--- a/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# Makefile
-
-TOPLEVEL_LANG = verilog
-VERILOG_SOURCES = $(shell pwd)/../../../../generated/DebuggerPacketSender.sv
-TOPLEVEL = DebuggerPacketSender
-MODULE = test_DebuggerPacketSender
-
-include $(shell cocotb-config --makefiles)/Makefile.sim
diff --git a/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/test.sh b/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/test.sh
deleted file mode 100644
index a83ca694..00000000
--- a/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/test.sh
+++ /dev/null
@@ -1 +0,0 @@
-make SIM=icarus WAVES=1
diff --git a/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/test_DebuggerPacketSender.py b/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/test_DebuggerPacketSender.py
deleted file mode 100644
index f2b77f1f..00000000
--- a/hwdbg/sim/hwdbg/communication/DebuggerPacketSender/test_DebuggerPacketSender.py
+++ /dev/null
@@ -1,165 +0,0 @@
-##
-# @file test_DebuggerPacketSender.py
-#
-# @author Sina Karvandi (sina@hyperdbg.org)
-#
-# @brief Testing module for DebuggerPacketSender
-#
-# @details
-#
-# @version 0.1
-#
-# @date 2024-04-21
-#
-# @copyright This project is released under the GNU Public License v3.
-#
-
-import random
-
-import cocotb
-from cocotb.clock import Clock
-from cocotb.triggers import Timer
-from cocotb.types import LogicArray
-
-'''
- input clock,
- reset,
- io_en,
- output io_psOutInterrupt,
- output [12:0] io_rdWrAddr,
- output io_wrEna,
- output [31:0] io_wrData,
- input io_beginSendingBuffer,
- io_noNewDataSender,
- io_dataValidInput,
- output io_sendWaitForBuffer,
- io_finishedSendingBuffer,
- input [31:0] io_requestedActionOfThePacketInput,
- io_sendingData
-'''
-
-@cocotb.test()
-async def DebuggerPacketSender_test(dut):
- """Test DebuggerPacketSender module"""
-
- #
- # Assert initial output is unknown
- #
- assert LogicArray(dut.io_psOutInterrupt.value) == LogicArray("X")
- assert LogicArray(dut.io_rdWrAddr.value) == LogicArray("XXXXXXXXXXXXX")
- assert LogicArray(dut.io_wrEna.value) == LogicArray("X")
- assert LogicArray(dut.io_wrData.value) == LogicArray("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
- assert LogicArray(dut.io_sendWaitForBuffer.value) == LogicArray("X")
- assert LogicArray(dut.io_finishedSendingBuffer.value) == LogicArray("X")
-
- clock = Clock(dut.clock, 10, units="ns") # Create a 10ns period clock on port clock
-
- #
- # Start the clock. Start it low to avoid issues on the first RisingEdge
- #
- cocotb.start_soon(clock.start(start_high=False))
-
- dut._log.info("Initialize and reset module")
-
- #
- # Initial values
- #
- dut.io_en.value = 0
- dut.io_beginSendingBuffer.value = 0
-
- #
- # Reset DUT
- #
- dut.reset.value = 1
- for _ in range(10):
- await Timer(10, units="ns")
- dut.reset.value = 0
-
- dut._log.info("Enabling chip")
-
- #
- # Enable chip
- #
- dut.io_en.value = 1
-
- for test_number in range(10):
-
- dut._log.info("Enable sending data on the chip (" + str(test_number) + ")")
-
- #
- # Still there is data to send
- #
- dut.io_noNewDataSender.value = 0
-
- #
- # Tell the sender to start sending data (This mainly operates based on
- # a rising-edge detector, so we'll need to make it low)
- #
- dut.io_beginSendingBuffer.value = 1
- await Timer(10, units="ns")
- dut.io_beginSendingBuffer.value = 0
-
- #
- # No new data at this stage
- #
- dut.io_dataValidInput.value = 0
- dut.io_sendingData.value = 0
-
- #
- # Adjust the requested action of the packet
- #
- dut.io_requestedActionOfThePacketInput.value = 0x55859555
-
- #
- # Synchronize with the clock. This will apply the initial values
- #
- await Timer(10, units="ns")
-
- #
- # This will change the behavior of the data producer to only
- # generate extra data for 2 of the test case rounds, the third
- # test case doesn't have any extra data
- #
- if test_number % 3 != 0 :
- #
- # Run until the module asks for further buffers
- #
- for i in range(100):
- if dut.io_sendWaitForBuffer.value == 1:
- val = random.randint(0, 0xffffffff)
-
- #
- # Indicate that the data is valid
- #
- dut.io_dataValidInput.value = 1
-
- #
- # Assign the random value to send as the data
- #
- dut.io_sendingData.value = val
-
- await Timer(10, units="ns")
-
- #
- # Now, tell the sender module that there is no longer needed to send data
- #
- for i in range(100):
- if dut.io_sendWaitForBuffer.value == 1:
- dut.io_noNewDataSender.value = 1
- await Timer(10, units="ns")
- dut.io_noNewDataSender.value = 0
- break
-
- await Timer(10, units="ns")
-
-
- #
- # Run extra waiting clocks
- #
- for _ in range(10):
- await Timer(10, units="ns")
-
- #
- # Check the final input on the next clock
- #
- await Timer(10, units="ns")
diff --git a/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/Makefile b/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/Makefile
deleted file mode 100644
index 425db36d..00000000
--- a/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# Makefile
-
-TOPLEVEL_LANG = verilog
-VERILOG_SOURCES += $(shell pwd)/../../../../generated/SendReceiveSynchronizer.sv
-VERILOG_SOURCES += $(shell pwd)/../../../../generated/DebuggerPacketReceiver.sv
-VERILOG_SOURCES += $(shell pwd)/../../../../generated/DebuggerPacketSender.sv
-TOPLEVEL = SendReceiveSynchronizer
-MODULE = test_SendReceiveSynchronizer
-
-include $(shell cocotb-config --makefiles)/Makefile.sim
diff --git a/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/test.sh b/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/test.sh
deleted file mode 100644
index a83ca694..00000000
--- a/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/test.sh
+++ /dev/null
@@ -1 +0,0 @@
-make SIM=icarus WAVES=1
diff --git a/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/test_SendReceiveSynchronizer.py b/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/test_SendReceiveSynchronizer.py
deleted file mode 100644
index a9b0f2b7..00000000
--- a/hwdbg/sim/hwdbg/communication/SendReceiveSynchronizer/test_SendReceiveSynchronizer.py
+++ /dev/null
@@ -1,352 +0,0 @@
-##
-# @file test_SendReceiveSynchronizer.py
-#
-# @author Sina Karvandi (sina@hyperdbg.org)
-#
-# @brief Testing module for SendReceiveSynchronizer
-#
-# @details
-#
-# @version 0.1
-#
-# @date 2024-04-23
-#
-# @copyright This project is released under the GNU Public License v3.
-#
-
-import random
-
-import cocotb
-from cocotb.clock import Clock
-from cocotb.triggers import Timer
-from cocotb.types import LogicArray
-
-'''
- input clock,
- reset,
- io_en,
- io_plInSignal,
- output io_psOutInterrupt,
- output [12:0] io_rdWrAddr,
- input [31:0] io_rdData,
- output io_wrEna,
- output [31:0] io_wrData,
- io_requestedActionOfThePacketOutput,
- output io_requestedActionOfThePacketOutputValid,
- input io_noNewDataReceiver,
- io_readNextData,
- output io_dataValidOutput,
- output [31:0] io_receivingData,
- input io_beginSendingBuffer,
- io_noNewDataSender,
- io_dataValidInput,
- output io_sendWaitForBuffer,
- input [31:0] io_requestedActionOfThePacketInput,
- io_sendingData
-'''
-
-@cocotb.test()
-async def SendReceiveSynchronizer_test(dut):
- """Test SendReceiveSynchronizer module"""
-
- global DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE
-
- #
- # Assert initial output is unknown
- #
- assert LogicArray(dut.io_psOutInterrupt.value) == LogicArray("X")
- assert LogicArray(dut.io_rdWrAddr.value) == LogicArray("XXXXXXXXXXXXX")
- assert LogicArray(dut.io_wrEna.value) == LogicArray("X")
- assert LogicArray(dut.io_wrData.value) == LogicArray("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
- assert LogicArray(dut.io_requestedActionOfThePacketOutput.value) == LogicArray("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
- assert LogicArray(dut.io_requestedActionOfThePacketOutputValid.value) == LogicArray("X")
- assert LogicArray(dut.io_dataValidOutput.value) == LogicArray("X")
- assert LogicArray(dut.io_receivingData.value) == LogicArray("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
- assert LogicArray(dut.io_sendWaitForBuffer.value) == LogicArray("X")
-
- clock = Clock(dut.clock, 10, units="ns") # Create a 10ns period clock on port clock
-
- #
- # Start the clock. Start it low to avoid issues on the first RisingEdge
- #
- cocotb.start_soon(clock.start(start_high=False))
-
- dut._log.info("Initialize and reset module")
-
- #
- # Initial values
- #
- dut.io_en.value = 0
- dut.io_beginSendingBuffer.value = 0
- dut.io_noNewDataSender.value = 0
- dut.io_dataValidInput.value = 0
- dut.io_readNextData.value = 0
- dut.io_noNewDataReceiver.value = 0
- dut.io_plInSignal.value = 0
- dut.io_requestedActionOfThePacketInput.value = 0
- dut.io_requestedActionOfThePacketInput.value = 0
-
- #
- # Reset DUT
- #
- dut.reset.value = 1
- for _ in range(10):
- await Timer(10, units="ns")
- dut.reset.value = 0
-
- dut._log.info("Enabling chip")
-
- #
- # Enable chip
- #
- dut.io_en.value = 1
-
- for test_number in range(10):
-
- ###############################################################
- # #
- # Receiving Logic #
- # #
- ###############################################################
-
- dut._log.info("Enable receiving data on the chip (" + str(test_number) + ")")
-
- #
- # Tell the receiver to start receiving data (This mainly operates based on
- # a rising-edge detector, so we'll need to make it low)
- #
- dut.io_plInSignal.value = 1
- await Timer(10, units="ns")
- dut.io_plInSignal.value = 0
-
- #
- # Activate sending logic to test whether the chip fails synchronizing signals or not
- #
- dut.io_beginSendingBuffer.value = 1
- await Timer(10, units="ns")
- dut.io_beginSendingBuffer.value = 0
-
- #
- # Wait until the receive operation is done (finished)
- #
- for i in range(30):
-
- match dut.io_rdWrAddr.value:
-
- #
- # For the PS data range
- #
- case 0x0: # checksum
- dut.io_rdData.value = 0x00001234
- case 0x8: # indicator
- dut.io_rdData.value = 0x48595045 # first 32 bits of the indicator
- case 0x10: # type
- dut.io_rdData.value = 0x4 # debugger to hardware packet (DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL)
- case 0x14: # requested action
- dut.io_rdData.value = 0x14141414
- case 0x18: # General output
- dut.io_rdData.value = 0x18181818
- case 0x1c: # General output
- dut.io_rdData.value = 0x1c1c1c1c
- case 0x20: # General output
- dut.io_rdData.value = 0x20202020
- case 0x24: # General output
- dut.io_rdData.value = 0x24242424
- case 0x28: # General output
- dut.io_rdData.value = 0x28282828
- case 0x2c: # General output
- dut.io_rdData.value = 0x2c2c2c2c
- case 0x30: # General output
- dut.io_rdData.value = 0x30303030
- case 0x34: # General output
- dut.io_rdData.value = 0x34343434
- case 0x38: # General output
- dut.io_rdData.value = 0x38383838
- case 0x3c: # General output
- dut.io_rdData.value = 0x3c3c3c3c
- case 0x40: # General output
- dut.io_rdData.value = 0x40404040
- case 0x44: # General output
- dut.io_rdData.value = 0x44444444
- case 0x48: # General output
- dut.io_rdData.value = 0x48484848
- case 0x4c: # General output
- dut.io_rdData.value = 0x4c4c4c4c
- case 0x50: # General output
- dut.io_rdData.value = 0x50505050
-
- #
- # For the PL data range
- #
- case 0x1000: # checksum
- dut.io_rdData.value = 0x10001000
- case 0x1008: # indicator 1
- dut.io_rdData.value = 0x48595045 # The first 32 bits of the indicator
- case 0x100c: # indicator 2
- dut.io_rdData.value = 0x100c100c # The second 32 bits of the indicator
- case 0x1010: # type
- dut.io_rdData.value = 0x4 # debugger to hardware packet (DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL)
- case 0x1014: # requested action
- dut.io_rdData.value = 0x10141014
- case 0x1018: # General output
- dut.io_rdData.value = 0x10181018
- case 0x101c: # General output
- dut.io_rdData.value = 0x101c101c
- case 0x1020: # General output
- dut.io_rdData.value = 0x10201020
- case 0x1024: # General output
- dut.io_rdData.value = 0x10241024
- case 0x1028: # General output
- dut.io_rdData.value = 0x10281028
- case 0x102c: # General output
- dut.io_rdData.value = 0x102c102c
- case 0x1030: # General output
- dut.io_rdData.value = 0x10301030
- case 0x1034: # General output
- dut.io_rdData.value = 0x10341034
- case 0x1038: # General output
- dut.io_rdData.value = 0x10381038
- case 0x103c: # General output
- dut.io_rdData.value = 0x103c103c
- case 0x1040: # General output
- dut.io_rdData.value = 0x10401040
- case 0x1044: # General output
- dut.io_rdData.value = 0x10441044
- case 0x1048: # General output
- dut.io_rdData.value = 0x10481048
- case 0x104c: # General output
- dut.io_rdData.value = 0x104c104c
- case 0x1050: # General output
- dut.io_rdData.value = 0x10501050
- case _:
- assert 1 == 2, "invalid address in the address line"
-
- if dut.io_requestedActionOfThePacketOutputValid.value == 1:
-
- #
- # No new data needed to be received
- #
- if test_number % 3 == 0:
- dut.io_noNewDataReceiver.value = 1
- await Timer(10, units="ns")
- dut.io_noNewDataReceiver.value = 0
- else:
- #
- # Make change to the io_readNextData signal as it operates mainly
- # based on a rising-edge detector
- #
- if dut.io_readNextData.value == 0:
- dut.io_readNextData.value = 1
- else:
- dut.io_readNextData.value = 0
-
- #
- # Go to the next clock cycle
- #
- await Timer(10, units="ns")
-
-
- if test_number % 3 != 0:
- dut.io_noNewDataReceiver.value = 1
- await Timer(10, units="ns")
- dut.io_noNewDataReceiver.value = 0
-
- #
- # Run extra waiting clocks
- #
- for _ in range(10):
- await Timer(10, units="ns")
-
- ###############################################################
- # #
- # Sending Logic #
- # #
- ###############################################################
-
- dut._log.info("Enable sending data on the chip (" + str(test_number) + ")")
-
- #
- # There is data to send
- #
- dut.io_noNewDataSender.value = 0
- dut.io_beginSendingBuffer.value = 0
-
- #
- # Tell the sender to start sending data (This mainly operates based on
- # a rising-edge detector, so we'll need to make it low)
- #
- dut.io_beginSendingBuffer.value = 1
- await Timer(10, units="ns")
- dut.io_beginSendingBuffer.value = 0
-
- #
- # Activate receiving logic to test whether the chip fails synchronizing signals or not
- #
- dut.io_plInSignal.value = 1
- await Timer(10, units="ns")
- dut.io_plInSignal.value = 0
-
- #
- # No new data at this stage
- #
- dut.io_dataValidInput.value = 0
- dut.io_sendingData.value = 0
-
- #
- # Adjust the requested action of the packet
- #
- dut.io_requestedActionOfThePacketInput.value = 0x55859555
-
- #
- # Synchronize with the clock. This will apply the initial values
- #
- await Timer(10, units="ns")
-
- #
- # This will change the behavior of the data producer to only
- # generate extra data for 2 of the test case rounds, the third
- # test case doesn't have any extra data
- #
- if test_number % 3 != 0 :
- #
- # Run until the module asks for further buffers
- #
- for i in range(100):
- if dut.io_sendWaitForBuffer.value == 1:
- val = random.randint(0, 0xffffffff)
-
- #
- # Indicate that the data is valid
- #
- dut.io_dataValidInput.value = 1
-
- #
- # Assign the random value to send as the data
- #
- dut.io_sendingData.value = val
-
- await Timer(10, units="ns")
-
- #
- # Now, tell the sender module that there is no longer needed to send data
- #
- for i in range(100):
- if dut.io_sendWaitForBuffer.value == 1:
- dut.io_noNewDataSender.value = 1
- await Timer(10, units="ns")
- dut.io_noNewDataSender.value = 0
- break
-
- await Timer(10, units="ns")
-
-
- #
- # Run extra waiting clocks
- #
- for _ in range(10):
- await Timer(10, units="ns")
-
- #
- # Check the final input on the next clock
- #
- await Timer(10, units="ns")
diff --git a/hwdbg/sim/modelsim/README.md b/hwdbg/sim/modelsim/README.md
deleted file mode 100644
index f511e03c..00000000
--- a/hwdbg/sim/modelsim/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Automated ModelSim Viewer
-
-First of all, make sure to edit the address of the "ModelSim" directory in **modelsim.py**.
-
-After that, only modify the "modelsim.config" file.
-
-In the "modelsim.config" file, the first line that starts with "module:" is the name of the target module's **Tester** class. The rest of the lines are signals to be shown.
-
-For example:
-```
-module:DebuggerModuleTest
-clock
-inputPin
-```
-
-If you don't specify the signals to be filtered, then **ALL** signals will be shown.
-
-For example:
-```
-module:DebuggerModuleTest
-```
-
-At last, run it with the following command:
-```
-python3 modelsim.py
-```
-
-or,
-```
-python3 sim/modelsim.py
-```
-
diff --git a/hwdbg/sim/modelsim/modelsim.config b/hwdbg/sim/modelsim/modelsim.config
deleted file mode 100644
index cc537f5f..00000000
--- a/hwdbg/sim/modelsim/modelsim.config
+++ /dev/null
@@ -1,3 +0,0 @@
-module:DebuggerModuleTest
-io_inputPin
-io_outputPin
\ No newline at end of file
diff --git a/hwdbg/sim/modelsim/modelsim.py b/hwdbg/sim/modelsim/modelsim.py
deleted file mode 100644
index e3c90db1..00000000
--- a/hwdbg/sim/modelsim/modelsim.py
+++ /dev/null
@@ -1,157 +0,0 @@
-import os
-import subprocess
-import glob
-
-MODELSIM = "/home/sina/intelFPGA/20.1/modelsim_ase/bin"
-
-#
-# Check modelsim directory
-#
-if not os.path.exists(MODELSIM):
- print("[x] Error: The path does not exist")
- exit()
-else:
- print("[*] Oh, the modelsim path found :)")
-
-MODELSIM_VCD2WLF = MODELSIM + "/vcd2wlf"
-MODELSIM_VSIM = MODELSIM + "/vsim"
-
-#
-# Config file variables
-#
-CONFIG_TEST_MODULE_CLASS = ""
-CONFIG_SHOW_ALL_WAVES = True
-CONFIG_WAVES_LIST = []
-
-#
-# Check if user is root or not
-#
-if os.geteuid() != 0:
- print("[x] you should run this script with root (sudo) user permission")
- exit()
-else:
- print("[*] user is root")
-
-#
-# Get the current script's directory
-#
-current_script_path = os.path.dirname(os.path.abspath(__file__))
-
-WAVE_OUTPUT_FILES_PATH = current_script_path + \
- "/../test_run_dir/DUT_should_pass/"
-CONFIG_FILE_PATH = current_script_path + "/modelsim.config"
-print("[*] current script path:", WAVE_OUTPUT_FILES_PATH)
-
-#
-# Check config file
-#
-if os.path.exists(CONFIG_FILE_PATH) == False:
- print("[x] config file not found")
- exit()
-
-#
-# Interpreting config file
-#
-with open(CONFIG_FILE_PATH, 'r') as file:
- for line in file:
-
- if line.lower().startswith("module:") or line.lower().startswith("module :"):
- # it's the test module name
- CONFIG_TEST_MODULE_CLASS = line.split(":")[1]
- print("[*] found module name:", CONFIG_TEST_MODULE_CLASS)
- else:
- # it's a wave, so no longer need to show all waves
- if line.isspace() == False:
- CONFIG_SHOW_ALL_WAVES = False
- CONFIG_WAVES_LIST.append(line)
- print("[*] signal filter for:", line)
-
-#
-# Show message if all signals need to be shown
-#
-if CONFIG_SHOW_ALL_WAVES == True:
- print("[*] no signal filter found, assuming all signals to be shown!")
-
-#
-# Check if test module is empty or not
-#
-if CONFIG_TEST_MODULE_CLASS.isspace() == True:
- print("[x] main test module not found, please add 'module:' to the config file")
- exit()
-
-#
-# Set the current working directory
-#
-os.chdir(current_script_path + "/..")
-print("[*] current working directory: " + format(os.getcwd()))
-
-#
-# Create TCL config file
-#
-print("[*] writing to TCL config file: " +
- current_script_path + '/modelsim.tcl')
-if CONFIG_SHOW_ALL_WAVES:
- with open(current_script_path + '/modelsim.tcl', 'w') as f:
- # add the clock at top of the signals by default
- f.write("add wave -position insertpoint clock\n")
- f.write("add wave -position insertpoint *\n")
-else:
- with open(current_script_path + '/modelsim.tcl', 'w') as f:
- for item in CONFIG_WAVES_LIST:
- f.write("add wave -position insertpoint {*" + item.replace('\n','').replace('\r', '') + '*}\n')
-
-#
-# Remove all the previous *.wlf, *.vcd, *.fir files
-#
-print("[*] removing previously generated files")
-for file_name in os.listdir(WAVE_OUTPUT_FILES_PATH):
- if file_name.endswith('.wlf') or file_name.endswith('.vcd') or file_name.endswith('.fir'):
- os.remove(os.path.join(WAVE_OUTPUT_FILES_PATH, file_name))
-
-#
-# Run the VCD wave generator
-#
-print("[*] running chisel VCD file generator for module: " +
- CONFIG_TEST_MODULE_CLASS)
-print("running command: '" + "sbt testOnly " + CONFIG_TEST_MODULE_CLASS + " -- -DwriteVcd=1" + "'")
-result = subprocess.run(
- ["sbt", "testOnly " + CONFIG_TEST_MODULE_CLASS + " -- -DwriteVcd=1"], stdout=subprocess.PIPE)
-print(result.stdout.decode())
-
-#
-# Get all files in directory
-#
-files = glob.glob(WAVE_OUTPUT_FILES_PATH + "/*")
-
-#
-# Sort files by last modified time
-#
-files.sort(key=lambda x: os.path.getmtime(x))
-
-#
-# Check if the list is empty or not
-#
-if not files or not files[-1].endswith('.vcd') :
- print("[x] there was an error in generating VCD files")
- exit()
-
-#
-# Get the latest modified file
-#
-latest_vcd_file = files[-1]
-print("[*] latest generated VCD file: " + latest_vcd_file)
-
-#
-# Converting VCD to WLF
-#
-print("[*] converting VCD file to WLF file")
-result = subprocess.run(
- [MODELSIM_VCD2WLF, latest_vcd_file, latest_vcd_file + ".wlf"], stdout=subprocess.PIPE)
-print(result.stdout.decode())
-
-#
-# Run the generated WLF file
-#
-print("[*] opening file in vsim: " + latest_vcd_file + ".wlf")
-subprocess.run([MODELSIM_VSIM, latest_vcd_file + ".wlf",
- "-do", current_script_path + '/modelsim.tcl'])
diff --git a/hwdbg/sim/modelsim/modelsim.tcl b/hwdbg/sim/modelsim/modelsim.tcl
deleted file mode 100644
index 59c53356..00000000
--- a/hwdbg/sim/modelsim/modelsim.tcl
+++ /dev/null
@@ -1,2 +0,0 @@
-add wave -position insertpoint {*io_inputPin*}
-add wave -position insertpoint {*io_outputPin*}
diff --git a/hwdbg/sim/plain-sv/PlainSystemVerilogDUT.sv b/hwdbg/sim/plain-sv/PlainSystemVerilogDUT.sv
deleted file mode 100644
index 12c7fa1f..00000000
--- a/hwdbg/sim/plain-sv/PlainSystemVerilogDUT.sv
+++ /dev/null
@@ -1,162 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer: Sina Karvandi (sina@hyperdbg.org)
-//
-// Create Date: 09/18/2024
-// Design Name:
-// Module Name: PlainSystemVerilogDUT
-// Project Name: PlainSystemVerilogDUT
-// Target Devices:
-// Tool Versions:
-// Description: This code is used for plain simulation of the top-level
-// design of hwdbg debugger
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-module PlainSystemVerilogDUT;
-
- //
- // Parameters
- //
- parameter CLK_PERIOD = 10; // Clock period
-
- //
- // Signal Declarations
- //
- logic clock;
- logic reset;
- logic io_en;
- logic [31:0] io_inputPin; // Array for input pins
- logic [31:0] io_outputPin; // Array for output pins
- logic io_plInSignal;
- logic io_psOutInterrupt;
-
- //
- // Instantiate the DUT (Device Under Test)
- //
- DebuggerModuleTestingBRAM uut (
- .clock(clock),
- .reset(reset),
- .io_en(io_en),
- .io_inputPin_0(io_inputPin[0]),
- .io_inputPin_1(io_inputPin[1]),
- .io_inputPin_2(io_inputPin[2]),
- .io_inputPin_3(io_inputPin[3]),
- .io_inputPin_4(io_inputPin[4]),
- .io_inputPin_5(io_inputPin[5]),
- .io_inputPin_6(io_inputPin[6]),
- .io_inputPin_7(io_inputPin[7]),
- .io_inputPin_8(io_inputPin[8]),
- .io_inputPin_9(io_inputPin[9]),
- .io_inputPin_10(io_inputPin[10]),
- .io_inputPin_11(io_inputPin[11]),
- .io_inputPin_12(io_inputPin[12]),
- .io_inputPin_13(io_inputPin[13]),
- .io_inputPin_14(io_inputPin[14]),
- .io_inputPin_15(io_inputPin[15]),
- .io_inputPin_16(io_inputPin[16]),
- .io_inputPin_17(io_inputPin[17]),
- .io_inputPin_18(io_inputPin[18]),
- .io_inputPin_19(io_inputPin[19]),
- .io_inputPin_20(io_inputPin[20]),
- .io_inputPin_21(io_inputPin[21]),
- .io_inputPin_22(io_inputPin[22]),
- .io_inputPin_23(io_inputPin[23]),
- .io_inputPin_24(io_inputPin[24]),
- .io_inputPin_25(io_inputPin[25]),
- .io_inputPin_26(io_inputPin[26]),
- .io_inputPin_27(io_inputPin[27]),
- .io_inputPin_28(io_inputPin[28]),
- .io_inputPin_29(io_inputPin[29]),
- .io_inputPin_30(io_inputPin[30]),
- .io_inputPin_31(io_inputPin[31]),
- .io_outputPin_0(io_outputPin[0]),
- .io_outputPin_1(io_outputPin[1]),
- .io_outputPin_2(io_outputPin[2]),
- .io_outputPin_3(io_outputPin[3]),
- .io_outputPin_4(io_outputPin[4]),
- .io_outputPin_5(io_outputPin[5]),
- .io_outputPin_6(io_outputPin[6]),
- .io_outputPin_7(io_outputPin[7]),
- .io_outputPin_8(io_outputPin[8]),
- .io_outputPin_9(io_outputPin[9]),
- .io_outputPin_10(io_outputPin[10]),
- .io_outputPin_11(io_outputPin[11]),
- .io_outputPin_12(io_outputPin[12]),
- .io_outputPin_13(io_outputPin[13]),
- .io_outputPin_14(io_outputPin[14]),
- .io_outputPin_15(io_outputPin[15]),
- .io_outputPin_16(io_outputPin[16]),
- .io_outputPin_17(io_outputPin[17]),
- .io_outputPin_18(io_outputPin[18]),
- .io_outputPin_19(io_outputPin[19]),
- .io_outputPin_20(io_outputPin[20]),
- .io_outputPin_21(io_outputPin[21]),
- .io_outputPin_22(io_outputPin[22]),
- .io_outputPin_23(io_outputPin[23]),
- .io_outputPin_24(io_outputPin[24]),
- .io_outputPin_25(io_outputPin[25]),
- .io_outputPin_26(io_outputPin[26]),
- .io_outputPin_27(io_outputPin[27]),
- .io_outputPin_28(io_outputPin[28]),
- .io_outputPin_29(io_outputPin[29]),
- .io_outputPin_30(io_outputPin[30]),
- .io_outputPin_31(io_outputPin[31]),
- .io_plInSignal(io_plInSignal),
- .io_psOutInterrupt(io_psOutInterrupt)
- );
-
- //
- // Clock generation
- //
- initial begin
- clock = 0;
- forever #(CLK_PERIOD / 2) clock = ~clock;
- end
-
- //
- // Test procedure
- //
- initial begin
- // Initialize signals
- reset = 1;
- io_en = 1;
- io_plInSignal = 0;
- io_inputPin = 32'h0; // Initialize all input pins to 0
-
- #100; // Hold reset for 100 ns
-
- // Apply reset
- @(posedge clock);
- reset = 0; // Release reset
- @(posedge clock);
-
- //
- // Example input stimulus
- //
- io_inputPin = 32'hFFFF_FFFF; // Apply some input pattern
-
- //
- // Enable PL input signal
- //
- io_plInSignal = 1;
-
- //
- // Wait for a few clock cycles
- //
- repeat (10000) @(posedge clock);
-
- //
- // Finish the simulation after some time
- //
- repeat (20) @(posedge clock);
- $finish;
- end
-
-endmodule
diff --git a/hwdbg/src/main/scala/hwdbg/communication/interpreter.scala b/hwdbg/src/main/scala/hwdbg/communication/interpreter.scala
deleted file mode 100644
index e682e612..00000000
--- a/hwdbg/src/main/scala/hwdbg/communication/interpreter.scala
+++ /dev/null
@@ -1,515 +0,0 @@
-/**
- * @file
- * interpreter.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Remote debugger packet interpreter module
- * @details
- * @version 0.1
- * @date
- * 2024-04-19
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.communication.interpreter
-
-import chisel3._
-import chisel3.util.{switch, is}
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-import hwdbg.types._
-import hwdbg.script._
-
-object DebuggerPacketInterpreterEnums {
- object State extends ChiselEnum {
- val sIdle, sNewActionReceived, sSendResponse, sDone = Value
- }
-}
-
-class DebuggerPacketInterpreter(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import state enum
- //
- import DebuggerPacketInterpreterEnums.State
- import DebuggerPacketInterpreterEnums.State._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Receiving signals
- //
- val requestedActionOfThePacketInput = Input(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W)) // the requested action
- val requestedActionOfThePacketInputValid = Input(Bool()) // whether data on the requested action is valid or not
-
- val noNewDataReceiver = Output(Bool()) // are interpreter expects more data?
- val readNextData = Output(Bool()) // whether the next data should be read or not?
-
- val dataValidInput = Input(Bool()) // whether data on the receiving data line is valid or not?
- val receivingData = Input(UInt(instanceInfo.bramDataWidth.W)) // data to be received in interpreter
-
- //
- // Sending signals
- //
- val beginSendingBuffer = Output(Bool()) // should sender start sending buffers or not?
- val noNewDataSender = Output(Bool()) // should sender finish sending buffers or not?
- val dataValidOutput = Output(Bool()) // should sender send next buffer or not?
-
- val sendWaitForBuffer = Input(Bool()) // should the interpreter send next buffer or not?
-
- val requestedActionOfThePacketOutput = Output(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W)) // the requested action
- val sendingData = Output(UInt(instanceInfo.bramDataWidth.W)) // data to be sent to the debugger
-
- //
- // Script stage configuration signals
- //
- val finishedScriptConfiguration = Output(Bool()) // whether script configuration finished or not?
- val configureStage = Output(Bool()) // whether the configuration of stage should start or not?
- val targetOperator = Output(new HwdbgShortSymbol(instanceInfo.scriptVariableLength)) // Current operator to be configured
- })
-
- //
- // State registers
- //
- val state = RegInit(sIdle)
-
- //
- // Last error register
- //
- val lastSuccesOrErrorMessage = RegInit(0.U(instanceInfo.bramDataWidth.W))
-
- //
- // Last error register
- //
- val enablePinOfScriptBufferHandler = RegInit(false.B)
-
- //
- // Output pins
- //
- val noNewDataReceiver = WireInit(false.B)
- val readNextData = WireInit(false.B)
-
- val regBeginSendingBuffer = RegInit(false.B)
- val noNewDataSender = WireInit(false.B)
- val dataValidOutput = WireInit(false.B)
- val sendingData = WireInit(0.U(instanceInfo.bramDataWidth.W))
-
- val regRequestedActionOfThePacketOutput = RegInit(0.U(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W))
-
- val finishedScriptConfiguration = WireInit(false.B)
- val configureStage = WireInit(false.B)
- val initialSymbol = Wire(new HwdbgShortSymbol(instanceInfo.scriptVariableLength))
- initialSymbol.Type := 0.U
- initialSymbol.Value := 0.U
- val targetOperator = WireInit(initialSymbol)
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(state) {
-
- is(sIdle) {
-
- //
- // Check if the debugger need a new action (a new command is received)
- //
- when(io.requestedActionOfThePacketInputValid) {
-
- //
- // An action is received
- //
- state := sNewActionReceived
-
- }.otherwise {
-
- //
- // Remain at the same state (no action)
- //
- state := sIdle
- }
-
- }
- is(sNewActionReceived) {
-
- // -------------------------------------------------------------------------
- // Now, the action needs to be dispatched
- //
- val inputAction = io.requestedActionOfThePacketInput
-
- when(inputAction === HwdbgActionEnums.hwdbgActionSendInstanceInfo.id.U) {
-
- //
- // *** Configure sending instance info ***
- //
-
- //
- // Set the response packet type
- //
- regRequestedActionOfThePacketOutput := HwdbgResponseEnums.hwdbgResponseInstanceInfo.id.U
-
- //
- // This action needs a response
- //
- state := sSendResponse
-
- }.elsewhen(inputAction === HwdbgActionEnums.hwdbgActionConfigureScriptBuffer.id.U) {
-
- //
- // *** Configure the internal buffer with script ***
- //
-
- //
- // Enable the buffer config module
- //
- enablePinOfScriptBufferHandler := true.B
-
- val (
- moduleReadNextData,
- moduleFinishedScriptConfiguration,
- moduleConfigureStage,
- moduleTargetOperator
- ) =
- InterpreterScriptBufferHandler(
- debug,
- instanceInfo
- )(
- enablePinOfScriptBufferHandler,
- io.dataValidInput,
- io.receivingData
- )
-
- //
- // Connect the script stage configuration signals
- //
- readNextData := moduleReadNextData
- configureStage := moduleConfigureStage
- finishedScriptConfiguration := moduleFinishedScriptConfiguration
- targetOperator := moduleTargetOperator
-
- when(moduleFinishedScriptConfiguration === true.B) {
-
- //
- // *** Script stage buffer configuration finished! ***
- //
-
- //
- // Disable the buffer config module
- //
- enablePinOfScriptBufferHandler := false.B
-
- //
- // Set the response packet type
- //
- regRequestedActionOfThePacketOutput := HwdbgResponseEnums.hwdbgResponseSuccessOrErrorMessage.id.U
-
- //
- // Set the success message
- //
- lastSuccesOrErrorMessage := HwdbgSuccessOrErrorEnums.hwdbgOperationWasSuccessful.id.U
-
- //
- // This action needs a response
- //
- state := sSendResponse
-
- }.otherwise {
-
- //
- // *** Script stage buffer configuration NOT finished, read the buffer ***
- //
-
- //
- // Stay at the same state
- //
- state := sNewActionReceived
- }
-
- }.otherwise {
-
- //
- // *** Invalid action ***
- //
-
- //
- // Set the response packet type
- //
- regRequestedActionOfThePacketOutput := HwdbgResponseEnums.hwdbgResponseSuccessOrErrorMessage.id.U
-
- //
- // Set the latest error
- //
- lastSuccesOrErrorMessage := HwdbgSuccessOrErrorEnums.hwdbgErrorInvalidPacket.id.U
-
- //
- // This action needs a response
- //
- state := sSendResponse
-
- }
-
- //
- // -------------------------------------------------------------------------
- //
-
- }
- is(sSendResponse) {
-
- //
- // Finish the receiving
- //
- noNewDataReceiver := true.B
-
- //
- // Begin sending response
- //
- regBeginSendingBuffer := true.B
-
- //
- // Wait until the sender module is reading to send data
- //
- when(io.sendWaitForBuffer === true.B) {
-
- // -------------------------------------------------------------------------
- // Now, the response needs to be sent
- //
- when(regRequestedActionOfThePacketOutput === HwdbgResponseEnums.hwdbgResponseInstanceInfo.id.U) {
-
- //
- // *** Send instance information ***
- //
-
- //
- // Instantiate the instance info module
- //
-
- val (
- noNewDataSenderModule,
- dataValidOutputModule,
- sendingDataModule
- ) =
- InterpreterInstanceInfo(
- debug,
- instanceInfo
- )(
- io.sendWaitForBuffer // send waiting for buffer as an activation signal to the module
- )
-
- //
- // Set data validity
- //
- dataValidOutput := dataValidOutputModule
-
- //
- // Set data
- //
- sendingData := sendingDataModule
-
- //
- // Once sending data is done, we'll go to the Done state
- //
- when(noNewDataSenderModule === true.B) {
- state := sDone
- }
-
- }.elsewhen(regRequestedActionOfThePacketOutput === HwdbgResponseEnums.hwdbgResponseSuccessOrErrorMessage.id.U) {
-
- //
- // *** Send result of applying command (and errors) ***
- //
-
- //
- // Instantiate the invalid packet module
- //
- val (
- noNewDataSenderModule,
- dataValidOutputModule,
- sendingDataModule
- ) =
- InterpreterSendSuccessOrError(
- debug,
- instanceInfo
- )(
- io.sendWaitForBuffer, // send waiting for buffer as an activation signal to the module
- lastSuccesOrErrorMessage
- )
-
- //
- // Set data validity
- //
- dataValidOutput := dataValidOutputModule
-
- //
- // Set data
- //
- sendingData := sendingDataModule
-
- //
- // Once sending data is done, we'll go to the Done state
- //
- when(noNewDataSenderModule === true.B) {
- state := sDone
- }
- }
-
- //
- // -------------------------------------------------------------------------
- //
-
- }.otherwise {
-
- //
- // The sender module is not ready for sending buffer
- // so, we need to stay at this state
- //
- state := sSendResponse
- }
- }
- is(sDone) {
-
- //
- // Finish the receiving, sending communication
- //
- noNewDataReceiver := true.B
- noNewDataSender := true.B
-
- //
- // No longer need to begin sending data
- //
- regBeginSendingBuffer := false.B
-
- //
- // Go to the idle state
- //
- state := sIdle
- }
- }
- }
-
- // ---------------------------------------------------------------------
-
- //
- // Connect output pins
- //
- io.noNewDataReceiver := noNewDataReceiver
- io.readNextData := readNextData
-
- io.beginSendingBuffer := regBeginSendingBuffer
- io.noNewDataSender := noNewDataSender
- io.dataValidOutput := dataValidOutput
- io.requestedActionOfThePacketOutput := regRequestedActionOfThePacketOutput
- io.sendingData := sendingData
-
- io.configureStage := configureStage
- io.finishedScriptConfiguration := finishedScriptConfiguration
- io.targetOperator := targetOperator
-}
-
-object DebuggerPacketInterpreter {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- requestedActionOfThePacketInput: UInt,
- requestedActionOfThePacketInputValid: Bool,
- dataValidInput: Bool,
- receivingData: UInt,
- sendWaitForBuffer: Bool
- ): (Bool, Bool, Bool, Bool, Bool, UInt, UInt, Bool, Bool, HwdbgShortSymbol) = {
-
- val debuggerPacketInterpreter = Module(
- new DebuggerPacketInterpreter(
- debug,
- instanceInfo
- )
- )
-
- val noNewDataReceiver = Wire(Bool())
- val readNextData = Wire(Bool())
-
- val beginSendingBuffer = Wire(Bool())
- val noNewDataSender = Wire(Bool())
- val dataValidOutput = Wire(Bool())
-
- val requestedActionOfThePacketOutput = Wire(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W))
- val sendingData = Wire(UInt(instanceInfo.bramDataWidth.W))
-
- val finishedScriptConfiguration = Wire(Bool())
- val configureStage = Wire(Bool())
- val targetOperator = Wire(new HwdbgShortSymbol(instanceInfo.scriptVariableLength))
-
- //
- // Configure the input signals
- //
- debuggerPacketInterpreter.io.en := en
-
- //
- // Configure the input signals related to the receiving signals
- //
- debuggerPacketInterpreter.io.requestedActionOfThePacketInput := requestedActionOfThePacketInput
- debuggerPacketInterpreter.io.requestedActionOfThePacketInputValid := requestedActionOfThePacketInputValid
- debuggerPacketInterpreter.io.dataValidInput := dataValidInput
- debuggerPacketInterpreter.io.receivingData := receivingData
-
- //
- // Configure the input signals related to the sending signals
- //
- debuggerPacketInterpreter.io.sendWaitForBuffer := sendWaitForBuffer
-
- //
- // Configure the output signals
- //
- noNewDataReceiver := debuggerPacketInterpreter.io.noNewDataReceiver
- readNextData := debuggerPacketInterpreter.io.readNextData
-
- //
- // Configure the output signals related to sending packets
- //
- beginSendingBuffer := debuggerPacketInterpreter.io.beginSendingBuffer
- noNewDataSender := debuggerPacketInterpreter.io.noNewDataSender
- dataValidOutput := debuggerPacketInterpreter.io.dataValidOutput
-
- //
- // Configure the output signals related to received packets
- //
- requestedActionOfThePacketOutput := debuggerPacketInterpreter.io.requestedActionOfThePacketOutput
- sendingData := debuggerPacketInterpreter.io.sendingData
-
- //
- // Configure the output signals related to stage configuration
- //
- finishedScriptConfiguration := debuggerPacketInterpreter.io.finishedScriptConfiguration
- configureStage := debuggerPacketInterpreter.io.configureStage
- targetOperator := debuggerPacketInterpreter.io.targetOperator
-
- //
- // Return the output result
- //
- (
- noNewDataReceiver,
- readNextData,
- beginSendingBuffer,
- noNewDataSender,
- dataValidOutput,
- requestedActionOfThePacketOutput,
- sendingData,
- finishedScriptConfiguration,
- configureStage,
- targetOperator
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/communication/interpreter/instance_info.scala b/hwdbg/src/main/scala/hwdbg/communication/interpreter/instance_info.scala
deleted file mode 100644
index f84df188..00000000
--- a/hwdbg/src/main/scala/hwdbg/communication/interpreter/instance_info.scala
+++ /dev/null
@@ -1,462 +0,0 @@
-/**
- * @file
- * port_information.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Send port information (in interpreter)
- * @details
- * @version 0.1
- * @date
- * 2024-05-04
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.communication.interpreter
-
-import chisel3._
-import chisel3.util.{switch, is, log2Ceil}
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-import hwdbg.utils._
-
-object InterpreterInstanceInfoEnums {
- object State extends ChiselEnum {
- val sIdle, sSendVersion, sSendMaximumNumberOfStages, sSendScriptVariableLength, sSendNumberOfSupportedLocalAndGlobalVariables,
- sSendNumberOfSupportedTemporaryVariables, sSendMaximumNumberOfSupportedGetScriptOperators, sSendMaximumNumberOfSupportedSetScriptOperators,
- sSendSharedMemorySize, sSendDebuggerAreaOffset, sSendDebuggeeAreaOffset, sSendNumberOfPins, sSendNumberOfPorts, sSendScriptCapabilities1,
- sSendScriptCapabilities2, sSendBramAddrWidth, sSendBramDataWidth, sSendPortsConfiguration, sDone = Value
- }
-}
-
-class InterpreterInstanceInfo(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import state enum
- //
- import InterpreterInstanceInfoEnums.State
- import InterpreterInstanceInfoEnums.State._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Sending signals
- //
- val noNewDataSender = Output(Bool()) // should sender finish sending buffers or not?
- val dataValidOutput = Output(Bool()) // should sender send next buffer or not?
- val sendingData = Output(UInt(instanceInfo.bramDataWidth.W)) // data to be sent to the debugger
-
- })
-
- //
- // State registers
- //
- val state = RegInit(sIdle)
-
- //
- // Get number of input/output ports
- //
- val numberOfPorts = instanceInfo.portsConfiguration.size
-
- //
- // Convert input port pins into vector
- //
- // val pinsVec = RegInit(VecInit(Seq.fill(numberOfPorts)(0.U(instanceInfo.bramDataWidth.W))))
- val pinsVec = VecInit(instanceInfo.portsConfiguration.map(_.U))
-
- //
- // Determine the width for numberOfSentPins
- //
- val numberOfSentPinsWidth = log2Ceil(numberOfPorts)
-
- //
- // Registers for keeping track of sent pin details
- //
- val numberOfSentPins = RegInit(0.U(numberOfSentPinsWidth.W))
-
- //
- // Output pins
- //
- val noNewDataSender = WireInit(false.B)
- val dataValidOutput = WireInit(false.B)
- val sendingData = WireInit(0.U(instanceInfo.bramDataWidth.W))
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(state) {
-
- is(sIdle) {
-
- //
- // Going to the next state (sending the version of the debugger)
- //
- state := sSendVersion
- }
- is(sSendVersion) {
-
- //
- // Set the version
- //
- sendingData := instanceInfo.version.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendMaximumNumberOfStages
-
- }
- is(sSendMaximumNumberOfStages) {
-
- //
- // Set the maximum number of stages supported by this instance of the debugger
- //
- sendingData := instanceInfo.maximumNumberOfStages.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendScriptVariableLength
-
- }
- is(sSendScriptVariableLength) {
-
- //
- // Set the script variable length of this instance of the debugger
- //
- sendingData := instanceInfo.scriptVariableLength.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendNumberOfSupportedLocalAndGlobalVariables
-
- }
- is(sSendNumberOfSupportedLocalAndGlobalVariables) {
-
- //
- // Set the number of supported local variables for this instance of the debugger
- //
- sendingData := instanceInfo.numberOfSupportedLocalAndGlobalVariables.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendNumberOfSupportedTemporaryVariables
-
- }
- is(sSendNumberOfSupportedTemporaryVariables) {
-
- //
- // Set the number of supported temporary variables for this instance of the debugger
- //
- sendingData := instanceInfo.numberOfSupportedTemporaryVariables.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendMaximumNumberOfSupportedGetScriptOperators
-
- }
- is(sSendMaximumNumberOfSupportedGetScriptOperators) {
-
- //
- // Set the maximum number of supported GET operators by this instance of the
- // debugger in the script engine
- //
- sendingData := instanceInfo.maximumNumberOfSupportedGetScriptOperators.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendMaximumNumberOfSupportedSetScriptOperators
-
- }
- is(sSendMaximumNumberOfSupportedSetScriptOperators) {
-
- //
- // Set the maximum number of supported SET operators by this instance of the
- // debugger in the script engine
- //
- sendingData := instanceInfo.maximumNumberOfSupportedSetScriptOperators.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendSharedMemorySize
-
- }
- is(sSendSharedMemorySize) {
-
- //
- // Set the shared memory size used by this instance of the debugger
- //
- sendingData := instanceInfo.sharedMemorySize.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendDebuggerAreaOffset
-
- }
- is(sSendDebuggerAreaOffset) {
-
- //
- // Set the start offset of the debugger to the debuggee memory for this
- // instance of the debugger
- //
- sendingData := instanceInfo.debuggerAreaOffset.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendDebuggeeAreaOffset
-
- }
- is(sSendDebuggeeAreaOffset) {
-
- //
- // Set the start offset of the debuggee to the debugger memory for this
- // instance of the debugger
- //
- sendingData := instanceInfo.debuggeeAreaOffset.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendNumberOfPins
-
- }
- is(sSendNumberOfPins) {
-
- //
- // Set the number of pins in this instance of the debugger
- //
- sendingData := instanceInfo.numberOfPins.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendNumberOfPorts
-
- }
- is(sSendNumberOfPorts) {
-
- //
- // Set the number of ports in this instance of the debugger
- //
- sendingData := instanceInfo.numberOfPorts.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendScriptCapabilities1
-
- }
- is(sSendScriptCapabilities1) {
-
- //
- // Set the first bits (most significant) of the supported operators capabilities of this instance
- // of the debugger
- //
- sendingData := BitwiseFunction
- .getBitsInRange(instanceInfo.scriptCapabilities, instanceInfo.bramDataWidth, instanceInfo.bramDataWidth + instanceInfo.bramDataWidth - 1)
- .U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendScriptCapabilities2
-
- }
- is(sSendScriptCapabilities2) {
-
- //
- // Set the second bits (least significant) of the supported operators capabilities of this instance
- // of the debugger
- //
- sendingData := BitwiseFunction.getBitsInRange(instanceInfo.scriptCapabilities, 0, instanceInfo.bramDataWidth - 1).U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendBramAddrWidth
-
- }
- is(sSendBramAddrWidth) {
-
- //
- // Set the BRAM address width in this instance of the debugger
- //
- sendingData := instanceInfo.bramAddrWidth.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendBramDataWidth
-
- }
- is(sSendBramDataWidth) {
-
- //
- // Set the BRAM data width in this instance of the debugger
- //
- sendingData := instanceInfo.bramDataWidth.U
-
- //
- // The output is valid
- //
- dataValidOutput := true.B
-
- state := sSendPortsConfiguration
-
- }
- is(sSendPortsConfiguration) {
-
- //
- // Send input port items
- //
-
- //
- // Adjust data
- //
- sendingData := pinsVec(numberOfSentPins)
-
- //
- // Data is valid
- //
- dataValidOutput := true.B
-
- when(numberOfSentPins === (numberOfPorts - 1).U) {
-
- //
- // Reset the pins sent for sending details
- //
- numberOfSentPins := 0.U
-
- state := sDone
-
- }.otherwise {
-
- //
- // Send next index
- //
- numberOfSentPins := numberOfSentPins + 1.U
-
- //
- // Stay at the same state
- //
- state := sSendPortsConfiguration
- }
- }
- is(sDone) {
-
- //
- // Indicate that sending data is done
- //
- noNewDataSender := true.B
-
- //
- // Goto the idle state
- //
- state := sIdle
- }
- }
-
- }
-
- // ---------------------------------------------------------------------
-
- //
- // Connect output pins
- //
- io.noNewDataSender := noNewDataSender
- io.dataValidOutput := dataValidOutput
- io.sendingData := sendingData
-
-}
-
-object InterpreterInstanceInfo {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool
- ): (Bool, Bool, UInt) = {
-
- val interpreterInstanceInfo = Module(
- new InterpreterInstanceInfo(
- debug,
- instanceInfo
- )
- )
-
- val noNewDataSender = Wire(Bool())
- val dataValidOutput = Wire(Bool())
- val sendingData = Wire(UInt(instanceInfo.bramDataWidth.W))
-
- //
- // Configure the input signals
- //
- interpreterInstanceInfo.io.en := en
-
- //
- // Configure the output signals
- //
- noNewDataSender := interpreterInstanceInfo.io.noNewDataSender
- dataValidOutput := interpreterInstanceInfo.io.dataValidOutput
- sendingData := interpreterInstanceInfo.io.sendingData
-
- //
- // Return the output result
- //
- (
- noNewDataSender,
- dataValidOutput,
- sendingData
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/communication/interpreter/script_buffer_handler.scala b/hwdbg/src/main/scala/hwdbg/communication/interpreter/script_buffer_handler.scala
deleted file mode 100644
index ee7462f9..00000000
--- a/hwdbg/src/main/scala/hwdbg/communication/interpreter/script_buffer_handler.scala
+++ /dev/null
@@ -1,301 +0,0 @@
-/**
- * @file
- * script_buffer_handler.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Configures the script stages from shared memory
- * @details
- * @version 0.1
- * @date
- * 2024-06-14
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.communication.interpreter
-
-import chisel3._
-import chisel3.util.{switch, is}
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-import hwdbg.types._
-import hwdbg.script._
-
-object InterpreterScriptBufferHandlerEnums {
- object State extends ChiselEnum {
- val sIdle, sReadSizeOfBuffer, sReadTypeOfOperator, sReadValueOfOperator, sDone = Value
- }
-}
-
-class InterpreterScriptBufferHandler(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import state enum
- //
- import InterpreterScriptBufferHandlerEnums.State
- import InterpreterScriptBufferHandlerEnums.State._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Receiving signals
- //
- val readNextData = Output(Bool()) // whether the next data should be read or not?
-
- val dataValidInput = Input(Bool()) // whether data on the receiving data line is valid or not?
- val receivingData = Input(UInt(instanceInfo.bramDataWidth.W)) // data to be received in interpreter
-
- //
- // Script stage configuration signals
- //
- val finishedScriptConfiguration = Output(Bool()) // whether configuration finished or not?
- val configureStage = Output(Bool()) // whether the configuration of stage should start or not?
- val targetOperator = Output(new HwdbgShortSymbol(instanceInfo.scriptVariableLength)) // Current operator to be configured
- })
-
- //
- // State registers
- //
- val state = RegInit(sIdle)
-
- //
- // Internal registers
- //
- val regScriptNumberOfSymbols = Reg(UInt(instanceInfo.bramDataWidth.W))
-
- //
- // Output pins
- //
- val readNextData = WireInit(false.B)
-
- val finishedScriptConfiguration = WireInit(false.B)
- val configureStage = RegInit(false.B)
-
- val regTargetOperator = Reg(new HwdbgShortSymbol(instanceInfo.scriptVariableLength))
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(state) {
-
- is(sIdle) {
-
- //
- // Read next data for the size of the buffer
- //
- readNextData := true.B
-
- //
- // Move to the next state
- //
- state := sReadSizeOfBuffer
- }
- is(sReadSizeOfBuffer) {
-
- when(io.dataValidInput) {
-
- //
- // Data is valid and number of symbols is now available
- //
- regScriptNumberOfSymbols := io.receivingData
-
- //
- // Request next data
- //
- readNextData := true.B
-
- //
- // Move to the configuration state
- //
- state := sReadTypeOfOperator
-
- }.otherwise {
-
- //
- // Stay at the same state since the data is not yet received
- //
- state := sReadSizeOfBuffer
- }
- }
- is(sReadTypeOfOperator) {
-
- //
- // Not valid for configuring yet
- //
- configureStage := false.B
-
- when(io.dataValidInput) {
-
- //
- // Request next data
- //
- readNextData := true.B
-
- //
- // Read the operator's "Type" data
- //
- regTargetOperator.Type := io.receivingData
-
- //
- // Next, we need to read "Value"
- //
- state := sReadValueOfOperator
-
- }.otherwise {
-
- //
- // Stay at the same state since the data is not received yet
- //
- state := sReadTypeOfOperator
- }
- }
- is(sReadValueOfOperator) {
-
- when(io.dataValidInput) {
-
- //
- // Configure the stages
- //
- configureStage := true.B
-
- //
- // Read the operator's "Value" data
- //
- regTargetOperator.Value := io.receivingData
-
- //
- // Decrement the remaining symbols
- //
- regScriptNumberOfSymbols := regScriptNumberOfSymbols - 1.U
-
- //
- // Check if reading is scripts are finished or not
- //
- when(regScriptNumberOfSymbols === 0.U) {
-
- //
- // Configurartion was done
- //
- state := sDone
-
- }.otherwise {
-
- //
- // Request next data
- //
- readNextData := true.B
-
- //
- // Again, read the next type
- //
- state := sReadTypeOfOperator
- }
- }.otherwise {
-
- //
- // Stay at the same state since the data is not received yet
- //
- state := sReadValueOfOperator
- }
- }
- is(sDone) {
-
- //
- // Not valid for configuring anymore
- //
- configureStage := false.B
-
- //
- // Finished configuration
- //
- finishedScriptConfiguration := true.B
-
- //
- // Move to the idle state
- //
- state := sIdle
- }
- }
- }
-
- //
- // Connect output pins
- //
- io.readNextData := readNextData
-
- io.finishedScriptConfiguration := finishedScriptConfiguration
- io.configureStage := configureStage
- io.targetOperator := regTargetOperator
-
-}
-
-object InterpreterScriptBufferHandler {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- dataValidInput: Bool,
- receivingData: UInt
- ): (Bool, Bool, Bool, HwdbgShortSymbol) = {
-
- val interpreterScriptBufferHandler = Module(
- new InterpreterScriptBufferHandler(
- debug,
- instanceInfo
- )
- )
-
- val readNextData = Wire(Bool())
-
- val finishedScriptConfiguration = Wire(Bool())
- val configureStage = Wire(Bool())
- val targetOperator = Wire(new HwdbgShortSymbol(instanceInfo.scriptVariableLength))
-
- //
- // Configure the input signals
- //
- interpreterScriptBufferHandler.io.en := en
-
- //
- // Configure the input signals related to the receiving signals
- //
- interpreterScriptBufferHandler.io.dataValidInput := dataValidInput
- interpreterScriptBufferHandler.io.receivingData := receivingData
-
- //
- // Configure the output signals
- //
- readNextData := interpreterScriptBufferHandler.io.readNextData
-
- //
- // Configure the output signals related to configuring stage operators
- //
- finishedScriptConfiguration := interpreterScriptBufferHandler.io.finishedScriptConfiguration
- configureStage := interpreterScriptBufferHandler.io.configureStage
- targetOperator := interpreterScriptBufferHandler.io.targetOperator
-
- //
- // Return the output result
- //
- (
- readNextData,
- finishedScriptConfiguration,
- configureStage,
- targetOperator
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/communication/interpreter/send_success_or_error.scala b/hwdbg/src/main/scala/hwdbg/communication/interpreter/send_success_or_error.scala
deleted file mode 100644
index 5ae70121..00000000
--- a/hwdbg/src/main/scala/hwdbg/communication/interpreter/send_success_or_error.scala
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * @file
- * send_success_or_error.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Send an indication of invalid packet error or success message (in the interpreter)
- * @details
- * @version 0.1
- * @date
- * 2024-05-04
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.communication.interpreter
-
-import chisel3._
-import chisel3.util.{switch, is}
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-
-class InterpreterSendSuccessOrError(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
- val lastSuccessOrError = Input(UInt(instanceInfo.bramDataWidth.W)) // input last error
-
- //
- // Sending signals
- //
- val noNewDataSender = Output(Bool()) // should sender finish sending buffers or not?
- val dataValidOutput = Output(Bool()) // should sender send next buffer or not?
- val sendingData = Output(UInt(instanceInfo.bramDataWidth.W)) // data to be sent to the debugger
-
- })
-
- //
- // Output pins
- //
- val noNewDataSender = WireInit(false.B)
- val dataValidOutput = WireInit(false.B)
- val sendingData = WireInit(0.U(instanceInfo.bramDataWidth.W))
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- //
- // Set the version
- //
- sendingData := io.lastSuccessOrError
-
- //
- // Sending the version in one clock cycle
- //
- noNewDataSender := true.B
- dataValidOutput := true.B
-
- }
-
- // ---------------------------------------------------------------------
-
- //
- // Connect output pins
- //
- io.noNewDataSender := noNewDataSender
- io.dataValidOutput := dataValidOutput
- io.sendingData := sendingData
-
-}
-
-object InterpreterSendSuccessOrError {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- lastSuccessOrError: UInt
- ): (Bool, Bool, UInt) = {
-
- val interpreterSendSuccessOrError = Module(
- new InterpreterSendSuccessOrError(
- debug,
- instanceInfo
- )
- )
-
- val noNewDataSender = Wire(Bool())
- val dataValidOutput = Wire(Bool())
- val sendingData = Wire(UInt(instanceInfo.bramDataWidth.W))
-
- //
- // Configure the input signals
- //
- interpreterSendSuccessOrError.io.en := en
- interpreterSendSuccessOrError.io.lastSuccessOrError := lastSuccessOrError
-
- //
- // Configure the output signals
- //
- noNewDataSender := interpreterSendSuccessOrError.io.noNewDataSender
- dataValidOutput := interpreterSendSuccessOrError.io.dataValidOutput
- sendingData := interpreterSendSuccessOrError.io.sendingData
-
- //
- // Return the output result
- //
- (
- noNewDataSender,
- dataValidOutput,
- sendingData
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/communication/receiver.scala b/hwdbg/src/main/scala/hwdbg/communication/receiver.scala
deleted file mode 100644
index e27f9635..00000000
--- a/hwdbg/src/main/scala/hwdbg/communication/receiver.scala
+++ /dev/null
@@ -1,444 +0,0 @@
-/**
- * @file
- * receiver.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Remote debugger packet receiver module
- * @details
- * @version 0.1
- * @date
- * 2024-04-08
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.communication
-
-import chisel3._
-import chisel3.util.{switch, is}
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-import hwdbg.types._
-import hwdbg.utils._
-import hwdbg.constants._
-
-object DebuggerPacketReceiverEnums {
- object State extends ChiselEnum {
- val sIdle, sReadChecksum, sReadIndicator, sReadTypeOfThePacket, sReadRequestedActionOfThePacket, sRequestedActionIsValid, sWaitToReadActionBuffer,
- sReadActionBuffer, sDone = Value
- }
-}
-
-class DebuggerPacketReceiver(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import state enum
- //
- import DebuggerPacketReceiverEnums.State
- import DebuggerPacketReceiverEnums.State._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Interrupt signals (lines)
- // Note: Only PL input signal is received here,
- // a separate module will control the PS signal
- //
- val plInSignal = Input(Bool()) // PS to PL signal
-
- //
- // BRAM (Block RAM) ports
- //
- val rdWrAddr = Output(UInt(instanceInfo.bramAddrWidth.W)) // read/write address
- val rdData = Input(UInt(instanceInfo.bramDataWidth.W)) // read data
-
- //
- // Receiving signals
- //
- val requestedActionOfThePacketOutput = Output(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W)) // the requested action
- val requestedActionOfThePacketOutputValid = Output(Bool()) // whether data on the requested action is valid or not
- val noNewDataReceiver = Input(Bool()) // receive done or not?
-
- // this contains and edge-detection mechanism, which means reader should make it low after reading the data
- val readNextData = Input(Bool()) // whether the next data should be read or not?
-
- val dataValidOutput = Output(Bool()) // whether data on the receiving data line is valid or not?
- val receivingData = Output(UInt(instanceInfo.bramDataWidth.W)) // data to be sent to the reader
-
- val finishedReceivingBuffer = Output(Bool()) // Receiving is done or not?
-
- })
-
- //
- // State registers
- //
- val state = RegInit(sIdle)
-
- //
- // Output pins
- //
- val rdWrAddr = WireInit(0.U(instanceInfo.bramAddrWidth.W))
- val regRdWrAddr = RegInit(0.U(instanceInfo.bramAddrWidth.W))
- val finishedReceivingBuffer = WireInit(false.B)
- val regRequestedActionOfThePacketOutput = RegInit(0.U(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W))
- val regRequestedActionOfThePacketOutputValid = RegInit(false.B)
- val regDataValidOutput = RegInit(false.B)
- val regReceivingData = RegInit(0.U(instanceInfo.bramDataWidth.W))
-
- //
- // Rising-edge detector for start receiving signal
- //
- val risingEdgePlInSignal = io.plInSignal & !RegNext(io.plInSignal)
-
- //
- // Rising-edge detector for reading next data signal
- //
- val risingEdgeReadNextData = io.readNextData & !RegNext(io.readNextData)
-
- //
- // Structure (as wire) of the received packet buffer
- //
- val receivedPacketBuffer = WireInit(0.U.asTypeOf(new DebuggerRemotePacket())) // here the wire is not used
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(state) {
-
- is(sIdle) {
-
- //
- // Create logs from communication structure offsets
- //
- LogInfo(debug)(f"The offset of Checksum is 0x${receivedPacketBuffer.Offset.checksum}%x")
- LogInfo(debug)(f"The offset of Indicator is 0x${receivedPacketBuffer.Offset.indicator}%x")
- LogInfo(debug)(f"The offset of TypeOfThePacket is 0x${receivedPacketBuffer.Offset.typeOfThePacket}%x")
- LogInfo(debug)(f"The offset of requestedActionOfThePacketOutput is 0x${receivedPacketBuffer.Offset.requestedActionOfThePacket}%x")
-
- //
- // Check whether the interrupt from the PS is received or not
- //
- when(risingEdgePlInSignal === true.B) {
- state := sReadChecksum
- }
-
- //
- // Configure the output pins in case of sIdle
- //
- rdWrAddr := 0.U
- regRequestedActionOfThePacketOutput := 0.U
- regRequestedActionOfThePacketOutputValid := false.B
- regDataValidOutput := false.B
- regReceivingData := 0.U
- finishedReceivingBuffer := false.B
-
- }
- is(sReadChecksum) {
-
- //
- // Adjust address to read Checksum from BRAM (Not Used)
- //
- rdWrAddr := (instanceInfo.debuggerAreaOffset + receivedPacketBuffer.Offset.checksum).U
-
- //
- // Goes to the next section
- //
- state := sReadIndicator
-
- }
- is(sReadIndicator) {
-
- //
- // Adjust address to read Indicator from BRAM
- //
- rdWrAddr := (instanceInfo.debuggerAreaOffset + receivedPacketBuffer.Offset.indicator).U
-
- //
- // Goes to the next section
- //
- state := sReadTypeOfThePacket
-
- }
- is(sReadTypeOfThePacket) {
-
- //
- // Adjust address to read TypeOfThePacket from BRAM
- //
- rdWrAddr := (instanceInfo.debuggerAreaOffset + receivedPacketBuffer.Offset.typeOfThePacket).U
-
- //
- // Check whether the indicator is valid or not
- //
- LogInfo(debug)(
- f"Comparing first 0x${BitwiseFunction.getBitsInRange(HyperDbgSharedConstants.INDICATOR_OF_HYPERDBG_PACKET, 32, (32 + instanceInfo.bramDataWidth - 1))}%x number of the indicator (little-endian)"
- )
-
- when(
- io.rdData === BitwiseFunction
- .getBitsInRange(HyperDbgSharedConstants.INDICATOR_OF_HYPERDBG_PACKET, 32, (32 + instanceInfo.bramDataWidth - 1))
- .U
- ) {
-
- //
- // Indicator of packet is valid
- // (Goes to the next section)
- //
- state := sReadRequestedActionOfThePacket
-
- }.otherwise {
-
- //
- // Indicator of packet is not valid
- // (Receiving was done but not found a valid packet,
- // so, go to the idle state)
- //
- state := sDone
- }
- }
- is(sReadRequestedActionOfThePacket) {
-
- //
- // Adjust address to read RequestedActionOfThePacket from BRAM
- //
- rdWrAddr := (instanceInfo.debuggerAreaOffset + receivedPacketBuffer.Offset.requestedActionOfThePacket).U
-
- //
- // Save the address into a register
- //
- regRdWrAddr := (instanceInfo.debuggerAreaOffset + receivedPacketBuffer.Offset.requestedActionOfThePacket + (instanceInfo.bramDataWidth >> 3)).U
-
- //
- // Check whether the type of the packet is valid or not
- //
- val packetType: DebuggerRemotePacketType.Value = DebuggerRemotePacketType.DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL
- LogInfo(debug)(
- f"Check packet type with DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL (0x${packetType.id}%x)"
- )
- when(io.rdData === packetType.id.U) {
-
- //
- // Type of packet is valid
- // (Goes to the next section)
- //
- state := sRequestedActionIsValid
-
- }.otherwise {
-
- //
- // Type of packet is not valid
- // (Receiving was done but not found a valid packet,
- // so, go to the idle state)
- //
- state := sDone
- }
-
- }
- is(sRequestedActionIsValid) {
-
- //
- // Read the RequestedActionOfThePacket
- //
- regRequestedActionOfThePacketOutput := io.rdData
-
- //
- // The RequestedActionOfThePacketOutput is valid from now
- //
- regRequestedActionOfThePacketOutputValid := true.B
-
- //
- // Goes to the next section
- //
- state := sWaitToReadActionBuffer
-
- }
- is(sWaitToReadActionBuffer) {
-
- //
- // The value of the received buffer is valid here, however,
- // in order to make difference when a new value is read, the
- // following signals goes to the off state
- //
- regDataValidOutput := false.B
-
- //
- // Check if the caller needs to read the next part of
- // the block RAM or the receiving data should be finished
- //
- when(io.noNewDataReceiver === true.B) {
-
- //
- // No new data, the receiving is done
- //
- state := sDone
-
- }.elsewhen(risingEdgeReadNextData === true.B) {
-
- //
- // Adjust address to read next data to BRAM
- //
- rdWrAddr := regRdWrAddr
- regRdWrAddr := regRdWrAddr + (instanceInfo.bramDataWidth >> 3).U
-
- //
- // Read the next offset of the buffer
- //
- state := sReadActionBuffer
-
- }.otherwise {
-
- //
- // Stay at the same state
- //
- state := sWaitToReadActionBuffer
- }
-
- }
- is(sReadActionBuffer) {
-
- //
- // Data outputs are now valid
- //
- regDataValidOutput := true.B
-
- //
- // Adjust the read buffer data
- //
- regReceivingData := io.rdData
-
- when(io.noNewDataReceiver === true.B) {
-
- //
- // No new data, the receiving is done
- //
- state := sDone
-
- }.otherwise {
-
- //
- // Return to the previous state of action
- //
- state := sWaitToReadActionBuffer
-
- }
-
- }
- is(sDone) {
-
- //
- // Reset the temporary address holder
- //
- regRdWrAddr := 0.U
-
- //
- // Requested action buffer and the receiving buffer is no longer valid
- //
- regRequestedActionOfThePacketOutput := 0.U
- regRequestedActionOfThePacketOutputValid := false.B
- regReceivingData := 0.U
- regDataValidOutput := false.B
-
- //
- // The receiving is done at this stage, either
- // was successful or unsuccessful, we'll release the
- // sharing bram resource by indicating that the receiving
- // module is no longer using the bram line
- //
- finishedReceivingBuffer := true.B
-
- //
- // Go to the idle state
- //
- state := sIdle
- }
- }
- }
-
- // ---------------------------------------------------------------------
-
- //
- // Connect output pins
- //
- io.rdWrAddr := rdWrAddr
- io.requestedActionOfThePacketOutput := regRequestedActionOfThePacketOutput
- io.requestedActionOfThePacketOutputValid := regRequestedActionOfThePacketOutputValid
- io.dataValidOutput := regDataValidOutput
- io.receivingData := regReceivingData
- io.finishedReceivingBuffer := finishedReceivingBuffer
-
-}
-
-object DebuggerPacketReceiver {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- plInSignal: Bool,
- rdData: UInt,
- noNewDataReceiver: Bool,
- readNextData: Bool
- ): (UInt, UInt, Bool, Bool, UInt, Bool) = {
-
- val debuggerPacketReceiver = Module(
- new DebuggerPacketReceiver(
- debug,
- instanceInfo
- )
- )
-
- val rdWrAddr = Wire(UInt(instanceInfo.bramAddrWidth.W))
- val requestedActionOfThePacketOutput = Wire(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W))
- val requestedActionOfThePacketOutputValid = Wire(Bool())
- val dataValidOutput = Wire(Bool())
- val receivingData = Wire(UInt(instanceInfo.bramDataWidth.W))
- val finishedReceivingBuffer = Wire(Bool())
-
- //
- // Configure the input signals
- //
- debuggerPacketReceiver.io.en := en
- debuggerPacketReceiver.io.plInSignal := plInSignal
- debuggerPacketReceiver.io.rdData := rdData
- debuggerPacketReceiver.io.noNewDataReceiver := noNewDataReceiver
- debuggerPacketReceiver.io.readNextData := readNextData
-
- //
- // Configure the output signals
- //
- rdWrAddr := debuggerPacketReceiver.io.rdWrAddr
-
- //
- // Configure the output signals related to received packets
- //
- requestedActionOfThePacketOutput := debuggerPacketReceiver.io.requestedActionOfThePacketOutput
- requestedActionOfThePacketOutputValid := debuggerPacketReceiver.io.requestedActionOfThePacketOutputValid
- dataValidOutput := debuggerPacketReceiver.io.dataValidOutput
- receivingData := debuggerPacketReceiver.io.receivingData
- finishedReceivingBuffer := debuggerPacketReceiver.io.finishedReceivingBuffer
-
- //
- // Return the output result
- //
- (
- rdWrAddr,
- requestedActionOfThePacketOutput,
- requestedActionOfThePacketOutputValid,
- dataValidOutput,
- receivingData,
- finishedReceivingBuffer
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/communication/send_receive_synchronizer.scala b/hwdbg/src/main/scala/hwdbg/communication/send_receive_synchronizer.scala
deleted file mode 100644
index 4ebf5a74..00000000
--- a/hwdbg/src/main/scala/hwdbg/communication/send_receive_synchronizer.scala
+++ /dev/null
@@ -1,383 +0,0 @@
-/**
- * @file
- * send_receive_synchronizer.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Send and receive synchronizer module
- * @details
- * @version 0.1
- * @date
- * 2024-04-17
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.communication
-
-import chisel3._
-import chisel3.util.{switch, is}
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-import hwdbg.types._
-
-object SendReceiveSynchronizerEnums {
- object State extends ChiselEnum {
- val sIdle, sReceiver, sSender = Value
- }
-}
-
-class SendReceiveSynchronizer(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import state enum
- //
- import SendReceiveSynchronizerEnums.State
- import SendReceiveSynchronizerEnums.State._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Interrupt signals (lines)
- //
- val plInSignal = Input(Bool()) // PS to PL signal
- val psOutInterrupt = Output(Bool()) // PL to PS interrupt
-
- //
- // BRAM (Block RAM) ports
- //
- val rdWrAddr = Output(UInt(instanceInfo.bramAddrWidth.W)) // read/write address
- val rdData = Input(UInt(instanceInfo.bramDataWidth.W)) // read data
- val wrEna = Output(Bool()) // enable writing
- val wrData = Output(UInt(instanceInfo.bramDataWidth.W)) // write data
-
- //
- // Receiver ports
- //
- val requestedActionOfThePacketOutput = Output(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W)) // the requested action
- val requestedActionOfThePacketOutputValid = Output(Bool()) // whether data on the requested action is valid or not
-
- val noNewDataReceiver = Input(Bool()) // receive done or not?
- val readNextData = Input(Bool()) // whether the next data should be read or not?
-
- val dataValidOutput = Output(Bool()) // whether data on the receiving data line is valid or not?
- val receivingData = Output(UInt(instanceInfo.bramDataWidth.W)) // data to be sent to the reader
-
- //
- // Sender ports
- //
- val beginSendingBuffer = Input(Bool()) // should sender start sending buffers or not?
- val noNewDataSender = Input(Bool()) // should sender finish sending buffers or not?
- val dataValidInput = Input(Bool()) // should sender send next buffer or not?
-
- val sendWaitForBuffer = Output(Bool()) // should the external module send next buffer or not?
-
- val requestedActionOfThePacketInput = Input(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W)) // the requested action
- val sendingData = Input(UInt(instanceInfo.bramDataWidth.W)) // data to be sent to the debugger
-
- })
-
- //
- // State registers
- //
- val state = RegInit(sIdle)
-
- //
- // Saving state of the controlling pins
- //
- val regPlInSignal = RegInit(false.B)
- val regBeginSendingBuffer = RegInit(false.B)
-
- //
- // Shared BRAM pins
- //
- val sharedRdWrAddr = WireInit(0.U(instanceInfo.bramAddrWidth.W)) // read/write address
- val sharedRdData = WireInit(0.U(instanceInfo.bramDataWidth.W)) // read data
- val sharedWrEna = WireInit(false.B) // enable writing
- val sharedWrData = WireInit(0.U(instanceInfo.bramDataWidth.W)) // write data
-
- //
- // Instantiate the packet receiver module
- //
- val (
- receiverRdWrAddr,
- requestedActionOfThePacketOutput,
- requestedActionOfThePacketOutputValid,
- dataValidOutput,
- receivingData,
- finishedReceivingBuffer
- ) =
- DebuggerPacketReceiver(
- debug,
- instanceInfo
- )(
- io.en,
- regPlInSignal,
- io.rdData,
- io.noNewDataReceiver,
- io.readNextData
- )
-
- //
- // Instantiate the packet sender module
- //
- val (
- psOutInterrupt,
- senderRdWrAddr,
- wrEna,
- wrData,
- sendWaitForBuffer,
- finishedSendingBuffer
- ) =
- DebuggerPacketSender(
- debug,
- instanceInfo
- )(
- io.en,
- regBeginSendingBuffer,
- io.noNewDataSender,
- io.dataValidInput,
- io.requestedActionOfThePacketInput,
- io.sendingData
- )
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(state) {
-
- is(sIdle) {
-
- //
- // Perform the resource separation of shared BRAM
- // and apply priority to receive over send
- //
- when(io.plInSignal === true.B) {
-
- //
- // Activate the receiver module
- //
- regPlInSignal := true.B
-
- //
- // Go to the receiver state
- //
- state := sReceiver
-
- }.elsewhen(io.beginSendingBuffer === true.B && io.plInSignal === false.B) {
-
- //
- // Activate the sender module
- //
- regBeginSendingBuffer := true.B
-
- //
- // Go to the sender state
- //
- state := sSender
-
- }.otherwise {
-
- //
- // Stay at the same state as there is no communication
- //
- state := sIdle
-
- }
-
- }
- is(sReceiver) {
-
- //
- // Check whether the receiving is finished
- //
- when(finishedReceivingBuffer === true.B) {
-
- //
- // No longer in the receiver state
- //
- regPlInSignal := false.B
-
- //
- // Go to the idle state
- //
- state := sIdle
-
- }.otherwise {
-
- //
- // Connect the address of BRAM reader to the receiver address
- //
- sharedRdWrAddr := receiverRdWrAddr
-
- //
- // On the receiver, writing is not allowed
- //
- sharedWrEna := false.B
-
- //
- // Stay at the same state
- //
- state := sReceiver
-
- }
- }
- is(sSender) {
-
- //
- // Check whether sending data is finished
- //
- when(finishedSendingBuffer === true.B) {
-
- //
- // No longer in the sender state
- //
- regBeginSendingBuffer := false.B
-
- //
- // Go to the idle state
- //
- state := sIdle
-
- }.otherwise {
-
- //
- // Connect shared BRAM signals to the sender
- //
- sharedRdWrAddr := senderRdWrAddr
- sharedWrEna := wrEna
- sharedWrData := wrData
-
- //
- // Stay at the same state
- //
- state := sSender
-
- }
- }
- }
- }
-
- // ---------------------------------------------------------------------
-
- //
- // Connect output pins (Interrupt)
- //
- io.psOutInterrupt := psOutInterrupt
-
- //
- // Connect output pins (BRAM)
- //
- io.rdWrAddr := sharedRdWrAddr
- io.wrEna := wrEna
- io.wrData := wrData
-
- //
- // Connect output pins (Receiver)
- //
- io.requestedActionOfThePacketOutput := requestedActionOfThePacketOutput
- io.requestedActionOfThePacketOutputValid := requestedActionOfThePacketOutputValid
- io.dataValidOutput := dataValidOutput
- io.receivingData := receivingData
-
- //
- // Connect output pins (Sender)
- //
- io.sendWaitForBuffer := sendWaitForBuffer
-
-}
-
-object SendReceiveSynchronizer {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- plInSignal: Bool,
- rdData: UInt,
- noNewDataReceiver: Bool,
- readNextData: Bool,
- beginSendingBuffer: Bool,
- noNewDataSender: Bool,
- dataValidInput: Bool,
- requestedActionOfThePacketInput: UInt,
- sendingData: UInt
- ): (Bool, UInt, Bool, UInt, UInt, Bool, Bool, UInt, Bool) = {
-
- val sendReceiveSynchronizerModule = Module(
- new SendReceiveSynchronizer(
- debug,
- instanceInfo
- )
- )
-
- val psOutInterrupt = Wire(Bool())
-
- val rdWrAddr = Wire(UInt(instanceInfo.bramAddrWidth.W))
- val wrEna = Wire(Bool())
- val wrData = Wire(UInt(instanceInfo.bramDataWidth.W))
-
- val requestedActionOfThePacketOutput = Wire(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W))
- val requestedActionOfThePacketOutputValid = Wire(Bool())
- val dataValidOutput = Wire(Bool())
- val receivingData = Wire(UInt(instanceInfo.bramDataWidth.W))
-
- val sendWaitForBuffer = Wire(Bool())
-
- //
- // Configure the input signals
- //
- sendReceiveSynchronizerModule.io.en := en
- sendReceiveSynchronizerModule.io.plInSignal := plInSignal
- sendReceiveSynchronizerModule.io.rdData := rdData
- sendReceiveSynchronizerModule.io.noNewDataReceiver := noNewDataReceiver
- sendReceiveSynchronizerModule.io.readNextData := readNextData
- sendReceiveSynchronizerModule.io.beginSendingBuffer := beginSendingBuffer
- sendReceiveSynchronizerModule.io.noNewDataSender := noNewDataSender
- sendReceiveSynchronizerModule.io.dataValidInput := dataValidInput
- sendReceiveSynchronizerModule.io.requestedActionOfThePacketInput := requestedActionOfThePacketInput
- sendReceiveSynchronizerModule.io.sendingData := sendingData
-
- //
- // Configure the output signals
- //
- psOutInterrupt := sendReceiveSynchronizerModule.io.psOutInterrupt
- rdWrAddr := sendReceiveSynchronizerModule.io.rdWrAddr
- wrEna := sendReceiveSynchronizerModule.io.wrEna
- wrData := sendReceiveSynchronizerModule.io.wrData
-
- requestedActionOfThePacketOutput := sendReceiveSynchronizerModule.io.requestedActionOfThePacketOutput
- requestedActionOfThePacketOutputValid := sendReceiveSynchronizerModule.io.requestedActionOfThePacketOutputValid
- dataValidOutput := sendReceiveSynchronizerModule.io.dataValidOutput
- receivingData := sendReceiveSynchronizerModule.io.receivingData
-
- sendWaitForBuffer := sendReceiveSynchronizerModule.io.sendWaitForBuffer
-
- //
- // Return the output result
- //
- (
- psOutInterrupt,
- rdWrAddr,
- wrEna,
- wrData,
- requestedActionOfThePacketOutput,
- requestedActionOfThePacketOutputValid,
- dataValidOutput,
- receivingData,
- sendWaitForBuffer
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/communication/sender.scala b/hwdbg/src/main/scala/hwdbg/communication/sender.scala
deleted file mode 100644
index e1c049d9..00000000
--- a/hwdbg/src/main/scala/hwdbg/communication/sender.scala
+++ /dev/null
@@ -1,494 +0,0 @@
-/**
- * @file
- * sender.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Remote debugger packet sender module
- * @details
- * @version 0.1
- * @date
- * 2024-04-16
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.communication
-
-import chisel3._
-import chisel3.util.{switch, is, log2Ceil}
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-import hwdbg.types._
-import hwdbg.constants._
-
-object DebuggerPacketSenderEnums {
- object State extends ChiselEnum {
- val sIdle, sWriteChecksum, sWriteIndicator, sWriteTypeOfThePacket, sWriteRequestedActionOfThePacket, sWaitToGetData, sSendData, sDone = Value
- }
-}
-
-class DebuggerPacketSender(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import state enum
- //
- import DebuggerPacketSenderEnums.State
- import DebuggerPacketSenderEnums.State._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Interrupt signals (lines)
- // Note: Only PS output signal is exported here,
- // a separate module will control the PL signal
- //
- val psOutInterrupt = Output(Bool()) // PL to PS interrupt
-
- //
- // BRAM (Block RAM) ports
- //
- val rdWrAddr = Output(UInt(instanceInfo.bramAddrWidth.W)) // read/write address
- val wrEna = Output(Bool()) // enable writing
- val wrData = Output(UInt(instanceInfo.bramDataWidth.W)) // write data
-
- //
- // Sending signals
- //
- val beginSendingBuffer = Input(Bool()) // should sender start sending buffers or not?
- val noNewDataSender = Input(Bool()) // should sender finish sending buffers or not?
- val dataValidInput = Input(Bool()) // should sender send next buffer or not?
-
- val sendWaitForBuffer = Output(Bool()) // should the external module send next buffer or not?
- val finishedSendingBuffer = Output(Bool()) // indicate that the sender finished sending buffers and ready to send next packet
-
- val requestedActionOfThePacketInput = Input(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W)) // the requested action
- val sendingData = Input(UInt(instanceInfo.bramDataWidth.W)) // data to be sent to the debugger
-
- })
-
- //
- // State registers
- //
- val state = RegInit(sIdle)
-
- //
- // Output pins
- //
- val psOutInterrupt = WireInit(false.B)
- val wrEna = WireInit(false.B)
- val wrData = WireInit(0.U(instanceInfo.bramDataWidth.W))
- val sendWaitForBuffer = WireInit(false.B)
- val finishedSendingBuffer = WireInit(false.B)
- val rdWrAddr = WireInit(0.U(instanceInfo.bramAddrWidth.W))
-
- //
- // Temporary address and data holder (register)
- //
- val regRdWrAddr = RegInit(0.U(instanceInfo.bramAddrWidth.W))
- val regDataToSend = RegInit(0.U(instanceInfo.bramDataWidth.W))
-
- //
- // Rising-edge detector for start sending signal
- //
- val risingEdgeBeginSendingBuffer = io.beginSendingBuffer & !RegNext(io.beginSendingBuffer)
-
- //
- // Keeping the state of whether sending data has been started or not
- // Means that if the sender is in the middle of sending the headers
- // of the packet or the actual data
- //
- val regIsSendingDataStarted = RegInit(false.B)
-
- //
- // Used to hold the transferred length of the indicator
- //
- val lengthOfIndicator: Int = new DebuggerRemotePacket().Indicator.getWidth
- val regTransferredIndicatorLength = RegInit(0.U((log2Ceil(lengthOfIndicator) + 1).W))
-
- //
- // Structure (as wire) of the received packet buffer
- //
- val sendingPacketBuffer = WireInit(0.U.asTypeOf(new DebuggerRemotePacket()))
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(state) {
-
- is(sIdle) {
-
- //
- // Check whether the interrupt from the PS is received or not
- //
- when(risingEdgeBeginSendingBuffer === true.B) {
- state := sWriteChecksum
- }
-
- //
- // Configure the outputs in case of sIdle
- //
- psOutInterrupt := false.B
- rdWrAddr := 0.U
- regRdWrAddr := 0.U
- wrEna := false.B
- wrData := 0.U
- sendWaitForBuffer := false.B
- finishedSendingBuffer := false.B
-
- //
- // Sending data has not been started
- //
- regIsSendingDataStarted := false.B
-
- }
- is(sWriteChecksum) {
-
- //
- // Enable writing to the BRAM
- //
- wrEna := true.B
-
- //
- // Adjust address to write Checksum to BRAM (Not Used)
- //
- rdWrAddr := (instanceInfo.debuggeeAreaOffset + sendingPacketBuffer.Offset.checksum).U
-
- //
- // Adjust data to write Checksum
- //
- wrData := 0.U // Checksum is ignored
-
- //
- // Reset the transferred bytes of the indicator
- //
- regTransferredIndicatorLength := 0.U
-
- //
- // Goes to the next section
- //
- state := sWriteIndicator
- }
- is(sWriteIndicator) {
-
- if (instanceInfo.bramDataWidth >= lengthOfIndicator) {
-
- //
- // Enable writing to the BRAM
- //
- wrEna := true.B
-
- //
- // Adjust address to write Indicator to BRAM
- //
- rdWrAddr := (instanceInfo.debuggeeAreaOffset + sendingPacketBuffer.Offset.indicator).U
-
- //
- // Adjust data to write Indicator
- //
- wrData := HyperDbgSharedConstants.INDICATOR_OF_HYPERDBG_PACKET.U
-
- //
- // Goes to the next section
- //
- state := sWriteTypeOfThePacket
-
- } else {
-
- //
- // Enable writing to the BRAM
- //
- wrEna := true.B
-
- //
- // Adjust address to write Indicator to BRAM (Address granularity is in the byte format so,
- // it'll be divided by 8 or shift to right by 3)
- //
- rdWrAddr := (instanceInfo.debuggeeAreaOffset + sendingPacketBuffer.Offset.indicator).U + (regTransferredIndicatorLength >> 3)
-
- //
- // Adjust data to write Indicator
- //
- wrData := HyperDbgSharedConstants.INDICATOR_OF_HYPERDBG_PACKET.U >> regTransferredIndicatorLength
-
- //
- // Add to the transferred length
- //
- regTransferredIndicatorLength := regTransferredIndicatorLength + instanceInfo.bramDataWidth.U
-
- when(regTransferredIndicatorLength >= lengthOfIndicator.U) {
-
- //
- // Disable writing to the BRAM
- //
- wrEna := false.B
-
- //
- // Goes to the next section
- //
- state := sWriteTypeOfThePacket
-
- }.otherwise {
-
- //
- // Stay at the same state
- //
- state := sWriteIndicator
- }
- }
- }
- is(sWriteTypeOfThePacket) {
-
- //
- // Enable writing to the BRAM
- //
- wrEna := true.B
-
- //
- // Adjust address to write type of packet to BRAM
- //
- rdWrAddr := (instanceInfo.debuggeeAreaOffset + sendingPacketBuffer.Offset.typeOfThePacket).U
-
- //
- // Adjust data to write type of packet
- //
- val packetType: DebuggerRemotePacketType.Value = DebuggerRemotePacketType.DEBUGGEE_TO_DEBUGGER_HARDWARE_LEVEL
- wrData := packetType.id.U
-
- //
- // Goes to the next section
- //
- state := sWriteRequestedActionOfThePacket
-
- }
- is(sWriteRequestedActionOfThePacket) {
-
- //
- // Enable writing to the BRAM
- //
- wrEna := true.B
-
- //
- // Adjust address to write requested action of packet to BRAM
- //
- rdWrAddr := (instanceInfo.debuggeeAreaOffset + sendingPacketBuffer.Offset.requestedActionOfThePacket).U
-
- //
- // Adjust data to write requested action of packet
- //
- wrData := io.requestedActionOfThePacketInput
-
- //
- // Goes to the next section
- //
- state := sWaitToGetData
-
- }
- is(sWaitToGetData) {
-
- //
- // Disable writing to the BRAM
- //
- wrEna := false.B
-
- //
- // Indicate that the module is waiting for data
- //
- sendWaitForBuffer := true.B
-
- //
- // Check whether sending actual data already started or not
- //
- when(regIsSendingDataStarted === false.B) {
-
- //
- // It's not yet started, so we adjust the address to the start
- // of the buffer after the last field of the header
- //
- regRdWrAddr := (instanceInfo.debuggeeAreaOffset + sendingPacketBuffer.Offset.startOfDataBuffer).U
-
- //
- // Indicate that sending data already started
- //
- regIsSendingDataStarted := true.B
- }
-
- //
- // Wait to receive the data or check whether sending was done at this state
- // (Two states will go us to the 'done' state)
- //
- when(io.noNewDataSender === true.B) {
-
- //
- // Sending data was done
- //
- state := sDone
-
- }.elsewhen(io.dataValidInput === true.B) {
-
- //
- // Store the data to send in a register
- //
- regDataToSend := io.sendingData
-
- //
- // The data is valid, so let's send it
- //
- state := sSendData
-
- }.otherwise {
-
- //
- // Stay in the same state as the data is not ready (valid)
- //
- state := sWaitToGetData
- }
-
- }
- is(sSendData) {
-
- //
- // Not waiting for the buffer at this state
- //
- sendWaitForBuffer := false.B
-
- //
- // Enable writing to the BRAM
- //
- wrEna := true.B
-
- //
- // Adjust address to write next data to BRAM (Address granularity is in the byte format so,
- // it'll be divided by 8 or shift to right by 3)
- //
- rdWrAddr := regRdWrAddr
- regRdWrAddr := regRdWrAddr + (instanceInfo.bramDataWidth >> 3).U
-
- //
- // Adjust data to write as the sending data
- //
- wrData := regDataToSend
-
- //
- // Check whether sending was done at this state (Two states will go us to the 'done' state)
- //
- when(io.noNewDataSender === true.B) {
-
- //
- // Sending data was done
- //
- state := sDone
-
- }.otherwise {
-
- //
- // Again go to the state for waiting for new data
- //
- state := sWaitToGetData
-
- }
-
- }
- is(sDone) {
-
- //
- // Adjust the output bits
- //
- finishedSendingBuffer := true.B
-
- //
- // Interrupt the PS
- //
- psOutInterrupt := true.B
-
- //
- // Go to the idle state
- //
- state := sIdle
- }
- }
- }
-
- // ---------------------------------------------------------------------
-
- //
- // Connect output pins to internal registers
- //
- io.psOutInterrupt := psOutInterrupt
- io.rdWrAddr := rdWrAddr
- io.wrEna := wrEna
- io.wrData := wrData
- io.sendWaitForBuffer := sendWaitForBuffer
- io.finishedSendingBuffer := finishedSendingBuffer
-
-}
-
-object DebuggerPacketSender {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- beginSendingBuffer: Bool,
- noNewDataSender: Bool,
- dataValidInput: Bool,
- requestedActionOfThePacketInput: UInt,
- sendingData: UInt
- ): (Bool, UInt, Bool, UInt, Bool, Bool) = {
-
- val debuggerPacketSender = Module(
- new DebuggerPacketSender(
- debug,
- instanceInfo
- )
- )
-
- val psOutInterrupt = Wire(Bool())
- val rdWrAddr = Wire(UInt(instanceInfo.bramAddrWidth.W))
- val wrEna = Wire(Bool())
- val wrData = Wire(UInt(instanceInfo.bramDataWidth.W))
- val sendWaitForBuffer = Wire(Bool())
- val finishedSendingBuffer = Wire(Bool())
-
- //
- // Configure the input signals
- //
- debuggerPacketSender.io.en := en
- debuggerPacketSender.io.beginSendingBuffer := beginSendingBuffer
- debuggerPacketSender.io.noNewDataSender := noNewDataSender
- debuggerPacketSender.io.dataValidInput := dataValidInput
- debuggerPacketSender.io.requestedActionOfThePacketInput := requestedActionOfThePacketInput
- debuggerPacketSender.io.sendingData := sendingData
-
- //
- // Configure the output signals
- //
- psOutInterrupt := debuggerPacketSender.io.psOutInterrupt
- rdWrAddr := debuggerPacketSender.io.rdWrAddr
- wrEna := debuggerPacketSender.io.wrEna
- wrData := debuggerPacketSender.io.wrData
-
- //
- // Configure the output signals related to sending packets
- //
- sendWaitForBuffer := debuggerPacketSender.io.sendWaitForBuffer
- finishedSendingBuffer := debuggerPacketSender.io.finishedSendingBuffer
-
- //
- // Return the output result
- //
- (psOutInterrupt, rdWrAddr, wrEna, wrData, sendWaitForBuffer, finishedSendingBuffer)
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/configs/config.json b/hwdbg/src/main/scala/hwdbg/configs/config.json
deleted file mode 100644
index b2fb33f2..00000000
--- a/hwdbg/src/main/scala/hwdbg/configs/config.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "Version": {
- "VERSION_MAJOR": 0,
- "VERSION_MINOR": 2,
- "VERSION_PATCH": 0
- },
- "DebuggerConfigurations": {
- "ENABLE_DEBUG": true,
- "NUMBER_OF_PINS": 32,
- "PORT_PINS_MAP": [12, 20]
- },
- "ScriptEngineConfigurations": {
- "MAXIMUM_NUMBER_OF_STAGES": 32,
- "MAXIMUM_NUMBER_OF_SUPPORTED_GET_SCRIPT_OPERATORS": 2,
- "MAXIMUM_NUMBER_OF_SUPPORTED_SET_SCRIPT_OPERATORS": 1,
- "SCRIPT_VARIABLE_LENGTH": 8,
- "NUMBER_OF_SUPPORTED_LOCAL_AND_GLOBAL_VARIABLES": 2,
- "NUMBER_OF_SUPPORTED_TEMPORARY_VARIABLES": 2,
- "SCRIPT_ENGINE_EVAL_CAPABILITIES": [
- "assign_local_global_var",
- "assign_registers",
- "conditional_statements_and_comparison_operators",
- "stack_assignments",
- "func_or",
- "func_xor",
- "func_and",
- "func_asl",
- "func_add",
- "func_sub",
- "func_mul",
- "func_gt",
- "func_lt",
- "func_egt",
- "func_elt",
- "func_equal",
- "func_neq",
- "func_jmp",
- "func_jz",
- "func_jnz",
- "func_mov"
- ]
- },
- "MemoryCommunicationConfigurations": {
- "BLOCK_RAM_ADDR_WIDTH": 13,
- "BLOCK_RAM_DATA_WIDTH": 32,
- "ENABLE_BLOCK_RAM_DELAY": true,
- "DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE": 1024,
- "BASE_ADDRESS_OF_PS_TO_PL_COMMUNICATION": 0,
- "BASE_ADDRESS_OF_PL_TO_PS_COMMUNICATION": 512
- }
- }
-
\ No newline at end of file
diff --git a/hwdbg/src/main/scala/hwdbg/configs/configs.scala b/hwdbg/src/main/scala/hwdbg/configs/configs.scala
deleted file mode 100644
index a315055b..00000000
--- a/hwdbg/src/main/scala/hwdbg/configs/configs.scala
+++ /dev/null
@@ -1,500 +0,0 @@
-/**
- * @file
- * configs.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Configuration files
- * @details
- * @version 0.1
- * @date
- * 2024-04-03
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.configs
-
-import io.circe._
-import io.circe.parser._
-import io.circe.generic.auto._
-import scala.io.Source
-
-import chisel3._
-import chisel3.util._
-
-import hwdbg.utils._
-
-/**
- * @brief
- * Version of hwdbg (Definition and Default Values)
- * @warning
- * will be checked with HyperDbg
- */
-object Version {
-
- //
- // Constant version info
- //
- var VERSION_MAJOR: Int = 0
- var VERSION_MINOR: Int = 1
- var VERSION_PATCH: Int = 0
-
- def getEncodedVersion: Int = {
- (VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | VERSION_PATCH
- }
-
- def extractMajor(encodedVersion: Int): Int = {
- encodedVersion >> 16
- }
-
- def extractMinor(encodedVersion: Int): Int = {
- (encodedVersion >> 8) & 0xff // Masking to get only the 8 bits
- }
-
- def extractPatch(encodedVersion: Int): Int = {
- encodedVersion & 0xff // Masking to get only the 8 bits
- }
-}
-
-/**
- * @brief
- * Design constants (Definition and Default Values)
- */
-object DebuggerConfigurations {
-
- //
- // whether to enable debug or not
- //
- var ENABLE_DEBUG: Boolean = true
-
- //
- // Number of input/output pins
- //
- var NUMBER_OF_PINS: Int = 32
-
- //
- // The configuration of ports and pins
- //
- // The following constant shows the key value object of the mappings
- // of pins to ports (used for inputs/outputs)
- // For example,
- // port 0 (in) -> contains 12 pins
- // port 1 (in) -> contains 20 pins
- //
- // var PORT_PINS_MAP: Array[Int] = Array(12, 18, 2)
- // var PORT_PINS_MAP: Array[Int] = Array(12, 10, 5, 3, 2)
- var PORT_PINS_MAP: Array[Int] = Array(12, 20)
-}
-
-/**
- * @brief
- * Design constants for script engine (Definition and Default Values)
- */
-object ScriptEngineConfigurations {
-
- //
- // Maximum number of stages
- //
- var MAXIMUM_NUMBER_OF_STAGES: Int = 32
-
- //
- // Maximum number of stages
- //
- var MAXIMUM_NUMBER_OF_SUPPORTED_GET_SCRIPT_OPERATORS: Int = 2 // for get values
-
- //
- // Maximum number of stages
- //
- var MAXIMUM_NUMBER_OF_SUPPORTED_SET_SCRIPT_OPERATORS: Int = 1 // for get value
-
- //
- // Script variable length
- //
- var SCRIPT_VARIABLE_LENGTH: Int = 8
-
- //
- // Number supported of local and global variables
- //
- var NUMBER_OF_SUPPORTED_LOCAL_AND_GLOBAL_VARIABLES: Int = 2
-
- //
- // Number supported of temporary variables
- //
- var NUMBER_OF_SUPPORTED_TEMPORARY_VARIABLES: Int = 2
-
- //
- // Define the capabilities you want to enable
- //
- var SCRIPT_ENGINE_EVAL_CAPABILITIES = Seq(
- //
- // Statements and expressions
- //
- HwdbgScriptCapabilities.assign_local_global_var,
- HwdbgScriptCapabilities.assign_registers,
- // HwdbgScriptCapabilities.assign_pseudo_registers,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators,
- HwdbgScriptCapabilities.stack_assignments,
-
- //
- // Operators
- //
- HwdbgScriptCapabilities.func_or,
- HwdbgScriptCapabilities.func_xor,
- HwdbgScriptCapabilities.func_and,
- HwdbgScriptCapabilities.func_asl,
- HwdbgScriptCapabilities.func_add,
- HwdbgScriptCapabilities.func_sub,
- HwdbgScriptCapabilities.func_mul,
- // HwdbgScriptCapabilities.func_div,
- // HwdbgScriptCapabilities.func_mod,
- HwdbgScriptCapabilities.func_gt,
- HwdbgScriptCapabilities.func_lt,
- HwdbgScriptCapabilities.func_egt,
- HwdbgScriptCapabilities.func_elt,
- HwdbgScriptCapabilities.func_equal,
- HwdbgScriptCapabilities.func_neq,
- HwdbgScriptCapabilities.func_jmp,
- HwdbgScriptCapabilities.func_jz,
- HwdbgScriptCapabilities.func_jnz,
- HwdbgScriptCapabilities.func_mov
- // HwdbgScriptCapabilities.func_printf,
- )
-}
-
-/**
- * @brief
- * The constants for memory communication (Definition and Default Values)
- */
-object MemoryCommunicationConfigurations {
-
- //
- // Address width of the Block RAM (BRAM)
- //
- var BLOCK_RAM_ADDR_WIDTH: Int = 13
-
- //
- // Data width of the Block RAM (BRAM)
- //
- var BLOCK_RAM_DATA_WIDTH: Int = 32
-
- //
- // Emulate block RAM by inferring a register to delay one clock cycle
- //
- var ENABLE_BLOCK_RAM_DELAY: Boolean = true
-
- //
- // Default number of bytes used in initialized SRAM memory
- //
- var DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE: Int = 8192 / 8 // 8 Kilobits
-
- //
- // Base address of PS to PL SRAM communication memory
- //
- var BASE_ADDRESS_OF_PS_TO_PL_COMMUNICATION: Int = 0
-
- //
- // Base address of PL to PS SRAM communication memory
- //
- var BASE_ADDRESS_OF_PL_TO_PS_COMMUNICATION: Int = DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE / 2
-}
-
-/**
- * @brief
- * The structure of script capabilities information in hwdbg
- * @details
- * Same as _HWDBG_INSTANCE_INFORMATION in HyperDbg
- */
-case class HwdbgInstanceInformation(
- version: Int, // Target version of HyperDbg (same as hwdbg)
- maximumNumberOfStages: Int, // Number of stages that this instance of hwdbg supports (NumberOfSupportedStages == 0 means script engine is disabled)
- scriptVariableLength: Int, // Maximum length of variables (and other script elements)
- numberOfSupportedLocalAndGlobalVariables: Int, // Number of supported local (and global) variables
- numberOfSupportedTemporaryVariables: Int, // Number of supported temporary variables
- maximumNumberOfSupportedGetScriptOperators: Int, // Maximum supported GET operators in a single func
- maximumNumberOfSupportedSetScriptOperators: Int, // Maximum supported SET operators in a single func
- sharedMemorySize: Int, // Size of shared memory
- debuggerAreaOffset: Int, // The memory offset of debugger
- debuggeeAreaOffset: Int, // The memory offset of debuggee
- numberOfPins: Int, // Number of pins
- numberOfPorts: Int, // Number of ports
- scriptCapabilities: Long, // Capabilities bitmask
- bramAddrWidth: Int, // BRAM address width
- bramDataWidth: Int, // BRAM data width
- portsConfiguration: Array[Int] // Port arrangement
-)
-
-/**
- * @brief
- * The script engine capabilities (Definition and Default Values)
- */
-object HwdbgScriptCapabilities {
-
- //
- // Statements and expressions
- //
- val assign_local_global_var: Long = 1L << 0
- val assign_registers: Long = 1L << 1
- val assign_pseudo_registers: Long = 1L << 2
- val conditional_statements_and_comparison_operators: Long = 1L << 3
- val stack_assignments: Long = 1L << 4
-
- //
- // Operators
- //
- val func_or: Long = 1L << 5
- val func_xor: Long = 1L << 6
- val func_and: Long = 1L << 7
- val func_asr: Long = 1L << 8
- val func_asl: Long = 1L << 9
- val func_add: Long = 1L << 10
- val func_sub: Long = 1L << 11
- val func_mul: Long = 1L << 12
- val func_div: Long = 1L << 13
- val func_mod: Long = 1L << 14
- val func_gt: Long = 1L << 15
- val func_lt: Long = 1L << 16
- val func_egt: Long = 1L << 17
- val func_elt: Long = 1L << 18
- val func_equal: Long = 1L << 19
- val func_neq: Long = 1L << 20
- val func_jmp: Long = 1L << 21
- val func_jz: Long = 1L << 22
- val func_jnz: Long = 1L << 23
- val func_mov: Long = 1L << 24
- val func_printf: Long = 1L << 25
-
- def allCapabilities: Seq[Long] = Seq(
- assign_local_global_var,
- assign_registers,
- assign_pseudo_registers,
- conditional_statements_and_comparison_operators,
- stack_assignments,
- func_or,
- func_xor,
- func_and,
- func_asr,
- func_asl,
- func_add,
- func_sub,
- func_mul,
- func_div,
- func_mod,
- func_gt,
- func_lt,
- func_egt,
- func_elt,
- func_equal,
- func_neq,
- func_jmp,
- func_jz,
- func_jnz,
- func_mov,
- func_printf
- )
-
- //
- // Utility method to create a bitmask from a sequence of capabilities
- //
- def createCapabilitiesMask(capabilities: Seq[Long]): Long = {
- capabilities.foldLeft(0L)(_ | _)
- }
-
- //
- // Function to check if a capability is supported
- //
- def isCapabilitySupported(supportedCapabilities: Long, capability: Long): Boolean = {
- (supportedCapabilities & capability) != 0
- }
-
-}
-
-object HwdbgInstanceInformation {
-
- //
- // Function to create an instance of HwdbgInstanceInformation
- //
- def createInstanceInformation(
- version: Int,
- maximumNumberOfStages: Int,
- scriptVariableLength: Int,
- numberOfSupportedLocalAndGlobalVariables: Int,
- numberOfSupportedTemporaryVariables: Int,
- maximumNumberOfSupportedGetScriptOperators: Int,
- maximumNumberOfSupportedSetScriptOperators: Int,
- sharedMemorySize: Int,
- debuggerAreaOffset: Int,
- debuggeeAreaOffset: Int,
- numberOfPins: Int,
- numberOfPorts: Int,
- enabledCapabilities: Seq[Long],
- bramAddrWidth: Int,
- bramDataWidth: Int,
- portsConfiguration: Array[Int]
- ): HwdbgInstanceInformation = {
-
- val capabilitiesMask = HwdbgScriptCapabilities.createCapabilitiesMask(enabledCapabilities)
-
- //
- // Printing the versioning info
- //
- LogInfo(true)("=======================================================================")
- LogInfo(true)(
- s"Generating code for hwdbg v${Version.extractMajor(version)}.${Version.extractMinor(version)}.${Version.extractPatch(version)} ($version)"
- )
- LogInfo(true)("Please visit https://hwdbg.hyperdbg.org/docs for more information...")
- LogInfo(true)("hwdbg is released under the GNU Public License v3 (GPLv3).")
- LogInfo(true)("=======================================================================")
-
- HwdbgInstanceInformation(
- version = version,
- maximumNumberOfStages = maximumNumberOfStages,
- scriptVariableLength = scriptVariableLength,
- numberOfSupportedLocalAndGlobalVariables = numberOfSupportedLocalAndGlobalVariables,
- numberOfSupportedTemporaryVariables = numberOfSupportedTemporaryVariables,
- maximumNumberOfSupportedGetScriptOperators = maximumNumberOfSupportedGetScriptOperators,
- maximumNumberOfSupportedSetScriptOperators = maximumNumberOfSupportedSetScriptOperators,
- sharedMemorySize = sharedMemorySize,
- debuggerAreaOffset = debuggerAreaOffset,
- debuggeeAreaOffset = debuggeeAreaOffset,
- numberOfPins = numberOfPins,
- numberOfPorts = numberOfPorts,
- scriptCapabilities = capabilitiesMask,
- bramAddrWidth = bramAddrWidth,
- bramDataWidth = bramDataWidth,
- portsConfiguration = portsConfiguration
- )
- }
-}
-
-object ConfigLoader {
-
- //
- // Case classes for each configuration section
- //
- case class VersionConfig(
- VERSION_MAJOR: Int,
- VERSION_MINOR: Int,
- VERSION_PATCH: Int
- )
- case class DebuggerConfigurationsConfig(
- ENABLE_DEBUG: Boolean,
- NUMBER_OF_PINS: Int,
- PORT_PINS_MAP: Array[Int]
- )
- case class ScriptEngineConfigurationsConfig(
- MAXIMUM_NUMBER_OF_STAGES: Int,
- MAXIMUM_NUMBER_OF_SUPPORTED_GET_SCRIPT_OPERATORS: Int,
- MAXIMUM_NUMBER_OF_SUPPORTED_SET_SCRIPT_OPERATORS: Int,
- SCRIPT_VARIABLE_LENGTH: Int,
- NUMBER_OF_SUPPORTED_LOCAL_AND_GLOBAL_VARIABLES: Int,
- NUMBER_OF_SUPPORTED_TEMPORARY_VARIABLES: Int,
- SCRIPT_ENGINE_EVAL_CAPABILITIES: Seq[String]
- )
- case class MemoryCommunicationConfigurationsConfig(
- BLOCK_RAM_ADDR_WIDTH: Int,
- BLOCK_RAM_DATA_WIDTH: Int,
- ENABLE_BLOCK_RAM_DELAY: Boolean,
- DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE: Int,
- BASE_ADDRESS_OF_PS_TO_PL_COMMUNICATION: Int,
- BASE_ADDRESS_OF_PL_TO_PS_COMMUNICATION: Int
- )
- case class FullConfig(
- Version: VersionConfig,
- DebuggerConfigurations: DebuggerConfigurationsConfig,
- ScriptEngineConfigurations: ScriptEngineConfigurationsConfig,
- MemoryCommunicationConfigurations: MemoryCommunicationConfigurationsConfig
- )
-
- //
- // Function to load configuration from a JSON file
- //
- def loadConfig(filePath: String): Option[FullConfig] = {
- val source = Source.fromFile(filePath)
- val jsonString = try source.getLines().mkString("\n") finally source.close()
-
- decode[FullConfig](jsonString) match {
- case Right(config) => Some(config)
- case Left(error) =>
- println(s"Failed to parse JSON configuration: $error")
- None
- }
- }
-}
-
-object LoadConfiguration {
-
- def loadFromJson(configPath: String): Unit = {
-
- val configOpt = ConfigLoader.loadConfig(configPath)
-
- configOpt.foreach { config =>
-
- //
- // *** Set the values in the respective objects ***
- //
-
- //
- // Read the version
- //
- Version.VERSION_MAJOR = config.Version.VERSION_MAJOR
- Version.VERSION_MINOR = config.Version.VERSION_MINOR
- Version.VERSION_PATCH = config.Version.VERSION_PATCH
-
- //
- // Read the debugger configurations
- //
- DebuggerConfigurations.ENABLE_DEBUG = config.DebuggerConfigurations.ENABLE_DEBUG
- DebuggerConfigurations.NUMBER_OF_PINS = config.DebuggerConfigurations.NUMBER_OF_PINS
- DebuggerConfigurations.PORT_PINS_MAP = config.DebuggerConfigurations.PORT_PINS_MAP
-
- //
- // Read the script engine configurations
- //
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_STAGES = config.ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_STAGES
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_GET_SCRIPT_OPERATORS = config.ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_GET_SCRIPT_OPERATORS
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_SET_SCRIPT_OPERATORS = config.ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_SET_SCRIPT_OPERATORS
- ScriptEngineConfigurations.SCRIPT_VARIABLE_LENGTH = config.ScriptEngineConfigurations.SCRIPT_VARIABLE_LENGTH
- ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_LOCAL_AND_GLOBAL_VARIABLES = config.ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_LOCAL_AND_GLOBAL_VARIABLES
- ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_TEMPORARY_VARIABLES = config.ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_TEMPORARY_VARIABLES
-
- //
- // Convert string capability names to the corresponding values in HwdbgScriptCapabilities
- //
- ScriptEngineConfigurations.SCRIPT_ENGINE_EVAL_CAPABILITIES = config.ScriptEngineConfigurations.SCRIPT_ENGINE_EVAL_CAPABILITIES.flatMap {
- case "assign_local_global_var" => Some(HwdbgScriptCapabilities.assign_local_global_var)
- case "assign_registers" => Some(HwdbgScriptCapabilities.assign_registers)
- case "conditional_statements_and_comparison_operators" => Some(HwdbgScriptCapabilities.conditional_statements_and_comparison_operators)
- case "stack_assignments" => Some(HwdbgScriptCapabilities.stack_assignments)
- case "func_or" => Some(HwdbgScriptCapabilities.func_or)
- case "func_xor" => Some(HwdbgScriptCapabilities.func_xor)
- case "func_and" => Some(HwdbgScriptCapabilities.func_and)
- case "func_asl" => Some(HwdbgScriptCapabilities.func_asl)
- case "func_add" => Some(HwdbgScriptCapabilities.func_add)
- case "func_sub" => Some(HwdbgScriptCapabilities.func_sub)
- case "func_mul" => Some(HwdbgScriptCapabilities.func_mul)
- case "func_gt" => Some(HwdbgScriptCapabilities.func_gt)
- case "func_lt" => Some(HwdbgScriptCapabilities.func_lt)
- case "func_egt" => Some(HwdbgScriptCapabilities.func_egt)
- case "func_elt" => Some(HwdbgScriptCapabilities.func_elt)
- case "func_equal" => Some(HwdbgScriptCapabilities.func_equal)
- case "func_neq" => Some(HwdbgScriptCapabilities.func_neq)
- case "func_jmp" => Some(HwdbgScriptCapabilities.func_jmp)
- case "func_jz" => Some(HwdbgScriptCapabilities.func_jz)
- case "func_jnz" => Some(HwdbgScriptCapabilities.func_jnz)
- case "func_mov" => Some(HwdbgScriptCapabilities.func_mov)
- case _ => None
- }
-
- //
- // Read memory communication configurations
- //
- MemoryCommunicationConfigurations.BLOCK_RAM_ADDR_WIDTH = config.MemoryCommunicationConfigurations.BLOCK_RAM_ADDR_WIDTH
- MemoryCommunicationConfigurations.BLOCK_RAM_DATA_WIDTH = config.MemoryCommunicationConfigurations.BLOCK_RAM_DATA_WIDTH
- MemoryCommunicationConfigurations.ENABLE_BLOCK_RAM_DELAY = config.MemoryCommunicationConfigurations.ENABLE_BLOCK_RAM_DELAY
- MemoryCommunicationConfigurations.DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE = config.MemoryCommunicationConfigurations.DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE
- MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PS_TO_PL_COMMUNICATION = config.MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PS_TO_PL_COMMUNICATION
- MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PL_TO_PS_COMMUNICATION = config.MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PL_TO_PS_COMMUNICATION
- }
- }
-}
\ No newline at end of file
diff --git a/hwdbg/src/main/scala/hwdbg/configs/constants.scala b/hwdbg/src/main/scala/hwdbg/configs/constants.scala
deleted file mode 100644
index 9a4e219d..00000000
--- a/hwdbg/src/main/scala/hwdbg/configs/constants.scala
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * @file
- * constants.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Constant values
- * @details
- * @version 0.1
- * @date
- * 2024-04-16
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.constants
-
-import chisel3._
-import chisel3.util._
-
-/**
- * @brief
- * Shared value with HyperDbg
- * @warning
- * used in HyperDbg
- */
-object HyperDbgSharedConstants {
-
- //
- // Constant indicator of a HyperDbg packet
- //
- val INDICATOR_OF_HYPERDBG_PACKET: Long = 0x4859504552444247L // HYPERDBG = 0x4859504552444247
-
-}
-
-/**
- * @brief
- * Enumeration for different packet types in HyperDbg packets (DEBUGGER_REMOTE_PACKET_TYPE)
- * @warning
- * Used in HyperDbg
- */
-object DebuggerRemotePacketType extends Enumeration {
-
- //
- // Debugger to debuggee (vmx-root)
- //
- val DEBUGGER_TO_DEBUGGEE_EXECUTE_ON_VMX_ROOT = Value(1)
-
- //
- // Debugger to debuggee (user-mode)
- //
- val DEBUGGER_TO_DEBUGGEE_EXECUTE_ON_USER_MODE = Value(2)
-
- //
- // Debuggee to debugger (user-mode and kernel-mode, vmx-root mode)
- //
- val DEBUGGEE_TO_DEBUGGER = Value(3)
-
- //
- // Debugger to debuggee (hardware), used in hwdbg
- //
- val DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL = Value(4)
-
- //
- // Debuggee to debugger (hardware), used in hwdbg
- //
- val DEBUGGEE_TO_DEBUGGER_HARDWARE_LEVEL = Value(5)
-}
diff --git a/hwdbg/src/main/scala/hwdbg/configs/test_configs.scala b/hwdbg/src/main/scala/hwdbg/configs/test_configs.scala
deleted file mode 100644
index f34ba50e..00000000
--- a/hwdbg/src/main/scala/hwdbg/configs/test_configs.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * @file
- * configs.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Configuration files for testing hwdbg
- * @details
- * @version 0.1
- * @date
- * 2024-04-15
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.configs
-
-import chisel3._
-import chisel3.util._
-
-/**
- * @brief
- * The configuration constants for testing
- */
-object TestingConfigurations {
-
- // val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/instance_info.hex.txt"
- val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/script_buffer.hex.txt"
- // val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/script_conditional_statements_pins.hex.txt"
- // val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/script_simple_pin_assignments.hex.txt"
- // val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/script_simple_port_assignments.hex.txt"
- // val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/script_conditional_statements_ports.hex.txt"
- // val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/script_conditional_statements_ports_with_port_assignments.hex.txt"
- // val BRAM_INITIALIZATION_FILE_PATH: String = "./src/test/bram/script_conditional_statement_global_var.txt"
-
-}
diff --git a/hwdbg/src/main/scala/hwdbg/libs/mem/init_mem.scala b/hwdbg/src/main/scala/hwdbg/libs/mem/init_mem.scala
deleted file mode 100644
index ba957a7b..00000000
--- a/hwdbg/src/main/scala/hwdbg/libs/mem/init_mem.scala
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * @file
- * init_mem.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Initialize SRAM memory from a file
- * @details
- * @version 0.1
- * @date
- * 2024-04-03
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.libs.mem
-
-import chisel3._
-import chisel3.util.experimental.loadMemoryFromFileInline
-
-import hwdbg.configs._
-
-class InitMemInline(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- memoryFile: String,
- addrWidth: Int,
- width: Int,
- size: Int
-) extends Module {
-
- val io = IO(new Bundle {
- val enable = Input(Bool())
- val write = Input(Bool())
- val addr = Input(UInt(addrWidth.W))
- val dataIn = Input(UInt(width.W))
- val dataOut = Output(UInt(width.W))
- })
-
- val mem = SyncReadMem(size / width, UInt(width.W))
-
- //
- // Initialize memory
- //
- if (memoryFile.trim().nonEmpty) {
- loadMemoryFromFileInline(mem, memoryFile)
- }
-
- io.dataOut := DontCare
-
- when(io.enable) {
- val rdwrPort = mem(io.addr)
- when(io.write) {
- rdwrPort := io.dataIn
- }.otherwise {
- io.dataOut := rdwrPort
- }
- }
-}
-
-object InitMemInline {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- memoryFile: String,
- addrWidth: Int,
- width: Int,
- size: Int
- )(
- enable: Bool,
- write: Bool,
- addr: UInt,
- dataIn: UInt
- ): UInt = {
-
- val initMemInlineModule = Module(
- new InitMemInline(
- debug,
- memoryFile,
- addrWidth,
- width,
- size
- )
- )
-
- val dataOut = Wire(UInt(width.W))
-
- //
- // Configure the input signals
- //
- initMemInlineModule.io.enable := enable
- initMemInlineModule.io.write := write
- initMemInlineModule.io.addr := addr
- initMemInlineModule.io.dataIn := dataIn
-
- //
- // Configure the output signals
- //
- dataOut := initMemInlineModule.io.dataOut
-
- //
- // Return the output result
- //
- dataOut
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/libs/mem/init_reg_mem_from_file.scala b/hwdbg/src/main/scala/hwdbg/libs/mem/init_reg_mem_from_file.scala
deleted file mode 100644
index 0c5c2475..00000000
--- a/hwdbg/src/main/scala/hwdbg/libs/mem/init_reg_mem_from_file.scala
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * @file
- * init_reg_mem_from_file.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Initialize registers from a file
- * @details
- * @version 0.1
- * @date
- * 2024-04-14
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.libs.mem
-
-import scala.collection.mutable.ArrayBuffer
-import scala.io.Source
-
-import chisel3._
-
-import hwdbg.utils._
-import hwdbg.configs._
-
-object InitRegMemFromFileTools {
- def readmemh(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- path: String,
- width: Int
- ): Seq[UInt] = {
-
- var counter: Int = 0
- val buffer = new ArrayBuffer[UInt]
- for (line <- Source.fromFile(path).getLines()) {
-
- val tokens: Array[String] = line.split("(//)").map(_.trim)
-
- if (tokens.nonEmpty && tokens.head != "" && tokens.head.split(";")(0).trim != "") {
-
- val i = Integer.parseInt(tokens.head.split(";")(0).trim, 16)
-
- LogInfo(debug)(
- f"Initialize memory [${counter}%x]: 0x${i}%x"
- )
-
- counter = counter + 4
- buffer.append(i.U(width.W))
- }
- }
-
- buffer.toSeq
-
- }
-}
-
-class InitRegMemFromFile(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- emulateBlockRamDelay: Boolean,
- memoryFile: String,
- addrWidth: Int,
- width: Int,
- size: Int
-) extends Module {
-
- val io = IO(new Bundle {
- val enable = Input(Bool())
- val write = Input(Bool())
- val addr = Input(UInt(addrWidth.W))
- val dataIn = Input(UInt(width.W))
- val dataOut = Output(UInt(width.W))
- })
-
- //
- // Not needed to show the BRAM information
- //
- val mem = RegInit(VecInit(InitRegMemFromFileTools.readmemh(false, memoryFile, width)))
-
- val actualAddr = Wire(UInt(addrWidth.W))
- val actualData = Wire(UInt(width.W))
- val actualWrite = Wire(Bool())
-
- //
- // This because the address of the saved registers are using 4 bytes granularities
- // E.g., 4 Rsh 2 = 1 | 8 Rsh 2 = 2 | 12 Rsh 2 = 3
- //
- if (emulateBlockRamDelay) {
- //
- // In case, if it is an emulation of BRAM, a one clock delay is injected
- //
- actualAddr := RegNext(io.addr >> 2)
- actualData := RegNext(io.dataIn)
- actualWrite := RegNext(io.write)
- } else {
- actualAddr := io.addr >> 2
- actualData := io.dataIn
- actualWrite := io.write
- }
-
- when(io.enable) {
- val rdwrPort = mem(actualAddr)
- io.dataOut := rdwrPort
-
- when(actualWrite) {
- mem(actualAddr) := actualData
- }
- }.otherwise {
- io.dataOut := 0.U
- }
-}
-
-object InitRegMemFromFile {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- emulateBlockRamDelay: Boolean,
- memoryFile: String,
- addrWidth: Int,
- width: Int,
- size: Int
- )(
- enable: Bool,
- write: Bool,
- addr: UInt,
- dataIn: UInt
- ): UInt = {
-
- val initRegMemFromFileModule = Module(
- new InitRegMemFromFile(
- debug,
- emulateBlockRamDelay,
- memoryFile,
- addrWidth,
- width,
- size
- )
- )
-
- val dataOut = Wire(UInt(width.W))
-
- //
- // Configure the input signals
- //
- initRegMemFromFileModule.io.enable := enable
- initRegMemFromFileModule.io.write := write
- initRegMemFromFileModule.io.addr := addr
- initRegMemFromFileModule.io.dataIn := dataIn
-
- //
- // Configure the output signals
- //
- dataOut := initRegMemFromFileModule.io.dataOut
-
- //
- // Return the output result
- //
- dataOut
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/libs/mux/mux_2_to_1_io.scala b/hwdbg/src/main/scala/hwdbg/libs/mux/mux_2_to_1_io.scala
deleted file mode 100644
index a011d9c5..00000000
--- a/hwdbg/src/main/scala/hwdbg/libs/mux/mux_2_to_1_io.scala
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * @file
- * mux_2_to_1_io.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Implementation of MUX 2 to 1 (I/O)
- * @details
- * @version 0.1
- * @date
- * 2024-05-05
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.libs.mux
-
-import chisel3._
-
-import hwdbg.configs._
-
-class Mux2To1IO(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG
-) extends Module {
-
- val io = IO(new Bundle {
-
- val a = Input(Bool())
- val b = Input(Bool())
- val select = Input(Bool())
- val out = Output(Bool())
-
- })
- io.out := io.a & io.select | io.b & (~io.select)
-
-}
-
-object Mux2To1IO {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG
- )(
- a: Bool,
- b: Bool,
- select: Bool
- ): (Bool) = {
-
- val mux2To1IO = Module(
- new Mux2To1IO(
- debug
- )
- )
-
- val out = Wire(Bool())
-
- //
- // Configure the input signals
- //
- mux2To1IO.io.a := a
- mux2To1IO.io.b := b
- mux2To1IO.io.select := select
-
- //
- // Configure the output signals
- //
- out := mux2To1IO.io.out
-
- //
- // Return the output result
- //
- out
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/libs/mux/mux_2_to_1_lookup.scala b/hwdbg/src/main/scala/hwdbg/libs/mux/mux_2_to_1_lookup.scala
deleted file mode 100644
index eeebef43..00000000
--- a/hwdbg/src/main/scala/hwdbg/libs/mux/mux_2_to_1_lookup.scala
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * @file
- * mux_2_to_1_lookup.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Implementation of MUX 2 to 1 (Mux-Lookup)
- * @details
- * @version 0.1
- * @date
- * 2024-05-05
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.libs.mux
-
-import chisel3._
-import chisel3.util._
-
-import hwdbg.configs._
-
-class Mux2To1Lookup(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG
-) extends Module {
-
- val io = IO(new Bundle {
-
- val a = Input(Bool())
- val b = Input(Bool())
- val select = Input(Bool())
- val out = Output(Bool())
-
- })
-
- val inputs = Array(
- false.B -> io.a,
- true.B -> io.b
- )
-
- io.out := MuxLookup(io.select, io.a)(inputs)
-
-}
-
-object Mux2To1Lookup {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG
- )(
- a: Bool,
- b: Bool,
- select: Bool
- ): (Bool) = {
-
- val mux2To1Lookup = Module(
- new Mux2To1Lookup(
- debug
- )
- )
-
- val out = Wire(Bool())
-
- //
- // Configure the input signals
- //
- mux2To1Lookup.io.a := a
- mux2To1Lookup.io.b := b
- mux2To1Lookup.io.select := select
-
- //
- // Configure the output signals
- //
- out := mux2To1Lookup.io.out
-
- //
- // Return the output result
- //
- out
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/libs/mux/mux_4_to_1_onehot.scala b/hwdbg/src/main/scala/hwdbg/libs/mux/mux_4_to_1_onehot.scala
deleted file mode 100644
index dfa9e0b9..00000000
--- a/hwdbg/src/main/scala/hwdbg/libs/mux/mux_4_to_1_onehot.scala
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * @file
- * mux_4_to_1_onehot.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Implementation of MUX 4 to 1 (One Hot)
- * @details
- * @version 0.1
- * @date
- * 2024-05-05
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.libs.mux
-
-import chisel3._
-import chisel3.util._
-
-import hwdbg.configs._
-
-class Mux4To1OneHot(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- width: Int = 32
-) extends Module {
-
- val io = IO(new Bundle {
-
- val in0 = Input(UInt(width.W))
- val in1 = Input(UInt(width.W))
- val in2 = Input(UInt(width.W))
- val in3 = Input(UInt(width.W))
- val sel = Input(UInt(log2Ceil(width).W))
- val out = Output(UInt(width.W))
-
- })
-
- io.out := Mux1H(io.sel, Seq(io.in0, io.in1, io.in2, io.in3))
-
-}
-
-object Mux4To1OneHot {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- width: Int = 32
- )(
- in0: UInt,
- in1: UInt,
- in2: UInt,
- in3: UInt,
- sel: UInt
- ): (UInt) = {
-
- val mux4To1OneHot = Module(
- new Mux4To1OneHot(
- debug
- )
- )
-
- val out = Wire(UInt(width.W))
-
- //
- // Configure the input signals
- //
- mux4To1OneHot.io.in0 := in0
- mux4To1OneHot.io.in1 := in1
- mux4To1OneHot.io.in2 := in2
- mux4To1OneHot.io.in3 := in3
- mux4To1OneHot.io.sel := sel
-
- //
- // Configure the output signals
- //
- out := mux4To1OneHot.io.out
-
- //
- // Return the output result
- //
- out
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/main.scala b/hwdbg/src/main/scala/hwdbg/main.scala
deleted file mode 100644
index 87955c35..00000000
--- a/hwdbg/src/main/scala/hwdbg/main.scala
+++ /dev/null
@@ -1,320 +0,0 @@
-/**
- * @file
- * main.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * hwdbg's main debugger module
- * @details
- * @version 0.1
- * @date
- * 2024-04-04
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg
-
-import chisel3._
-import circt.stage.ChiselStage
-
-import hwdbg.configs._
-import hwdbg.types._
-import hwdbg.utils._
-import hwdbg.script._
-import hwdbg.communication._
-import hwdbg.communication.interpreter._
-
-class DebuggerMain(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- numberOfPins: Int,
- maximumNumberOfStages: Int,
- maximumNumberOfSupportedGetScriptOperators: Int,
- maximumNumberOfSupportedSetScriptOperators: Int,
- sharedMemorySize: Int,
- debuggerAreaOffset: Int,
- debuggeeAreaOffset: Int,
- scriptVariableLength: Int,
- numberOfSupportedLocalAndGlobalVariables: Int,
- numberOfSupportedTemporaryVariables: Int,
- scriptCapabilities: Seq[Long],
- bramAddrWidth: Int,
- bramDataWidth: Int,
- portsConfiguration: Array[Int]
-) extends Module {
-
- //
- // Ensure sum of input port values equals numberOfPins (NUMBER_OF_PINS)
- //
- require(
- portsConfiguration.sum == numberOfPins,
- "err, the sum of the portsConfiguration (PORT_PINS_MAP) values must equal the numberOfPins (NUMBER_OF_PINS)."
- )
-
- //
- // Ensure script variable length is not bigger than BRAM data width
- //
- require(
- bramDataWidth >= scriptVariableLength,
- "err, the script variable length should not be bigger than BRAM data width."
- )
-
- //
- // Ensure the maximum number of stages is not bigger than the maximum number
- // that can be stored within the script variable length. This is because
- // if a JUMP for conditional statements wants to set the target location,
- // it cannot store its destination in a script variable.
- //
- require(
- maximumNumberOfStages < math.pow(2, scriptVariableLength),
- "err, the maximum number of stages should be less than 2 to the power of the script variable length."
- )
-
- //
- // Ensure the number of pin + ports is not bigger than the maximum number
- // that can be stored within the script variable length. This is because
- // for setting and getting pins/ports values, hwdbg uses an index which
- // should fit within a variable size.
- //
- require(
- numberOfPins + portsConfiguration.size < math.pow(2, scriptVariableLength),
- "err, the maximum number of pins + ports should be less than 2 to the power of the script variable length."
- )
-
- //
- // Ensure the number of set operators are equal to 1 since otherwise two variables (local, global and
- // temp) might be written simultaneously.
- //
- require(
- maximumNumberOfSupportedSetScriptOperators == 1,
- "err, the supported number of SET operators can be only 1."
- )
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Input/Output signals
- //
- val inputPin = Input(Vec(numberOfPins, UInt(1.W))) // input pins
- val outputPin = Output(Vec(numberOfPins, UInt(1.W))) // output pins
-
- //
- // Interrupt signals (lines)
- //
- val plInSignal = Input(Bool()) // PS to PL signal
- val psOutInterrupt = Output(Bool()) // PL to PS interrupt
-
- //
- // BRAM (Block RAM) ports
- //
- val rdWrAddr = Output(UInt(bramAddrWidth.W)) // read/write address
- val rdData = Input(UInt(bramDataWidth.W)) // read data
- val wrEna = Output(Bool()) // enable writing
- val wrData = Output(UInt(bramDataWidth.W)) // write data
-
- })
-
- //
- // *** Create an instance of the debugger ***
- //
- val instanceInfo = HwdbgInstanceInformation.createInstanceInformation(
- version = Version.getEncodedVersion,
- maximumNumberOfStages = maximumNumberOfStages,
- scriptVariableLength = scriptVariableLength,
- numberOfSupportedLocalAndGlobalVariables = numberOfSupportedLocalAndGlobalVariables,
- numberOfSupportedTemporaryVariables = numberOfSupportedTemporaryVariables,
- maximumNumberOfSupportedGetScriptOperators = maximumNumberOfSupportedGetScriptOperators,
- maximumNumberOfSupportedSetScriptOperators = maximumNumberOfSupportedSetScriptOperators,
- sharedMemorySize = sharedMemorySize,
- debuggerAreaOffset = debuggerAreaOffset,
- debuggeeAreaOffset = debuggeeAreaOffset,
- numberOfPins = numberOfPins,
- numberOfPorts = portsConfiguration.size,
- enabledCapabilities = scriptCapabilities,
- bramAddrWidth = bramAddrWidth,
- bramDataWidth = bramDataWidth,
- portsConfiguration = portsConfiguration
- )
-
- //
- // Wire signals for the synchronizer
- //
- val requestedActionOfThePacketOutput = Wire(UInt(new DebuggerRemotePacket().RequestedActionOfThePacket.getWidth.W))
- val requestedActionOfThePacketOutputValid = Wire(Bool())
- val dataValidOutput = Wire(Bool())
- val receivingData = Wire(UInt(bramDataWidth.W))
- val sendWaitForBuffer = Wire(Bool())
-
- // -----------------------------------------------------------------------
- // Create instance from interpreter
- //
- val (
- noNewDataReceiver,
- readNextData,
- beginSendingBuffer,
- noNewDataSender,
- dataValidInterpreterOutput,
- requestedActionOfThePacketInterpreterOutput,
- sendingData,
- finishedScriptConfiguration,
- configureStage,
- targetOperator
- ) =
- DebuggerPacketInterpreter(
- debug,
- instanceInfo
- )(
- io.en,
- requestedActionOfThePacketOutput,
- requestedActionOfThePacketOutputValid,
- dataValidOutput,
- receivingData,
- sendWaitForBuffer
- )
-
- // -----------------------------------------------------------------------
- // Create instance from script execution engine
- //
- val (outputPin) =
- ScriptExecutionEngine(
- debug,
- instanceInfo
- )(
- io.en,
- finishedScriptConfiguration,
- configureStage,
- targetOperator,
- io.inputPin
- )
-
- // -----------------------------------------------------------------------
- // Create instance from synchronizer
- //
- val (
- psOutInterrupt,
- rdWrAddr,
- wrEna,
- wrData,
- outRequestedActionOfThePacketOutput,
- outRequestedActionOfThePacketOutputValid,
- outDataValidOutput,
- outReceivingData,
- outSendWaitForBuffer
- ) =
- SendReceiveSynchronizer(
- debug,
- instanceInfo
- )(
- io.en,
- io.plInSignal,
- io.rdData,
- noNewDataReceiver,
- readNextData,
- beginSendingBuffer,
- noNewDataSender,
- dataValidInterpreterOutput,
- requestedActionOfThePacketInterpreterOutput,
- sendingData
- )
-
- // -----------------------------------------------------------------------
- // Connect synchronizer signals to wires
- //
- requestedActionOfThePacketOutput := outRequestedActionOfThePacketOutput
- requestedActionOfThePacketOutputValid := outRequestedActionOfThePacketOutputValid
- dataValidOutput := outDataValidOutput
- receivingData := outReceivingData
- sendWaitForBuffer := outSendWaitForBuffer
-
- // -----------------------------------------------------------------------
- // Configure the output signals
- //
- io.wrEna := wrEna
- io.wrData := wrData
- io.rdWrAddr := rdWrAddr
-
- io.outputPin := outputPin
-
- io.psOutInterrupt := psOutInterrupt
-
-}
-
-object DebuggerMain {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- numberOfPins: Int,
- maximumNumberOfStages: Int,
- maximumNumberOfSupportedGetScriptOperators: Int,
- maximumNumberOfSupportedSetScriptOperators: Int,
- sharedMemorySize: Int,
- debuggerAreaOffset: Int,
- debuggeeAreaOffset: Int,
- scriptVariableLength: Int,
- numberOfSupportedLocalAndGlobalVariables: Int,
- numberOfSupportedTemporaryVariables: Int,
- scriptCapabilities: Seq[Long],
- bramAddrWidth: Int,
- bramDataWidth: Int,
- portsConfiguration: Array[Int]
- )(
- en: Bool,
- inputPin: Vec[UInt],
- plInSignal: Bool,
- rdData: UInt
- ): (Vec[UInt], Bool, UInt, Bool, UInt) = {
-
- val debuggerMainModule = Module(
- new DebuggerMain(
- debug,
- numberOfPins,
- maximumNumberOfStages,
- maximumNumberOfSupportedGetScriptOperators,
- maximumNumberOfSupportedSetScriptOperators,
- sharedMemorySize,
- debuggerAreaOffset,
- debuggeeAreaOffset,
- scriptVariableLength,
- numberOfSupportedLocalAndGlobalVariables,
- numberOfSupportedTemporaryVariables,
- scriptCapabilities,
- bramAddrWidth,
- bramDataWidth,
- portsConfiguration
- )
- )
-
- val outputPin = Wire(Vec(numberOfPins, UInt(1.W)))
- val psOutInterrupt = Wire(Bool())
- val rdWrAddr = Wire(UInt(bramAddrWidth.W))
- val wrEna = Wire(Bool())
- val wrData = Wire(UInt(bramDataWidth.W))
-
- //
- // Configure the input signals
- //
- debuggerMainModule.io.en := en
- debuggerMainModule.io.inputPin := inputPin
- debuggerMainModule.io.plInSignal := plInSignal
- debuggerMainModule.io.rdData := rdData
-
- //
- // Configure the output signals
- //
- outputPin := debuggerMainModule.io.outputPin
- psOutInterrupt := debuggerMainModule.io.psOutInterrupt
- rdWrAddr := debuggerMainModule.io.rdWrAddr
- wrEna := debuggerMainModule.io.wrEna
- wrData := debuggerMainModule.io.wrData
-
- //
- // Return the output result
- //
- (outputPin, psOutInterrupt, rdWrAddr, wrEna, wrData)
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/script/eval.scala b/hwdbg/src/main/scala/hwdbg/script/eval.scala
deleted file mode 100644
index 2fbb89e9..00000000
--- a/hwdbg/src/main/scala/hwdbg/script/eval.scala
+++ /dev/null
@@ -1,507 +0,0 @@
-/**
- * @file
- * eval.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Script execution engine
- * @details
- * @version 0.1
- * @date
- * 2024-05-17
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.script
-
-import chisel3._
-import chisel3.util._
-
-import hwdbg.configs._
-import hwdbg.utils._
-import hwdbg.stage._
-
-class ScriptEngineEval(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import operators enum
- //
- import hwdbg.script.ScriptEvalFunc.ScriptOperators
- import hwdbg.script.ScriptEvalFunc.ScriptOperators._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Stage configuration signals
- //
- val stageConfig = Input(new Stage(debug, instanceInfo))
- val nextStage = Output(
- UInt(
- log2Ceil(
- instanceInfo.maximumNumberOfStages * (instanceInfo.maximumNumberOfSupportedGetScriptOperators + instanceInfo.maximumNumberOfSupportedSetScriptOperators + 1)
- ).W
- )
- )
-
- //
- // Output signals
- //
- val outputPin = Output(Vec(instanceInfo.numberOfPins, UInt(1.W))) // output pins
- val resultingLocalGlobalVariables = Output(
- Vec(instanceInfo.numberOfSupportedLocalAndGlobalVariables, UInt(instanceInfo.scriptVariableLength.W))
- ) // output of local (and global) variables
- val resultingTempVariables =
- Output(Vec(instanceInfo.numberOfSupportedTemporaryVariables, UInt(instanceInfo.scriptVariableLength.W))) // output of temporary variables
- })
-
- //
- // Output pins
- //
- val nextStage = WireInit(
- 0.U(
- log2Ceil(
- instanceInfo.maximumNumberOfStages * (instanceInfo.maximumNumberOfSupportedGetScriptOperators + instanceInfo.maximumNumberOfSupportedSetScriptOperators + 1)
- ).W
- )
- )
-
- //
- // Assign operator value (split the signal into only usable part)
- //
- LogInfo(debug)("Usable size of Value in the SYMBOL: " + ScriptOperators().getWidth)
- val mainOperatorValue = io.stageConfig.stageSymbol.Value(ScriptOperators().getWidth - 1, 0).asTypeOf(ScriptOperators())
-
- // -------------------------------------------------------------------------
- // Get value module
- //
- val getValueModuleOutput = Wire(Vec(instanceInfo.maximumNumberOfSupportedGetScriptOperators, UInt(instanceInfo.scriptVariableLength.W)))
-
- for (i <- 0 until instanceInfo.maximumNumberOfSupportedGetScriptOperators) {
-
- getValueModuleOutput(i) := ScriptEngineGetValue(
- debug,
- instanceInfo
- )(
- io.en,
- io.stageConfig.getOperatorSymbol(i),
- io.stageConfig.localGlobalVariables,
- io.stageConfig.tempVariables,
- io.stageConfig.pinValues
- )
- }
-
- // -------------------------------------------------------------------------
- // *** Implementing the evaluation engine ***
- //
- //
- val srcVal = WireInit(VecInit(Seq.fill(instanceInfo.maximumNumberOfSupportedGetScriptOperators)(0.U(instanceInfo.scriptVariableLength.W))))
- val desVal = WireInit(VecInit(Seq.fill(instanceInfo.maximumNumberOfSupportedSetScriptOperators)(0.U(instanceInfo.scriptVariableLength.W))))
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(mainOperatorValue) {
-
- is(sFuncOr) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_or) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) | srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncXor) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_xor) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) ^ srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncAnd) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_and) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) & srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncAsr) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_asr) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) >> srcVal(1)(log2Ceil(instanceInfo.scriptVariableLength), 0)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncAsl) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_asl) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) << srcVal(1)(log2Ceil(instanceInfo.scriptVariableLength), 0)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncAdd) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_add) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) + srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncSub) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_sub) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) - srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncMul) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_mul) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) * srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncDiv) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_div) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) / srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncMod) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_mod) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) % srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncGt) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_gt) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) > srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncLt) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_lt) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) < srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncEgt) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_egt) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) >= srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncElt) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_egt) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) <= srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncEqual) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_equal) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) === srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncNeq) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_neq) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- desVal(0) := srcVal(0) =/= srcVal(1)
-
- nextStage := io.stageConfig.stageIndex + 4.U // one main operator + two GET operators + one SET operator
- }
- }
- is(sFuncJmp) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_jmp) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- nextStage := srcVal(0)
- }
- }
- is(sFuncJz) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_jz) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- when(srcVal(1) === 0.U) {
- nextStage := srcVal(0)
- }.otherwise {
- nextStage := io.stageConfig.stageIndex + 3.U // one main operator + two GET operators
- }
- }
- }
- is(sFuncJnz) {
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_jnz) == true &&
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
-
- srcVal(0) := getValueModuleOutput(0)
- srcVal(1) := getValueModuleOutput(1)
-
- when(srcVal(1) =/= 0.U) {
- nextStage := srcVal(0)
- }.otherwise {
- nextStage := io.stageConfig.stageIndex + 3.U // one main operator + two GET operators
- }
-
- }
- }
- is(sFuncMov) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_mov) == true) {
-
- srcVal(0) := getValueModuleOutput(0)
-
- desVal(0) := srcVal(0)
-
- nextStage := io.stageConfig.stageIndex + 3.U // one main operator + one GET operators + one SET operator
- }
- }
- is(sFuncPrintf) {
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.func_printf) == true) {
-
- //
- // To be implemented
- //
- }
- }
- }
- }
-
- // -------------------------------------------------------------------------
- // Set value module
- //
- val setValueModuleInput = Wire(Vec(instanceInfo.maximumNumberOfSupportedSetScriptOperators, Vec(instanceInfo.numberOfPins, UInt(1.W))))
- val outputLocalGlobalVariables = Wire(
- Vec(
- instanceInfo.maximumNumberOfSupportedSetScriptOperators,
- Vec(instanceInfo.numberOfSupportedLocalAndGlobalVariables, UInt(instanceInfo.scriptVariableLength.W))
- )
- )
- val outputTempVariables = Wire(
- Vec(
- instanceInfo.maximumNumberOfSupportedSetScriptOperators,
- Vec(instanceInfo.numberOfSupportedTemporaryVariables, UInt(instanceInfo.scriptVariableLength.W))
- )
- )
-
- for (i <- 0 until instanceInfo.maximumNumberOfSupportedSetScriptOperators) {
-
- val (
- outputPin,
- resultingLocalGlobalVariables,
- resultingTempVariables
- ) = ScriptEngineSetValue(
- debug,
- instanceInfo
- )(
- io.en,
- io.stageConfig.setOperatorSymbol(i),
- io.stageConfig.localGlobalVariables,
- io.stageConfig.tempVariables,
- desVal(i),
- io.stageConfig.pinValues
- )
-
- //
- // Connect SET output pins
- //
- setValueModuleInput(i) := outputPin
- outputLocalGlobalVariables(i) := resultingLocalGlobalVariables
- outputTempVariables(i) := resultingTempVariables
- }
-
- // ---------------------------------------------------------------------
-
- //
- // Connect the output signals
- //
- io.outputPin := setValueModuleInput(0)
- io.resultingLocalGlobalVariables := outputLocalGlobalVariables(0)
- io.resultingTempVariables := outputTempVariables(0)
- io.nextStage := nextStage
-}
-
-object ScriptEngineEval {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- stageConfig: Stage
- ): (UInt, Vec[UInt], Vec[UInt], Vec[UInt]) = {
-
- val scriptEngineEvalModule = Module(
- new ScriptEngineEval(
- debug,
- instanceInfo
- )
- )
-
- val outputPin = Wire(Vec(instanceInfo.numberOfPins, UInt(1.W)))
- val resultingLocalGlobalVariables = Wire(Vec(instanceInfo.numberOfSupportedLocalAndGlobalVariables, UInt(instanceInfo.scriptVariableLength.W)))
- val resultingTempVariables = Wire(Vec(instanceInfo.numberOfSupportedTemporaryVariables, UInt(instanceInfo.scriptVariableLength.W)))
- val nextStage = Wire(
- UInt(
- log2Ceil(
- instanceInfo.maximumNumberOfStages * (instanceInfo.maximumNumberOfSupportedGetScriptOperators + instanceInfo.maximumNumberOfSupportedSetScriptOperators + 1)
- ).W
- )
- )
-
- //
- // Configure the input signals
- //
- scriptEngineEvalModule.io.en := en
- scriptEngineEvalModule.io.stageConfig := stageConfig
-
- //
- // Configure the output signals
- //
- nextStage := scriptEngineEvalModule.io.nextStage
- outputPin := scriptEngineEvalModule.io.outputPin
- resultingLocalGlobalVariables := scriptEngineEvalModule.io.resultingLocalGlobalVariables
- resultingTempVariables := scriptEngineEvalModule.io.resultingTempVariables
-
- //
- // Return the output result
- //
- (
- nextStage,
- outputPin,
- resultingLocalGlobalVariables,
- resultingTempVariables
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/script/exec.scala b/hwdbg/src/main/scala/hwdbg/script/exec.scala
deleted file mode 100644
index 1fb91e6c..00000000
--- a/hwdbg/src/main/scala/hwdbg/script/exec.scala
+++ /dev/null
@@ -1,373 +0,0 @@
-/**
- * @file
- * exec.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Script execution engine
- * @details
- * @version 0.1
- * @date
- * 2024-05-07
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.script
-
-import chisel3._
-import chisel3.util._
-
-import hwdbg.configs._
-import hwdbg.stage._
-
-object ScriptExecutionEngineConfigStage {
- object State extends ChiselEnum {
- val sConfigStageSymbol, sConfigGetSymbol, sConfigSetSymbol = Value
- }
-}
-
-class ScriptExecutionEngine(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import state enum
- //
- import ScriptExecutionEngineConfigStage.State
- import ScriptExecutionEngineConfigStage.State._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Script stage configuration signals
- //
- val finishedScriptConfiguration = Input(Bool()) // whether script configuration finished or not?
- val configureStage = Input(Bool()) // whether the configuration of stage should start or not?
- val targetOperator = Input(new HwdbgShortSymbol(instanceInfo.scriptVariableLength)) // Current operator to be configured
-
- //
- // Input/Output signals
- //
- val inputPin = Input(Vec(instanceInfo.numberOfPins, UInt(1.W))) // input pins
- val outputPin = Output(Vec(instanceInfo.numberOfPins, UInt(1.W))) // output pins
- })
-
- //
- // Output pins
- //
- val outputPin = Wire(Vec(instanceInfo.numberOfPins, UInt(1.W)))
-
- //
- // Stage registers
- //
- val stageRegs = Reg(Vec(instanceInfo.maximumNumberOfStages, new Stage(debug, instanceInfo)))
-
- //
- // Stage configuration done
- // Whether the state are configured or not
- //
- val stageConfigurationValid = RegInit(false.B)
-
- //
- // Stage configuration registers
- //
- val configState = RegInit(sConfigStageSymbol)
- val configStageNumber = RegInit(0.U(log2Ceil(instanceInfo.maximumNumberOfStages).W))
-
- //
- // Calculate the maximum of the two values since we only want to use one register for
- // both GET and SET
- //
- val maxOperators = math.max(instanceInfo.maximumNumberOfSupportedGetScriptOperators, instanceInfo.maximumNumberOfSupportedSetScriptOperators)
-
- //
- // Create a register with the width based on the maximum value
- //
- val configGetSetOperatorNumber = RegInit(0.U(log2Ceil(maxOperators).W))
- val stageIndex = RegInit(
- 0.U(
- log2Ceil(
- instanceInfo.maximumNumberOfStages * (instanceInfo.maximumNumberOfSupportedGetScriptOperators + instanceInfo.maximumNumberOfSupportedSetScriptOperators + 1)
- ).W
- )
- )
-
- // -----------------------------------------------------------------------
- //
- // *** Configure stage buffers ***
- //
- when(io.configureStage === true.B) {
-
- switch(configState) {
-
- is(sConfigStageSymbol) {
-
- //
- // Since the chip is in the configuring status, just pass all the input
- // to output since the stage data is not valid at this stage
- //
- stageConfigurationValid := false.B
-
- //
- // Configure the stage symbol (The first symbol is the stage operator)
- //
- stageRegs(configStageNumber).stageSymbol := io.targetOperator
-
- //
- // Set the stage index
- //
- stageRegs(configStageNumber).stageIndex := stageIndex // store the stage index
- stageRegs(configStageNumber).targetStage := 0.U // reset the target stage
- stageIndex := stageIndex + 1.U // increment stage index
-
- //
- // If it is the very first configuration symbol, then we disable all stages
- //
- when(configStageNumber === 0.U) {
- for (i <- 0 until instanceInfo.maximumNumberOfStages) {
- stageRegs(i).stageEnable := false.B
- }
- }
-
- //
- // Going to the next state
- //
- configState := sConfigGetSymbol
- }
- is(sConfigGetSymbol) {
-
- //
- // Config GET operator
- //
- stageRegs(configStageNumber).getOperatorSymbol(configGetSetOperatorNumber) := io.targetOperator
- configGetSetOperatorNumber := configGetSetOperatorNumber + 1.U
-
- //
- // Check whether this stage number should be counted in stage indexes or its empty
- //
- when(io.targetOperator.Type =/= 0.U) {
- stageIndex := stageIndex + 1.U
- }
-
- when(configGetSetOperatorNumber === (instanceInfo.maximumNumberOfSupportedGetScriptOperators - 1).U) {
-
- configGetSetOperatorNumber := 0.U // reset the counter
- configState := sConfigSetSymbol // go to the next state
- }.otherwise {
- configState := sConfigGetSymbol // stay at the same state
- }
- }
- is(sConfigSetSymbol) {
-
- //
- // Config SET operator
- //
- stageRegs(configStageNumber).setOperatorSymbol(configGetSetOperatorNumber) := io.targetOperator
- stageRegs(configStageNumber).stageEnable := true.B // this stage is enabled
- configGetSetOperatorNumber := configGetSetOperatorNumber + 1.U
-
- when(io.targetOperator.Type =/= 0.U) {
- stageIndex := stageIndex + 1.U
- }
-
- when(configGetSetOperatorNumber === (instanceInfo.maximumNumberOfSupportedSetScriptOperators - 1).U) {
-
- configGetSetOperatorNumber := 0.U // reset the counter
-
- when(io.finishedScriptConfiguration === true.B) {
-
- //
- // Not configuring anymore, reset the stage number
- //
- configStageNumber := 0.U // reset the stage number
- stageIndex := 0.U // reset the stage index
- configState := sConfigStageSymbol
-
- //
- // Stage data is now valid and can be used (scripts can apply from now on)
- //
- stageConfigurationValid := true.B
-
- }.otherwise {
- configStageNumber := configStageNumber + 1.U // Increment the stage number holder of current configuration
- configState := sConfigStageSymbol // the next state is again a stage symbol
- }
- }.otherwise {
- configState := sConfigSetSymbol // stay at the same state
- }
- }
- }
- }
-
- // -----------------------------------------------------------------------
- //
- // *** Move each register (input vector) to the next stage at each clock ***
- //
- for (i <- 0 until instanceInfo.maximumNumberOfStages) {
-
- if (i == 0) {
-
- //
- // At the first stage, the input registers should be passed to the
- // first registers set of the stage registers
- //
- stageRegs(0).pinValues := io.inputPin
-
- //
- // Each pin start initially start from 0th target stage
- //
- stageRegs(0).targetStage := 0.U
-
- } else if (i == (instanceInfo.maximumNumberOfStages - 1)) {
-
- //
- // At the last stage, the state registers should be passed to the output
- // Note: At this stage script symbol is useless
- //
- outputPin := stageRegs(i - 1).pinValues
-
- } else {
-
- //
- // Check if this stage should be ignored (passed to the next stage) or be evaluated
- // (i - 1) is because the 0th index registers are used for storing data but the
- // script engine assumes that the symbols start from 0, so -1 is used here
- //
- // Also, if the stage data is valid (configuration applied at least once)
- //
- when(stageConfigurationValid === true.B && stageRegs(i - 1).stageIndex === stageRegs(i - 1).targetStage && stageRegs(i - 1).stageEnable === true.B) {
-
- //
- // *** Based on target stage, this stage needs evaluation ***
- //
-
- //
- // Instantiate an eval engine for this stage
- //
- val (
- nextStage,
- outputPin,
- resultingLocalGlobalVariables,
- resultingTempVariables
- ) = ScriptEngineEval(
- debug,
- instanceInfo
- )(
- stageRegs(i - 1).stageEnable,
- stageRegs(i - 1)
- )
-
- //
- // At the normal (middle) stage, the result of state registers should be passed to
- // the next level of stage registers
- //
- stageRegs(i).pinValues := outputPin
-
- //
- // Pass the target stage symbol number to the next stage
- //
- stageRegs(i).targetStage := nextStage
-
- //
- // Pass the local (and global) and temporary variables to the next stage
- //
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_local_global_var) == true) {
- stageRegs(i).localGlobalVariables := resultingLocalGlobalVariables
- }
-
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
- stageRegs(i).tempVariables := resultingTempVariables
- }
-
- }.otherwise {
-
- //
- // *** Based on target stage, this stage should be ignore ***
- //
-
- //
- // Just pass all the values to the next stage
- //
- stageRegs(i).pinValues := stageRegs(i - 1).pinValues
- stageRegs(i).targetStage := stageRegs(i - 1).targetStage
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_local_global_var) == true) {
- stageRegs(i).localGlobalVariables := stageRegs(i - 1).localGlobalVariables
- }
-
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
- stageRegs(i).tempVariables := stageRegs(i - 1).tempVariables
- }
-
- }
- }
- }
-
- // -----------------------------------------------------------------------
-
- //
- // Connect the output signals
- //
- io.outputPin := outputPin
-
-}
-
-object ScriptExecutionEngine {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- finishedScriptConfiguration: Bool,
- configureStage: Bool,
- targetOperator: HwdbgShortSymbol,
- inputPin: Vec[UInt]
- ): (Vec[UInt]) = {
-
- val scriptExecutionEngineModule = Module(
- new ScriptExecutionEngine(
- debug,
- instanceInfo
- )
- )
-
- val outputPin = Wire(Vec(instanceInfo.numberOfPins, UInt(1.W)))
-
- //
- // Configure the input signals
- //
- scriptExecutionEngineModule.io.en := en
- scriptExecutionEngineModule.io.finishedScriptConfiguration := finishedScriptConfiguration
- scriptExecutionEngineModule.io.configureStage := configureStage
- scriptExecutionEngineModule.io.targetOperator := targetOperator
- scriptExecutionEngineModule.io.inputPin := inputPin
-
- //
- // Configure the output signals
- //
- outputPin := scriptExecutionEngineModule.io.outputPin
-
- //
- // Return the output result
- //
- (outputPin)
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/script/get_value.scala b/hwdbg/src/main/scala/hwdbg/script/get_value.scala
deleted file mode 100644
index a81f475e..00000000
--- a/hwdbg/src/main/scala/hwdbg/script/get_value.scala
+++ /dev/null
@@ -1,238 +0,0 @@
-/**
- * @file
- * get_value.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Script engine get value
- * @details
- * @version 0.1
- * @date
- * 2024-05-29
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.script
-
-import chisel3._
-import chisel3.util._
-
-import hwdbg.configs._
-import hwdbg.utils._
-import hwdbg.stage._
-
-class ScriptEngineGetValue(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import script data types enum
- //
- import hwdbg.script.ScriptConstantTypes.ScriptDataTypes
- import hwdbg.script.ScriptConstantTypes.ScriptDataTypes._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Evaluation operator symbol
- //
- val operator = Input(new HwdbgShortSymbol(instanceInfo.scriptVariableLength))
-
- //
- // Input variables
- //
- val localGlobalVariables =
- Input(Vec(instanceInfo.numberOfSupportedLocalAndGlobalVariables, UInt(instanceInfo.scriptVariableLength.W))) // Local (and Global) variables
- val tempVariables = Input(Vec(instanceInfo.numberOfSupportedTemporaryVariables, UInt(instanceInfo.scriptVariableLength.W))) // Temporary variables
-
- //
- // Input signals
- //
- val inputPin = Input(Vec(instanceInfo.numberOfPins, UInt(1.W))) // input pins
-
- //
- // Output value
- //
- val outputValue = Output(UInt(instanceInfo.scriptVariableLength.W)) // output value
- })
-
- val outputValue = WireInit(0.U(instanceInfo.scriptVariableLength.W))
-
- //
- // Assign operator type (split the signal into only usable part)
- //
- LogInfo(debug)("Usable size of Type in the SYMBOL: " + ScriptDataTypes().getWidth)
- val mainOperatorType = io.operator.Type(ScriptDataTypes().getWidth - 1, 0).asTypeOf(ScriptDataTypes())
-
- //
- // *** Implementing the getting data logic ***
- //
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(mainOperatorType) {
-
- is(symbolGlobalIdType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_local_global_var) == true) {
- //
- // Set output to local (and global) variables
- //
- outputValue := io.localGlobalVariables(io.operator.Value)
- }
- }
- is(symbolLocalIdType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_local_global_var) == true) {
- //
- // Set output to local (and global) variables
- //
- outputValue := io.localGlobalVariables(io.operator.Value)
- }
- }
- is(symbolNumType) {
-
- //
- // Constant value
- //
- outputValue := io.operator.Value
- }
- is(symbolRegisterType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_registers) == true) {
-
- //
- // Registers are pins and ports
- //
- when(instanceInfo.numberOfPins.U > io.operator.Value) {
-
- //
- // *** Used for getting the pin value ***
- //
- outputValue := io.inputPin(io.operator.Value)
- }.otherwise {
-
- //
- // *** Used for getting the port value ***
- //
-
- //
- // Create a vector of wires
- //
- val ports = Wire(Vec(instanceInfo.numberOfPorts, UInt(instanceInfo.scriptVariableLength.W)))
- var currentPortIndex: Int = 0
- var currentPortNum: Int = 0
-
- //
- // Iterate based on port configuration
- //
- for (port <- instanceInfo.portsConfiguration) {
-
- LogInfo(debug)(f"connect port(${currentPortIndex}) to inputPin(${currentPortNum} to ${currentPortNum + port}) for SET")
- ports(currentPortIndex) := io.inputPin.asUInt(currentPortNum + port - 1, currentPortNum)
-
- currentPortNum += port
- currentPortIndex += 1
- }
-
- //
- // Set the output
- //
- outputValue := ports(io.operator.Value - instanceInfo.numberOfPins.U)
- }
- }
- }
- is(symbolPseudoRegType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_pseudo_registers) == true) {
- //
- // To be implemented
- //
- outputValue := 0.U
- }
- }
- is(symbolStackIndexType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.stack_assignments) == true) {
- //
- // To be implemented
- //
- outputValue := 0.U // io.inputPin.asUInt
- }
- }
- is(symbolTempType) {
-
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
- //
- // Set output to temporary variables
- //
- outputValue := io.tempVariables(io.operator.Value)
- }
- }
- }
- }
-
- //
- // Connect the output signals
- //
- io.outputValue := outputValue
-
-}
-
-object ScriptEngineGetValue {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- operator: HwdbgShortSymbol,
- localGlobalVariables: Vec[UInt],
- tempVariables: Vec[UInt],
- inputPin: Vec[UInt]
- ): (UInt) = {
-
- val scriptEngineGetValueModule = Module(
- new ScriptEngineGetValue(
- debug,
- instanceInfo
- )
- )
-
- val outputValue = Wire(UInt(instanceInfo.scriptVariableLength.W))
-
- //
- // Configure the input signals
- //
- scriptEngineGetValueModule.io.en := en
- scriptEngineGetValueModule.io.operator := operator
- scriptEngineGetValueModule.io.localGlobalVariables := localGlobalVariables
- scriptEngineGetValueModule.io.tempVariables := tempVariables
- scriptEngineGetValueModule.io.inputPin := inputPin
-
- //
- // Configure the output signal
- //
- outputValue := scriptEngineGetValueModule.io.outputValue
-
- //
- // Return the output result
- //
- (outputValue)
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/script/script_definitions.scala b/hwdbg/src/main/scala/hwdbg/script/script_definitions.scala
deleted file mode 100644
index 5471e834..00000000
--- a/hwdbg/src/main/scala/hwdbg/script/script_definitions.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-package hwdbg.script
-
-import chisel3._
-import chisel3.util._
-
-/**
- * @brief
- * The structure of HWDBG_SHORT_SYMBOL used in script engine of HyperDbg
- */
-class HwdbgShortSymbol(
- scriptVariableLength: Int
-) extends Bundle {
-
- //
- // Ensure that the script variable length is at least 8 bits or 1 byte
- //
- require(
- scriptVariableLength >= 8,
- f"err, the minimum script variable length is 8 bits (1 byte)."
- )
-
- val Type = UInt(scriptVariableLength.W) // long long unsigned is 64 bits but it can be dynamic
- val Value = UInt(scriptVariableLength.W) // long long unsigned is 64 bits but it can be dynamic
-}
-
-/**
- * @brief
- * Constant values for the script engine
- */
-object ScriptConstants {
- val SYMBOL_MEM_VALID_CHECK_MASK = 1 << 31
- val INVALID = 0x80000000
- val LALR_ACCEPT = 0x7fffffff
-}
-
-/**
- * @brief
- * Constant type values for the script engine
- */
-object ScriptConstantTypes {
- object ScriptDataTypes extends ChiselEnum {
- val symbolUndefined, symbolGlobalIdType, symbolLocalIdType, symbolNumType, symbolRegisterType, symbolPseudoRegType, symbolSemanticRuleType, symbolTempType, symbolStringType, symbolVariableCountType, symbolInvalid, symbolWstringType, symbolFunctionParameterIdType, symbolReturnAddressType, symbolFunctionParameterType, symbolStackIndexType, symbolStackBaseIndexType, symbolReturnValueType = Value
- }
-}
-
-object ScriptEvalFunc {
- object ScriptOperators extends ChiselEnum {
- val sFuncUndefined, sFuncInc, sFuncDec, sFuncReference, sFuncOr, sFuncXor, sFuncAnd, sFuncAsr, sFuncAsl, sFuncAdd, sFuncSub, sFuncMul, sFuncDiv, sFuncMod, sFuncGt, sFuncLt, sFuncEgt, sFuncElt, sFuncEqual, sFuncNeq, sFuncJmp, sFuncJz, sFuncJnz, sFuncMov, sFuncStart_of_do_while, sFuncStart_of_do_while_commands, sFuncEnd_of_do_while, sFuncStart_of_for, sFuncFor_inc_dec, sFuncStart_of_for_ommands, sFuncEnd_of_if, sFuncIgnore_lvalue, sFuncPush, sFuncPop, sFuncCall, sFuncRet, sFuncPrint, sFuncFormats, sFuncEvent_enable, sFuncEvent_disable, sFuncEvent_clear, sFuncTest_statement, sFuncSpinlock_lock, sFuncSpinlock_unlock, sFuncEvent_sc, sFuncMicrosleep, sFuncPrintf, sFuncPause, sFuncFlush, sFuncEvent_trace_step, sFuncEvent_trace_step_in, sFuncEvent_trace_step_out, sFuncEvent_trace_instrumentation_step, sFuncEvent_trace_instrumentation_step_in, sFuncRdtsc, sFuncRdtscp, sFuncLbr_save, sFuncLbr_dump, sFuncLbr_print, sFuncLbr_restore, sFuncLbr_check, sFuncSpinlock_lock_custom_wait, sFuncEvent_inject, sFuncPoi, sFuncDb, sFuncDd, sFuncDw, sFuncDq, sFuncNeg, sFuncHi, sFuncLow, sFuncNot, sFuncCheck_address, sFuncDisassemble_len, sFuncDisassemble_len32, sFuncDisassemble_len64, sFuncInterlocked_increment, sFuncInterlocked_decrement, sFuncPhysical_to_virtual, sFuncVirtual_to_physical, sFuncPoi_pa, sFuncHi_pa, sFuncLow_pa, sFuncDb_pa, sFuncDd_pa, sFuncDw_pa, sFuncDq_pa, sFuncLbr_restore_by_filter, sFuncEd, sFuncEb, sFuncEq, sFuncInterlocked_exchange, sFuncInterlocked_exchange_add, sFuncEb_pa, sFuncEd_pa, sFuncEq_pa, sFuncInterlocked_compare_exchange, sFuncStrlen, sFuncStrcmp, sFuncMemcmp, sFuncStrncmp, sFuncWcslen, sFuncWcscmp, sFuncEvent_inject_error_code, sFuncMemcpy, sFuncMemcpy_pa, sFuncWcsncmp = Value
- }
-}
\ No newline at end of file
diff --git a/hwdbg/src/main/scala/hwdbg/script/set_value.scala b/hwdbg/src/main/scala/hwdbg/script/set_value.scala
deleted file mode 100644
index 9b5f554d..00000000
--- a/hwdbg/src/main/scala/hwdbg/script/set_value.scala
+++ /dev/null
@@ -1,389 +0,0 @@
-/**
- * @file
- * set_value.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Script engine set value
- * @details
- * @version 0.1
- * @date
- * 2024-05-29
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.script
-
-import chisel3._
-import chisel3.util._
-
-import hwdbg.configs._
-import hwdbg.utils._
-import hwdbg.stage._
-
-class ScriptEngineSetValue(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Module {
-
- //
- // Import script data types enum
- //
- import hwdbg.script.ScriptConstantTypes.ScriptDataTypes
- import hwdbg.script.ScriptConstantTypes.ScriptDataTypes._
-
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Evaluation operator symbol
- //
- val operator = Input(new HwdbgShortSymbol(instanceInfo.scriptVariableLength))
-
- //
- // Input variables
- //
- val inputLocalGlobalVariables =
- Input(Vec(instanceInfo.numberOfSupportedLocalAndGlobalVariables, UInt(instanceInfo.scriptVariableLength.W))) // Local (and Global) variables
- val inputTempVariables =
- Input(Vec(instanceInfo.numberOfSupportedTemporaryVariables, UInt(instanceInfo.scriptVariableLength.W))) // Temporary variables
-
- //
- // Input value
- //
- val inputValue = Input(UInt(instanceInfo.scriptVariableLength.W)) // input value
-
- //
- // Output signals
- //
- val inputPin = Input(Vec(instanceInfo.numberOfPins, UInt(1.W))) // output pins
- val outputPin = Output(Vec(instanceInfo.numberOfPins, UInt(1.W))) // output pins
-
- //
- // Output variables
- //
- val outputLocalGlobalVariables =
- Output(Vec(instanceInfo.numberOfSupportedLocalAndGlobalVariables, UInt(instanceInfo.scriptVariableLength.W))) // Local (and Global) variables
- val outputTempVariables =
- Output(Vec(instanceInfo.numberOfSupportedTemporaryVariables, UInt(instanceInfo.scriptVariableLength.W))) // Temporary variables
-
- })
-
- //
- // Temp input
- //
- val inputLocalGlobalVariables = io.inputLocalGlobalVariables
- val inputTempVariables = io.inputTempVariables
- val inputPin = io.inputPin.asUInt
-
- //
- // Output pins
- //
- val outputPin = WireInit(0.U(instanceInfo.numberOfPins.W))
- val outputLocalGlobalVariables = WireInit(
- VecInit(Seq.fill(instanceInfo.numberOfSupportedLocalAndGlobalVariables)(0.U(instanceInfo.scriptVariableLength.W)))
- ) // Local (and Global) variables
- val outputTempVariables = WireInit(
- VecInit(Seq.fill(instanceInfo.numberOfSupportedTemporaryVariables)(0.U(instanceInfo.scriptVariableLength.W)))
- ) // Temporary variables
-
- //
- // Assign operator type (split the signal into only usable part)
- //
- LogInfo(debug)("Usable size of Type in the SYMBOL: " + ScriptDataTypes().getWidth)
- val mainOperatorType = io.operator.Type(ScriptDataTypes().getWidth - 1, 0).asTypeOf(ScriptDataTypes())
-
- //
- // *** Implementing the setting data logic ***
- //
-
- //
- // Apply the chip enable signal
- //
- when(io.en === true.B) {
-
- switch(mainOperatorType) {
-
- is(symbolUndefined) {
-
- //
- // In case of undefined SET value, just pass every input to the next step
- //
- outputPin := inputPin
- outputLocalGlobalVariables := inputLocalGlobalVariables
- outputTempVariables := inputTempVariables
-
- }
- is(symbolGlobalIdType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_local_global_var) == true) {
-
- //
- // Set the local (and global) variables
- //
- outputPin := inputPin
- outputLocalGlobalVariables := inputLocalGlobalVariables
- outputTempVariables := inputTempVariables
-
- //
- // Set the target variable
- //
- outputLocalGlobalVariables(io.operator.Value) := io.inputValue
- }
-
- }
- is(symbolLocalIdType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_local_global_var) == true) {
- //
- // Set the target local/global variable
- //
- outputPin := inputPin
- outputLocalGlobalVariables := inputLocalGlobalVariables
- outputTempVariables := inputTempVariables
-
- //
- // Set the target local/global variable
- //
- outputLocalGlobalVariables(io.operator.Value) := io.inputValue
- }
-
- }
- is(symbolRegisterType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_registers) == true) {
-
- when(instanceInfo.numberOfPins.U > io.operator.Value) {
-
- //
- // *** Used for setting the pin value ***
- //
-
- //
- // Registers are pins (set the value based on less significant bit)
- //
- val tempShiftedBit = (1.U << io.operator.Value)
-
- when(io.inputValue(0) === 1.U) {
- outputPin := inputPin | tempShiftedBit; // Set the N-th bit to 1
- }.otherwise {
- outputPin := inputPin & ~tempShiftedBit; // Clear the N-th bit to 0
- }
-
- }.otherwise {
-
- //
- // *** Used for setting the port value ***
- //
-
- //
- // Iterate based on port configuration
- //
- var currentPortNum: Int = 0
- val numPorts = instanceInfo.portsConfiguration.length
-
- for ((port, index) <- instanceInfo.portsConfiguration.zipWithIndex) {
-
- LogInfo(debug)(f"========================= port assignment (${index} - port size: ${port}) =========================")
-
- when(io.operator.Value === (index + instanceInfo.numberOfPins).U) {
-
- //
- // If the current port's bit width is bigger than the script variable length,
- // we need to append zero
- //
- val targetInputValue = WireInit(0.U(port.W))
-
- if (port > instanceInfo.scriptVariableLength) {
-
- //
- // Since the port size is bigger than the variable size,
- // we need to append zeros to the target value
- //
- LogInfo(debug)(
- f"Appending zeros (${port - instanceInfo.scriptVariableLength}) to input variable (targetInputValue) to support port num: ${index}"
- )
- targetInputValue := Cat(io.inputValue, 0.U((port - instanceInfo.scriptVariableLength).W))
- } else {
- //
- // Since the variable size is bigger than the port size,
- // we need only a portion of the input value
- //
- targetInputValue := io.inputValue(port - 1, 0)
- }
-
- //
- // Determine the range of bits to be modified
- //
- val high = currentPortNum + port - 1
- val low = currentPortNum
-
- // Create the modified outputPin based on whether it's the first, last or a middle port
- val modifiedOutputPin = if (index == 0) {
-
- //
- // First port: keep higher bits unchanged, set lower bits to input value
- //
- LogInfo(debug)(
- f"Set connecting index=${index} - inputPin(${instanceInfo.numberOfPins - 1}, ${high + 1}) + targetInputValue(${port - 1}, 0)"
- )
- Cat(
- inputPin(instanceInfo.numberOfPins - 1, high + 1), // Bits above the range to keep unchanged
- targetInputValue // New value for the specified range
- )
- } else if (index == numPorts - 1) {
-
- //
- // Last port: keep lower bits unchanged, set higher bits to input value
- //
- LogInfo(debug)(f"Set connecting index=${index} - targetInputValue(${port - 1}, 0) + inputPin(${low - 1}, 0)")
- Cat(
- targetInputValue, // New value for the specified range
- inputPin(low - 1, 0) // Bits below the range to keep unchanged
- )
- } else {
-
- //
- // Middle port: keep both higher and lower bits unchanged
- //
- LogInfo(debug)(
- f"Set connecting index=${index} - inputPin(${instanceInfo.numberOfPins - 1}, ${high + 1}) + targetInputValue(${port - 1}, 0) + inputPin(${low - 1}, 0)"
- )
- Cat(
- inputPin(instanceInfo.numberOfPins - 1, high + 1), // Bits above the range to keep unchanged
- targetInputValue, // New value for the specified range
- inputPin(low - 1, 0) // Bits below the range to keep unchanged
- )
- }
-
- //
- // Assign the modified outputPin back to outputPin
- //
- outputPin := modifiedOutputPin
- }
-
- currentPortNum += port
- }
- }
-
- outputLocalGlobalVariables := inputLocalGlobalVariables
- outputTempVariables := inputTempVariables
- }
- }
- is(symbolPseudoRegType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.assign_pseudo_registers) == true) {
- //
- // To be implemented
- //
- outputPin := 0.U
- outputLocalGlobalVariables := inputLocalGlobalVariables
- outputTempVariables := inputTempVariables
- }
-
- }
- is(symbolStackIndexType) {
-
- if (HwdbgScriptCapabilities.isCapabilitySupported(instanceInfo.scriptCapabilities, HwdbgScriptCapabilities.stack_assignments) == true) {
- //
- // To be implemented
- //
- outputPin := inputPin
- outputLocalGlobalVariables := inputLocalGlobalVariables
- outputTempVariables := inputTempVariables
- }
-
- }
- is(symbolTempType) {
-
- if (
- HwdbgScriptCapabilities.isCapabilitySupported(
- instanceInfo.scriptCapabilities,
- HwdbgScriptCapabilities.conditional_statements_and_comparison_operators
- ) == true
- ) {
- //
- // Set the temporary variables
- //
- outputPin := inputPin
- outputLocalGlobalVariables := inputLocalGlobalVariables
- outputTempVariables := inputTempVariables
-
- //
- // Set the target temporary variable
- //
- outputTempVariables(io.operator.Value) := io.inputValue
- }
- }
- }
- }
-
- //
- // Connect the output signals
- //
- io.outputLocalGlobalVariables := outputLocalGlobalVariables
- io.outputTempVariables := outputTempVariables
-
- for (i <- 0 until instanceInfo.numberOfPins) {
- io.outputPin(i) := outputPin(i)
- }
-
-}
-
-object ScriptEngineSetValue {
-
- def apply(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
- )(
- en: Bool,
- operator: HwdbgShortSymbol,
- inputLocalGlobalVariables: Vec[UInt],
- inputTempVariables: Vec[UInt],
- inputValue: UInt,
- inputPin: Vec[UInt]
- ): (Vec[UInt], Vec[UInt], Vec[UInt]) = {
-
- val scriptEngineSetValueModule = Module(
- new ScriptEngineSetValue(
- debug,
- instanceInfo
- )
- )
-
- val outputPin = Wire(Vec(instanceInfo.numberOfPins, UInt(1.W)))
- val outputLocalGlobalVariables = Wire(Vec(instanceInfo.numberOfSupportedLocalAndGlobalVariables, UInt(instanceInfo.scriptVariableLength.W)))
- val outputTempVariables = Wire(Vec(instanceInfo.numberOfSupportedTemporaryVariables, UInt(instanceInfo.scriptVariableLength.W)))
-
- //
- // Configure the input signals
- //
- scriptEngineSetValueModule.io.en := en
- scriptEngineSetValueModule.io.operator := operator
- scriptEngineSetValueModule.io.inputLocalGlobalVariables := inputLocalGlobalVariables
- scriptEngineSetValueModule.io.inputTempVariables := inputTempVariables
- scriptEngineSetValueModule.io.inputValue := inputValue
- scriptEngineSetValueModule.io.inputPin := inputPin
-
- //
- // Configure the output signal
- //
- outputPin := scriptEngineSetValueModule.io.outputPin
- outputLocalGlobalVariables := scriptEngineSetValueModule.io.outputLocalGlobalVariables
- outputTempVariables := scriptEngineSetValueModule.io.outputTempVariables
-
- //
- // Return the output result
- //
- (
- outputPin,
- outputLocalGlobalVariables,
- outputTempVariables
- )
- }
-}
diff --git a/hwdbg/src/main/scala/hwdbg/types/communication.scala b/hwdbg/src/main/scala/hwdbg/types/communication.scala
deleted file mode 100644
index c0b8ef6b..00000000
--- a/hwdbg/src/main/scala/hwdbg/types/communication.scala
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * @file
- * communication.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Data types for the communication
- * @details
- * @version 0.1
- * @date
- * 2024-04-08
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.types
-
-import chisel3._
-
-// -----------------------------------------------------------------------
-
-//
-// Structure in C:
-//
-// typedef struct _DEBUGGER_REMOTE_PACKET
-// {
-// BYTE Checksum;
-// UINT64 Indicator; /* Shows the type of the packet */
-// DEBUGGER_REMOTE_PACKET_TYPE TypeOfThePacket;
-// DEBUGGER_REMOTE_PACKET_REQUESTED_ACTION RequestedActionOfThePacket;
-//
-// } DEBUGGER_REMOTE_PACKET, *PDEBUGGER_REMOTE_PACKET;
-//
-
-/**
- * @brief
- * The packet used for communication with the remote debugger
- */
-class DebuggerRemotePacket() extends Bundle {
-
- //
- // Structure fields
- //
- val Checksum = UInt(8.W) // 1 bytes
- val Alignment0 = UInt((64 - 8).W) // 7 bytes
- val Indicator = UInt(64.W) // 8 bytes
- val TypeOfThePacket = UInt(32.W) // 4 bytes
- val RequestedActionOfThePacket = UInt(32.W) // 4 bytes
-
- //
- // Offset of structure fields
- //
- object Offset {
-
- val checksum = (0) / 8
-
- val indicator = (Checksum.getWidth + Alignment0.getWidth) / 8
-
- val typeOfThePacket = (Checksum.getWidth + Alignment0.getWidth + Indicator.getWidth) / 8
-
- val requestedActionOfThePacket = (Checksum.getWidth + Alignment0.getWidth + Indicator.getWidth + TypeOfThePacket.getWidth) / 8
-
- val startOfDataBuffer =
- (Checksum.getWidth + Alignment0.getWidth + Indicator.getWidth + TypeOfThePacket.getWidth + RequestedActionOfThePacket.getWidth) / 8
- }
-}
-
-// -----------------------------------------------------------------------
-
-//
-// Structure in C:
-//
-// typedef struct _HWDBG_PORT_INFORMATION
-// {
-// UINT32 CountOfPorts;
-//
-// /*
-//
-// Here the pin information details will be available.
-//
-// UINT32
-// Port Size
-//
-// */
-//
-// } HWDBG_PORT_INFORMATION, *PHWDBG_PORT_INFORMATION;
-
-/**
- * @brief
- * The structure of port information in hwdbg
- */
-class HwdbgPortInformation() extends Bundle {
-
- //
- // Structure fields
- //
- val CountOfPorts = UInt(32.W) // 4 bytes
-
- //
- // Offset of structure fields
- //
- object Offset {
-
- val countOfPorts = (0) / 8
- }
-}
-
-// -----------------------------------------------------------------------
-
-//
-// Structure in C:
-//
-// typedef struct _HWDBG_PORT_INFORMATION_ITEMS
-// {
-// UINT32 PortIndex;
-//
-// } HWDBG_PORT_INFORMATION_ITEMS, *PHWDBG_PORT_INFORMATION_ITEMS;
-
-/**
- * @brief
- * The structure of port information (each item) in hwdbg
- */
-class HwdbgPortInformationItems() extends Bundle {
-
- //
- // Structure fields
- //
- val PortSize = UInt(32.W) // 4 bytes
-
- //
- // Offset of structure fields
- //
- object Offset {
-
- val portSize = (0) / 8
- }
-}
-
-// -----------------------------------------------------------------------
-
-/**
- * @brief
- * Different action of hwdbg (SHARED WITH HYPERDBG) (HWDBG_ACTION_ENUMS)
- * @warning
- * Used in HyperDbg
- */
-object HwdbgActionEnums extends Enumeration {
-
- val hwdbgActionSendInstanceInfo = Value(1)
- val hwdbgActionConfigureScriptBuffer = Value(2)
-
-}
-
-// -----------------------------------------------------------------------
-
-/**
- * @brief
- * Different responses of hwdbg (SHARED WITH HYPERDBG) (HWDBG_RESPONSE_ENUMS)
- * @warning
- * Used in HyperDbg
- */
-object HwdbgResponseEnums extends Enumeration {
-
- val hwdbgResponseSuccessOrErrorMessage = Value(1)
- val hwdbgResponseInstanceInfo = Value(2)
-
-}
-
-// -----------------------------------------------------------------------
-
-/**
- * @brief
- * Different responses of hwdbg (SHARED WITH HYPERDBG) (HWDBG_ERROR_ENUMS)
- * @warning
- */
-object HwdbgSuccessOrErrorEnums extends Enumeration {
-
- val hwdbgOperationWasSuccessful = Value(0x7fffffff)
- val hwdbgErrorInvalidPacket = Value(1)
-
-}
-
-// -----------------------------------------------------------------------
diff --git a/hwdbg/src/main/scala/hwdbg/types/stage.scala b/hwdbg/src/main/scala/hwdbg/types/stage.scala
deleted file mode 100644
index 78d0fa39..00000000
--- a/hwdbg/src/main/scala/hwdbg/types/stage.scala
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * @file
- * stage.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Data types related to stage registers
- * @details
- * @version 0.1
- * @date
- * 2024-05-07
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.stage
-
-import chisel3._
-import chisel3.util.log2Ceil
-
-import hwdbg.configs._
-import hwdbg.script._
-
-class Stage(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- instanceInfo: HwdbgInstanceInformation
-) extends Bundle {
-
- val pinValues = Vec(
- instanceInfo.numberOfPins,
- UInt(1.W)
- ) // The value of each pin in each stage (should be passed to the next stage)
-
- val stageSymbol = new HwdbgShortSymbol(
- instanceInfo.scriptVariableLength
- ) // Interpreted script symbol for the target stage (should NOT be passed to the next stage)
-
- val getOperatorSymbol = Vec(
- instanceInfo.maximumNumberOfSupportedGetScriptOperators,
- new HwdbgShortSymbol(instanceInfo.scriptVariableLength)
- ) // GET symbol operand (should NOT be passed to the next stage)
-
- val setOperatorSymbol = Vec(
- instanceInfo.maximumNumberOfSupportedSetScriptOperators,
- new HwdbgShortSymbol(instanceInfo.scriptVariableLength)
- ) // SET symbol operand (should NOT be passed to the next stage)
-
- val targetStage = UInt(
- log2Ceil(
- instanceInfo.maximumNumberOfStages * (instanceInfo.maximumNumberOfSupportedGetScriptOperators + instanceInfo.maximumNumberOfSupportedSetScriptOperators + 1)
- ).W
- ) // Target stage that needs to be executed for the current pin values (should be passed to the next stage)
-
- val tempVariables = Vec(
- instanceInfo.numberOfSupportedTemporaryVariables,
- UInt(instanceInfo.scriptVariableLength.W)
- ) // Temporary variables
-
- val localGlobalVariables = Vec(
- instanceInfo.numberOfSupportedLocalAndGlobalVariables,
- UInt(instanceInfo.scriptVariableLength.W)
- ) // Local (and Global) variables
-
- val stageIndex = UInt(
- log2Ceil(
- instanceInfo.maximumNumberOfStages * (instanceInfo.maximumNumberOfSupportedGetScriptOperators + instanceInfo.maximumNumberOfSupportedSetScriptOperators + 1)
- ).W
- ) // Target stage index of the current stage (configured with script configuration and remains constant during execution)
-
- val stageEnable = Bool() // Target stage is enabled (configured) or not
-}
diff --git a/hwdbg/src/main/scala/hwdbg/utils/utils.scala b/hwdbg/src/main/scala/hwdbg/utils/utils.scala
deleted file mode 100644
index 162107d0..00000000
--- a/hwdbg/src/main/scala/hwdbg/utils/utils.scala
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * @file
- * utils.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * Different utilities and functionalities
- * @details
- * @version 0.1
- * @date
- * 2024-04-12
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg.utils
-
-import chisel3._
-import chisel3.util._
-
-/**
- * @brief
- * Create logs and debug messages
- */
-object LogInfo {
-
- def apply(debug: Boolean)(message: String): Unit = {
- if (debug) {
- println("[*] debug msg: " + message)
- }
- }
-}
-
-object BitwiseFunction {
-
- def getFirstNBits(num: Long, n: Int): Long = {
-
- val mask = (1L << n) - 1 // Create a bitmask with the first 'n' bits set to 1
- val shifted = num >>> (java.lang.Long.SIZE - n) // Shift the bits to the right to keep the first 'n' bits
- val firstNBits = shifted & mask // Extract the first 'n' bits by performing a bitwise AND operation
-
- firstNBits
- }
-
- def getBitsInRange(num: Long, start: Int, end: Int): Long = {
-
- require(start >= 0 && start <= 63, "Starting point must be between 0 and 63")
- require(end >= 0 && end <= 63, "Ending point must be between 0 and 63")
- require(start <= end, "Starting point must be less than or equal to ending point")
-
- val numBits = end - start + 1 // Number of bits in the range
- val mask = (1L << numBits) - 1 // Create a bitmask with 'numBits' bits set to 1
- val shifted = num >>> (java.lang.Long.SIZE - end - 1) // Shift the bits to the right to align the range with the rightmost position
- val bitsInRange = shifted & mask // Extract the bits within the specified range
-
- bitsInRange
- }
-
-}
diff --git a/hwdbg/src/main/scala/top.scala b/hwdbg/src/main/scala/top.scala
deleted file mode 100644
index 619fe296..00000000
--- a/hwdbg/src/main/scala/top.scala
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * @file
- * top.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * hwdbg's top module
- * @details
- * @version 0.1
- * @date
- * 2024-04-03
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg
-
-import chisel3._
-import circt.stage.ChiselStage
-
-import hwdbg._
-import hwdbg.configs._
-
-class DebuggerModule(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- numberOfPins: Int,
- maximumNumberOfStages: Int,
- maximumNumberOfSupportedGetScriptOperators: Int,
- maximumNumberOfSupportedSetScriptOperators: Int,
- sharedMemorySize: Int,
- debuggerAreaOffset: Int,
- debuggeeAreaOffset: Int,
- scriptVariableLength: Int,
- numberOfSupportedLocalAndGlobalVariables: Int,
- numberOfSupportedTemporaryVariables: Int,
- scriptCapabilities: Seq[Long],
- bramAddrWidth: Int,
- bramDataWidth: Int,
- portsConfiguration: Array[Int]
-) extends Module {
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Input/Output signals
- //
- val inputPin = Input(Vec(numberOfPins, UInt(1.W))) // input pins
- val outputPin = Output(Vec(numberOfPins, UInt(1.W))) // output pins
-
- //
- // Interrupt signals (lines)
- //
- val plInSignal = Input(Bool()) // PS to PL signal
- val psOutInterrupt = Output(Bool()) // PL to PS interrupt
-
- //
- // BRAM (Block RAM) ports
- //
- val rdWrAddr = Output(UInt(bramAddrWidth.W)) // read/write address
- val rdData = Input(UInt(bramDataWidth.W)) // read data
- val wrEna = Output(Bool()) // enable writing
- val wrData = Output(UInt(bramDataWidth.W)) // write data
-
- })
-
- //
- // Instantiate the debugger's main module
- //
- val (outputPin, psOutInterrupt, rdWrAddr, wrEna, wrData) =
- DebuggerMain(
- debug,
- numberOfPins,
- maximumNumberOfStages,
- maximumNumberOfSupportedGetScriptOperators,
- maximumNumberOfSupportedSetScriptOperators,
- sharedMemorySize,
- debuggerAreaOffset,
- debuggeeAreaOffset,
- scriptVariableLength,
- numberOfSupportedLocalAndGlobalVariables,
- numberOfSupportedTemporaryVariables,
- scriptCapabilities,
- bramAddrWidth,
- bramDataWidth,
- portsConfiguration
- )(
- io.en,
- io.inputPin,
- io.plInSignal,
- io.rdData
- )
-
- io.outputPin := outputPin
- io.psOutInterrupt := psOutInterrupt
- io.rdWrAddr := rdWrAddr
- io.wrEna := wrEna
- io.wrData := wrData
-
-}
-
-object Main extends App {
-
- //
- // Load configuration from JSON file
- //
- LoadConfiguration.loadFromJson("src/main/scala/hwdbg/configs/config.json")
-
- //
- // Generate hwdbg verilog files
- //
- println(
- ChiselStage.emitSystemVerilog(
- new DebuggerModule(
- DebuggerConfigurations.ENABLE_DEBUG,
- DebuggerConfigurations.NUMBER_OF_PINS,
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_STAGES,
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_GET_SCRIPT_OPERATORS,
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_SET_SCRIPT_OPERATORS,
- MemoryCommunicationConfigurations.DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE,
- MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PS_TO_PL_COMMUNICATION,
- MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PL_TO_PS_COMMUNICATION,
- ScriptEngineConfigurations.SCRIPT_VARIABLE_LENGTH,
- ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_LOCAL_AND_GLOBAL_VARIABLES,
- ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_TEMPORARY_VARIABLES,
- ScriptEngineConfigurations.SCRIPT_ENGINE_EVAL_CAPABILITIES,
- MemoryCommunicationConfigurations.BLOCK_RAM_ADDR_WIDTH,
- MemoryCommunicationConfigurations.BLOCK_RAM_DATA_WIDTH,
- DebuggerConfigurations.PORT_PINS_MAP
- ),
- firtoolOpts = Array(
- "-disable-all-randomization",
- // "-strip-debug-info",
- "--split-verilog", // The intention for this argument (and next argument) is to separate generated files.
- "-o",
- "generated/"
- )
- )
- )
-}
diff --git a/hwdbg/src/main/scala/top_test.scala b/hwdbg/src/main/scala/top_test.scala
deleted file mode 100644
index dabe92d7..00000000
--- a/hwdbg/src/main/scala/top_test.scala
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * @file
- * top_test.scala
- * @author
- * Sina Karvandi (sina@hyperdbg.org)
- * @brief
- * hwdbg's top module (with BRAM) for testing
- * @details
- * @version 0.1
- * @date
- * 2024-04-04
- *
- * @copyright
- * This project is released under the GNU Public License v3.
- */
-package hwdbg
-
-import chisel3._
-import circt.stage.ChiselStage
-
-import hwdbg._
-import hwdbg.configs._
-import hwdbg.libs.mem._
-
-class DebuggerModuleTestingBRAM(
- debug: Boolean = DebuggerConfigurations.ENABLE_DEBUG,
- numberOfPins: Int,
- maximumNumberOfStages: Int,
- maximumNumberOfSupportedGetScriptOperators: Int,
- maximumNumberOfSupportedSetScriptOperators: Int,
- sharedMemorySize: Int,
- debuggerAreaOffset: Int,
- debuggeeAreaOffset: Int,
- scriptVariableLength: Int,
- numberOfSupportedLocalAndGlobalVariables: Int,
- numberOfSupportedTemporaryVariables: Int,
- scriptCapabilities: Seq[Long],
- bramAddrWidth: Int,
- bramDataWidth: Int,
- portsConfiguration: Array[Int]
-) extends Module {
- val io = IO(new Bundle {
-
- //
- // Chip signals
- //
- val en = Input(Bool()) // chip enable signal
-
- //
- // Input/Output signals
- //
- val inputPin = Input(Vec(numberOfPins, UInt(1.W))) // input pins
- val outputPin = Output(Vec(numberOfPins, UInt(1.W))) // output pins
-
- //
- // Interrupt signals (lines)
- //
- val plInSignal = Input(Bool()) // PS to PL signal
- val psOutInterrupt = Output(Bool()) // PL to PS interrupt
-
- //
- // *** BRAM (Block RAM) ports are initialized from an external file ***
- //
-
- })
-
- val bramEn = WireInit(false.B)
- val bramWrite = WireInit(false.B)
- val bramAddr = WireInit(0.U(bramAddrWidth.W))
- val bramDataIn = WireInit(0.U(bramDataWidth.W))
-
- val bramDataOut = WireInit(0.U(bramDataWidth.W))
-
- //
- // Instantiate the BRAM memory initializer module
- //
- val dataOut =
- InitRegMemFromFile(
- debug,
- MemoryCommunicationConfigurations.ENABLE_BLOCK_RAM_DELAY,
- TestingConfigurations.BRAM_INITIALIZATION_FILE_PATH,
- bramAddrWidth,
- bramDataWidth,
- MemoryCommunicationConfigurations.DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE
- )(
- bramEn,
- bramWrite,
- bramAddr,
- bramDataIn
- )
-
- bramDataOut := dataOut
-
- //
- // Instantiate the debugger's main module
- //
- val (outputPin, psOutInterrupt, rdWrAddr, wrEna, wrData) =
- DebuggerMain(
- debug,
- numberOfPins,
- maximumNumberOfStages,
- maximumNumberOfSupportedGetScriptOperators,
- maximumNumberOfSupportedSetScriptOperators,
- sharedMemorySize,
- debuggerAreaOffset,
- debuggeeAreaOffset,
- scriptVariableLength,
- numberOfSupportedLocalAndGlobalVariables,
- numberOfSupportedTemporaryVariables,
- scriptCapabilities,
- bramAddrWidth,
- bramDataWidth,
- portsConfiguration
- )(
- io.en,
- io.inputPin,
- io.plInSignal,
- bramDataOut
- )
-
- //
- // Connect BRAM Pins
- //
- bramEn := io.en // enable BRAM when the main chip enabled
- bramAddr := rdWrAddr
- bramWrite := wrEna
- bramDataIn := wrData
-
- //
- // Connect I/O pins
- //
- io.outputPin := outputPin
- io.psOutInterrupt := psOutInterrupt
-
-}
-
-object MainWithInitializedBRAM extends App {
-
- //
- // Load configuration from JSON file
- //
- LoadConfiguration.loadFromJson("src/main/scala/hwdbg/configs/config.json")
-
- //
- // Generate hwdbg verilog files
- //
- println(
- ChiselStage.emitSystemVerilog(
- new DebuggerModuleTestingBRAM(
- DebuggerConfigurations.ENABLE_DEBUG,
- DebuggerConfigurations.NUMBER_OF_PINS,
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_STAGES,
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_GET_SCRIPT_OPERATORS,
- ScriptEngineConfigurations.MAXIMUM_NUMBER_OF_SUPPORTED_SET_SCRIPT_OPERATORS,
- MemoryCommunicationConfigurations.DEFAULT_CONFIGURATION_INITIALIZED_MEMORY_SIZE,
- MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PS_TO_PL_COMMUNICATION,
- MemoryCommunicationConfigurations.BASE_ADDRESS_OF_PL_TO_PS_COMMUNICATION,
- ScriptEngineConfigurations.SCRIPT_VARIABLE_LENGTH,
- ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_LOCAL_AND_GLOBAL_VARIABLES,
- ScriptEngineConfigurations.NUMBER_OF_SUPPORTED_TEMPORARY_VARIABLES,
- ScriptEngineConfigurations.SCRIPT_ENGINE_EVAL_CAPABILITIES,
- MemoryCommunicationConfigurations.BLOCK_RAM_ADDR_WIDTH,
- MemoryCommunicationConfigurations.BLOCK_RAM_DATA_WIDTH,
- DebuggerConfigurations.PORT_PINS_MAP
- ),
- firtoolOpts = Array(
- "-disable-all-randomization",
- // "-strip-debug-info",
- "--lowering-options=disallowLocalVariables", // because icarus doesn't support 'automatic logic', this option prevents such logics
- "--split-verilog", // The intention for this argument (and next argument) is to separate generated files.
- "-o",
- "generated/"
- )
- )
- )
-}
diff --git a/hwdbg/src/main/systemverilog/sensors/constraints/top.xdc b/hwdbg/src/main/systemverilog/sensors/constraints/top.xdc
deleted file mode 100644
index 1c85485d..00000000
--- a/hwdbg/src/main/systemverilog/sensors/constraints/top.xdc
+++ /dev/null
@@ -1,4620 +0,0 @@
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[0]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[10]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[11]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[12]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[13]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[14]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[15]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[16]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[17]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[18]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[19]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[1]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[20]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[21]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[22]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[23]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[24]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[25]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[26]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[27]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[28]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[29]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[2]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[30]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[31]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[3]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[4]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[5]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[6]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[7]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[8]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets UART_FF_INS/RO[9]/ro_fanout_ins[0]/ro_inst[0]/x[2]]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/RO_SENS[5]/FSM_onehot_next_state[1]_i_1__0]
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets {UART_FF_INS/RO[0]/ro_fanout_ins[0]/ro_inst[0]/a}]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[0]/ro_fanout_ins[0]/ro_inst[0]/*]
-
-
-set_property IOSTANDARD DIFF_SSTL12 [get_ports QDR4_CLK_100MHZ_N]
-set_property PACKAGE_PIN BJ4 [get_ports QDR4_CLK_100MHZ_P]
-set_property PACKAGE_PIN BK3 [get_ports QDR4_CLK_100MHZ_N]
-set_property IOSTANDARD DIFF_SSTL12 [get_ports QDR4_CLK_100MHZ_P]
-
-
-
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[0]/ro_inst[0]/a]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[0]/ro_inst[0]/b]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[0]/ro_inst[0]/b_inferred_i_1__510_0[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[0]/ro_inst[0]/x[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[0]/ro_inst[0]/x[1]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[0]/ro_inst[0]/x[2]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[1]/ro_inst[0]/a]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[1]/ro_inst[0]/b]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[1]/ro_inst[0]/b_inferred_i_1__382_0[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[1]/ro_inst[0]/x[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[1]/ro_inst[0]/x[1]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[1]/ro_inst[0]/x[2]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[2]/ro_inst[0]/a]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[2]/ro_inst[0]/b]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[2]/ro_inst[0]/b_inferred_i_1__254_0[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[2]/ro_inst[0]/x[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[2]/ro_inst[0]/x[1]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[2]/ro_inst[0]/x[2]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[3]/ro_inst[0]/a]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[3]/ro_inst[0]/b]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[3]/ro_inst[0]/b_inferred_i_1__126_0[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[3]/ro_inst[0]/x[0]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[3]/ro_inst[0]/x[1]]
-#set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets design_1_i/PL_CORE_0/inst/UART_FF_INS/RO[3]/ro_inst[0]/x[2]]
-
-
-
-
-set_property PACKAGE_PIN BH24 [get_ports {led_out_ff[0]}]
-set_property IOSTANDARD LVCMOS18 [get_ports {led_out_ff[0]}]
-set_property PACKAGE_PIN BG24 [get_ports {led_out_ff[1]}]
-set_property IOSTANDARD LVCMOS18 [get_ports {led_out_ff[1]}]
-set_property PACKAGE_PIN BG25 [get_ports {led_out_ff[2]}]
-set_property IOSTANDARD LVCMOS18 [get_ports {led_out_ff[2]}]
-set_property PACKAGE_PIN BF25 [get_ports {led_out_ff[3]}]
-set_property IOSTANDARD LVCMOS18 [get_ports {led_out_ff[3]}]
-
-
-#set_property PACKAGE_PIN BP26 [get_ports uart_rx_line_0]
-#set_property IOSTANDARD LVCMOS18 [get_ports uart_rx_line_0]
-#set_property PACKAGE_PIN BN26 [get_ports uart_tx_line_0]
-#set_property IOSTANDARD LVCMOS18 [get_ports uart_tx_line_0]
-
-
-
-set_property PACKAGE_PIN BK28 [get_ports uart_rx_line]
-set_property IOSTANDARD LVCMOS18 [get_ports uart_rx_line]
-set_property PACKAGE_PIN BJ28 [get_ports uart_tx_line]
-set_property IOSTANDARD LVCMOS18 [get_ports uart_tx_line]
-#set_property PACKAGE_PIN BL26 [get_ports "UART1_RTS_B"] ;# Bank 67 VCCO - VCC1V8 - IO_L8N_T1L_N3_AD5N_67
-#set_property IOSTANDARD LVCMOS18 [get_ports "UART1_RTS_B"] ;# Bank 67 VCCO - VCC1V8 - IO_L8N_T1L_N3_AD5N_67
-#set_property PACKAGE_PIN BL27 [get_ports "UART1_CTS_B"] ;# Bank 67 VCCO - VCC1V8 - IO_L8P_T1L_N2_AD5P_67
-#set_property IOSTANDARD LVCMOS18 [get_ports "UART1_CTS_B"] ;# Bank 67 VCCO - VCC1V8 - IO_L8P_T1L_N2_AD5P_67
-
-
-#set_property PACKAGE_PIN BP26 [get_ports uart_tx_line_0]
-#set_property IOSTANDARD LVCMOS18 [get_ports uart_tx_line_0]
-#set_property PACKAGE_PIN BN26 [get_ports uart_rx_line_0]
-#set_property IOSTANDARD LVCMOS18 [get_ports uart_rx_line_0]
-
-
-
-#set_property USER_SLR_ASSIGNMENT SLR1 [get_cells -hier {*/aes_ht_free/*}]
-
-#set_property USER_SLR_ASSIGNMENT SLR1 [get_cells -hier -filter {NAME =~ */aes_ht_free}]
-
-#set_property USER_SLR_ASSIGNMENT SLR1 [get_cells -hier -filter {NAME =~ */aes_ht}]
-
-
-#set_property USER_SLR_ASSIGNMENT SLR2 [get_cells -hier -filter {NAME =~ */ff[0]}]
-#set_property USER_SLR_ASSIGNMENT SLR2 [get_cells -hier -filter {NAME =~ */ff[1]}]
-#set_property USER_SLR_ASSIGNMENT SLR2 [get_cells -hier -filter {NAME =~ */ff[2]}]
-#set_property USER_SLR_ASSIGNMENT SLR2 [get_cells -hier -filter {NAME =~ */ff[3]}]
-
-#set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */RO[0]}]
-#set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */RO[1]}]
-#set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */RO[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */RO_SENS*}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells uart_rx_line_IBUF_inst]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells uart_tx_line_OBUF_inst]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][0]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][0]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][0]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][1]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][1]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][1]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][2]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][2]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][2]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][3]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][3]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][3]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][3]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][4]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][4]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][4]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][5]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][5]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][5]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][5]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][6]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][6]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][6]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_10}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_11}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_12}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_13}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_14}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_15}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_18}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_31}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_32}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_33}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_34}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_37}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_38}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_39}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_40}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_49}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_50}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_51}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_52}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_53}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_54}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_55}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_56}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[0][7]_i_9}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[10][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[11][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[12][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[13][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[14][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[15][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][0]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][1]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][2]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][3]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][3]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][4]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][5]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][5]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][6]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][7]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][7]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[1][7]_i_8}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][0]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][1]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][2]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][3]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][4]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][5]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][6]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[2][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][0]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][1]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][2]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][3]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][4]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][5]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][6]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[3][7]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][3]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][5]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[4][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][3]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][5]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[5][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][3]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][5]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[6][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][3]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][5]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[7][7]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[8][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data[9][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length[4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_length_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_19}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_20}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_21}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_22}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_23}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_24}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_29}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_30}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_35}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[0][7]_i_36}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[10][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[11][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[12][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[13][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[14][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[15][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[1][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[2][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[3][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[4][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[5][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[6][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[7][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[8][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/uart_tx_data_reg[9][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/uart_tx_en_reg]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[10]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[11]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[12]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[13]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[14]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[15]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[15]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[15]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[16]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[17]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[18]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[19]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[1]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[20]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[21]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[22]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[24]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[25]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[26]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[27]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[28]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[29]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[30]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[30]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[31]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[31]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[32]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[33]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[34]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[34]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[34]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[35]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[35]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_10}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_11}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_12}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_13}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_14}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_15}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_16}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_166}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_167}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_168}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_169}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_17}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_170}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_171}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_172}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_173}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_174}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_175}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_176}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_177}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_178}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_179}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_18}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_180}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_181}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_182}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_183}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_184}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_185}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_186}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_187}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_188}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_189}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_190}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_191}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_192}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_193}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_194}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_195}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_196}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_197}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_198}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_199}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_20}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_200}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_201}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_202}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_203}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_204}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_205}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_206}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_207}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_208}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_209}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_21}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_210}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_211}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_212}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_213}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_214}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_215}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_216}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_217}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_218}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_219}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_22}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_220}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_221}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_222}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_223}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_224}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_225}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_226}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_227}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_228}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_229}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_230}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_231}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_232}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_233}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_234}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_235}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_236}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_237}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_238}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_239}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_240}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_241}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_242}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_243}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_244}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_245}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_246}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_247}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_248}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_249}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_25}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_250}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_251}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_252}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_253}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_254}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_255}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_256}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_257}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_258}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_259}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_26}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_260}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_261}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_262}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_263}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_264}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_265}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_266}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_267}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_268}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_269}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_27}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_270}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_271}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_272}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_273}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_274}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_275}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_276}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_277}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_278}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_279}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_28}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_280}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_281}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_282}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_283}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_284}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_285}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_286}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_287}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_288}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_289}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_29}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_290}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_291}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_292}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_293}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_30}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_31}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_32}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_33}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_38}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_43}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_54}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_55}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_57}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_58}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_59}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_60}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_61}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_62}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_63}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_64}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_65}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_66}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_8}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[36]_i_9}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[37]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[37]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[8]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state[9]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_100}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_101}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_102}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_103}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_104}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_105}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_106}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_107}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_108}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_109}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_110}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_111}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_112}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_113}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_114}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_115}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_116}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_117}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_118}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_119}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_120}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_121}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_122}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_123}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_124}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_125}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_126}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_127}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_128}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_129}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_130}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_131}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_132}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_133}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_134}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_135}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_136}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_137}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_138}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_139}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_140}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_141}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_142}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_143}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_144}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_145}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_146}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_147}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_148}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_149}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_150}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_151}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_152}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_153}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_154}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_155}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_156}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_157}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_158}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_159}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_160}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_161}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_162}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_163}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_164}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_165}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_34}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_35}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_36}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_37}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_70}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_71}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_72}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_73}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_74}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_75}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_76}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_77}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_78}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_79}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_80}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_81}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_82}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_83}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_84}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_85}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_86}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_87}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_88}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_89}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_90}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_91}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_92}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_93}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_94}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_95}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_96}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_97}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_98}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/FSM_onehot_current_state_reg[36]_i_99}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/GND]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/VCC]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/aes_key[127]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/aes_ptx[127]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/aes_ptx[127]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[10]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[11]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[12]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[13]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[14]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[15]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[16]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[17]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[18]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[19]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[20]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[21]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[22]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[23]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[24]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[25]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[26]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[27]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[28]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[29]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[30]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[31]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[8]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_en[9]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/chain_id_reg[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/div_frac[31]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/div_int[31]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/div_int[31]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_10]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_100]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_101]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_102]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_103]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_104]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_105]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_106]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_107]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_108]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_109]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_11]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_110]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_111]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_112]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_113]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_114]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_115]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_116]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_117]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_118]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_119]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_12]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_120]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_121]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_122]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_123]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_124]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_125]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_126]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_127]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_128]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_129]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_13]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_130]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_131]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_132]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_133]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_134]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_135]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_136]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_137]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_138]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_139]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_14]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_140]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_141]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_142]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_143]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_144]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_145]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_146]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_147]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_148]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_149]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_15]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_150]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_151]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_152]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_153]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_154]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_155]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_156]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_157]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_158]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_159]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_16]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_160]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_161]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_162]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_163]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_164]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_165]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_166]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_167]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_168]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_169]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_17]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_170]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_171]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_172]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_173]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_174]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_175]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_176]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_177]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_178]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_179]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_18]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_180]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_181]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_182]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_183]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_184]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_185]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_186]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_187]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_188]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_189]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_19]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_190]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_191]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_192]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_193]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_194]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_195]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_196]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_197]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_198]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_199]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_2]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_20]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_200]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_201]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_202]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_203]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_204]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_205]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_206]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_207]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_208]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_209]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_21]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_210]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_211]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_212]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_213]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_214]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_215]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_216]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_217]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_218]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_219]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_22]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_220]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_221]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_222]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_223]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_224]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_225]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_226]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_227]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_228]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_229]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_23]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_230]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_231]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_232]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_233]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_234]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_235]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_236]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_237]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_238]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_239]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_24]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_240]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_241]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_242]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_243]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_244]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_245]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_246]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_247]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_248]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_249]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_25]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_250]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_251]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_252]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_253]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_254]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_255]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_256]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_257]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_258]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_259]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_26]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_260]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_261]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_262]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_263]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_264]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_265]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_266]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_267]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_268]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_269]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_27]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_270]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_271]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_272]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_273]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_274]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_275]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_276]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_277]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_278]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_279]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_28]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_280]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_281]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_282]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_283]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_284]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_285]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_286]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_287]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_288]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_289]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_29]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_290]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_291]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_292]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_293]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_294]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_295]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_296]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_297]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_298]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_299]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_3]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_30]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_300]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_301]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_302]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_303]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_304]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_305]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_306]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_307]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_308]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_309]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_31]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_310]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_311]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_312]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_313]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_314]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_315]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_316]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_317]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_318]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_319]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_32]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_320]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_321]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_322]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_323]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_324]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_325]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_326]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_327]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_328]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_329]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_33]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_330]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_331]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_332]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_333]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_334]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_335]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_336]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_337]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_338]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_339]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_34]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_340]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_341]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_342]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_343]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_344]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_345]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_346]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_347]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_348]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_349]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_35]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_350]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_351]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_352]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_353]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_354]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_355]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_356]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_357]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_358]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_359]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_36]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_360]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_361]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_362]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_363]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_364]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_365]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_366]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_367]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_368]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_369]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_37]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_370]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_371]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_372]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_373]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_374]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_375]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_376]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_377]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_378]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_379]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_38]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_380]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_381]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_382]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_383]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_384]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_385]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_386]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_387]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_388]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_389]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_39]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_390]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_391]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_392]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_393]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_394]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_395]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_396]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_397]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_398]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_399]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_4]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_40]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_400]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_401]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_402]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_403]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_404]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_405]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_406]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_407]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_408]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_409]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_41]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_410]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_411]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_412]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_413]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_414]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_415]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_416]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_417]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_418]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_419]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_42]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_420]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_421]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_422]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_423]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_424]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_425]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_426]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_427]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_428]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_429]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_43]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_430]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_431]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_432]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_433]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_434]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_435]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_436]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_437]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_438]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_439]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_44]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_440]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_441]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_442]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_443]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_444]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_445]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_446]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_447]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_448]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_449]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_45]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_450]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_451]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_452]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_453]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_454]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_455]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_456]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_457]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_458]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_459]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_46]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_460]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_461]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_462]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_463]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_464]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_465]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_466]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_467]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_468]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_469]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_47]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_470]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_471]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_472]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_473]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_474]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_475]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_476]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_477]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_478]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_479]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_48]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_480]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_481]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_482]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_483]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_484]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_485]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_486]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_487]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_488]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_489]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_49]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_490]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_491]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_492]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_493]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_494]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_495]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_496]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_497]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_498]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_499]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_5]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_50]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_500]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_501]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_502]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_503]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_504]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_505]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_506]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_507]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_508]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_509]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_51]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_510]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_511]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_512]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_513]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_514]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_515]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_516]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_517]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_518]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_519]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_52]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_520]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_521]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_522]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_523]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_524]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_525]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_526]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_527]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_528]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_529]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_53]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_530]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_531]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_532]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_533]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_534]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_535]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_536]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_537]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_538]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_539]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_54]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_540]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_541]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_542]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_543]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_544]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_545]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_546]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_547]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_548]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_549]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_55]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_550]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_551]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_552]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_553]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_554]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_555]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_556]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_557]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_558]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_559]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_56]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_560]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_561]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_562]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_563]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_564]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_565]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_566]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_567]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_568]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_569]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_57]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_570]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_571]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_572]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_573]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_574]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_575]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_576]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_577]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_578]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_579]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_58]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_580]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_581]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_582]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_583]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_584]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_585]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_586]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_587]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_588]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_589]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_59]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_590]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_591]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_592]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_593]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_594]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_595]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_596]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_597]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_598]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_599]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_6]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_60]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_600]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_601]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_602]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_603]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_604]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_605]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_606]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_607]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_608]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_609]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_61]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_610]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_611]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_612]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_613]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_614]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_615]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_616]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_617]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_618]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_619]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_62]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_620]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_621]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_622]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_623]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_624]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_625]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_626]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_627]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_628]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_629]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_63]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_630]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_631]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_632]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_633]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_634]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_635]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_636]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_637]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_638]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_639]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_64]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_640]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_641]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_642]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_643]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_644]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_645]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_646]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_647]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_648]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_649]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_65]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_650]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_651]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_652]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_653]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_654]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_655]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_656]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_657]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_658]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_659]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_66]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_660]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_661]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_662]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_663]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_664]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_665]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_666]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_667]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_668]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_669]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_67]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_670]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_671]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_672]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_673]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_674]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_675]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_676]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_677]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_678]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_679]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_68]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_680]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_681]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_682]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_683]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_684]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_685]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_686]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_687]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_688]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_689]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_69]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_690]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_691]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_692]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_693]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_694]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_695]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_696]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_697]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_698]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_699]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_7]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_70]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_700]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_701]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_702]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_703]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_704]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_705]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_706]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_707]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_708]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_709]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_71]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_710]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_711]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_712]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_713]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_714]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_72]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_73]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_74]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_75]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_76]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_77]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_78]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_79]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_8]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_80]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_81]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_82]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_83]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_84]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_85]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_86]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_87]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_88]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_89]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_9]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_90]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_91]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_92]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_93]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_94]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_95]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_96]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_97]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_98]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/g0_b0_i_99]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[10]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[11]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[12]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[13]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[14]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[15]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[16]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[17]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[18]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[19]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[20]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[21]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[22]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[23]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[24]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[25]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[26]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[27]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[28]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[29]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[30]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[31]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[8]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_en[9]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_id_reg[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_id_reg[7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_id_reg[7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_meas_time[63]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_meas_time[63]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/ro_meas_time[63]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[118][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[122][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[126][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[138][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[139][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[139][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[154][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[163][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[170][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[176][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[179][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[183][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[187][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[190][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[194][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[202][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[216][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[224][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[232][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[36][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[37][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[38][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[62][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data[67][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[0]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[0]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[0]_rep__2_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[0]_rep__3_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[0]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[1]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[1]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[1]_rep__2_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[1]_rep__3_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[1]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[2]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[2]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[2]_rep__2_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[2]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[3]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[3]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[4]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[4]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[5]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[6]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[8]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length[8]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[0]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[0]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[0]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[0]_rep__2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[0]_rep__3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[1]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[1]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[1]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[1]_rep__2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[1]_rep__3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[2]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[2]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[2]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[2]_rep__2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[3]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[3]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[4]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[4]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[5]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[6]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_length_reg[8]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[0][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[100][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[101][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[102][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[103][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[104][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[105][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[106][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[107][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[108][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[109][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[10][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[110][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[111][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[112][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[113][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[114][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[115][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[116][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[117][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[118][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[119][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[11][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[120][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[121][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[122][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[123][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[124][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[125][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[126][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[127][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[128][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[129][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[12][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[130][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[131][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[132][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[133][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[134][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[135][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[136][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[137][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[138][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[139][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[13][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[140][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[141][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[142][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[143][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[144][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[145][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[146][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[147][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[148][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[149][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[14][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[150][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[151][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[152][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[153][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[154][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[155][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[156][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[157][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[158][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[159][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[15][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[160][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[161][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[162][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[163][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[164][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[165][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[166][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[167][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[168][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[169][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[16][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[170][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[171][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[172][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[173][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[174][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[175][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[176][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[177][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[178][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[179][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[17][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[180][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[181][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[182][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[183][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[184][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[185][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[186][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[187][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[188][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[189][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[18][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[190][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[191][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[192][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[193][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[194][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[195][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[196][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[197][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[198][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[199][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[19][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[1][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[200][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[201][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[202][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[203][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[204][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[205][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[206][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[207][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[208][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[209][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[20][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[210][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[211][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[212][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[213][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[214][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[215][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[216][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[217][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[218][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[219][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[21][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[220][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[221][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[222][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[223][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[224][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[225][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[226][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[227][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[228][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[229][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[22][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[230][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[231][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[232][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[233][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[234][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[235][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[236][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[237][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[238][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[239][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[23][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[240][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[241][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[242][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[243][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[244][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[245][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[246][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[247][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[248][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[249][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[24][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[250][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[251][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[252][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[253][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[254][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[255][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[25][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[26][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[27][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[28][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[29][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[2][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[30][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[31][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[32][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[33][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[34][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[35][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[36][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[37][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[38][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[39][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[3][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[40][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[41][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[42][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[43][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[44][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[45][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[46][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[47][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[48][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[49][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[4][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[50][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[51][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[52][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[53][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[54][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[55][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[56][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[57][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[58][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[59][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[5][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[60][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[61][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[62][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[63][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[64][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[65][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[66][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[67][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[68][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[69][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[6][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[70][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[71][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[72][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[73][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[74][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[75][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[76][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[77][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[78][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[79][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[7][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[80][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[81][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[82][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[83][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[84][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[85][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[86][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[87][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[88][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[89][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[8][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[90][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[91][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[92][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[93][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[94][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[95][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[96][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[97][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[98][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[99][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/rx_data_reg[9][7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_10}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_11}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_12}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_13}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_14}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_1__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_8}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state[2]_i_9}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/FSM_sequential_current_state_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver/GND]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver/GND_1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver/VCC]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter0_carry]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter0_carry__0]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter0_carry__1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter0_carry__2]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter[31]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[10]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[11]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[12]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[13]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[14]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[15]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[16]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[17]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[18]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[19]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[20]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[21]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[22]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[23]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[24]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[25]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[26]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[27]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[28]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[29]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[30]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[31]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[8]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/clock_counter_reg[9]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit[3]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/current_bit_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[0]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[100][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[101][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[102][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[103][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[104][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[105][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[106][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[107][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[108][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[109][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[10][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[110][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[111][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[112][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[113][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[113][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[114][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[114][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[115][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[116][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[117][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[118][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[119][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[11][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[120][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[120][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[121][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[122][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[123][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[123][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[124][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[125][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[126][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[127][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[127][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[128][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[129][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[12][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[130][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[131][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[132][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[133][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[134][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[135][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[136][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[137][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[138][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[139][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[13][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[140][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[141][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[142][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[143][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[144][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[145][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[146][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[147][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[148][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[149][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[14][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[150][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[151][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[152][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[153][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[154][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[155][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[156][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[157][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[158][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[159][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[15][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[15][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[160][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[161][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[162][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[163][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[164][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[165][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[166][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[167][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[168][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[169][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[16][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[170][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[171][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[172][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[173][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[174][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[175][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[176][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[177][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[178][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[179][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[17][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[180][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[181][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[182][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[183][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[184][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[184][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[185][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[186][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[187][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[188][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[189][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[18][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[190][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[191][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[192][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[193][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[194][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[195][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[195][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[196][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[197][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[198][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[199][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[19][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[1][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[1]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[1]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[1]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[200][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[201][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[202][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[203][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[204][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[205][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[206][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[207][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[208][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[209][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[20][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[210][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[211][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[212][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[213][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[214][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[215][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[216][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[217][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[218][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[219][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[21][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[220][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[221][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[222][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[223][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[224][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[225][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[226][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[227][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[228][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[229][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[22][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[230][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[231][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[232][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[233][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[234][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[235][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[236][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[237][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[238][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[239][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[23][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[240][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[241][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[242][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[243][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[244][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[245][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[246][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[247][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[248][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[249][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[24][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[250][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[251][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[252][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[252][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[253][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[253][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[254][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[254][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[255][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[255][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[25][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[26][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[27][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[28][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[29][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[2][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[2]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[2]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[2]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[2]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[30][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[30][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[31][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[32][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[33][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[34][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[35][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[36][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[37][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[38][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[38][7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[39][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[3][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[3]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[3]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[3]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[3]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[40][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[41][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[42][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[43][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[44][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[45][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[46][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[46][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[47][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[48][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[49][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[4]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[50][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[51][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[52][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[53][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[54][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[55][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[56][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[57][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[58][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[59][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[5][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[5]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[5]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[5]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[5]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[60][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[60][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[61][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[62][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[63][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[64][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[65][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[66][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[67][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[68][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[69][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[6]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[70][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[71][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[72][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[73][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[74][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[75][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[76][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[77][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[78][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[79][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_rep__0_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_rep__1_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[7]_rep_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[80][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[81][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[82][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[83][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[84][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[85][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[86][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[87][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[88][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[89][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[8][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[90][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[91][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[92][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[93][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[94][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[95][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[96][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[97][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[98][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[99][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[99][7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data[9][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_length[8]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[0]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[0]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[0]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[1]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[1]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[1]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[2]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[2]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[2]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[3]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[3]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[3]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[4]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[4]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[4]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[5]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[5]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[5]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[6]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[6]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[6]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[7]_rep}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[7]_rep__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_rxer/receiver/rx_data_reg[7]_rep__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_onehot_current_state[36]_i_19}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_onehot_current_state[36]_i_56}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_10}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_1__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_8}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[0]_i_9}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_10}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_11}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_12}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_13}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_14}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_15}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_16}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_17}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_18}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_19}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_20}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_21}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_22}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_23}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_24}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_25}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_26}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_27}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_28}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_29}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_30}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_31}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_32}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_33}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_34}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_35}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_36}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_8}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state[1]_i_9}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state_reg[0]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state_reg[1]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/FSM_sequential_current_state_reg[1]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/GND]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/GND_1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/VCC]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[10]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[11]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[12]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[13]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[14]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[15]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[16]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[16]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[17]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[18]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[19]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[20]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[21]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[22]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[23]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[24]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[24]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[25]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[26]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[27]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[28]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[29]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[30]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[31]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[31]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[8]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[8]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/delay_counter_reg[9]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[5]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter[7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/transfer_counter_reg[7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/tx_ready_i_1__0]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/tx_ready_reg]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[0][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[0]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[0]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[0]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[0]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[15][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[1][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[1]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[1]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[1]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[1]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[2]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[2]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[2]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[2]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[3][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[3]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[3]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[3]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[3]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[4]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[4]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[4]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[4]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[4]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[5]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[5]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[5]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[5]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[5]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[6]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[6]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[6]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[6]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[6]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[7][7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[7]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[7]_i_6}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[7]_i_7}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[7]_i_8}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data[7]_i_9}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[0]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[0]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[1]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[1]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[2]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[2]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[3]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[3]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[4]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[4]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[5]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[5]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[6]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[6]_i_3}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[7]_i_4}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/uart_tx_data_reg[7]_i_5}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/uart_tx_en_reg]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[0]_i_1__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[1]_i_1__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[1]_i_1__1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_10__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_2__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_3__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_4__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_5__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_6__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_7__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_8__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state[2]_i_9__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/FSM_sequential_current_state_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/GND]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/GND_1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/VCC]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter[0]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter[1]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter[2]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter[3]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter[3]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/bit_counter_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/clock_counter0_carry]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/clock_counter0_carry__0]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/clock_counter0_carry__1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/clock_counter0_carry__2]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter[0]_i_1__0}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter[32]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[0]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[10]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[11]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[12]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[13]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[14]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[15]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[16]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[17]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[18]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[19]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[1]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[20]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[21]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[22]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[23]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[24]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[25]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[26]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[27]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[28]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[29]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[2]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[30]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[31]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[32]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[3]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[4]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[5]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[6]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[7]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[8]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/clock_counter_reg[9]}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/delay_counter[31]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/delay_counter[31]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/transfer_counter[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_line_i_1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_line_i_2]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_line_i_3]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_line_i_4]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_line_i_5]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_line_reg]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_ready_i_1]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells UART_FF_INS/multibyte_uart_txer/sender/tx_ready_reg]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/uart_tx_data[7]_i_1}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells {UART_FF_INS/multibyte_uart_txer/sender/uart_tx_data[7]_i_2}]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells uart_rx_line_IBUF_inst/IBUFCTRL_INST]
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells uart_rx_line_IBUF_inst/INBUF_INST]
-
-#create_pblock pb_ff_0
-#set_property IS_SOFT FALSE [get_pblocks pb_ff_0]
-#resize_pblock [get_pblocks pb_ff_0] -add {CLOCKREGION_X6Y1:CLOCKREGION_X6Y1}
-#add_cells_to_pblock {pb_ff_0} [get_cells -hier -filter {NAME =~ */ff[0]}]
-
-
-create_pblock pb_ro_0
-add_cells_to_pblock [get_pblocks pb_ro_0] [get_cells -quiet [list {UART_FF_INS/RO[0]} {UART_FF_INS/chain[0]}]]
-resize_pblock [get_pblocks pb_ro_0] -add {CLOCKREGION_X0Y3:CLOCKREGION_X0Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_0]
-#resize_pblock [get_pblocks pb_ro_0] -add {SLICE_X117Y0:SLICE_X145Y59}
-
-
-
-create_pblock pb_ro_1
-add_cells_to_pblock [get_pblocks pb_ro_1] [get_cells -quiet [list {UART_FF_INS/RO[1]} {UART_FF_INS/chain[1]}]]
-resize_pblock [get_pblocks pb_ro_1] -add {CLOCKREGION_X1Y3:CLOCKREGION_X1Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_1]
-
-create_pblock pb_ro_2
-add_cells_to_pblock [get_pblocks pb_ro_2] [get_cells -quiet [list {UART_FF_INS/RO[2]} {UART_FF_INS/chain[2]}]]
-resize_pblock [get_pblocks pb_ro_2] -add {CLOCKREGION_X2Y3:CLOCKREGION_X2Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_2]
-
-create_pblock pb_ro_3
-add_cells_to_pblock [get_pblocks pb_ro_3] [get_cells -quiet [list {UART_FF_INS/RO[3]} {UART_FF_INS/chain[3]}]]
-resize_pblock [get_pblocks pb_ro_3] -add {CLOCKREGION_X3Y3:CLOCKREGION_X3Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_3]
-
-create_pblock pb_ro_4
-add_cells_to_pblock [get_pblocks pb_ro_4] [get_cells -quiet [list {UART_FF_INS/RO[4]} {UART_FF_INS/chain[4]}]]
-resize_pblock [get_pblocks pb_ro_4] -add {CLOCKREGION_X4Y3:CLOCKREGION_X4Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_4]
-
-create_pblock pb_ro_5
-add_cells_to_pblock [get_pblocks pb_ro_5] [get_cells -quiet [list {UART_FF_INS/RO[5]} {UART_FF_INS/chain[5]}]]
-resize_pblock [get_pblocks pb_ro_5] -add {CLOCKREGION_X5Y3:CLOCKREGION_X5Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_5]
-
-create_pblock pb_ro_6
-add_cells_to_pblock [get_pblocks pb_ro_6] [get_cells -quiet [list {UART_FF_INS/RO[6]} {UART_FF_INS/chain[6]}]]
-resize_pblock [get_pblocks pb_ro_6] -add {CLOCKREGION_X6Y3:CLOCKREGION_X6Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_6]
-
-create_pblock pb_ro_7
-add_cells_to_pblock [get_pblocks pb_ro_7] [get_cells -quiet [list {UART_FF_INS/RO[7]} {UART_FF_INS/chain[7]}]]
-resize_pblock [get_pblocks pb_ro_7] -add {CLOCKREGION_X7Y3:CLOCKREGION_X7Y3}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_7]
-
-
-create_pblock pb_ro_8
-add_cells_to_pblock [get_pblocks pb_ro_8] [get_cells -quiet [list {UART_FF_INS/RO[8]} {UART_FF_INS/chain[8]}]]
-resize_pblock [get_pblocks pb_ro_8] -add {CLOCKREGION_X0Y2:CLOCKREGION_X0Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_8]
-
-create_pblock pb_ro_9
-add_cells_to_pblock [get_pblocks pb_ro_9] [get_cells -quiet [list {UART_FF_INS/RO[9]} {UART_FF_INS/chain[9]}]]
-resize_pblock [get_pblocks pb_ro_9] -add {CLOCKREGION_X1Y2:CLOCKREGION_X1Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_9]
-
-create_pblock pb_ro_10
-add_cells_to_pblock [get_pblocks pb_ro_10] [get_cells -quiet [list {UART_FF_INS/RO[10]} {UART_FF_INS/chain[10]}]]
-resize_pblock [get_pblocks pb_ro_10] -add {CLOCKREGION_X2Y2:CLOCKREGION_X2Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_10]
-
-
-create_pblock pb_ro_11
-add_cells_to_pblock [get_pblocks pb_ro_11] [get_cells -quiet [list {UART_FF_INS/RO[11]} {UART_FF_INS/chain[11]}]]
-resize_pblock [get_pblocks pb_ro_11] -add {CLOCKREGION_X3Y2:CLOCKREGION_X3Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_11]
-
-
-
-create_pblock pb_ro_12
-add_cells_to_pblock [get_pblocks pb_ro_12] [get_cells -quiet [list {UART_FF_INS/RO[12]} {UART_FF_INS/chain[12]}]]
-resize_pblock [get_pblocks pb_ro_12] -add {CLOCKREGION_X4Y2:CLOCKREGION_X4Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_12]
-
-
-create_pblock pb_ro_13
-add_cells_to_pblock [get_pblocks pb_ro_13] [get_cells -quiet [list {UART_FF_INS/RO[13]} {UART_FF_INS/chain[13]}]]
-resize_pblock [get_pblocks pb_ro_13] -add {CLOCKREGION_X5Y2:CLOCKREGION_X5Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_13]
-
-create_pblock pb_ro_14
-add_cells_to_pblock [get_pblocks pb_ro_14] [get_cells -quiet [list {UART_FF_INS/RO[14]} {UART_FF_INS/chain[14]}]]
-resize_pblock [get_pblocks pb_ro_14] -add {CLOCKREGION_X6Y2:CLOCKREGION_X6Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_14]
-
-create_pblock pb_ro_15
-add_cells_to_pblock [get_pblocks pb_ro_15] [get_cells -quiet [list {UART_FF_INS/RO[15]} {UART_FF_INS/chain[15]}]]
-resize_pblock [get_pblocks pb_ro_15] -add {CLOCKREGION_X7Y2:CLOCKREGION_X7Y2}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_15]
-
-create_pblock pb_ro_16
-add_cells_to_pblock [get_pblocks pb_ro_16] [get_cells -quiet [list {UART_FF_INS/RO[16]} {UART_FF_INS/chain[16]}]]
-resize_pblock [get_pblocks pb_ro_16] -add {CLOCKREGION_X0Y1:CLOCKREGION_X0Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_16]
-
-create_pblock pb_ro_17
-add_cells_to_pblock [get_pblocks pb_ro_17] [get_cells -quiet [list {UART_FF_INS/RO[17]} {UART_FF_INS/chain[17]}]]
-resize_pblock [get_pblocks pb_ro_17] -add {CLOCKREGION_X1Y1:CLOCKREGION_X1Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_17]
-
-create_pblock pb_ro_18
-add_cells_to_pblock [get_pblocks pb_ro_18] [get_cells -quiet [list {UART_FF_INS/RO[18]} {UART_FF_INS/chain[18]}]]
-resize_pblock [get_pblocks pb_ro_18] -add {CLOCKREGION_X2Y1:CLOCKREGION_X2Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_18]
-
-create_pblock pb_ro_19
-add_cells_to_pblock [get_pblocks pb_ro_19] [get_cells -quiet [list {UART_FF_INS/RO[19]} {UART_FF_INS/chain[19]}]]
-resize_pblock [get_pblocks pb_ro_19] -add {CLOCKREGION_X3Y1:CLOCKREGION_X3Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_19]
-
-create_pblock pb_ro_20
-add_cells_to_pblock [get_pblocks pb_ro_20] [get_cells -quiet [list {UART_FF_INS/RO[20]} {UART_FF_INS/chain[20]}]]
-resize_pblock [get_pblocks pb_ro_20] -add {CLOCKREGION_X4Y1:CLOCKREGION_X4Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_20]
-
-create_pblock pb_ro_21
-add_cells_to_pblock [get_pblocks pb_ro_21] [get_cells -quiet [list {UART_FF_INS/RO[21]} {UART_FF_INS/chain[21]}]]
-resize_pblock [get_pblocks pb_ro_21] -add {CLOCKREGION_X5Y1:CLOCKREGION_X5Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_21]
-
-create_pblock pb_ro_22
-add_cells_to_pblock [get_pblocks pb_ro_22] [get_cells -quiet [list {UART_FF_INS/RO[22]} {UART_FF_INS/chain[22]}]]
-resize_pblock [get_pblocks pb_ro_22] -add {CLOCKREGION_X6Y1:CLOCKREGION_X6Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_22]
-
-create_pblock pb_ro_23
-add_cells_to_pblock [get_pblocks pb_ro_23] [get_cells -quiet [list {UART_FF_INS/RO[23]} {UART_FF_INS/chain[23]}]]
-resize_pblock [get_pblocks pb_ro_23] -add {CLOCKREGION_X7Y1:CLOCKREGION_X7Y1}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_23]
-
-
-create_pblock pb_ro_24
-add_cells_to_pblock [get_pblocks pb_ro_24] [get_cells -quiet [list {UART_FF_INS/RO[24]} {UART_FF_INS/chain[24]}]]
-resize_pblock [get_pblocks pb_ro_24] -add {CLOCKREGION_X0Y0:CLOCKREGION_X0Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_24]
-
-create_pblock pb_ro_25
-add_cells_to_pblock [get_pblocks pb_ro_25] [get_cells -quiet [list {UART_FF_INS/RO[25]} {UART_FF_INS/chain[25]}]]
-resize_pblock [get_pblocks pb_ro_25] -add {CLOCKREGION_X1Y0:CLOCKREGION_X1Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_25]
-
-create_pblock pb_ro_26
-add_cells_to_pblock [get_pblocks pb_ro_26] [get_cells -quiet [list {UART_FF_INS/RO[26]} {UART_FF_INS/chain[26]}]]
-resize_pblock [get_pblocks pb_ro_26] -add {CLOCKREGION_X2Y0:CLOCKREGION_X2Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_26]
-
-create_pblock pb_ro_27
-add_cells_to_pblock [get_pblocks pb_ro_27] [get_cells -quiet [list {UART_FF_INS/RO[27]} {UART_FF_INS/chain[27]}]]
-resize_pblock [get_pblocks pb_ro_27] -add {CLOCKREGION_X3Y0:CLOCKREGION_X3Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_27]
-
-create_pblock pb_ro_28
-add_cells_to_pblock [get_pblocks pb_ro_28] [get_cells -quiet [list {UART_FF_INS/RO[28]} {UART_FF_INS/chain[28]}]]
-resize_pblock [get_pblocks pb_ro_28] -add {CLOCKREGION_X4Y0:CLOCKREGION_X4Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_28]
-
-create_pblock pb_ro_29
-add_cells_to_pblock [get_pblocks pb_ro_29] [get_cells -quiet [list {UART_FF_INS/RO[29]} {UART_FF_INS/chain[29]}]]
-resize_pblock [get_pblocks pb_ro_29] -add {CLOCKREGION_X5Y0:CLOCKREGION_X5Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_29]
-
-
-create_pblock pb_ro_30
-add_cells_to_pblock [get_pblocks pb_ro_30] [get_cells -quiet [list {UART_FF_INS/RO[30]} {UART_FF_INS/chain[30]}]]
-resize_pblock [get_pblocks pb_ro_30] -add {CLOCKREGION_X6Y0:CLOCKREGION_X6Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_30]
-
-create_pblock pb_ro_31
-add_cells_to_pblock [get_pblocks pb_ro_31] [get_cells -quiet [list {UART_FF_INS/RO[31]} {UART_FF_INS/chain[31]}]]
-resize_pblock [get_pblocks pb_ro_31] -add {CLOCKREGION_X7Y0:CLOCKREGION_X7Y0}
-set_property IS_SOFT FALSE [get_pblocks pb_ro_31]
-
-
-
-
-
-
-
-#resize_pblock {pb_ro_0} -add {SLICE_X0Y180:SLICE_X19Y239}
-
-
-#set_property LOC {SLICE_X0Y180:SLICE_X19Y239} [get_cells -hier -filter {NAME =~ */RO[0]}]
-#add_cells_to_pblock {pb_ro_0} [get_cells -hier -filter {NAME =~ */RO[0]/*}]
-#add_cells_to_pblock {pb_ro_0} -verbose -clear_locs [get_cells -hier -filter {NAME =~ */RO[0]}]
-
-#set_property CLOCK_REGION X0Y3 [get_cells -hier -filter {NAME =~ */RO[0]}]
-
-#set_property BEL G5LUT [get_cells {UART_FF_INS/RO[0]/ro_fanout_ins[0]/ro_inst[0]/a_inferred_i_1__2}]
-#set_property LOC SLICE_X188Y100 [get_cells {UART_FF_INS/RO[0]/ro_fanout_ins[0]/ro_inst[0]/a_inferred_i_1__2}]
-#set_property BEL H6LUT [get_cells {UART_FF_INS/RO[0]/ro_fanout_ins[0]/ro_inst[0]/b_inferred_i_1__2}]
-#set_property LOC SLICE_X187Y95 [get_cells {UART_FF_INS/RO[0]/ro_fanout_ins[0]/ro_inst[0]/b_inferred_i_1__2}]
-
-
-#set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */RO_SENS}]
-
-#set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */chain[0]}]
-
-
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */instance_name}]
-
-set_property USER_SLR_ASSIGNMENT SLR0 [get_cells -hier -filter {NAME =~ */freq_gen_inst}]
-
-
-set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets -hier -filter {NAME =~ *RO*}]
-
-#set_property USER_SLR_ASSIGNMENT SLR2 [get_cells -hierarchical -filter {NAME =~ *ff*}]
-
-
-
-create_pblock pb_ff
-set_property IS_SOFT FALSE [get_pblocks pb_ff]
-resize_pblock [get_pblocks pb_ff] -add {SLICE_X155Y480:SLICE_X163Y509}
-add_cells_to_pblock {pb_ff} [get_cells -hier -filter {NAME =~ *ff*}]
-
-
-
-create_pblock pblock_SLL_1
-set_property IS_SOFT FALSE [get_pblocks pblock_SLL_1]
-resize_pblock [get_pblocks pblock_SLL_1] -add {CLOCKREGION_X7Y3:CLOCKREGION_X7Y3}
-add_cells_to_pblock {pblock_SLL_1} [get_nets {UART_FF_INS/v_int_sensor/inst/do_out}]
-add_cells_to_pblock {pblock_SLL_1} [get_cells -hier -filter {NAME =~ *v_int*}]
-set_property CONTAIN_ROUTING true [get_pblocks pblock_SLL_1]
diff --git a/hwdbg/src/main/systemverilog/sensors/src/PL_CORE.v b/hwdbg/src/main/systemverilog/sensors/src/PL_CORE.v
deleted file mode 100644
index 824e16b4..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/PL_CORE.v
+++ /dev/null
@@ -1,64 +0,0 @@
-`timescale 1ns / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 03/08/2024 04:39:27 PM
-// Design Name:
-// Module Name: PL_CORE
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-module PL_CORE(
-
-(* clock_buffer_type="none" *) input wire QDR4_CLK_100MHZ_P,
-(* clock_buffer_type="none" *) input wire QDR4_CLK_100MHZ_N,
-
-// input wire reg_clk,
- input wire uart_rx_line,
-// input wire reg_eop,
-// input logic SPI_nCS,
-// output wire clk_reg_out,
- output wire uart_tx_line,
-// output logic laser_module_trigger,
-
- output wire [3:0] led_out_ff
-);
-
-wire clk_main;
- clk_wiz_11 clock_main
- (
- // Clock out ports
- .clk_main(clk_main), // output clk_main
- // Status and control signals
- .reset(reset), // input reset
- .locked(locked), // output locked
- // Clock in ports
- .clk_in1_p(QDR4_CLK_100MHZ_P), // input clk_in1_p
- .clk_in1_n(QDR4_CLK_100MHZ_N) // input clk_in1_n
-);
-
-
-UART_FF UART_FF_INS (
- .clk (clk_main),
- .rst ('b0),
- .reg_clk (clk_main),
- .reg_eop (clk_main),
- .uart_rx_line (uart_rx_line),
- .uart_tx_line (uart_tx_line),
- .gpio (gpio),
- .led_out_ff (led_out_ff)
- );
-
-endmodule
diff --git a/hwdbg/src/main/systemverilog/sensors/src/ff_fanout.sv b/hwdbg/src/main/systemverilog/sensors/src/ff_fanout.sv
deleted file mode 100644
index d27277e8..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/ff_fanout.sv
+++ /dev/null
@@ -1,89 +0,0 @@
-`timescale 1ns / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 11/16/2023 02:48:20 PM
-// Design Name:
-// Module Name: ff_fanout
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-module ff_fanout(
-input wire clk,
-input wire CE,
-input wire rst,
-input wire inp,
-output reg res
- );
-
-
-
-//reg rst_em; // input clock on FPGA
-//reg[27:0] counter=28'd0;
-//parameter DIVISOR = 28'd1;
-//// The frequency of the output clk_out
-//// = The frequency of the input clk_in divided by DIVISOR
-//// For example: Fclk_in = 50Mhz, if you want to get 1Hz signal to blink LEDs
-//// You will modify the DIVISOR parameter value to 28'd50.000.000
-//// Then the frequency of the output clk_out = 50Mhz/50.000.000 = 1Hz
-//always @(posedge rst)
-//begin
-// counter <= counter + 28'd1;
-// if(counter>=(DIVISOR-1))
-// counter <= 28'd0;
-
-
-// rst_em <= (counter= (div_int - 1)) begin
- int_counter <= 32'd0;
- clk_out_internal <= ~clk_out_internal;
- end else begin
- int_counter <= int_counter + 1;
- end
- end
- end
-
- // Fractional Clock Division Logic
- always_ff @(posedge clk_in or posedge reset) begin
- if (reset) begin
- frac_counter <= 32'd0;
- frac_tick <= 1'b0;
- end else begin
- frac_counter <= frac_counter + div_frac;
- if (frac_counter >= 32'd100000000) begin // When the counter exceeds 1.0 in fixed-point format
- frac_counter <= frac_counter - 32'd100000000;
- frac_tick <= 1'b1;
- end else begin
- frac_tick <= 1'b0;
- end
- end
- end
-
- // Combine Integer and Fractional Divisions
- always_ff @(posedge clk_in or posedge reset) begin
- if (reset) begin
- clk_out <= 1'b0;
- end else if (int_counter == 0 && frac_tick) begin
- clk_out <= ~clk_out_internal;
- end else begin
- clk_out <= clk_out_internal;
- end
- end
-
-endmodule
diff --git a/hwdbg/src/main/systemverilog/sensors/src/inverter.v b/hwdbg/src/main/systemverilog/sensors/src/inverter.v
deleted file mode 100644
index 937fff73..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/inverter.v
+++ /dev/null
@@ -1,29 +0,0 @@
-`timescale 1ns / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 08/29/2023 01:50:41 PM
-// Design Name:
-// Module Name: inverter
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-module inverter(
- in_data,out_data
- );
- input in_data;
- output out_data;
- (* dont_touch = "yes" *) assign out_data = !in_data;
-endmodule
diff --git a/hwdbg/src/main/systemverilog/sensors/src/inverter_chain.v b/hwdbg/src/main/systemverilog/sensors/src/inverter_chain.v
deleted file mode 100644
index 6a29a06d..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/inverter_chain.v
+++ /dev/null
@@ -1,43 +0,0 @@
-`timescale 1ns / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 09/11/2023 11:01:41 AM
-// Design Name:
-// Module Name: inverter_chain
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-module Chain(
- chain_en,
- in_data,
- out_data
- );
- parameter N = 2000; //This is the number of inverters in chain
- input wire chain_en;
-
- input wire in_data; // This has to be connected to the input pin of the design according to the XDC file
-
- output wire out_data; // make sure to connect it to one of the output pin of the circuit according to the XDC file
- (* dont_touch = "yes" *) wire [N-1:0] intermadiate_value; //For D-flip-flop implementation, make it reg instead of wire!
- (* dont_touch = "yes" *) inverter inverter_in (.in_data(in_data&chain_en),.out_data(intermadiate_value[0])); // this is just for initiation, for loop chain, you can remove it.
- generate
- genvar i;
- for (i=0; i 0)) begin
- current_state <= STATE_TRANSFER;
- transfer_counter <= 'd0;
- end else begin
- tx_ready <= 'b1;
- end
- end
-
- STATE_TRANSFER: begin
- if (uart_tx_ready) begin
- uart_tx_data <= tx_data[transfer_counter];
- uart_tx_en <= 'b1;
- current_state <= STATE_WAIT_BEWTEEN_TX;
- delay_counter <= 'd0;
- transfer_counter <= transfer_counter + 1;
- end
- end
-
- STATE_WAIT_BEWTEEN_TX: begin
- if (uart_tx_ready) begin
- delay_counter <= delay_counter + 1;
- if (delay_counter >= delay_between_tx) begin
- if (transfer_counter >= tx_data_length) begin
- current_state <= STATE_IDLE;
- end else begin
- current_state <= STATE_TRANSFER;
- end
- end
- end
- end
- endcase
- end
- end
-endmodule
\ No newline at end of file
diff --git a/hwdbg/src/main/systemverilog/sensors/src/not_gate_simple.v b/hwdbg/src/main/systemverilog/sensors/src/not_gate_simple.v
deleted file mode 100644
index 8c915a28..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/not_gate_simple.v
+++ /dev/null
@@ -1,31 +0,0 @@
-`timescale 1ps / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 11/13/2023 05:16:59 PM
-// Design Name:
-// Module Name: not_gate_simple
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-module not_gate_simple(
-input wire X,
-output wire Y
- );
-
-// (* ALLOW_COMBINATORIAL_LOOPS = "yes" *) assign #10 Y = ~X;
- (* ALLOW_COMBINATORIAL_LOOPS = "yes" *) assign Y = ~X;
-
-endmodule
diff --git a/hwdbg/src/main/systemverilog/sensors/src/ro.v b/hwdbg/src/main/systemverilog/sensors/src/ro.v
deleted file mode 100644
index bc21afd3..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/ro.v
+++ /dev/null
@@ -1,76 +0,0 @@
-`timescale 1ns/1ps
-
-
-module ro(
-// input ck_io41,
-// output ck_io33
- input wire R_in,
- output wire R_out);
-wire a /* synthesis keep */;
-wire b /* synthesis keep */;
-
-
-assign b = a & R_in;
-//assign b = a ;
-
-wire [2:0] x /* synthesis keep */;
-
-not_gate_simple not0(
- .X(b),
- .Y(x[0]));
-
-not_gate_simple not1(
- .X(x[0]),
- .Y(x[1]));
-
-not_gate_simple not2(
- .X(x[1]),
- .Y(x[2]));
-
-//not_gate_simple not3(
-// .X(x[2]),
-// .Y(x[3]));
-
-//not_gate_simple not4(
-// .X(x[3]),
-// .Y(x[4]));
-
-//not_gate_simple not5(
-// .X(x[4]),
-// .Y(x[5]));
-
-//not_gate_simple not6(
-// .X(x[5]),
-// .Y(x[6]));
-
-//not_gate_simple not7(
-// .X(x[6]),
-// .Y(x[7]));
-
-//not_gate_simple not8(
-// .X(x[7]),
-// .Y(x[8]));
-
-//not_gate_simple not9(
-// .X(x[8]),
-// .Y(x[9]));
-
-//not_gate_simple not10(
-// .X(x[9]),
-// .Y(x[10]));
-
-
-
-
-assign R_out = x[2];
-assign a = x[2] & R_in;
-
-
-
-endmodule
-
-
-
-
-
-
diff --git a/hwdbg/src/main/systemverilog/sensors/src/ro_core.sv b/hwdbg/src/main/systemverilog/sensors/src/ro_core.sv
deleted file mode 100644
index d3cda0b9..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/ro_core.sv
+++ /dev/null
@@ -1,60 +0,0 @@
-`timescale 1ns / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 12/01/2022 04:46:30 PM
-// Design Name:
-// Module Name: reg1_core
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-
-
-
-module ro_core(
- input wire [0:0] in_d,
- output wire [0:0] wire_inj
- );
-// localparam size_i = 127000;
-//localparam size_i = 64000;
-//localparam size_i = 1000;
-//localparam size_i = 128;
-localparam size_i = 1;
-
- reg ce1;
- reg CLR1;
- wire [size_i-1:0] inp_r;
-
-// assign inp_r=in_d[size_i-1:0];
- assign inp_r=in_d[size_i-1:0];
-
-
- (* S = "TRUE" *)(* KEEP = "TRUE" *) wire [size_i-1:0] q_out;
- assign wire_inj = q_out;
-
-
-
-ro_fanout ro_fanout_ins[size_i-1:0] (
- .R_in(inp_r), // 1-bit Enable
- .R_out(q_out) // 1-bit Data output
-);
-
-
-
-endmodule
-
-
-
-
diff --git a/hwdbg/src/main/systemverilog/sensors/src/ro_fanout.sv b/hwdbg/src/main/systemverilog/sensors/src/ro_fanout.sv
deleted file mode 100644
index b909f4be..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/ro_fanout.sv
+++ /dev/null
@@ -1,50 +0,0 @@
-`timescale 1ns / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 03/15/2024 01:55:18 PM
-// Design Name:
-// Module Name: ro_fanout
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-module ro_fanout(
-input wire R_in,
-output wire R_out
- );
-
- localparam size_i = 1;
-
- (* S = "TRUE" *) (* KEEP = "TRUE" *) wire [size_i-1:0] ro_input;
- (* S = "TRUE" *) (* KEEP = "TRUE" *) wire [size_i-1:0] ro_output;
-
- assign R_out = ro_output[0];
-
- assign ro_input = ({size_i{R_in}});
-
- (* S = "TRUE" *) (* KEEP = "TRUE" *) ro ro_inst[size_i-1:0](
- .R_in(ro_input),
- .R_out(ro_output)
-
- );
-
-
-// (* S = "TRUE" *) (* KEEP = "TRUE" *) ro_sv #(.INVERTERS_PER_RING(3), .INVERTER_DELAY(1)) ro_inst[size_i-1:0](
-// .R_in(ro_input),
-// .R_out(ro_output)
-
-// );
-
-endmodule
diff --git a/hwdbg/src/main/systemverilog/sensors/src/ro_sensor.sv b/hwdbg/src/main/systemverilog/sensors/src/ro_sensor.sv
deleted file mode 100644
index fa813431..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/ro_sensor.sv
+++ /dev/null
@@ -1,138 +0,0 @@
-`timescale 1ns / 1ps
-//////////////////////////////////////////////////////////////////////////////////
-// Company:
-// Engineer:
-//
-// Create Date: 06/17/2024 05:14:28 PM
-// Design Name:
-// Module Name: ro_sensor
-// Project Name:
-// Target Devices:
-// Tool Versions:
-// Description:
-//
-// Dependencies:
-//
-// Revision:
-// Revision 0.01 - File Created
-// Additional Comments:
-//
-//////////////////////////////////////////////////////////////////////////////////
-
-
-module ro_sensor
- #(parameter integer width_size = 64,
- localparam integer width_size_local = width_size)
- (
- input logic [width_size-1:0]ro_meas_time,
- input logic clk,
- input logic r_out,
- input logic ro_counter_en,
- output logic [width_size-1:0]ro_meas_count
- );
-
-
- logic [width_size-1:0] clk_temp_counter;
- logic [width_size-1:0] ro_temp_counter;
-
- logic measure_flag;
-
- // RO_Counter Circuit
- // State encoding
- typedef enum logic [1:0] {
- IDLE = 2'b00,
- MEASURE = 2'b01,
- OUT_READY = 2'b10,
- RST_VALS = 2'b11
-
- } state_t;
-
- state_t current_state, next_state;
- initial next_state <= IDLE;
- // State transition logic
- always_ff @(negedge clk ) begin
- current_state <= next_state;
- end
-
- // Next state logic
- always @(posedge clk) begin
- case (current_state)
- IDLE: begin
- for (int i = 0; i < width_size; i++) begin
- clk_temp_counter[i] = 1'b0;
- end
- if (ro_counter_en) begin
- next_state = RST_VALS;
- end else begin
- next_state = IDLE;
- end
- end
-
- RST_VALS: begin
- next_state = MEASURE;
-
- end
-
- MEASURE: begin
- if (clk_temp_counter < ro_meas_time) begin
- clk_temp_counter = clk_temp_counter+ ('d1);
- next_state = MEASURE;
- end else begin
- for (int i = 0; i < width_size; i++) begin
- clk_temp_counter[i] = 1'b0;
- end
- next_state = OUT_READY;
- end
- end
-
- OUT_READY: begin
- next_state = IDLE;
-
- end
-
-// default: begin
-// next_state = IDLE;
-// end
- endcase
- end
-
- // Output logic
-// assign state = current_state;
-
-
-
- always @( posedge r_out ) begin
-
- if(current_state==MEASURE) begin
- ro_temp_counter=ro_temp_counter+ ('d1);
-
-
- end else if(current_state==OUT_READY) begin
- ro_meas_count = ro_temp_counter;
-
-
-
- end else if(current_state==RST_VALS) begin
-
- ro_temp_counter = 'h0000000000000000;
-
-
- end
- end
-
-
-// `define assign_reg(index,reg1_t,reg2_t) \
-// assign reg1_t[((index+1)*60)+7:((index)*60)+8]=reg2_t[index];
-
-
-// `assign_reg(0,aes_ct,fult_count)
-// `assign_reg(1,aes_ct,fult_count)
-//// `assign_reg(2,aes_ct,fult_count)
-//// `assign_reg(3,aes_ct,fult_count)
-//// `assign_reg(4,aes_ct,fult_count)
-//// `assign_reg(5,aes_ct,fult_count)
-//// `assign_reg(6,aes_ct,fult_count)
-//// `assign_reg(7,aes_ct,fult_count)
-
-
-endmodule
diff --git a/hwdbg/src/main/systemverilog/sensors/src/top.sv b/hwdbg/src/main/systemverilog/sensors/src/top.sv
deleted file mode 100644
index 66732e7c..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/top.sv
+++ /dev/null
@@ -1,1165 +0,0 @@
-`timescale 1ns/1ps
-
-module UART_FF
-(
- input logic clk,
- input logic rst,
- input logic uart_rx_line,
- input logic reg_clk,
- input logic reg_eop,
-// input logic SPI_nCS,
-// output logic clk_reg_out,
- output logic uart_tx_line,
-// output logic laser_module_trigger,
- output logic gpio,
-
- output [3:0] led_out_ff
-
-);
-
-
-
- localparam SYSTEMCLOCK = 100_000_000;
-// localparam SYSTEMCLOCK = 10_000_000;
-
- localparam UART_BAUDRATE = 115_200;
- localparam UART_ELEMENT_WIDTH = 8;
- localparam MULTIBYTE_RX_NUMBER_OF_ELEMENTS = 256;
- localparam MULTIBYTE_RX_COUNTER_WIDTH = $clog2(MULTIBYTE_RX_NUMBER_OF_ELEMENTS);
-
- logic uart_rx_empty_buffer;
- logic [MULTIBYTE_RX_NUMBER_OF_ELEMENTS-1:0][UART_ELEMENT_WIDTH-1:0] uart_rx_data;
- logic [MULTIBYTE_RX_COUNTER_WIDTH:0] uart_rx_data_length;
- logic uart_rx_updated_buffer;
- logic uart_rx_overflow;
- multibyte_uart_rx multibyte_uart_rxer (
- .clk (clk),
- .rst (rst),
- .rx_line (uart_rx_line),
- .rx_empty_buffer (uart_rx_empty_buffer),
- .rx_data (uart_rx_data),
- .rx_data_length (uart_rx_data_length),
- .rx_updated_buffer (uart_rx_updated_buffer),
- .rx_overflow (uart_rx_overflow)
- );
- defparam multibyte_uart_rxer.SYSTEMCLOCK = SYSTEMCLOCK;
- defparam multibyte_uart_rxer.BAUDRATE = UART_BAUDRATE;
- defparam multibyte_uart_rxer.ELEMENT_WIDTH = UART_ELEMENT_WIDTH;
- defparam multibyte_uart_rxer.NUMBER_OF_ELEMENTS = MULTIBYTE_RX_NUMBER_OF_ELEMENTS;
-
-
-
-
- localparam MULTIBYTE_TX_NUMBER_OF_ELEMENTS = 256;
- localparam DELAY_COUNTER_WIDTH = 32;
- localparam MULTIBYTE_TX_COUNTER_WIDTH = $clog2(MULTIBYTE_TX_NUMBER_OF_ELEMENTS);
-
- logic uart_tx_en;
- logic [MULTIBYTE_TX_NUMBER_OF_ELEMENTS-1:0][UART_ELEMENT_WIDTH-1:0] uart_tx_data;
- logic [MULTIBYTE_TX_COUNTER_WIDTH:0] uart_tx_data_length;
- logic [DELAY_COUNTER_WIDTH-1:0] delay_between_tx;
- logic uart_tx_ready;
-
- multibyte_uart_tx multibyte_uart_txer (
- .clk (clk),
- .rst (rst),
- .tx_en (uart_tx_en),
- .tx_data (uart_tx_data),
- .tx_data_length (uart_tx_data_length),
- .delay_between_tx (delay_between_tx),
- .tx_line (uart_tx_line),
- .tx_ready (uart_tx_ready)
- );
- defparam multibyte_uart_txer.SYSTEMCLOCK = SYSTEMCLOCK;
- defparam multibyte_uart_txer.BAUDRATE = UART_BAUDRATE;
- defparam multibyte_uart_txer.ELEMENT_WIDTH = UART_ELEMENT_WIDTH;
- defparam multibyte_uart_txer.NUMBER_OF_ELEMENTS = MULTIBYTE_TX_NUMBER_OF_ELEMENTS;
- defparam multibyte_uart_txer.DELAY_WIDTH = DELAY_COUNTER_WIDTH;
-
-
- localparam RO_MEAS_BITS = 64;
- localparam AES_BITS = 128;
-
- localparam RO_EMAS_BYTE = $clog2(RO_MEAS_BITS);
- localparam CLK_INT_DIV_BITS = 32;
- localparam CLK_FRC_DIV_BITS = 32;
-
-
- localparam RO_INST = 32;
- logic [RO_INST-1:0] ro_en;
- logic [RO_INST-1:0] ro_out;
-
- logic [RO_MEAS_BITS-1:0] ro_meas_time;
-
- logic [AES_BITS-1:0] aes_key;
- logic [AES_BITS-1:0] aes_ptx;
- logic [AES_BITS-1:0] aes_ctx;
- logic [64-1:0] capacitance;
-
- logic [RO_INST-1:0][RO_MEAS_BITS-1:0] ro_meas_count;
-// logic [RO_MEAS_BITS-1:0] ro_meas_count;
-
- logic ro_counter_en;
-
- logic [CLK_INT_DIV_BITS-1:0] div_int;
- logic [CLK_FRC_DIV_BITS-1:0] div_frac;
- localparam FF_INST = 4;
-
- localparam CHAIN_INST = 32;
- logic [CHAIN_INST-1:0] chain_en;
-
-
- logic clk_target;
- logic hult_signal;
- logic [FF_INST-1:0] ff_write_en;
- logic [FF_INST-1:0] ff_in;
- logic [FF_INST-1:0] ff_out;
-
- logic [8-1:0] ff_id_reg;
- logic [8-1:0] ff_val_reg;
-
- logic [8-1:0] ro_id_reg;
- logic [8-1:0] ro_val_reg;
-
- logic [8-1:0] chain_id_reg;
- logic [8-1:0] chain_val_reg;
-
- logic [16-1:0] temp_reg;
- logic [16-1:0] vint_reg;
- logic [16-1:0] vaux_reg;
-
- initial clk_target <=clk;
-
-// (* S = "TRUE" *) (* KEEP = "TRUE" *) ff_fanout ff[FF_INST-1:0](
-// .clk(clk_target),
-// .CE(ff_write_en),
-// .inp(ff_in),
-// .rst(reg_clk),
-// .res(ff_out)
-// );RO_INST
-
- (* S = "TRUE" *) (* KEEP = "TRUE" *) ff_fanout ff[FF_INST-1:0](
- .clk(clk_target),
- .CE(ff_write_en),
- .inp(ff_in),
-// .rst(reg_eop),
- .rst(1'b0),
- .res(ff_out)
- );
-
-//Inverter Chain
-
-
- wire clk_out1;
- wire locked;
- wire chain_clk_out;
- wire chain_freq_out;
- wire clk_in1;
-
-// assign ro_enable =ro_en;
- assign clk_in1 = clk;
- assign gpio = chain_freq_out;
-
- (* S = "TRUE" *) (* KEEP = "TRUE" *) Chain chain[CHAIN_INST-1:0](
- .chain_en(chain_en),
- .in_data(chain_clk_out),
- .out_data(chain_freq_out)
- );
-
-
-
-
-
-
- clock_gen instance_name
- (
- // Clock out ports
- .clk_out1(clk_out1), // output clk_out1
- // Clock in ports
- .clk_in1(clk_in1) // input clk_in1
-);
-
- wire [5 : 0] channel_out;
- wire eoc_out;
-
- system_management_wiz_0 temp_sensor (
- .di_in(16'b0), // input wire [15 : 0] di_in
- .daddr_in({{2{1'b0}},channel_out}), // input wire [7 : 0] daddr_in
- .den_in(eoc_out), // input wire den_in
- .dwe_in(1'b0), // input wire dwe_in
- .drdy_out(drdy_out), // output wire drdy_out
- .do_out(temp_reg), // output wire [15 : 0] do_out
- .dclk_in(clk_in1), // input wire dclk_in
- .reset_in(1'b0), // input wire reset_in
- .channel_out(channel_out), // output wire [5 : 0] channel_out
- .eoc_out(eoc_out), // output wire eoc_out
- .alarm_out(alarm_out), // output wire alarm_out
- .eos_out(eos_out), // output wire eos_out
- .busy_out(busy_out) // output wire busy_out
-);
-
- wire [5 : 0] channel_out_vint;
- wire eoc_out_vint;
- wire alarm_out_1,eos_out_1,busy_out_1,drdy_out_1;
-
-system_management_wiz_1 v_int_sensor (
- .di_in(16'b0), // input wire [15 : 0] di_in
- .daddr_in({{2{1'b0}},channel_out_vint}), // input wire [7 : 0] daddr_in
- .den_in(eoc_out_vint), // input wire den_in
- .dwe_in(1'b0), // input wire dwe_in
- .drdy_out(drdy_out_1), // output wire drdy_out
- .do_out(vint_reg), // output wire [15 : 0] do_out
- .dclk_in(clk_in1), // input wire dclk_in
- .reset_in(1'b0), // input wire reset_in
- .channel_out(channel_out_vint), // output wire [5 : 0] channel_out
- .eoc_out(eoc_out_vint), // output wire eoc_out
- .alarm_out(alarm_out_1), // output wire alarm_out
- .eos_out(eos_out_1), // output wire eos_out
- .busy_out(busy_out_1) // output wire busy_out
-);
-
- wire [5 : 0] channel_out_vaux;
- wire eoc_out_vaux;
- wire alarm_out_2,eos_out_2,busy_out_2,drdy_out_2;
-
-system_management_wiz_2 v_aux_sensor (
- .di_in(16'b0), // input wire [15 : 0] di_in
- .daddr_in({{2{1'b0}},channel_out_vaux}), // input wire [7 : 0] daddr_in
- .den_in(eoc_out_vaux), // input wire den_in
- .dwe_in(1'b0), // input wire dwe_in
- .drdy_out(drdy_out_2), // output wire drdy_out
- .do_out(vaux_reg), // output wire [15 : 0] do_out
- .dclk_in(clk_in1), // input wire dclk_in
- .reset_in(1'b0), // input wire reset_in
- .channel_out(channel_out_vaux), // output wire [5 : 0] channel_out
- .eoc_out(eoc_out_vaux), // output wire eoc_out
- .alarm_out(alarm_out_2), // output wire alarm_out
- .eos_out(eos_out_2), // output wire eos_out
- .busy_out(busy_out_2) // output wire busy_out
-);
-
-
-// clock_gen instance_name(
-// // Clock out ports
-// .clk_out1(clk_out1), // output clk_out1
-// // Status and control signals
-// .reset(1'b0), // input reset
-// .locked(locked), // output locked
-// // Clock in ports
-// .clk_in1(clk));
-
-
- freq_generator freq_gen_inst(
- .clk_in(clk_out1), // Input clock
- .reset(1'b0), // Reset signal
- .div_int(div_int), // Integer part of the division factor
- .div_frac(div_frac), // Fractional part of the division factor (in fixed-point format, e.g., 0.5 = 32'd50000000)
- .clk_out(chain_clk_out)
- );
-
-
-// (* S = "TRUE" *) (* KEEP = "TRUE" *) ff_fanout ff[FF_INST-1:0](
-// .clk(reg_clk),
-// .CE(ff_write_en),
-// .inp(ff_in),
-// .rst(reg_clk),
-// .res(ff_out)
-// );
-
-// (* S = "TRUE" *) (* KEEP = "TRUE" *) ro_fanout RO[RO_INST-1:0](
-// .R_in(ro_en),
-// .R_out(ro_out)
-// );
-
- (* S = "TRUE" *) (* KEEP = "TRUE" *) ro_core RO[RO_INST-1:0](
-
- .in_d (ro_en),
- .wire_inj (ro_out)
-
- );
-
-
-
-
- // Instantiate the Unit Under Test (UUT)
-// aes_128 aes_ht_free (
-// .clk(clk),
-// .state(aes_ptx),
-// .key(aes_key),
-// .out(aes_ctx)
-// );
-
-
-
- // Outputs
-// wire [127:0] out;
-// wire [63:0] Capacitance;
-
- // Instantiate the Unit Under Test (UUT)
-// top_aes aes_ht(
-// .clk(clk),
-// .rst(1'b0),
-// .state(aes_ptx),
-// .key(aes_key),
-// .out(aes_ctx),
-// .Capacitance(capacitance)
-// );
-
-
-
-
- (* S = "TRUE" *) (* KEEP = "TRUE" *) ro_sensor #(.width_size(RO_MEAS_BITS)) RO_SENS[RO_INST-1:0] (
- .ro_meas_time (ro_meas_time),
- .clk (clk),
- .r_out (ro_out),
- .ro_counter_en (ro_counter_en),
- .ro_meas_count (ro_meas_count)
- );
-
-// (* S = "TRUE" *) (* KEEP = "TRUE" *) ro_sensor #(.width_size(RO_MEAS_BITS)) RO_SENS (
-// .ro_meas_time (ro_meas_time),
-// .clk (clk),
-// .r_out (ro_out[0]),
-// .ro_counter_en (ro_counter_en),
-// .ro_meas_count (ro_meas_count)
-// );
-
-
-
-
- assign led_out_ff = ff_out;
-// assign led_out_ff[0] = 1'b1;
- //assign clk_reg_out = reg_clk;
-
- typedef enum {
- STATE_INPUT,
- STATE_UNHULT_CLK,
- STATE_HULT_CLK,
- STATE_SET_FF_VAL,
- STATE_GET_FF_VAL,
- STATE_LOCK_VAL,
- STATE_SET_FF_ID,
- STATE_GET_FF_ID,
- //RO STATES
- STATE_SET_RO_VAL,
- STATE_GET_RO_VAL,
- STATE_SET_RO_ID,
- STATE_GET_RO_ID,
- STATE_SET_RO_MEAS_TIME,
- STATE_GET_RO_MEAS_TIME,
- STATE_GET_MEAS_RO,
- STATE_EXEC_MEAS_RO,
- STATE_EXEC_MEAS_RO_POST,
- //AES STATES
- STATE_SET_AES_PTX,
- STATE_GET_AES_PTX,
- STATE_SET_AES_KEY,
- STATE_GET_AES_KEY,
- STATE_GET_AES_CTX,
- //CHAIN STATES
- STATE_ACTIVATE_CHAIN,
- STATE_DEACTIVATE_CHAIN,
- STATE_SET_CHAIN_FREQ_INT,
- STATE_GET_CHAIN_FREQ_INT,
- STATE_SET_CHAIN_FREQ_FRAC,
- STATE_GET_CHAIN_FREQ_FRAC,
-// STATE_GET_NUMBER_OF_NCS,
- STATE_SET_GPIO,
- STATE_UNSET_GPIO,
- STATE_TRANSITION_INPUT,
-
- STATE_GET_TEMP_REG,
- STATE_GET_VINT_REG,
- STATE_GET_VAUX_REG,
-
- //STATE CHAIN
- STATE_SET_CHAIN_VAL,
- STATE_GET_CHAIN_VAL,
- STATE_SET_CHAIN_ID,
- STATE_GET_CHAIN_ID
-
- } state_t;
- state_t current_state;
-
- typedef enum logic[7:0] {
- CMD_UNHULT_CLK = 7,
- CMD_HULT_CLK = 8,
- CMD_SET_FF_VAL = 9,
- CMD_GET_FF_VAL = 10,
- CMD_SET_FF_ID = 11,
- CMD_GET_FF_ID = 12,
-// CMD_GET_NUMBER_OF_NCS = 11,
- CMD_SET_GPIO = 13,
- CMD_UNSET_GPIO = 14,
- CMD_SET_RO_VAL = 15,
- CMD_GET_RO_VAL = 16,
- CMD_SET_RO_ID = 17,
- CMD_GET_RO_ID = 18,
- CMD_SET_RO_MEAS_TIME = 19,
- CMD_GET_RO_MEAS_TIME = 20,
- CMD_GET_MEAS_RO = 21,
- CMD_EXEC_MEAS_RO = 22,
- CMD_ACTIVATE_CHAIN = 23,
- CMD_DEACTIVATE_CHAIN = 24,
- CMD_SET_CHAIN_FREQ_INT = 25,
- CMD_GET_CHAIN_FREQ_INT = 26,
- CMD_SET_CHAIN_FREQ_FRAC = 27,
- CMD_GET_CHAIN_FREQ_FRAC = 28,
-
- CMD_SET_AES_PTX = 29,
- CMD_GET_AES_PTX = 30,
- CMD_SET_AES_KEY = 31,
- CMD_GET_AES_KEY = 32,
- CMD_GET_AES_CTX = 33,
-// CMD_AES_EXEC = 34
- CMD_GET_TEMP_REG = 34,
- CMD_GET_VINT_REG = 35,
- CMD_GET_VAUX_REG = 36,
-
- CMD_SET_CHAIN_VAL = 37,
- CMD_GET_CHAIN_VAL = 38,
- CMD_SET_CHAIN_ID = 39,
- CMD_GET_CHAIN_ID = 40
-
- } command_t;
-
-// localparam TRIGGER_ON_DEFAULT = 'h00000010;
-// localparam TRIGGER_OFFSET_DEFAULT = 'h00000010;
-// localparam NUMBER_OF_PULSES_DEFAULT = 'h0CMD_GET_CHAIN_FREQ0000010;
-// localparam PULSE_HIGH_WIDTH_DEFAULT = 'h00000010;
-// localparam PULSE_LOW_WIDTH_DEFAULT = 'h00000010;
- localparam DELAY_BETWEEN_TX_DEFAULT = 'h00000010;
-
-
-
-
-
- always@( hult_signal) begin
- if (hult_signal==1'b1)
- clk_target<=0;
- else
- clk_target<=clk;
- end
-
-
- always_ff @(posedge clk) begin
-
- if (rst) begin
- current_state <= STATE_INPUT;
- hult_signal <= 'b0;
- uart_rx_empty_buffer <= 'b0;
- delay_between_tx <= DELAY_BETWEEN_TX_DEFAULT;
- uart_tx_en <= 'b0;
- for (int i = 0; i < MULTIBYTE_TX_NUMBER_OF_ELEMENTS; i++) begin
- uart_tx_data[i] <= 'h00;
- end
- uart_tx_data_length <= 'd0;
-
-// gpio <= 'b0;
-// gpio_led <= 'd0;
-// trigger_on <= TRIGGER_ON_DEFAULT;
-
- end else begin
- current_state <= current_state;
- uart_rx_empty_buffer <= 'b0;
- delay_between_tx <= delay_between_tx;
- uart_tx_en <= 'b0;
- for (int i = 0; i < MULTIBYTE_TX_NUMBER_OF_ELEMENTS; i++) begin
- uart_tx_data[i] <= uart_tx_data[i];
- end
- uart_tx_data_length <= uart_tx_data_length;
-
-
- case (current_state)
- STATE_INPUT: begin
- if (uart_rx_updated_buffer) begin
- case (uart_rx_data[uart_rx_data_length-1])
-
-
- CMD_UNHULT_CLK: begin
- current_state <= STATE_UNHULT_CLK;
- end
-
- CMD_HULT_CLK: begin
- current_state <= STATE_HULT_CLK;
- end
-
- CMD_SET_FF_VAL: begin
- current_state <= STATE_SET_FF_VAL;
- uart_rx_empty_buffer <= 'b1;
- end
-
- CMD_GET_FF_VAL: begin
- current_state <= STATE_GET_FF_VAL;
- end
-
- CMD_SET_FF_ID: begin
- current_state <= STATE_SET_FF_ID;
- uart_rx_empty_buffer <= 'b1;
- end
-
- CMD_GET_FF_ID: begin
- current_state <= STATE_GET_FF_ID;
- end
-
-
- //CMD RO
- CMD_SET_RO_VAL: begin
- current_state <= STATE_SET_RO_VAL;
- uart_rx_empty_buffer <= 'b1;
- end
-
- CMD_GET_RO_VAL: begin
- current_state <= STATE_GET_RO_VAL;
- end
-
- CMD_SET_RO_ID: begin
- current_state <= STATE_SET_RO_ID;
- uart_rx_empty_buffer <= 'b1;
- end
-
- CMD_GET_RO_ID: begin
- current_state <= STATE_GET_RO_ID;
- end
-
- //CMD CHAIN
- CMD_SET_CHAIN_VAL: begin
- current_state <= STATE_SET_CHAIN_VAL;
- uart_rx_empty_buffer <= 'b1;
- end
-
- CMD_GET_CHAIN_VAL: begin
- current_state <= STATE_GET_CHAIN_VAL;
- end
-
- CMD_SET_CHAIN_ID: begin
- current_state <= STATE_SET_CHAIN_ID;
- uart_rx_empty_buffer <= 'b1;
- end
-
- CMD_GET_CHAIN_ID: begin
- current_state <= STATE_GET_CHAIN_ID;
- end
-
-
- CMD_SET_RO_MEAS_TIME: begin
- current_state <= STATE_SET_RO_MEAS_TIME;
- uart_rx_empty_buffer <= 'b1;
-
- end
-
- CMD_GET_RO_MEAS_TIME: begin
- current_state <= STATE_GET_RO_MEAS_TIME;
- end
-
- //CMD SENSORS
- CMD_GET_TEMP_REG: begin
- current_state <= STATE_GET_TEMP_REG;
- end
-
- CMD_GET_VINT_REG: begin
- current_state <= STATE_GET_VINT_REG;
- end
-
- CMD_GET_VAUX_REG: begin
- current_state <= STATE_GET_VAUX_REG;
- end
-
-
- CMD_GET_MEAS_RO: begin
- current_state <= STATE_GET_MEAS_RO;
- end
-
- CMD_EXEC_MEAS_RO: begin
- current_state <= STATE_EXEC_MEAS_RO;
- end
-
- CMD_ACTIVATE_CHAIN: begin
- current_state <= STATE_ACTIVATE_CHAIN;
- end
-
- CMD_DEACTIVATE_CHAIN: begin
- current_state <= STATE_DEACTIVATE_CHAIN;
- end
-
- CMD_SET_CHAIN_FREQ_INT: begin
- current_state <= STATE_SET_CHAIN_FREQ_INT;
- uart_rx_empty_buffer <= 'b1;
-
- end
-
- CMD_GET_CHAIN_FREQ_INT: begin
- current_state <= STATE_GET_CHAIN_FREQ_INT;
- end
-
- CMD_SET_CHAIN_FREQ_FRAC: begin
- current_state <= STATE_SET_CHAIN_FREQ_FRAC;
- uart_rx_empty_buffer <= 'b1;
-
- end
-
- CMD_GET_CHAIN_FREQ_FRAC: begin
- current_state <= STATE_GET_CHAIN_FREQ_FRAC;
- end
-
- //AES CMDs
-
- CMD_SET_AES_KEY: begin
- current_state <= STATE_SET_AES_KEY;
- uart_rx_empty_buffer <= 'b1;
-
- end
-
- CMD_GET_AES_KEY: begin
- current_state <= STATE_GET_AES_KEY;
- end
-
- CMD_SET_AES_PTX: begin
- current_state <= STATE_SET_AES_PTX;
- uart_rx_empty_buffer <= 'b1;
-
- end
-
- CMD_GET_AES_PTX: begin
- current_state <= STATE_GET_AES_PTX;
- end
-
- CMD_GET_AES_CTX: begin
- current_state <= STATE_GET_AES_CTX;
- end
-
-
-
-
-
-
-// CMD_GET_NUMBER_OF_NCS: begin
-// current_state <= STATE_GET_NUMBER_OF_NCS;
-// end
-
- CMD_SET_GPIO: begin
- current_state <= STATE_SET_GPIO;
-
- end
-
- CMD_UNSET_GPIO: begin
- current_state <= STATE_UNSET_GPIO;
- end
-
- default: begin
- current_state <= STATE_TRANSITION_INPUT;
- end
- endcase
- end
- end
-
-
-
- STATE_UNHULT_CLK: begin
- hult_signal <=0;
- current_state <= STATE_TRANSITION_INPUT;
-
- end
-
-
-
- STATE_HULT_CLK: begin
- hult_signal <=1;
- current_state <= STATE_TRANSITION_INPUT;
- end
-
-
-
-
-
- STATE_SET_FF_ID: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd1) begin
- ff_id_reg <= uart_rx_data[0];
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
-
- STATE_GET_FF_ID: begin
- if (uart_tx_ready) begin
-// uart_tx_data[3] <= trigger_offset[7:0];
-// uart_tx_data[2] <= trigger_offset[15:8];
-// uart_tx_data[1] <= trigger_offset[23:16];
- uart_tx_data[0] <= ff_id_reg;
- uart_tx_data_length <= 'd1;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- //STATE SENSORS
-
-
- STATE_GET_TEMP_REG: begin
- if (uart_tx_ready) begin
- uart_tx_data[1] <= temp_reg[7:0];
- uart_tx_data[0] <= temp_reg[15:8];
- uart_tx_data_length <= 'd2;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
- STATE_GET_VINT_REG: begin
- if (uart_tx_ready) begin
- uart_tx_data[1] <= vint_reg[7:0];
- uart_tx_data[0] <= vint_reg[15:8];
- uart_tx_data_length <= 'd2;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
- STATE_GET_VAUX_REG: begin
- if (uart_tx_ready) begin
- uart_tx_data[1] <= vaux_reg[7:0];
- uart_tx_data[0] <= vaux_reg[15:8];
- uart_tx_data_length <= 'd2;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
- STATE_SET_FF_VAL: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd1) begin
- ff_in[ff_id_reg] <= uart_rx_data[0]&1;
- ff_write_en[ff_id_reg]<=1;
- current_state <= STATE_LOCK_VAL;
- end
- end
- end
-
-
-
- STATE_SET_RO_MEAS_TIME: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd8) begin
- ro_meas_time[7:0] <= uart_rx_data[7];// data comes in big endian
- ro_meas_time[15:8] <= uart_rx_data[6];
- ro_meas_time[23:16] <= uart_rx_data[5];
- ro_meas_time[31:24] <= uart_rx_data[4];
- ro_meas_time[39:32] <= uart_rx_data[3];
- ro_meas_time[47:40] <= uart_rx_data[2];
- ro_meas_time[55:48] <= uart_rx_data[1];
- ro_meas_time[63:56] <= uart_rx_data[0];
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
- STATE_GET_RO_MEAS_TIME: begin
- if (uart_tx_ready) begin
- uart_tx_data[7]<= ro_meas_time[7:0]; // data comes in big endian
- uart_tx_data[6]<=ro_meas_time[15:8] ;
- uart_tx_data[5]<=ro_meas_time[23:16];
- uart_tx_data[4]<=ro_meas_time[31:24];
- uart_tx_data[3]<=ro_meas_time[39:32];
- uart_tx_data[2]<=ro_meas_time[47:40];
- uart_tx_data[1]<=ro_meas_time[55:48];
- uart_tx_data[0]<=ro_meas_time[63:56];
- uart_tx_data_length <= 'd8;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
- //AES STATES
- STATE_SET_AES_PTX: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd16) begin
- aes_ptx[7:0] <= uart_rx_data[15];// data comes in big endian
- aes_ptx[15:8] <= uart_rx_data[14];
- aes_ptx[23:16] <= uart_rx_data[13];
- aes_ptx[31:24] <= uart_rx_data[12];
- aes_ptx[39:32] <= uart_rx_data[11];
- aes_ptx[47:40] <= uart_rx_data[10];
- aes_ptx[55:48] <= uart_rx_data[9];
- aes_ptx[63:56] <= uart_rx_data[8];
- aes_ptx[71:64] <= uart_rx_data[7];// data comes in big endian
- aes_ptx[79:72] <= uart_rx_data[6];
- aes_ptx[87:80] <= uart_rx_data[5];
- aes_ptx[95:88] <= uart_rx_data[4];
- aes_ptx[103:96] <= uart_rx_data[3];
- aes_ptx[111:104] <= uart_rx_data[2];
- aes_ptx[119:112] <= uart_rx_data[1];
- aes_ptx[127:120] <= uart_rx_data[0];
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
-
- STATE_GET_AES_PTX: begin
- if (uart_tx_ready) begin
- uart_tx_data[15]<= aes_ptx[7:0]; // data comes in big endian
- uart_tx_data[14]<=aes_ptx[15:8] ;
- uart_tx_data[13]<=aes_ptx[23:16];
- uart_tx_data[12]<=aes_ptx[31:24];
- uart_tx_data[11]<=aes_ptx[39:32];
- uart_tx_data[10]<=aes_ptx[47:40];
- uart_tx_data[9]<=aes_ptx[55:48];
- uart_tx_data[8]<=aes_ptx[63:56];
- uart_tx_data[7]<= aes_ptx[71:64]; // data comes in big endian
- uart_tx_data[6]<=aes_ptx[79:72] ;
- uart_tx_data[5]<=aes_ptx[87:80];
- uart_tx_data[4]<=aes_ptx[95:88];
- uart_tx_data[3]<=aes_ptx[103:96];
- uart_tx_data[2]<=aes_ptx[111:104];
- uart_tx_data[1]<=aes_ptx[119:112];
- uart_tx_data[0]<=aes_ptx[127:120];
- uart_tx_data_length <= 'd16;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
- STATE_SET_AES_KEY: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd16) begin
- aes_key[7:0] <= uart_rx_data[15];// data comes in big endian
- aes_key[15:8] <= uart_rx_data[14];
- aes_key[23:16] <= uart_rx_data[13];
- aes_key[31:24] <= uart_rx_data[12];
- aes_key[39:32] <= uart_rx_data[11];
- aes_key[47:40] <= uart_rx_data[10];
- aes_key[55:48] <= uart_rx_data[9];
- aes_key[63:56] <= uart_rx_data[8];
- aes_key[71:64] <= uart_rx_data[7];// data comes in big endian
- aes_key[79:72] <= uart_rx_data[6];
- aes_key[87:80] <= uart_rx_data[5];
- aes_key[95:88] <= uart_rx_data[4];
- aes_key[103:96] <= uart_rx_data[3];
- aes_key[111:104] <= uart_rx_data[2];
- aes_key[119:112] <= uart_rx_data[1];
- aes_key[127:120] <= uart_rx_data[0];
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
-
- STATE_GET_AES_KEY: begin
- if (uart_tx_ready) begin
- uart_tx_data[15]<= aes_key[7:0]; // data comes in big endian
- uart_tx_data[14]<=aes_key[15:8] ;
- uart_tx_data[13]<=aes_key[23:16];
- uart_tx_data[12]<=aes_key[31:24];
- uart_tx_data[11]<=aes_key[39:32];
- uart_tx_data[10]<=aes_key[47:40];
- uart_tx_data[9]<=aes_key[55:48];
- uart_tx_data[8]<=aes_key[63:56];
- uart_tx_data[7]<= aes_key[71:64]; // data comes in big endian
- uart_tx_data[6]<=aes_key[79:72] ;
- uart_tx_data[5]<=aes_key[87:80];
- uart_tx_data[4]<=aes_key[95:88];
- uart_tx_data[3]<=aes_key[103:96];
- uart_tx_data[2]<=aes_key[111:104];
- uart_tx_data[1]<=aes_key[119:112];
- uart_tx_data[0]<=aes_key[127:120];
- uart_tx_data_length <= 'd16;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
- STATE_GET_AES_CTX: begin
- if (uart_tx_ready) begin
- uart_tx_data[15]<= aes_ctx[7:0]; // data comes in big endian
- uart_tx_data[14]<=aes_ctx[15:8] ;
- uart_tx_data[13]<=aes_ctx[23:16];
- uart_tx_data[12]<=aes_ctx[31:24];
- uart_tx_data[11]<=aes_ctx[39:32];
- uart_tx_data[10]<=aes_ctx[47:40];
- uart_tx_data[9]<=aes_ctx[55:48];
- uart_tx_data[8]<=aes_ctx[63:56];
- uart_tx_data[7]<= aes_ctx[71:64]; // data comes in big endian
- uart_tx_data[6]<=aes_ctx[79:72] ;
- uart_tx_data[5]<=aes_ctx[87:80];
- uart_tx_data[4]<=aes_ctx[95:88];
- uart_tx_data[3]<=aes_ctx[103:96];
- uart_tx_data[2]<=aes_ctx[111:104];
- uart_tx_data[1]<=aes_ctx[119:112];
- uart_tx_data[0]<=aes_ctx[127:120];
- uart_tx_data_length <= 'd16;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
-
-
-
- STATE_EXEC_MEAS_RO: begin
- ro_counter_en <= 1'b1;
- current_state <= STATE_EXEC_MEAS_RO_POST;
-
- end
- STATE_EXEC_MEAS_RO_POST: begin
- ro_counter_en <= 1'b0;
- current_state <= STATE_TRANSITION_INPUT;
-
- end
-
-
- STATE_GET_MEAS_RO: begin
- if (uart_tx_ready) begin
- uart_tx_data[7]<= ro_meas_count[ro_id_reg][7:0]; // data comes in big endian
- uart_tx_data[6]<=ro_meas_count[ro_id_reg][15:8] ;
- uart_tx_data[5]<=ro_meas_count[ro_id_reg][23:16];
- uart_tx_data[4]<=ro_meas_count[ro_id_reg][31:24];
- uart_tx_data[3]<=ro_meas_count[ro_id_reg][39:32];
- uart_tx_data[2]<=ro_meas_count[ro_id_reg][47:40];
- uart_tx_data[1]<=ro_meas_count[ro_id_reg][55:48];
- uart_tx_data[0]<=ro_meas_count[ro_id_reg][63:56];
- uart_tx_data_length <= 'd8;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
-// STATE_GET_MEAS_RO: begin
-// if (uart_tx_ready) begin
-// uart_tx_data[7]<= ro_meas_count[7:0]; // data comes in big endian
-// uart_tx_data[6]<=ro_meas_count[15:8] ;
-// uart_tx_data[5]<=ro_meas_count[23:16];
-// uart_tx_data[4]<=ro_meas_count[31:24];
-// uart_tx_data[3]<=ro_meas_count[39:32];
-// uart_tx_data[2]<=ro_meas_count[47:40];
-// uart_tx_data[1]<=ro_meas_count[55:48];
-// uart_tx_data[0]<=ro_meas_count[63:56];
-// uart_tx_data_length <= 'd8;
-// uart_tx_en <= 'b1;
-// current_state <= STATE_TRANSITION_INPUT;
-// end
-// end
-
- STATE_ACTIVATE_CHAIN :begin
-
-// chain_en<='b1;
- current_state <= STATE_TRANSITION_INPUT;
-
- end
-
-
- STATE_DEACTIVATE_CHAIN :begin
-
-// chain_en<='b0;
- current_state <= STATE_TRANSITION_INPUT;
-
- end
-
-
- STATE_SET_CHAIN_FREQ_INT: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd4) begin
- div_int[7:0] <= uart_rx_data[3];// data comes in big endian
- div_int[15:8] <= uart_rx_data[2];
- div_int[23:16] <= uart_rx_data[1];
- div_int[31:24] <= uart_rx_data[0];
-
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
- STATE_GET_CHAIN_FREQ_INT: begin
- if (uart_tx_ready) begin
- uart_tx_data[3]<= div_int[7:0]; // data comes in big endian
- uart_tx_data[2]<=div_int[15:8] ;
- uart_tx_data[1]<=div_int[23:16];
- uart_tx_data[0]<=div_int[31:24];
-
- uart_tx_data_length <= 'd4;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
-
- STATE_SET_CHAIN_FREQ_FRAC: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd4) begin
- div_frac[7:0] <= uart_rx_data[3];// data comes in big endian
- div_frac[15:8] <= uart_rx_data[2];
- div_frac[23:16] <= uart_rx_data[1];
- div_frac[31:24] <= uart_rx_data[0];
-
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
- STATE_GET_CHAIN_FREQ_FRAC: begin
- if (uart_tx_ready) begin
- uart_tx_data[3]<= div_frac[7:0]; // data comes in big endian
- uart_tx_data[2]<=div_frac[15:8] ;
- uart_tx_data[1]<=div_frac[23:16];
- uart_tx_data[0]<=div_frac[31:24];
-
- uart_tx_data_length <= 'd4;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
-
-
- STATE_LOCK_VAL: begin
-
- ff_write_en[ff_id_reg]<=0;
- current_state <= STATE_TRANSITION_INPUT;
-
- end
-
-
-
-
- STATE_GET_FF_VAL: begin
-
- if (uart_tx_ready) begin
- uart_tx_data[0] <= {8{ff_in[ff_id_reg]}};
- uart_tx_data_length <= 'd1;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
-// STATE_GET_NUMBER_OF_NCS: begin
-// if (uart_tx_ready) begin
-// uart_tx_data[3] <= number_of_ncs[7:0];
-// uart_tx_data[2] <= number_of_ncs[15:8];
-// uart_tx_data[1] <= number_of_ncs[23:16];
-// uart_tx_data[0] <= number_of_ncs[31:24];
-// uart_tx_data_length <= 'd4;
-// uart_tx_en <= 'b1;
-// current_state <= STATE_TRANSITION_INPUT;
-// end
-// end
-
- STATE_SET_GPIO: begin
- // gpio <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
-
-
-
- STATE_SET_RO_ID: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd1) begin
- ro_id_reg <= uart_rx_data[0];
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
-
- STATE_GET_RO_ID: begin
- if (uart_tx_ready) begin
-// uart_tx_data[3] <= trigger_offset[7:0];
-// uart_tx_data[2] <= trigger_offset[15:8];
-// uart_tx_data[1] <= trigger_offset[23:16];
- uart_tx_data[0] <= ro_id_reg;
- uart_tx_data_length <= 'd1;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
- STATE_SET_RO_VAL: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd1) begin
- ro_en[ro_id_reg] <= uart_rx_data[0]&1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
-
-
-
- STATE_GET_RO_VAL: begin
- if (uart_tx_ready) begin
- uart_tx_data[0] <= {8{ro_en[ro_id_reg]}};
- uart_tx_data_length <= 'd1;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
- // CHAIN ID/VAL States
-
- STATE_SET_CHAIN_ID: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd1) begin
- chain_id_reg <= uart_rx_data[0];
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
-
- STATE_GET_CHAIN_ID: begin
- if (uart_tx_ready) begin
-// uart_tx_data[3] <= trigger_offset[7:0];
-// uart_tx_data[2] <= trigger_offset[15:8];
-// uart_tx_data[1] <= trigger_offset[23:16];
- uart_tx_data[0] <= chain_id_reg;
- uart_tx_data_length <= 'd1;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
- STATE_SET_CHAIN_VAL: begin
- if (uart_rx_updated_buffer) begin
- if (uart_rx_data_length >= 'd1) begin
- chain_en[chain_id_reg] <= uart_rx_data[0]&1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
- end
-
-
-
-
- STATE_GET_CHAIN_VAL: begin
- if (uart_tx_ready) begin
- uart_tx_data[0] <= {8{chain_en[chain_id_reg]}};
- uart_tx_data_length <= 'd1;
- uart_tx_en <= 'b1;
- current_state <= STATE_TRANSITION_INPUT;
- end
- end
-
-
-
-
-
- STATE_UNSET_GPIO: begin
- // gpio <= 'b0;
- current_state <= STATE_TRANSITION_INPUT;
- end
-
- STATE_TRANSITION_INPUT: begin
- uart_rx_empty_buffer <= 'b1;
- current_state <= STATE_INPUT;
- end
- endcase
- end
- end
-endmodule
\ No newline at end of file
diff --git a/hwdbg/src/main/systemverilog/sensors/src/uart_rx.sv b/hwdbg/src/main/systemverilog/sensors/src/uart_rx.sv
deleted file mode 100644
index a54364b4..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/uart_rx.sv
+++ /dev/null
@@ -1,99 +0,0 @@
-module uart_rx
-#(
- parameter SYSTEMCLOCK = 100_000_000,
- parameter BAUDRATE = 115_200,
- parameter ELEMENT_WIDTH = 8,
- localparam ELEMENT_BIT_COUNTER_WIDTH = $clog2(ELEMENT_WIDTH),
- localparam CLOCK_COUNTER_WIDTH = 32,
- localparam CLOCKS_PER_BAUD = SYSTEMCLOCK / BAUDRATE
-)(
- input logic clk,
- input logic rst,
- input logic rx_line,
- output logic [ELEMENT_WIDTH-1:0] rx_data,
- output logic rx_data_valid
-);
-
- typedef enum {
- STATE_IDLE,
- STATE_START_BIT,
- STATE_RECEIVE_ELEMENT,
- STATE_CHECK_ELEMENT_RECEIVED,
- STATE_STOP_BIT,
- STATE_DONE
- } state_t;
- state_t current_state;
-
- logic [ELEMENT_BIT_COUNTER_WIDTH:0] current_bit;
- logic [CLOCK_COUNTER_WIDTH-1:0] clock_counter;
- logic clocks_per_baud_reached;
- logic half_clocks_per_baud_reached;
-
- assign clocks_per_baud_reached = (clock_counter >= CLOCKS_PER_BAUD);
- assign half_clocks_per_baud_reached = (clock_counter >= (CLOCKS_PER_BAUD / 2));
- assign rx_data = rx_data;
- assign rx_data_valid = current_state == STATE_DONE;
-
- always_ff @(posedge clk) begin
- if (rst) begin
- current_state <= STATE_IDLE;
- current_bit <= 'b0;
- rx_data <= 'b0;
- clock_counter <= 'd0;
-
- end else begin
- current_state <= current_state;
- current_bit <= current_bit;
- rx_data <= rx_data;
- clock_counter <= clock_counter + 1;
-
- case (current_state)
-
- STATE_IDLE: begin
- if (rx_line == 'b0) begin
- current_state <= STATE_START_BIT;
- clock_counter <= 'b0;
- end
- end
-
- STATE_START_BIT: begin
- if (half_clocks_per_baud_reached) begin
- current_state <= STATE_RECEIVE_ELEMENT;
- clock_counter <= 'b0;
- current_bit <= 'b0;
- end
- end
-
- STATE_RECEIVE_ELEMENT: begin
- if (clocks_per_baud_reached) begin
- rx_data[current_bit] <= rx_line;
- current_bit <= current_bit + 1;
- clock_counter <= 'd0;
- current_state <= STATE_CHECK_ELEMENT_RECEIVED;
- end
- end
-
- STATE_CHECK_ELEMENT_RECEIVED: begin
- if (current_bit >= ELEMENT_WIDTH) begin
- current_state <= STATE_STOP_BIT;
- end else begin
- current_state <= STATE_RECEIVE_ELEMENT;
- end
- end
-
- STATE_STOP_BIT: begin
- if (clocks_per_baud_reached) begin
- current_state <= STATE_DONE;
- clock_counter <= 'd0;
- end
- end
-
- STATE_DONE: begin
- current_state <= STATE_IDLE;
- end
-
- endcase
- end
- end
-
-endmodule
\ No newline at end of file
diff --git a/hwdbg/src/main/systemverilog/sensors/src/uart_tx.sv b/hwdbg/src/main/systemverilog/sensors/src/uart_tx.sv
deleted file mode 100644
index a5f4a7e3..00000000
--- a/hwdbg/src/main/systemverilog/sensors/src/uart_tx.sv
+++ /dev/null
@@ -1,104 +0,0 @@
-module uart_tx
-#(
- parameter SYSTEMCLOCK = 100_000_000,
- parameter BAUDRATE = 115_200,
- parameter ELEMENT_WIDTH = 8,
- localparam ELEMENT_BIT_COUNTER_WIDTH = $clog2(ELEMENT_WIDTH),
- localparam CLOCK_COUNTER_WIDTH = 32,
- localparam CLOCKS_PER_BAUD = SYSTEMCLOCK / BAUDRATE
-)(
- input logic clk,
- input logic rst,
- input logic tx_en,
- input logic [ELEMENT_WIDTH-1:0] tx_data,
- output logic tx_line,
- output logic tx_ready
-);
-
- typedef enum {
- STATE_IDLE,
- STATE_START_BIT,
- STATE_TRANSFER_ELEMENT,
- STATE_CHECK_ELEMENT_TRANSFERRED,
- STATE_STOP_BIT,
- STATE_DONE
- } state_t;
- state_t current_state;
-
- logic [ELEMENT_BIT_COUNTER_WIDTH:0] bit_counter = 'b0;
- logic [CLOCK_COUNTER_WIDTH:0] clock_counter = 'b0;
-
- logic clocks_per_baud_reached;
- assign clocks_per_baud_reached = (clock_counter >= CLOCKS_PER_BAUD);
-
- always @(posedge clk) begin
-
- if (rst) begin
- current_state <= STATE_IDLE;
- bit_counter <= 'd0;
- clock_counter <= 'd0;
- tx_line <= 'b1;
- tx_ready <= 'b0;
-
- end else begin
-
- clock_counter <= clock_counter + 1;
- current_state <= current_state;
- bit_counter <= bit_counter;
- tx_line <= tx_line;
- tx_ready <= tx_ready;
-
- case (current_state)
-
- STATE_IDLE: begin
- if (tx_en) begin
- current_state <= STATE_START_BIT;
- tx_line <= 'b0;
- tx_ready <= 'b0;
- end else begin
- tx_line <= 'b1;
- tx_ready <= 'b1;
- end
- end
-
- STATE_START_BIT: begin
- current_state <= STATE_TRANSFER_ELEMENT;
- bit_counter <= 'd0;
- clock_counter <= 'd0;
- end
-
- STATE_TRANSFER_ELEMENT: begin
- if(clocks_per_baud_reached) begin
- clock_counter <= 'b0;
- tx_line <= tx_data[bit_counter];
- bit_counter <= bit_counter + 1;
- current_state <= STATE_CHECK_ELEMENT_TRANSFERRED;
- end
- end
-
- STATE_CHECK_ELEMENT_TRANSFERRED: begin
- if (bit_counter >= ELEMENT_WIDTH) begin
- current_state <= STATE_STOP_BIT;
- end else begin
- current_state <= STATE_TRANSFER_ELEMENT;
- end
- end
-
- STATE_STOP_BIT: begin
- if(clocks_per_baud_reached) begin
- tx_line <= 'b1;
- clock_counter <= 'd0;
- current_state <= STATE_DONE;
- end
- end
-
- STATE_DONE: begin
- if (clocks_per_baud_reached) begin
- tx_ready <= 'b1;
- current_state <= STATE_IDLE;
- end
- end
- endcase
- end
- end
-endmodule
\ No newline at end of file
diff --git a/hwdbg/src/test/bram/instance_info.hex.txt b/hwdbg/src/test/bram/instance_info.hex.txt
deleted file mode 100644
index 7c72056c..00000000
--- a/hwdbg/src/test/bram/instance_info.hex.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-0000005a ; +0x0 | Checksum
-00000000 ; +0x4 | Checksum
-52444247 ; +0x8 | Indicator
-48595045 ; +0xc | Indicator
-00000004 ; +0x10 | TypeOfThePacket - DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL (0x4)
-00000001 ; +0x14 | RequestedActionOfThePacket - Value (0x1)
-00000000 ; +0x18
-00000000 ; +0x1c
-00000000 ; +0x20
-00000000 ; +0x24
-00000000 ; +0x28
-00000000 ; +0x2c
-00000000 ; +0x30
-00000000 ; +0x34
-00000000 ; +0x38
-00000000 ; +0x3c
-00000000 ; +0x40
-00000000 ; +0x44
-00000000 ; +0x48
-00000000 ; +0x4c
-00000000 ; +0x50
-00000000 ; +0x54
-00000000 ; +0x58
-00000000 ; +0x5c
-00000000 ; +0x60
-00000000 ; +0x64
-00000000 ; +0x68
-00000000 ; +0x6c
-00000000 ; +0x70
-00000000 ; +0x74
-00000000 ; +0x78
-00000000 ; +0x7c
-00000000 ; +0x80
-00000000 ; +0x84
-00000000 ; +0x88
-00000000 ; +0x8c
-00000000 ; +0x90
-00000000 ; +0x94
-00000000 ; +0x98
-00000000 ; +0x9c
-00000000 ; +0xa0
-00000000 ; +0xa4
-00000000 ; +0xa8
-00000000 ; +0xac
-00000000 ; +0xb0
-00000000 ; +0xb4
-00000000 ; +0xb8
-00000000 ; +0xbc
-00000000 ; +0xc0
-00000000 ; +0xc4
-00000000 ; +0xc8
-00000000 ; +0xcc
-00000000 ; +0xd0
-00000000 ; +0xd4
-00000000 ; +0xd8
-00000000 ; +0xdc
-00000000 ; +0xe0
-00000000 ; +0xe4
-00000000 ; +0xe8
-00000000 ; +0xec
-00000000 ; +0xf0
-00000000 ; +0xf4
-00000000 ; +0xf8
-00000000 ; +0xfc
-00000000 ; +0x100
-00000000 ; +0x104
-00000000 ; +0x108
-00000000 ; +0x10c
-00000000 ; +0x110
-00000000 ; +0x114
-00000000 ; +0x118
-00000000 ; +0x11c
-00000000 ; +0x120
-00000000 ; +0x124
-00000000 ; +0x128
-00000000 ; +0x12c
-00000000 ; +0x130
-00000000 ; +0x134
-00000000 ; +0x138
-00000000 ; +0x13c
-00000000 ; +0x140
-00000000 ; +0x144
-00000000 ; +0x148
-00000000 ; +0x14c
-00000000 ; +0x150
-00000000 ; +0x154
-00000000 ; +0x158
-00000000 ; +0x15c
-00000000 ; +0x160
-00000000 ; +0x164
-00000000 ; +0x168
-00000000 ; +0x16c
-00000000 ; +0x170
-00000000 ; +0x174
-00000000 ; +0x178
-00000000 ; +0x17c
-00000000 ; +0x180
-00000000 ; +0x184
-00000000 ; +0x188
-00000000 ; +0x18c
-00000000 ; +0x190
-00000000 ; +0x194
-00000000 ; +0x198
-00000000 ; +0x19c
-00000000 ; +0x1a0
-00000000 ; +0x1a4
-00000000 ; +0x1a8
-00000000 ; +0x1ac
-00000000 ; +0x1b0
-00000000 ; +0x1b4
-00000000 ; +0x1b8
-00000000 ; +0x1bc
-00000000 ; +0x1c0
-00000000 ; +0x1c4
-00000000 ; +0x1c8
-00000000 ; +0x1cc
-00000000 ; +0x1d0
-00000000 ; +0x1d4
-00000000 ; +0x1d8
-00000000 ; +0x1dc
-00000000 ; +0x1e0
-00000000 ; +0x1e4
-00000000 ; +0x1e8
-00000000 ; +0x1ec
-00000000 ; +0x1f0
-00000000 ; +0x1f4
-00000000 ; +0x1f8
-00000000 ; +0x1fc
-00000000 ; +0x200
-00000000 ; +0x204
-00000000 ; +0x208
-00000000 ; +0x20c
-00000000 ; +0x210
-00000000 ; +0x214
-00000000 ; +0x218
-00000000 ; +0x21c
-00000000 ; +0x220
-00000000 ; +0x224
-00000000 ; +0x228
-00000000 ; +0x22c
-00000000 ; +0x230
-00000000 ; +0x234
-00000000 ; +0x238
-00000000 ; +0x23c
-00000000 ; +0x240
-00000000 ; +0x244
-00000000 ; +0x248
-00000000 ; +0x24c
-00000000 ; +0x250
-00000000 ; +0x254
-00000000 ; +0x258
-00000000 ; +0x25c
-00000000 ; +0x260
-00000000 ; +0x264
-00000000 ; +0x268
-00000000 ; +0x26c
-00000000 ; +0x270
-00000000 ; +0x274
-00000000 ; +0x278
-00000000 ; +0x27c
-00000000 ; +0x280
-00000000 ; +0x284
-00000000 ; +0x288
-00000000 ; +0x28c
-00000000 ; +0x290
-00000000 ; +0x294
-00000000 ; +0x298
-00000000 ; +0x29c
-00000000 ; +0x2a0
-00000000 ; +0x2a4
-00000000 ; +0x2a8
-00000000 ; +0x2ac
-00000000 ; +0x2b0
-00000000 ; +0x2b4
-00000000 ; +0x2b8
-00000000 ; +0x2bc
-00000000 ; +0x2c0
-00000000 ; +0x2c4
-00000000 ; +0x2c8
-00000000 ; +0x2cc
-00000000 ; +0x2d0
-00000000 ; +0x2d4
-00000000 ; +0x2d8
-00000000 ; +0x2dc
-00000000 ; +0x2e0
-00000000 ; +0x2e4
-00000000 ; +0x2e8
-00000000 ; +0x2ec
-00000000 ; +0x2f0
-00000000 ; +0x2f4
-00000000 ; +0x2f8
-00000000 ; +0x2fc
-00000000 ; +0x300
-00000000 ; +0x304
-00000000 ; +0x308
-00000000 ; +0x30c
-00000000 ; +0x310
-00000000 ; +0x314
-00000000 ; +0x318
-00000000 ; +0x31c
-00000000 ; +0x320
-00000000 ; +0x324
-00000000 ; +0x328
-00000000 ; +0x32c
-00000000 ; +0x330
-00000000 ; +0x334
-00000000 ; +0x338
-00000000 ; +0x33c
-00000000 ; +0x340
-00000000 ; +0x344
-00000000 ; +0x348
-00000000 ; +0x34c
-00000000 ; +0x350
-00000000 ; +0x354
-00000000 ; +0x358
-00000000 ; +0x35c
-00000000 ; +0x360
-00000000 ; +0x364
-00000000 ; +0x368
-00000000 ; +0x36c
-00000000 ; +0x370
-00000000 ; +0x374
-00000000 ; +0x378
-00000000 ; +0x37c
-00000000 ; +0x380
-00000000 ; +0x384
-00000000 ; +0x388
-00000000 ; +0x38c
-00000000 ; +0x390
-00000000 ; +0x394
-00000000 ; +0x398
-00000000 ; +0x39c
-00000000 ; +0x3a0
-00000000 ; +0x3a4
-00000000 ; +0x3a8
-00000000 ; +0x3ac
-00000000 ; +0x3b0
-00000000 ; +0x3b4
-00000000 ; +0x3b8
-00000000 ; +0x3bc
-00000000 ; +0x3c0
-00000000 ; +0x3c4
-00000000 ; +0x3c8
-00000000 ; +0x3cc
-00000000 ; +0x3d0
-00000000 ; +0x3d4
-00000000 ; +0x3d8
-00000000 ; +0x3dc
-00000000 ; +0x3e0
-00000000 ; +0x3e4
-00000000 ; +0x3e8
-00000000 ; +0x3ec
-00000000 ; +0x3f0
-00000000 ; +0x3f4
-00000000 ; +0x3f8
-00000000 ; +0x3fc
\ No newline at end of file
diff --git a/hwdbg/src/test/bram/script_buffer.hex.txt b/hwdbg/src/test/bram/script_buffer.hex.txt
deleted file mode 100644
index 73e93432..00000000
--- a/hwdbg/src/test/bram/script_buffer.hex.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-000000b9 ; +0x0 | Checksum
-00000000 ; +0x4 | Checksum
-52444247 ; +0x8 | Indicator
-48595045 ; +0xc | Indicator
-00000004 ; +0x10 | TypeOfThePacket - DEBUGGER_TO_DEBUGGEE_HARDWARE_LEVEL (0x4)
-00000002 ; +0x14 | RequestedActionOfThePacket - Value (0x2)
-00000007 ; +0x18 | Start of Optional Data
-00000006 ; +0x1c
-0000000a ; +0x20
-00000003 ; +0x24
-00000000 ; +0x28
-0000000f ; +0x2c
-00000000 ; +0x30
-0000000f ; +0x34
-00000000 ; +0x38
-00000006 ; +0x3c
-00000018 ; +0x40
-00000003 ; +0x44
-00000001 ; +0x48
-00000000 ; +0x4c
-00000000 ; +0x50
-00000004 ; +0x54
-00000000 ; +0x58
-00000000 ; +0x5c
-00000000 ; +0x60
-00000000 ; +0x64
-00000000 ; +0x68
-00000000 ; +0x6c
-00000000 ; +0x70
-00000000 ; +0x74
-00000000 ; +0x78
-00000000 ; +0x7c
-00000000 ; +0x80
-00000000 ; +0x84
-00000000 ; +0x88
-00000000 ; +0x8c
-00000000 ; +0x90
-00000000 ; +0x94
-00000000 ; +0x98
-00000000 ; +0x9c
-00000000 ; +0xa0
-00000000 ; +0xa4
-00000000 ; +0xa8
-00000000 ; +0xac
-00000000 ; +0xb0
-00000000 ; +0xb4
-00000000 ; +0xb8
-00000000 ; +0xbc
-00000000 ; +0xc0
-00000000 ; +0xc4
-00000000 ; +0xc8
-00000000 ; +0xcc
-00000000 ; +0xd0
-00000000 ; +0xd4
-00000000 ; +0xd8
-00000000 ; +0xdc
-00000000 ; +0xe0
-00000000 ; +0xe4
-00000000 ; +0xe8
-00000000 ; +0xec
-00000000 ; +0xf0
-00000000 ; +0xf4
-00000000 ; +0xf8
-00000000 ; +0xfc
-00000000 ; +0x100
-00000000 ; +0x104
-00000000 ; +0x108
-00000000 ; +0x10c
-00000000 ; +0x110
-00000000 ; +0x114
-00000000 ; +0x118
-00000000 ; +0x11c
-00000000 ; +0x120
-00000000 ; +0x124
-00000000 ; +0x128
-00000000 ; +0x12c
-00000000 ; +0x130
-00000000 ; +0x134
-00000000 ; +0x138
-00000000 ; +0x13c
-00000000 ; +0x140
-00000000 ; +0x144
-00000000 ; +0x148
-00000000 ; +0x14c
-00000000 ; +0x150
-00000000 ; +0x154
-00000000 ; +0x158
-00000000 ; +0x15c
-00000000 ; +0x160
-00000000 ; +0x164
-00000000 ; +0x168
-00000000 ; +0x16c
-00000000 ; +0x170
-00000000 ; +0x174
-00000000 ; +0x178
-00000000 ; +0x17c
-00000000 ; +0x180
-00000000 ; +0x184
-00000000 ; +0x188
-00000000 ; +0x18c
-00000000 ; +0x190
-00000000 ; +0x194
-00000000 ; +0x198
-00000000 ; +0x19c
-00000000 ; +0x1a0
-00000000 ; +0x1a4
-00000000 ; +0x1a8
-00000000 ; +0x1ac
-00000000 ; +0x1b0
-00000000 ; +0x1b4
-00000000 ; +0x1b8
-00000000 ; +0x1bc
-00000000 ; +0x1c0
-00000000 ; +0x1c4
-00000000 ; +0x1c8
-00000000 ; +0x1cc
-00000000 ; +0x1d0
-00000000 ; +0x1d4
-00000000 ; +0x1d8
-00000000 ; +0x1dc
-00000000 ; +0x1e0
-00000000 ; +0x1e4
-00000000 ; +0x1e8
-00000000 ; +0x1ec
-00000000 ; +0x1f0
-00000000 ; +0x1f4
-00000000 ; +0x1f8
-00000000 ; +0x1fc
-00000000 ; +0x200
-00000000 ; +0x204
-00000000 ; +0x208
-00000000 ; +0x20c
-00000000 ; +0x210
-00000000 ; +0x214
-00000000 ; +0x218
-00000000 ; +0x21c
-00000000 ; +0x220
-00000000 ; +0x224
-00000000 ; +0x228
-00000000 ; +0x22c
-00000000 ; +0x230
-00000000 ; +0x234
-00000000 ; +0x238
-00000000 ; +0x23c
-00000000 ; +0x240
-00000000 ; +0x244
-00000000 ; +0x248
-00000000 ; +0x24c
-00000000 ; +0x250
-00000000 ; +0x254
-00000000 ; +0x258
-00000000 ; +0x25c
-00000000 ; +0x260
-00000000 ; +0x264
-00000000 ; +0x268
-00000000 ; +0x26c
-00000000 ; +0x270
-00000000 ; +0x274
-00000000 ; +0x278
-00000000 ; +0x27c
-00000000 ; +0x280
-00000000 ; +0x284
-00000000 ; +0x288
-00000000 ; +0x28c
-00000000 ; +0x290
-00000000 ; +0x294
-00000000 ; +0x298
-00000000 ; +0x29c
-00000000 ; +0x2a0
-00000000 ; +0x2a4
-00000000 ; +0x2a8
-00000000 ; +0x2ac
-00000000 ; +0x2b0
-00000000 ; +0x2b4
-00000000 ; +0x2b8
-00000000 ; +0x2bc
-00000000 ; +0x2c0
-00000000 ; +0x2c4
-00000000 ; +0x2c8
-00000000 ; +0x2cc
-00000000 ; +0x2d0
-00000000 ; +0x2d4
-00000000 ; +0x2d8
-00000000 ; +0x2dc
-00000000 ; +0x2e0
-00000000 ; +0x2e4
-00000000 ; +0x2e8
-00000000 ; +0x2ec
-00000000 ; +0x2f0
-00000000 ; +0x2f4
-00000000 ; +0x2f8
-00000000 ; +0x2fc
-00000000 ; +0x300
-00000000 ; +0x304
-00000000 ; +0x308
-00000000 ; +0x30c
-00000000 ; +0x310
-00000000 ; +0x314
-00000000 ; +0x318
-00000000 ; +0x31c
-00000000 ; +0x320
-00000000 ; +0x324
-00000000 ; +0x328
-00000000 ; +0x32c
-00000000 ; +0x330
-00000000 ; +0x334
-00000000 ; +0x338
-00000000 ; +0x33c
-00000000 ; +0x340
-00000000 ; +0x344
-00000000 ; +0x348
-00000000 ; +0x34c
-00000000 ; +0x350
-00000000 ; +0x354
-00000000 ; +0x358
-00000000 ; +0x35c
-00000000 ; +0x360
-00000000 ; +0x364
-00000000 ; +0x368
-00000000 ; +0x36c
-00000000 ; +0x370
-00000000 ; +0x374
-00000000 ; +0x378
-00000000 ; +0x37c
-00000000 ; +0x380
-00000000 ; +0x384
-00000000 ; +0x388
-00000000 ; +0x38c
-00000000 ; +0x390
-00000000 ; +0x394
-00000000 ; +0x398
-00000000 ; +0x39c
-00000000 ; +0x3a0
-00000000 ; +0x3a4
-00000000 ; +0x3a8
-00000000 ; +0x3ac
-00000000 ; +0x3b0
-00000000 ; +0x3b4
-00000000 ; +0x3b8
-00000000 ; +0x3bc
-00000000 ; +0x3c0
-00000000 ; +0x3c4
-00000000 ; +0x3c8
-00000000 ; +0x3cc
-00000000 ; +0x3d0
-00000000 ; +0x3d4
-00000000 ; +0x3d8
-00000000 ; +0x3dc
-00000000 ; +0x3e0
-00000000 ; +0x3e4
-00000000 ; +0x3e8
-00000000 ; +0x3ec
-00000000 ; +0x3f0
-00000000 ; +0x3f4
-00000000 ; +0x3f8
-00000000 ; +0x3fc
\ No newline at end of file
diff --git a/hyperdbg/CMakeLists.txt b/hyperdbg/CMakeLists.txt
deleted file mode 100644
index ba5b3855..00000000
--- a/hyperdbg/CMakeLists.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-# Code generated by Visual Studio kit, DO NOT EDIT.
-cmake_minimum_required(VERSION 3.28)
-project(hyperdbg C CXX)
-set(CMAKE_CXX_STANDARD 23)
-enable_language(ASM_MASM)
-set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-
-if(LINUX)
-
- message(STATUS "Building on Linux")
-elseif(WIN32)
- message(STATUS "Building on Windows")
-find_package(WDK REQUIRED)
-
- include_directories(
- "dependencies/zydis/include"
- "dependencies/zydis/src"
- "dependencies/zydis/dependencies/zycore/include"
- )
-
- file(GLOB ZydisSourceFiles "dependencies/zydis/src/*.c")
- file(GLOB ZycoreSourceFiles "dependencies/zydis/dependencies/zycore/*.c")
-
- set(SourceFiles
- ${ZydisSourceFiles}
- ${ZycoreSourceFiles}
- # examples/ZydisWinKernel.c
- )
-
- add_definitions(
- -DZYAN_NO_LIBC
- -DZYDIS_NO_LIBC
- -DZYCORE_STATIC_BUILD
- -DZYDIS_STATIC_BUILD
- )
-
- wdk_add_library(zydisKernel
- KMDF 1.15
- ${SourceFiles}
- )
-link_directories(libraries/kdserial/x64)
-add_subdirectory(kdserial)
-target_link_libraries(kdserial kdserialtransport kdhv kdtelemetry)
-
-
-add_subdirectory(hyperlog)
-link_directories(libraries/zydis/kernel)
-add_subdirectory(hyperhv)
-target_link_libraries(hyperhv Zycore Zydis)
-
-
-add_subdirectory(hyperkd)
-target_link_libraries(hyperkd hyperlog hyperhv kdserial)
-
-endif()
-
-#add_subdirectory(dependencies/pdbex/Source)
-
-#add_subdirectory(symbol-parser)
-#target_link_libraries(symbol-parser pdbex)
-
-#target_link_libraries(script-engine symbol-parser)
-
-#add_subdirectory(hyperdbg-test)
-
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
-
-#add_subdirectory(symbol-parser)
-#target_link_libraries(symbol-parser pdbex)
-
-#add_subdirectory(script-engine)
-#target_link_libraries(script-engine symbol-parser)
-
-add_subdirectory(script-engine)
-link_directories(libraries/zydis/user libraries/keystone/release-lib)
-add_subdirectory(libhyperdbg)
-find_package(Threads REQUIRED)
-target_link_libraries(libhyperdbg Zycore Zydis script-engine keystone Threads::Threads)
-
-add_subdirectory(hyperdbg-cli)
-target_link_libraries(hyperdbg-cli libhyperdbg)
-
-
-
-#set(save_src_dir ${CMAKE_CURRENT_SOURCE_DIR}/examples)
-#execute_process( COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/../examples ${save_src_dir})
-#
-#add_subdirectory(examples/kernel/hyperdbg_driver)
-#target_link_libraries(hyperdbg_driver hyperlog hyperhv)
-#
-#
-#add_subdirectory(examples/user/hyperdbg_app)
-#target_link_libraries(hyperdbg_app libhyperdbg)
-
diff --git a/hyperdbg/FindWdk.cmake b/hyperdbg/FindWdk.cmake
deleted file mode 100644
index 12765781..00000000
--- a/hyperdbg/FindWdk.cmake
+++ /dev/null
@@ -1,209 +0,0 @@
-# Redistribution and use is allowed under the OSI-approved 3-clause BSD license.
-# Copyright (c) 2018 Sergey Podobry (sergey.podobry at gmail.com). All rights reserved.
-
-#.rst:
-# FindWDK
-# ----------
-#
-# This module searches for the installed Windows Development Kit (WDK) and
-# exposes commands for creating kernel drivers and kernel libraries.
-#
-# Output variables:
-# - `WDK_FOUND` -- if false, do not try to use WDK
-# - `WDK_ROOT` -- where WDK is installed
-# - `WDK_VERSION` -- the version of the selected WDK
-# - `WDK_WINVER` -- the WINVER used for kernel drivers and libraries
-# (default value is `0x0601` and can be changed per target or globally)
-# - `WDK_NTDDI_VERSION` -- the NTDDI_VERSION used for kernel drivers and libraries,
-# if not set, the value will be automatically calculated by WINVER
-# (default value is left blank and can be changed per target or globally)
-#
-# Example usage:
-#
-# find_package(WDK REQUIRED)
-#
-# wdk_add_library(KmdfCppLib STATIC KMDF 1.15
-# KmdfCppLib.h
-# KmdfCppLib.cpp
-# )
-# target_include_directories(KmdfCppLib INTERFACE .)
-#
-# wdk_add_driver(KmdfCppDriver KMDF 1.15
-# Main.cpp
-# )
-# target_link_libraries(KmdfCppDriver KmdfCppLib)
-#
-
-if(DEFINED ENV{WDKContentRoot})
- file(GLOB WDK_NTDDK_FILES
- "$ENV{WDKContentRoot}/Include/*/km/ntddk.h" # WDK 10
- "$ENV{WDKContentRoot}/Include/km/ntddk.h" # WDK 8.0, 8.1
- )
-else()
- file(GLOB WDK_NTDDK_FILES
- "C:/Program Files*/Windows Kits/*/Include/*/km/ntddk.h" # WDK 10
- "C:/Program Files*/Windows Kits/*/Include/km/ntddk.h" # WDK 8.0, 8.1
- )
-endif()
-
-if(WDK_NTDDK_FILES)
- if (NOT CMAKE_VERSION VERSION_LESS 3.18.0)
- list(SORT WDK_NTDDK_FILES COMPARE NATURAL) # sort to use the latest available WDK
- endif()
- list(GET WDK_NTDDK_FILES -1 WDK_LATEST_NTDDK_FILE)
-endif()
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(WDK REQUIRED_VARS WDK_LATEST_NTDDK_FILE)
-
-if (NOT WDK_LATEST_NTDDK_FILE)
- return()
-endif()
-
-get_filename_component(WDK_ROOT ${WDK_LATEST_NTDDK_FILE} DIRECTORY)
-get_filename_component(WDK_ROOT ${WDK_ROOT} DIRECTORY)
-get_filename_component(WDK_VERSION ${WDK_ROOT} NAME)
-get_filename_component(WDK_ROOT ${WDK_ROOT} DIRECTORY)
-if (NOT WDK_ROOT MATCHES ".*/[0-9][0-9.]*$") # WDK 10 has a deeper nesting level
- get_filename_component(WDK_ROOT ${WDK_ROOT} DIRECTORY) # go up once more
- set(WDK_LIB_VERSION "${WDK_VERSION}")
- set(WDK_INC_VERSION "${WDK_VERSION}")
-else() # WDK 8.0, 8.1
- set(WDK_INC_VERSION "")
- foreach(VERSION winv6.3 win8 win7)
- if (EXISTS "${WDK_ROOT}/Lib/${VERSION}/")
- set(WDK_LIB_VERSION "${VERSION}")
- break()
- endif()
- endforeach()
- set(WDK_VERSION "${WDK_LIB_VERSION}")
-endif()
-
-message(STATUS "WDK_ROOT: " ${WDK_ROOT})
-message(STATUS "WDK_VERSION: " ${WDK_VERSION})
-
-set(WDK_WINVER "0x0a01" CACHE STRING "Default WINVER for WDK targets")
-set(WDK_NTDDI_VERSION "" CACHE STRING "Specified NTDDI_VERSION for WDK targets if needed")
-
-set(WDK_ADDITIONAL_FLAGS_FILE "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/wdkflags.h")
-file(WRITE ${WDK_ADDITIONAL_FLAGS_FILE} "#pragma runtime_checks(\"suc\", off)")
-
-set(WDK_COMPILE_FLAGS
- "/Zp8" # set struct alignment
- "/GF" # enable string pooling
- "/GR-" # disable RTTI
- "/Gz" # __stdcall by default
- "/kernel" # create kernel mode binary
- "/FIwarning.h" # disable warnings in WDK headers
- "/FI${WDK_ADDITIONAL_FLAGS_FILE}" # include file to disable RTC
- )
-
-set(WDK_COMPILE_DEFINITIONS "WINNT=1")
-set(WDK_COMPILE_DEFINITIONS_DEBUG "MSC_NOOPT;DEPRECATE_DDK_FUNCTIONS=1;DBG=1")
-
-if(CMAKE_SIZEOF_VOID_P EQUAL 4)
- list(APPEND WDK_COMPILE_DEFINITIONS "_X86_=1;i386=1;STD_CALL")
- set(WDK_PLATFORM "x86")
-elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
- list(APPEND WDK_COMPILE_DEFINITIONS "_WIN64;_AMD64_;AMD64")
- set(WDK_PLATFORM "x64")
-else()
- message(FATAL_ERROR "Unsupported architecture")
-endif()
-
-string(CONCAT WDK_LINK_FLAGS
- "/MANIFEST:NO " #
- "/DRIVER " #
- "/OPT:REF " #
- "/INCREMENTAL:NO " #
- "/OPT:ICF " #
- "/SUBSYSTEM:NATIVE " #
- "/MERGE:_TEXT=.text;_PAGE=PAGE " #
- "/NODEFAULTLIB " # do not link default CRT
- "/SECTION:INIT,d " #
- "/VERSION:10.0 " #
- )
-
-# Generate imported targets for WDK lib files
-file(GLOB WDK_LIBRARIES "${WDK_ROOT}/Lib/${WDK_LIB_VERSION}/km/${WDK_PLATFORM}/*.lib")
-foreach(LIBRARY IN LISTS WDK_LIBRARIES)
- get_filename_component(LIBRARY_NAME ${LIBRARY} NAME_WE)
- string(TOUPPER ${LIBRARY_NAME} LIBRARY_NAME)
- add_library(WDK::${LIBRARY_NAME} INTERFACE IMPORTED)
- set_property(TARGET WDK::${LIBRARY_NAME} PROPERTY INTERFACE_LINK_LIBRARIES ${LIBRARY})
-endforeach(LIBRARY)
-unset(WDK_LIBRARIES)
-
-function(wdk_add_driver _target)
- cmake_parse_arguments(WDK "" "KMDF;WINVER;NTDDI_VERSION" "" ${ARGN})
-
- add_executable(${_target} ${WDK_UNPARSED_ARGUMENTS})
-
- set_target_properties(${_target} PROPERTIES SUFFIX ".sys")
- set_target_properties(${_target} PROPERTIES COMPILE_OPTIONS "${WDK_COMPILE_FLAGS}")
- set_target_properties(${_target} PROPERTIES COMPILE_DEFINITIONS
- "${WDK_COMPILE_DEFINITIONS};$<$:${WDK_COMPILE_DEFINITIONS_DEBUG}>;_WIN32_WINNT=${WDK_WINVER}"
- )
- set_target_properties(${_target} PROPERTIES LINK_FLAGS "${WDK_LINK_FLAGS}")
- if(WDK_NTDDI_VERSION)
- target_compile_definitions(${_target} PRIVATE NTDDI_VERSION=${WDK_NTDDI_VERSION})
- endif()
-
- target_include_directories(${_target} SYSTEM PRIVATE
- "${WDK_ROOT}/Include/${WDK_INC_VERSION}/shared"
- "${WDK_ROOT}/Include/${WDK_INC_VERSION}/km"
- "${WDK_ROOT}/Include/${WDK_INC_VERSION}/km/crt"
- )
-
- target_link_libraries(${_target} WDK::NTOSKRNL WDK::HAL WDK::BUFFEROVERFLOWK WDK::WMILIB)
-
- if(CMAKE_SIZEOF_VOID_P EQUAL 4)
- target_link_libraries(${_target} WDK::MEMCMP)
- endif()
-
- if(DEFINED WDK_KMDF)
- target_include_directories(${_target} SYSTEM PRIVATE "${WDK_ROOT}/Include/wdf/kmdf/${WDK_KMDF}")
- target_link_libraries(${_target}
- "${WDK_ROOT}/Lib/wdf/kmdf/${WDK_PLATFORM}/${WDK_KMDF}/WdfDriverEntry.lib"
- "${WDK_ROOT}/Lib/wdf/kmdf/${WDK_PLATFORM}/${WDK_KMDF}/WdfLdr.lib"
- )
-
- if(CMAKE_SIZEOF_VOID_P EQUAL 4)
- set_property(TARGET ${_target} APPEND_STRING PROPERTY LINK_FLAGS "/ENTRY:FxDriverEntry@8")
- elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set_property(TARGET ${_target} APPEND_STRING PROPERTY LINK_FLAGS "/ENTRY:FxDriverEntry")
- endif()
- else()
- if(CMAKE_SIZEOF_VOID_P EQUAL 4)
- set_property(TARGET ${_target} APPEND_STRING PROPERTY LINK_FLAGS "/ENTRY:GsDriverEntry@8")
- elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set_property(TARGET ${_target} APPEND_STRING PROPERTY LINK_FLAGS "/ENTRY:GsDriverEntry")
- endif()
- endif()
-endfunction()
-
-function(wdk_add_library _target)
- cmake_parse_arguments(WDK "" "KMDF;WINVER;NTDDI_VERSION" "" ${ARGN})
-
- add_library(${_target} ${WDK_UNPARSED_ARGUMENTS})
-
- set_target_properties(${_target} PROPERTIES COMPILE_OPTIONS "${WDK_COMPILE_FLAGS}")
- set_target_properties(${_target} PROPERTIES COMPILE_DEFINITIONS
- "${WDK_COMPILE_DEFINITIONS};$<$:${WDK_COMPILE_DEFINITIONS_DEBUG};>_WIN32_WINNT=${WDK_WINVER}"
- )
- if(WDK_NTDDI_VERSION)
- target_compile_definitions(${_target} PRIVATE NTDDI_VERSION=${WDK_NTDDI_VERSION})
- endif()
-
- target_include_directories(${_target} SYSTEM PRIVATE
- "${WDK_ROOT}/Include/${WDK_INC_VERSION}/shared"
- "${WDK_ROOT}/Include/${WDK_INC_VERSION}/km"
- "${WDK_ROOT}/Include/${WDK_INC_VERSION}/km/crt"
- )
-
- target_link_libraries(${_target} WDK::NTOSKRNL WDK::HAL WDK::WMILIB)
-
- if(DEFINED WDK_KMDF)
- target_include_directories(${_target} SYSTEM PRIVATE "${WDK_ROOT}/Include/wdf/kmdf/${WDK_KMDF}")
- endif()
-endfunction()
diff --git a/hyperdbg/dependencies/ia32-doc b/hyperdbg/dependencies/ia32-doc
index 2bc5284e..6ef251e3 160000
--- a/hyperdbg/dependencies/ia32-doc
+++ b/hyperdbg/dependencies/ia32-doc
@@ -1 +1 @@
-Subproject commit 2bc5284e04ff862220def160517bc72baf3d1a03
+Subproject commit 6ef251e3e58c759fda025c186ef0f44c556c14c1
diff --git a/hyperdbg/dependencies/keystone/include/keystone/arm.h b/hyperdbg/dependencies/keystone/include/keystone/arm.h
deleted file mode 100644
index f4d2489a..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/arm.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_ARM_H
-#define KEYSTONE_ARM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_arm {
- KS_ERR_ASM_ARM_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_ARM_MISSINGFEATURE,
- KS_ERR_ASM_ARM_MNEMONICFAIL,
-} ks_err_asm_arm;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/arm64.h b/hyperdbg/dependencies/keystone/include/keystone/arm64.h
deleted file mode 100644
index 7a7af411..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/arm64.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_ARM64_H
-#define KEYSTONE_ARM64_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_arm64 {
- KS_ERR_ASM_ARM64_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_ARM64_MISSINGFEATURE,
- KS_ERR_ASM_ARM64_MNEMONICFAIL,
-} ks_err_asm_arm64;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/evm.h b/hyperdbg/dependencies/keystone/include/keystone/evm.h
deleted file mode 100644
index 60ac408c..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/evm.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016-2018 */
-
-#ifndef KEYSTONE_EVM_H
-#define KEYSTONE_EVM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_evm {
- KS_ERR_ASM_EVM_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_EVM_MISSINGFEATURE,
- KS_ERR_ASM_EVM_MNEMONICFAIL,
-} ks_err_asm_evm;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/hexagon.h b/hyperdbg/dependencies/keystone/include/keystone/hexagon.h
deleted file mode 100644
index e6158123..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/hexagon.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_HEXAGON_H
-#define KEYSTONE_HEXAGON_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_hexagon {
- KS_ERR_ASM_HEXAGON_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_HEXAGON_MISSINGFEATURE,
- KS_ERR_ASM_HEXAGON_MNEMONICFAIL,
-} ks_err_asm_hexagon;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/keystone.h b/hyperdbg/dependencies/keystone/include/keystone/keystone.h
deleted file mode 100644
index 03fd54a3..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/keystone.h
+++ /dev/null
@@ -1,346 +0,0 @@
-/* Keystone Assembler Engine (www.keystone-engine.org) */
-/* By Nguyen Anh Quynh , 2016 */
-
-#ifndef KEYSTONE_ENGINE_H
-#define KEYSTONE_ENGINE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include
-#include
-#include
-#include
-
-#ifdef _MSC_VER // MSVC compiler
-#pragma warning(disable:4201)
-#pragma warning(disable:4100)
-#ifndef KEYSTONE_STATIC
-#define KEYSTONE_EXPORT __declspec(dllexport)
-#else
-#define KEYSTONE_EXPORT
-#endif
-#else
-#ifdef __GNUC__
-#include
-#ifndef KEYSTONE_STATIC
-#define KEYSTONE_EXPORT __attribute__((visibility("default")))
-#else
-#define KEYSTONE_EXPORT
-#endif
-#else
-#define KEYSTONE_EXPORT
-#endif
-#endif
-
-
-struct ks_struct;
-typedef struct ks_struct ks_engine;
-
-// Keystone API version
-#define KS_API_MAJOR 0
-#define KS_API_MINOR 9
-
-// Package version
-#define KS_VERSION_MAJOR KS_API_MAJOR
-#define KS_VERSION_MINOR KS_API_MINOR
-#define KS_VERSION_EXTRA 2
-
-/*
- Macro to create combined version which can be compared to
- result of ks_version() API.
-*/
-#define KS_MAKE_VERSION(major, minor) ((major << 8) + minor)
-
-// Architecture type
-typedef enum ks_arch {
- KS_ARCH_ARM = 1, // ARM architecture (including Thumb, Thumb-2)
- KS_ARCH_ARM64, // ARM-64, also called AArch64
- KS_ARCH_MIPS, // Mips architecture
- KS_ARCH_X86, // X86 architecture (including x86 & x86-64)
- KS_ARCH_PPC, // PowerPC architecture (currently unsupported)
- KS_ARCH_SPARC, // Sparc architecture
- KS_ARCH_SYSTEMZ, // SystemZ architecture (S390X)
- KS_ARCH_HEXAGON, // Hexagon architecture
- KS_ARCH_EVM, // Ethereum Virtual Machine architecture
- KS_ARCH_RISCV, // RISC-V architecture
- KS_ARCH_MAX,
-} ks_arch;
-
-// Mode type
-typedef enum ks_mode {
- KS_MODE_LITTLE_ENDIAN = 0, // little-endian mode (default mode)
- KS_MODE_BIG_ENDIAN = 1 << 30, // big-endian mode
- // arm / arm64
- KS_MODE_ARM = 1 << 0, // ARM mode
- KS_MODE_THUMB = 1 << 4, // THUMB mode (including Thumb-2)
- KS_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM
- // mips
- KS_MODE_MICRO = 1 << 4, // MicroMips mode
- KS_MODE_MIPS3 = 1 << 5, // Mips III ISA
- KS_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA
- KS_MODE_MIPS32 = 1 << 2, // Mips32 ISA
- KS_MODE_MIPS64 = 1 << 3, // Mips64 ISA
- // x86 / x64
- KS_MODE_16 = 1 << 1, // 16-bit mode
- KS_MODE_32 = 1 << 2, // 32-bit mode
- KS_MODE_64 = 1 << 3, // 64-bit mode
- // ppc
- KS_MODE_PPC32 = 1 << 2, // 32-bit mode
- KS_MODE_PPC64 = 1 << 3, // 64-bit mode
- KS_MODE_QPX = 1 << 4, // Quad Processing eXtensions mode
- //riscv
- KS_MODE_RISCV32 = 1 << 2, // 32-bit mode
- KS_MODE_RISCV64 = 1 << 3, // 64-bit mode
- // sparc
- KS_MODE_SPARC32 = 1 << 2, // 32-bit mode
- KS_MODE_SPARC64 = 1 << 3, // 64-bit mode
- KS_MODE_V9 = 1 << 4, // SparcV9 mode
-} ks_mode;
-
-// All generic errors related to input assembly >= KS_ERR_ASM
-#define KS_ERR_ASM 128
-
-// All architecture-specific errors related to input assembly >= KS_ERR_ASM_ARCH
-#define KS_ERR_ASM_ARCH 512
-
-// All type of errors encountered by Keystone API.
-typedef enum ks_err {
- KS_ERR_OK = 0, // No error: everything was fine
- KS_ERR_NOMEM, // Out-Of-Memory error: ks_open(), ks_emulate()
- KS_ERR_ARCH, // Unsupported architecture: ks_open()
- KS_ERR_HANDLE, // Invalid handle
- KS_ERR_MODE, // Invalid/unsupported mode: ks_open()
- KS_ERR_VERSION, // Unsupported version (bindings)
- KS_ERR_OPT_INVALID, // Unsupported option
-
- // generic input assembly errors - parser specific
- KS_ERR_ASM_EXPR_TOKEN = KS_ERR_ASM, // unknown token in expression
- KS_ERR_ASM_DIRECTIVE_VALUE_RANGE, // literal value out of range for directive
- KS_ERR_ASM_DIRECTIVE_ID, // expected identifier in directive
- KS_ERR_ASM_DIRECTIVE_TOKEN, // unexpected token in directive
- KS_ERR_ASM_DIRECTIVE_STR, // expected string in directive
- KS_ERR_ASM_DIRECTIVE_COMMA, // expected comma in directive
- KS_ERR_ASM_DIRECTIVE_RELOC_NAME, // expected relocation name in directive
- KS_ERR_ASM_DIRECTIVE_RELOC_TOKEN, // unexpected token in .reloc directive
- KS_ERR_ASM_DIRECTIVE_FPOINT, // invalid floating point in directive
- KS_ERR_ASM_DIRECTIVE_UNKNOWN, // unknown directive
- KS_ERR_ASM_DIRECTIVE_EQU, // invalid equal directive
- KS_ERR_ASM_DIRECTIVE_INVALID, // (generic) invalid directive
- KS_ERR_ASM_VARIANT_INVALID, // invalid variant
- KS_ERR_ASM_EXPR_BRACKET, // brackets expression not supported on this target
- KS_ERR_ASM_SYMBOL_MODIFIER, // unexpected symbol modifier following '@'
- KS_ERR_ASM_SYMBOL_REDEFINED, // invalid symbol redefinition
- KS_ERR_ASM_SYMBOL_MISSING, // cannot find a symbol
- KS_ERR_ASM_RPAREN, // expected ')' in parentheses expression
- KS_ERR_ASM_STAT_TOKEN, // unexpected token at start of statement
- KS_ERR_ASM_UNSUPPORTED, // unsupported token yet
- KS_ERR_ASM_MACRO_TOKEN, // unexpected token in macro instantiation
- KS_ERR_ASM_MACRO_PAREN, // unbalanced parentheses in macro argument
- KS_ERR_ASM_MACRO_EQU, // expected '=' after formal parameter identifier
- KS_ERR_ASM_MACRO_ARGS, // too many positional arguments
- KS_ERR_ASM_MACRO_LEVELS_EXCEED, // macros cannot be nested more than 20 levels deep
- KS_ERR_ASM_MACRO_STR, // invalid macro string
- KS_ERR_ASM_MACRO_INVALID, // invalid macro (generic error)
- KS_ERR_ASM_ESC_BACKSLASH, // unexpected backslash at end of escaped string
- KS_ERR_ASM_ESC_OCTAL, // invalid octal escape sequence (out of range)
- KS_ERR_ASM_ESC_SEQUENCE, // invalid escape sequence (unrecognized character)
- KS_ERR_ASM_ESC_STR, // broken escape string
- KS_ERR_ASM_TOKEN_INVALID, // invalid token
- KS_ERR_ASM_INSN_UNSUPPORTED, // this instruction is unsupported in this mode
- KS_ERR_ASM_FIXUP_INVALID, // invalid fixup
- KS_ERR_ASM_LABEL_INVALID, // invalid label
- KS_ERR_ASM_FRAGMENT_INVALID, // invalid fragment
-
- // generic input assembly errors - architecture specific
- KS_ERR_ASM_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_MISSINGFEATURE,
- KS_ERR_ASM_MNEMONICFAIL,
-} ks_err;
-
-// Resolver callback to provide value for a missing symbol in @symbol.
-// To handle a symbol, the resolver must put value of the symbol in @value,
-// then returns True.
-// If we do not resolve a missing symbol, this function must return False.
-// In that case, ks_asm() would eventually return with error KS_ERR_ASM_SYMBOL_MISSING.
-
-// To register the resolver, pass its function address to ks_option(), using
-// option KS_OPT_SYM_RESOLVER. For example, see samples/sample.c.
-typedef bool (*ks_sym_resolver)(const char *symbol, uint64_t *value);
-
-// Runtime option for the Keystone engine
-typedef enum ks_opt_type {
- KS_OPT_SYNTAX = 1, // Choose syntax for input assembly
- KS_OPT_SYM_RESOLVER, // Set symbol resolver callback
-} ks_opt_type;
-
-
-// Runtime option value (associated with ks_opt_type above)
-typedef enum ks_opt_value {
- KS_OPT_SYNTAX_INTEL = 1 << 0, // X86 Intel syntax - default on X86 (KS_OPT_SYNTAX).
- KS_OPT_SYNTAX_ATT = 1 << 1, // X86 ATT asm syntax (KS_OPT_SYNTAX).
- KS_OPT_SYNTAX_NASM = 1 << 2, // X86 Nasm syntax (KS_OPT_SYNTAX).
- KS_OPT_SYNTAX_MASM = 1 << 3, // X86 Masm syntax (KS_OPT_SYNTAX) - unsupported yet.
- KS_OPT_SYNTAX_GAS = 1 << 4, // X86 GNU GAS syntax (KS_OPT_SYNTAX).
- KS_OPT_SYNTAX_RADIX16 = 1 << 5, // All immediates are in hex format (i.e 12 is 0x12)
-} ks_opt_value;
-
-
-#include "arm64.h"
-#include "arm.h"
-#include "evm.h"
-#include "hexagon.h"
-#include "mips.h"
-#include "ppc.h"
-#include "riscv.h"
-#include "sparc.h"
-#include "systemz.h"
-#include "x86.h"
-
-/*
- Return combined API version & major and minor version numbers.
-
- @major: major number of API version
- @minor: minor number of API version
-
- @return hexical number as (major << 8 | minor), which encodes both
- major & minor versions.
- NOTE: This returned value can be compared with version number made
- with macro KS_MAKE_VERSION
-
- For example, second API version would return 1 in @major, and 1 in @minor
- The return value would be 0x0101
-
- NOTE: if you only care about returned value, but not major and minor values,
- set both @major & @minor arguments to NULL.
-*/
-KEYSTONE_EXPORT
-unsigned int ks_version(unsigned int *major, unsigned int *minor);
-
-
-/*
- Determine if the given architecture is supported by this library.
-
- @arch: architecture type (KS_ARCH_*)
-
- @return True if this library supports the given arch.
-*/
-KEYSTONE_EXPORT
-bool ks_arch_supported(ks_arch arch);
-
-
-/*
- Create new instance of Keystone engine.
-
- @arch: architecture type (KS_ARCH_*)
- @mode: hardware mode. This is combined of KS_MODE_*
- @ks: pointer to ks_engine, which will be updated at return time
-
- @return KS_ERR_OK on success, or other value on failure (refer to ks_err enum
- for detailed error).
-*/
-KEYSTONE_EXPORT
-ks_err ks_open(ks_arch arch, int mode, ks_engine **ks);
-
-
-/*
- Close KS instance: MUST do to release the handle when it is not used anymore.
- NOTE: this must be called only when there is no longer usage of Keystone.
- The reason is the this API releases some cached memory, thus access to any
- Keystone API after ks_close() might crash your application.
- After this, @ks is invalid, and nolonger usable.
-
- @ks: pointer to a handle returned by ks_open()
-
- @return KS_ERR_OK on success, or other value on failure (refer to ks_err enum
- for detailed error).
-*/
-KEYSTONE_EXPORT
-ks_err ks_close(ks_engine *ks);
-
-
-/*
- Report the last error number when some API function fail.
- Like glibc's errno, ks_errno might not retain its old error once accessed.
-
- @ks: handle returned by ks_open()
-
- @return: error code of ks_err enum type (KS_ERR_*, see above)
-*/
-KEYSTONE_EXPORT
-ks_err ks_errno(ks_engine *ks);
-
-
-/*
- Return a string describing given error code.
-
- @code: error code (see KS_ERR_* above)
-
- @return: returns a pointer to a string that describes the error code
- passed in the argument @code
- */
-KEYSTONE_EXPORT
-const char *ks_strerror(ks_err code);
-
-
-/*
- Set option for Keystone engine at runtime
-
- @ks: handle returned by ks_open()
- @type: type of option to be set. See ks_opt_type
- @value: option value corresponding with @type
-
- @return: KS_ERR_OK on success, or other value on failure.
- Refer to ks_err enum for detailed error.
-*/
-KEYSTONE_EXPORT
-ks_err ks_option(ks_engine *ks, ks_opt_type type, size_t value);
-
-
-/*
- Assemble a string given its the buffer, size, start address and number
- of instructions to be decoded.
- This API dynamically allocate memory to contain assembled instruction.
- Resulted array of bytes containing the machine code is put into @*encoding
-
- NOTE 1: this API will automatically determine memory needed to contain
- output bytes in *encoding.
-
- NOTE 2: caller must free the allocated memory itself to avoid memory leaking.
-
- @ks: handle returned by ks_open()
- @str: NULL-terminated assembly string. Use ; or \n to separate statements.
- @address: address of the first assembly instruction, or 0 to ignore.
- @encoding: array of bytes containing encoding of input assembly string.
- NOTE: *encoding will be allocated by this function, and should be freed
- with ks_free() function.
- @encoding_size: size of *encoding
- @stat_count: number of statements successfully processed
-
- @return: 0 on success, or -1 on failure.
-
- On failure, call ks_errno() for error code.
-*/
-KEYSTONE_EXPORT
-int ks_asm(ks_engine *ks,
- const char *string,
- uint64_t address,
- unsigned char **encoding, size_t *encoding_size,
- size_t *stat_count);
-
-
-/*
- Free memory allocated by ks_asm()
-
- @p: memory allocated in @encoding argument of ks_asm()
-*/
-KEYSTONE_EXPORT
-void ks_free(unsigned char *p);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/mips.h b/hyperdbg/dependencies/keystone/include/keystone/mips.h
deleted file mode 100644
index e71c553c..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/mips.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_MIPS_H
-#define KEYSTONE_MIPS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_mips {
- KS_ERR_ASM_MIPS_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_MIPS_MISSINGFEATURE,
- KS_ERR_ASM_MIPS_MNEMONICFAIL,
-} ks_err_asm_mips;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/ppc.h b/hyperdbg/dependencies/keystone/include/keystone/ppc.h
deleted file mode 100644
index 39a602c2..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/ppc.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_PPC_H
-#define KEYSTONE_PPC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_ppc {
- KS_ERR_ASM_PPC_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_PPC_MISSINGFEATURE,
- KS_ERR_ASM_PPC_MNEMONICFAIL,
-} ks_err_asm_ppc;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/riscv.h b/hyperdbg/dependencies/keystone/include/keystone/riscv.h
deleted file mode 100644
index 0910f986..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/riscv.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-/* Added by Mark Juvan, 2023*/
-#ifndef KEYSTONE_RISCV_H
-#define KEYSTONE_RISCV_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_riscv {
- KS_ERR_ASM_RISCV_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_RISCV_MISSINGFEATURE,
- KS_ERR_ASM_RISCV_MNEMONICFAIL,
-} ks_err_asm_riscv;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/sparc.h b/hyperdbg/dependencies/keystone/include/keystone/sparc.h
deleted file mode 100644
index e49c4264..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/sparc.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_SPARC_H
-#define KEYSTONE_SPARC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_sparc {
- KS_ERR_ASM_SPARC_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_SPARC_MISSINGFEATURE,
- KS_ERR_ASM_SPARC_MNEMONICFAIL,
-} ks_err_asm_sparc;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/systemz.h b/hyperdbg/dependencies/keystone/include/keystone/systemz.h
deleted file mode 100644
index ec2b07a4..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/systemz.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_SYSTEMZ_H
-#define KEYSTONE_SYSTEMZ_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_systemz {
- KS_ERR_ASM_SYSTEMZ_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_SYSTEMZ_MISSINGFEATURE,
- KS_ERR_ASM_SYSTEMZ_MNEMONICFAIL,
-} ks_err_asm_systemz;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/keystone/include/keystone/x86.h b/hyperdbg/dependencies/keystone/include/keystone/x86.h
deleted file mode 100644
index 1fac684e..00000000
--- a/hyperdbg/dependencies/keystone/include/keystone/x86.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Keystone Assembler Engine */
-/* By Nguyen Anh Quynh, 2016 */
-
-#ifndef KEYSTONE_X86_H
-#define KEYSTONE_X86_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "keystone.h"
-
-typedef enum ks_err_asm_x86 {
- KS_ERR_ASM_X86_INVALIDOPERAND = KS_ERR_ASM_ARCH,
- KS_ERR_ASM_X86_MISSINGFEATURE,
- KS_ERR_ASM_X86_MNEMONICFAIL,
-} ks_err_asm_x86;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/hyperdbg/dependencies/libipt/intel-pt.h b/hyperdbg/dependencies/libipt/intel-pt.h
deleted file mode 100644
index 4b90482c..00000000
--- a/hyperdbg/dependencies/libipt/intel-pt.h
+++ /dev/null
@@ -1,3177 +0,0 @@
-/*
- * Copyright (C) 2013-2026 Intel Corporation
- * SPDX-License-Identifier: BSD-3-Clause
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef INTEL_PT_H
-#define INTEL_PT_H
-
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Intel(R) Processor Trace (Intel PT) decoder library.
- *
- * This file is logically structured into the following sections:
- *
- * - Version
- * - Errors
- * - Configuration
- * - Packet encoder / decoder
- * - Event decoder
- * - Query decoder
- * - Traced image
- * - Instruction flow decoder
- * - Block decoder
- */
-
-
-
-struct pt_encoder;
-struct pt_packet_decoder;
-struct pt_event_decoder;
-struct pt_query_decoder;
-struct pt_insn_decoder;
-struct pt_block_decoder;
-
-
-
-/* A macro to mark functions as exported. */
-#ifndef pt_export
-# if defined(__GNUC__)
-# define pt_export __attribute__((visibility("default")))
-# elif defined(_MSC_VER)
-# define pt_export __declspec(dllimport)
-# else
-# error "unknown compiler"
-# endif
-#endif
-
-
-
-/* Version. */
-
-
-/** The header version. */
-#define LIBIPT_VERSION_MAJOR 2
-#define LIBIPT_VERSION_MINOR 3
-#define LIBIPT_VERSION_PATCH 0
-
-#define LIBIPT_VERSION ((LIBIPT_VERSION_MAJOR << 8) + LIBIPT_VERSION_MINOR)
-
-
-/** The library version. */
-struct pt_version {
- /** Major version number. */
- uint8_t major;
-
- /** Minor version number. */
- uint8_t minor;
-
- /** Patch level. */
- uint16_t patch;
-
- /** Build number. */
- uint32_t build;
-
- /** Version extension. */
- const char *ext;
-};
-
-
-/** Return the library version. */
-extern pt_export struct pt_version pt_library_version(void);
-
-
-
-/* Errors. */
-
-
-
-/** Error codes. */
-enum pt_error_code {
- /* No error. Everything is OK. */
- pte_ok,
-
- /* Internal decoder error. */
- pte_internal,
-
- /* Invalid argument. */
- pte_invalid,
-
- /* Decoder out of sync. */
- pte_nosync,
-
- /* Unknown opcode. */
- pte_bad_opc,
-
- /* Unknown payload. */
- pte_bad_packet,
-
- /* Unexpected packet context. */
- pte_bad_context,
-
- /* Decoder reached end of trace stream. */
- pte_eos,
-
- /* No packet matching the query to be found. */
- pte_bad_query,
-
- /* Decoder out of memory. */
- pte_nomem,
-
- /* Bad configuration. */
- pte_bad_config,
-
- /* There is no IP. */
- pte_noip,
-
- /* The IP has been suppressed. */
- pte_ip_suppressed,
-
- /* There is no memory mapped at the requested address. */
- pte_nomap,
-
- /* An instruction could not be decoded. */
- pte_bad_insn,
-
- /* No wall-clock time is available. */
- pte_no_time,
-
- /* No core:bus ratio available. */
- pte_no_cbr,
-
- /* Bad traced image. */
- pte_bad_image,
-
- /* A locking error. */
- pte_bad_lock,
-
- /* The requested feature is not supported. */
- pte_not_supported,
-
- /* The return address stack is empty. */
- pte_retstack_empty,
-
- /* A compressed return is not indicated correctly by a taken branch. */
- pte_bad_retcomp,
-
- /* The current decoder state does not match the state in the trace. */
- pte_bad_status_update,
-
- /* The trace did not contain an expected enabled event. */
- pte_no_enable,
-
- /* An event was ignored. */
- pte_event_ignored,
-
- /* Something overflowed. */
- pte_overflow,
-
- /* A file handling error. */
- pte_bad_file,
-
- /* Unknown cpu. */
- pte_bad_cpu
-};
-
-
-/** Decode a function return value into an pt_error_code. */
-static inline enum pt_error_code pt_errcode(int status)
-{
- return (status >= 0) ? pte_ok : (enum pt_error_code) -status;
-}
-
-/** Return a human readable error string. */
-extern pt_export const char *pt_errstr(enum pt_error_code);
-
-
-
-/* Configuration. */
-
-
-
-/** A cpu vendor. */
-enum pt_cpu_vendor {
- pcv_unknown,
- pcv_intel
-};
-
-/** A cpu identifier. */
-struct pt_cpu {
- /** The cpu vendor. */
- enum pt_cpu_vendor vendor;
-
- /** The cpu family. */
- uint16_t family;
-
- /** The cpu model. */
- uint8_t model;
-
- /** The stepping. */
- uint8_t stepping;
-};
-
-/** A collection of Intel PT errata. */
-struct pt_errata {
- /** BDM70: Intel(R) Processor Trace PSB+ Packets May Contain
- * Unexpected Packets.
- *
- * Same as: SKD024, SKL021, KBL021.
- *
- * Some Intel Processor Trace packets should be issued only between
- * TIP.PGE and TIP.PGD packets. Due to this erratum, when a TIP.PGE
- * packet is generated it may be preceded by a PSB+ that incorrectly
- * includes FUP and MODE.Exec packets.
- */
- uint32_t bdm70:1;
-
- /** BDM64: An Incorrect LBR or Intel(R) Processor Trace Packet May Be
- * Recorded Following a Transactional Abort.
- *
- * Use of Intel(R) Transactional Synchronization Extensions (Intel(R)
- * TSX) may result in a transactional abort. If an abort occurs
- * immediately following a branch instruction, an incorrect branch
- * target may be logged in an LBR (Last Branch Record) or in an Intel(R)
- * Processor Trace (Intel(R) PT) packet before the LBR or Intel PT
- * packet produced by the abort.
- */
- uint32_t bdm64:1;
-
- /** SKD007: Intel(R) PT Buffer Overflow May Result in Incorrect Packets.
- *
- * Same as: SKL049, KBL041.
- *
- * Under complex micro-architectural conditions, an Intel PT (Processor
- * Trace) OVF (Overflow) packet may be issued after the first byte of a
- * multi-byte CYC (Cycle Count) packet, instead of any remaining bytes
- * of the CYC.
- */
- uint32_t skd007:1;
-
- /** SKD022: VM Entry That Clears TraceEn May Generate a FUP.
- *
- * Same as: SKL024, KBL023.
- *
- * If VM entry clears Intel(R) PT (Intel Processor Trace)
- * IA32_RTIT_CTL.TraceEn (MSR 570H, bit 0) while PacketEn is 1 then a
- * FUP (Flow Update Packet) will precede the TIP.PGD (Target IP Packet,
- * Packet Generation Disable). VM entry can clear TraceEn if the
- * VM-entry MSR-load area includes an entry for the IA32_RTIT_CTL MSR.
- */
- uint32_t skd022:1;
-
- /** SKD010: Intel(R) PT FUP May be Dropped After OVF.
- *
- * Same as: SKD014, SKL033, KBL030.
- *
- * Some Intel PT (Intel Processor Trace) OVF (Overflow) packets may not
- * be followed by a FUP (Flow Update Packet) or TIP.PGE (Target IP
- * Packet, Packet Generation Enable).
- */
- uint32_t skd010:1;
-
- /** SKL014: Intel(R) PT TIP.PGD May Not Have Target IP Payload.
- *
- * Same as: KBL014.
- *
- * When Intel PT (Intel Processor Trace) is enabled and a direct
- * unconditional branch clears IA32_RTIT_STATUS.FilterEn (MSR 571H, bit
- * 0), due to this erratum, the resulting TIP.PGD (Target IP Packet,
- * Packet Generation Disable) may not have an IP payload with the target
- * IP.
- */
- uint32_t skl014:1;
-
- /** APL12: Intel(R) PT OVF May Be Followed By An Unexpected FUP Packet.
- *
- * Certain Intel PT (Processor Trace) packets including FUPs (Flow
- * Update Packets), should be issued only between TIP.PGE (Target IP
- * Packet - Packet Generation Enable) and TIP.PGD (Target IP Packet -
- * Packet Generation Disable) packets. When outside a TIP.PGE/TIP.PGD
- * pair, as a result of IA32_RTIT_STATUS.FilterEn[0] (MSR 571H) being
- * cleared, an OVF (Overflow) packet may be unexpectedly followed by a
- * FUP.
- */
- uint32_t apl12:1;
-
- /** APL11: Intel(R) PT OVF Packet May Be Followed by TIP.PGD Packet
- *
- * If Intel PT (Processor Trace) encounters an internal buffer overflow
- * and generates an OVF (Overflow) packet just as IA32_RTIT_CTL (MSR
- * 570H) bit 0 (TraceEn) is cleared, or during a far transfer that
- * causes IA32_RTIT_STATUS.ContextEn[1] (MSR 571H) to be cleared, the
- * OVF may be followed by a TIP.PGD (Target Instruction Pointer - Packet
- * Generation Disable) packet.
- */
- uint32_t apl11:1;
-
- /** SKL168: Intel(R) PT CYC Packets Can be Dropped When Immediately
- * Preceding PSB
- *
- * Due to a rare microarchitectural condition, generation of an Intel
- * PT (Processor Trace) PSB (Packet Stream Boundary) packet can cause a
- * single CYC (Cycle Count) packet, possibly along with an associated
- * MTC (Mini Time Counter) packet, to be dropped.
- */
- uint32_t skl168:1;
-
- /** SKZ84: Use of VMX TSC Scaling or TSC Offsetting Will Result in
- * Corrupted Intel PT Packets
- *
- * When Intel(R) PT (Processor Trace) is enabled within a VMX (Virtual
- * Machine Extensions) guest, and TSC (Time Stamp Counter) offsetting
- * or TSC scaling is enabled for that guest, by setting primary
- * processor-based execution control bit 3 or secondary processor-based
- * execution control bit 25, respectively, in the VMCS (Virtual Machine
- * Control Structure) for that guest, any TMA (TSC(MTC Alignment)
- * packet generated will have corrupted values in the CTC (Core Timer
- * Copy) and FastCounter fields. Additionally, the corrupted TMA
- * packet will be followed by a bogus data byte.
- */
- uint32_t skz84:1;
-
- /* Reserve a few bytes for the future. */
- uint32_t reserved[15];
-};
-
-/** A collection of decoder-specific configuration flags. */
-struct pt_conf_flags {
- /** The decoder variant. */
- union {
- /** Flags for the block decoder. */
- struct {
- /** End a block after a call instruction. */
- uint32_t end_on_call:1;
-
- /** Enable tick events for timing updates. */
- uint32_t enable_tick_events:1;
-
- /** End a block after a jump instruction. */
- uint32_t end_on_jump:1;
-
-#if (LIBIPT_VERSION >= 0x201)
- /** Preserve timing calibration on overflow. */
- uint32_t keep_tcal_on_ovf:1;
-
- /** Enable iflags events.
- *
- * Use this only when Event Tracing was enabled via
- * IA32_RTIT_CTL[31].
- */
- uint32_t enable_iflags_events:1;
-#endif
- } block;
-
- /** Flags for the instruction flow decoder. */
- struct {
- /** Enable tick events for timing updates. */
- uint32_t enable_tick_events:1;
-
-#if (LIBIPT_VERSION >= 0x201)
- /** Preserve timing calibration on overflow. */
- uint32_t keep_tcal_on_ovf:1;
-
- /** Enable iflags events.
- *
- * Use this only when Event Tracing was enabled via
- * IA32_RTIT_CTL[31].
- */
- uint32_t enable_iflags_events:1;
-#endif
- } insn;
-
-#if (LIBIPT_VERSION >= 0x201)
- /** Flags for the query decoder. */
- struct {
- /** Preserve timing calibration on overflow. */
- uint32_t keep_tcal_on_ovf:1;
-
- /** Enable iflags events.
- *
- * Use this only when Event Tracing was enabled via
- * IA32_RTIT_CTL[31].
- */
- uint32_t enable_iflags_events:1;
- } query;
-
- /** Flags for the event decoder. */
- struct {
- /** Preserve timing calibration on overflow. */
- uint32_t keep_tcal_on_ovf:1;
-
- /** Enable iflags events.
- *
- * Use this only when Event Tracing was enabled via
- * IA32_RTIT_CTL[31].
- */
- uint32_t enable_iflags_events:1;
- } event;
-#endif /* (LIBIPT_VERSION >= 0x201) */
-
- /* Reserve a few bytes for future extensions. */
- uint32_t reserved[4];
- } variant;
-};
-
-/** The address filter configuration. */
-struct pt_conf_addr_filter {
- /** The address filter configuration.
- *
- * This corresponds to the respective fields in IA32_RTIT_CTL MSR.
- */
- union {
- uint64_t addr_cfg;
-
- struct {
- uint32_t addr0_cfg:4;
- uint32_t addr1_cfg:4;
- uint32_t addr2_cfg:4;
- uint32_t addr3_cfg:4;
- } ctl;
- } config;
-
- /** The address ranges configuration.
- *
- * This corresponds to the IA32_RTIT_ADDRn_A/B MSRs.
- */
- uint64_t addr0_a;
- uint64_t addr0_b;
- uint64_t addr1_a;
- uint64_t addr1_b;
- uint64_t addr2_a;
- uint64_t addr2_b;
- uint64_t addr3_a;
- uint64_t addr3_b;
-
- /* Reserve some space. */
- uint64_t reserved[8];
-};
-
-/** An unknown packet. */
-struct pt_packet_unknown;
-
-/** An Intel PT decoder configuration.
- */
-struct pt_config {
- /** The size of the config structure in bytes. */
- size_t size;
-
- /** The trace buffer begin address. */
- uint8_t *begin;
-
- /** The trace buffer end address. */
- uint8_t *end;
-
- /** An optional callback for handling unknown packets.
- *
- * If \@callback is not NULL, it is called for any unknown opcode.
- */
- struct {
- /** The callback function.
- *
- * It shall decode the packet at \@pos into \@unknown.
- * It shall return the number of bytes read upon success.
- * It shall return a negative pt_error_code otherwise.
- * The below context is passed as \@context.
- */
- int (*callback)(struct pt_packet_unknown *unknown,
- const struct pt_config *config,
- const uint8_t *pos, void *context);
-
- /** The user-defined context for this configuration. */
- void *context;
- } decode;
-
- /** The cpu on which Intel PT has been recorded. */
- struct pt_cpu cpu;
-
- /** The errata to apply when encoding or decoding Intel PT. */
- struct pt_errata errata;
-
- /* The CTC frequency.
- *
- * This is only required if MTC packets have been enabled in
- * IA32_RTIT_CTRL.MTCEn.
- */
- uint32_t cpuid_0x15_eax, cpuid_0x15_ebx;
-
- /* The MTC frequency as defined in IA32_RTIT_CTL.MTCFreq.
- *
- * This is only required if MTC packets have been enabled in
- * IA32_RTIT_CTRL.MTCEn.
- */
- uint8_t mtc_freq;
-
- /* The nominal frequency as defined in MSR_PLATFORM_INFO[15:8].
- *
- * This is only required if CYC packets have been enabled in
- * IA32_RTIT_CTRL.CYCEn.
- *
- * If zero, timing calibration will only be able to use MTC and CYC
- * packets.
- *
- * If not zero, timing calibration will also be able to use CBR
- * packets.
- */
- uint8_t nom_freq;
-
- /** A collection of decoder-specific flags. */
- struct pt_conf_flags flags;
-
- /** The address filter configuration. */
- struct pt_conf_addr_filter addr_filter;
-};
-
-
-/** Zero-initialize an Intel PT configuration. */
-static inline void pt_config_init(struct pt_config *config)
-{
- memset(config, 0, sizeof(*config));
-
- config->size = sizeof(*config);
-}
-
-/** Determine errata for a given cpu.
- *
- * Updates \@errata based on \@cpu.
- *
- * Returns 0 on success, a negative error code otherwise.
- * Returns -pte_invalid if \@errata or \@cpu is NULL.
- * Returns -pte_bad_cpu if \@cpu is not known.
- */
-extern pt_export int pt_cpu_errata(struct pt_errata *errata,
- const struct pt_cpu *cpu);
-
-
-
-/* Packet encoder / decoder. */
-
-
-
-/** Intel PT packet types. */
-enum pt_packet_type {
- /* An invalid packet. */
- ppt_invalid,
-
- /* A packet decodable by the optional decoder callback. */
- ppt_unknown,
-
- /* Actual packets supported by this library. */
- ppt_pad,
- ppt_psb,
- ppt_psbend,
- ppt_fup,
- ppt_tip,
- ppt_tip_pge,
- ppt_tip_pgd,
- ppt_tnt_8,
- ppt_tnt_64,
- ppt_mode,
- ppt_pip,
- ppt_vmcs,
- ppt_cbr,
- ppt_tsc,
- ppt_tma,
- ppt_mtc,
- ppt_cyc,
- ppt_stop,
- ppt_ovf,
- ppt_mnt,
- ppt_exstop,
- ppt_mwait,
- ppt_pwre,
- ppt_pwrx,
- ppt_ptw,
-#if (LIBIPT_VERSION >= 0x201)
- ppt_cfe,
- ppt_evd,
-#endif
-#if (LIBIPT_VERSION >= 0x202)
- ppt_trig,
-#endif
-};
-
-/** The IP compression. */
-enum pt_ip_compression {
- /* The bits encode the payload size and the encoding scheme.
- *
- * No payload. The IP has been suppressed.
- */
- pt_ipc_suppressed = 0x0,
-
- /* Payload: 16 bits. Update last IP. */
- pt_ipc_update_16 = 0x01,
-
- /* Payload: 32 bits. Update last IP. */
- pt_ipc_update_32 = 0x02,
-
- /* Payload: 48 bits. Sign extend to full address. */
- pt_ipc_sext_48 = 0x03,
-
- /* Payload: 48 bits. Update last IP. */
- pt_ipc_update_48 = 0x04,
-
- /* Payload: 64 bits. Full address. */
- pt_ipc_full = 0x06
-};
-
-/** An execution mode. */
-enum pt_exec_mode {
- ptem_unknown,
- ptem_16bit,
- ptem_32bit,
- ptem_64bit
-};
-
-/** Mode packet leaves. */
-enum pt_mode_leaf {
- pt_mol_exec = 0x00,
- pt_mol_tsx = 0x20
-};
-
-/** A TNT-8 or TNT-64 packet. */
-struct pt_packet_tnt {
- /** TNT payload bit size. */
- uint8_t bit_size;
-
- /** TNT payload excluding stop bit. */
- uint64_t payload;
-};
-
-/** A packet with IP payload. */
-struct pt_packet_ip {
- /** IP compression. */
- enum pt_ip_compression ipc;
-
- /** Zero-extended payload ip. */
- uint64_t ip;
-};
-
-/** A mode.exec packet. */
-struct pt_packet_mode_exec {
- /** The mode.exec csl bit. */
- uint32_t csl:1;
-
- /** The mode.exec csd bit. */
- uint32_t csd:1;
-
-#if (LIBIPT_VERSION >= 0x201)
- /** The mode.exec if bit.
- *
- * Enable Event Tracing to get updates when IF changes.
- */
- uint32_t iflag:1;
-#endif
-};
-
-static inline enum pt_exec_mode
-pt_get_exec_mode(const struct pt_packet_mode_exec *packet)
-{
- if (packet->csl)
- return packet->csd ? ptem_unknown : ptem_64bit;
- else
- return packet->csd ? ptem_32bit : ptem_16bit;
-}
-
-static inline struct pt_packet_mode_exec
-pt_set_exec_mode(enum pt_exec_mode mode)
-{
- struct pt_packet_mode_exec packet;
-
- memset(&packet, 0, sizeof(packet));
- switch (mode) {
- default:
- packet.csl = 1;
- packet.csd = 1;
- break;
-
- case ptem_64bit:
- packet.csl = 1;
- break;
-
- case ptem_32bit:
- packet.csd = 1;
- break;
-
- case ptem_16bit:
- break;
- }
-
- return packet;
-}
-
-/** A mode.tsx packet. */
-struct pt_packet_mode_tsx {
- /** The mode.tsx intx bit. */
- uint32_t intx:1;
-
- /** The mode.tsx abrt bit. */
- uint32_t abrt:1;
-};
-
-/** A mode packet. */
-struct pt_packet_mode {
- /** Mode leaf. */
- enum pt_mode_leaf leaf;
-
- /** Mode bits. */
- union {
- /** Packet: mode.exec. */
- struct pt_packet_mode_exec exec;
-
- /** Packet: mode.tsx. */
- struct pt_packet_mode_tsx tsx;
- } bits;
-};
-
-/** A PIP packet. */
-struct pt_packet_pip {
- /** The CR3 value. */
- uint64_t cr3;
-
- /** The non-root bit. */
- uint32_t nr:1;
-};
-
-/** A TSC packet. */
-struct pt_packet_tsc {
- /** The TSC value. */
- uint64_t tsc;
-};
-
-/** A CBR packet. */
-struct pt_packet_cbr {
- /** The core/bus cycle ratio. */
- uint8_t ratio;
-};
-
-/** A TMA packet. */
-struct pt_packet_tma {
- /** The crystal clock tick counter value. */
- uint16_t ctc;
-
- /** The fast counter value. */
- uint16_t fc;
-};
-
-/** A MTC packet. */
-struct pt_packet_mtc {
- /** The crystal clock tick counter value. */
- uint8_t ctc;
-};
-
-/** A CYC packet. */
-struct pt_packet_cyc {
- /** The cycle counter value. */
- uint64_t value;
-};
-
-/** A VMCS packet. */
-struct pt_packet_vmcs {
- /* The VMCS Base Address (i.e. the shifted payload). */
- uint64_t base;
-};
-
-/** A MNT packet. */
-struct pt_packet_mnt {
- /** The raw payload. */
- uint64_t payload;
-};
-
-/** A EXSTOP packet. */
-struct pt_packet_exstop {
- /** A flag specifying the binding of the packet:
- *
- * set: binds to the next FUP.
- * clear: standalone.
- */
- uint32_t ip:1;
-};
-
-/** A MWAIT packet. */
-struct pt_packet_mwait {
- /** The MWAIT hints (EAX). */
- uint32_t hints;
-
- /** The MWAIT extensions (ECX). */
- uint32_t ext;
-};
-
-/** A PWRE packet. */
-struct pt_packet_pwre {
- /** The resolved thread C-state. */
- uint8_t state;
-
- /** The resolved thread sub C-state. */
- uint8_t sub_state;
-
- /** A flag indicating whether the C-state entry was initiated by h/w. */
- uint32_t hw:1;
-};
-
-/** A PWRX packet. */
-struct pt_packet_pwrx {
- /** The core C-state at the time of the wake. */
- uint8_t last;
-
- /** The deepest core C-state achieved during sleep. */
- uint8_t deepest;
-
- /** The wake reason:
- *
- * - due to external interrupt received.
- */
- uint32_t interrupt:1;
-
- /** - due to store to monitored address. */
- uint32_t store:1;
-
- /** - due to h/w autonomous condition such as HDC. */
- uint32_t autonomous:1;
-};
-
-/** A PTW packet. */
-struct pt_packet_ptw {
- /** The raw payload. */
- uint64_t payload;
-
- /** The payload size as encoded in the packet. */
- uint8_t plc;
-
- /** A flag saying whether a FUP is following PTW that provides
- * the IP of the corresponding PTWRITE instruction.
- */
- uint32_t ip:1;
-};
-
-static inline int pt_ptw_size(uint8_t plc)
-{
- switch (plc) {
- case 0:
- return 4;
-
- case 1:
- return 8;
-
- case 2:
- case 3:
- return -pte_bad_packet;
- }
-
- return -pte_internal;
-}
-
-#if (LIBIPT_VERSION >= 0x201)
-/* Control-flow event types. */
-enum pt_cfe_type {
- pt_cfe_intr = 0x01,
- pt_cfe_iret = 0x02,
- pt_cfe_smi = 0x03,
- pt_cfe_rsm = 0x04,
- pt_cfe_sipi = 0x05,
- pt_cfe_init = 0x06,
- pt_cfe_vmentry = 0x07,
- pt_cfe_vmexit = 0x08,
- pt_cfe_vmexit_intr = 0x09,
- pt_cfe_shutdown = 0x0a,
- pt_cfe_uintr = 0x0c,
- pt_cfe_uiret = 0x0d,
-#if (LIBIPT_VERSION >= 0x202)
- pt_cfe_swintr = 0x0e,
- pt_cfe_syscall = 0x0f,
-#endif
-};
-
-/* Interrupt vectors defined in Table 6-1 in §6.5 of Vol.1 of the SDM. */
-enum pt_cfe_intr {
- pt_cfe_intr_de = 0, /* Divide Error. */
- pt_cfe_intr_db = 1, /* Debug. */
- pt_cfe_intr_nmi = 2, /* Non Maskable Interrupt. */
- pt_cfe_intr_bp = 3, /* Breakpoint. */
- pt_cfe_intr_of = 4, /* Overflow. */
- pt_cfe_intr_br = 5, /* Bound Range Exceeded. */
- pt_cfe_intr_ud = 6, /* Undefined Opcode. */
- pt_cfe_intr_nm = 7, /* Device Not Available. */
- pt_cfe_intr_df = 8, /* Double Fault. */
- pt_cfe_intr_ts = 10, /* Invalid TSS. */
- pt_cfe_intr_np = 11, /* Segment Not Present. */
- pt_cfe_intr_ss = 12, /* Stack Segment Fault. */
- pt_cfe_intr_gp = 13, /* General Protection Fault. */
- pt_cfe_intr_pf = 14, /* Page Fault. */
- pt_cfe_intr_mf = 16, /* Math Fault. */
- pt_cfe_intr_ac = 17, /* Alignment Check. */
- pt_cfe_intr_mc = 18, /* Machine Check. */
- pt_cfe_intr_xm = 19, /* SIMD Floating Point Exception. */
- pt_cfe_intr_ve = 20, /* Virtualization Exception. */
- pt_cfe_intr_cp = 21, /* Control Protection Exception. */
-};
-
-/** A CFE packet. */
-struct pt_packet_cfe {
- /** The type of control-flow event. */
- enum pt_cfe_type type;
-
- /** The vector depending on the type:
- *
- * pt_cfe_intr: the event vector.
- * pt_cfe_vmexit_intr: the event vector.
- * pt_cfe_sipi: the SIPI vector.
- * pt_cfe_uintr: the user interrupt vector.
- * pt_cfe_swintr: the event vector.
- */
- uint8_t vector;
-
- /** A flag specifying the binding of the packet:
- *
- * set: binds to the next FUP.
- * clear: binds to the next FUP + TIP, if tracing enabled.
- * clear: standalone, if tracing disabled.
- */
- uint32_t ip:1;
-};
-
-/* Event data types. */
-enum pt_evd_type {
- pt_evd_cr2 = 0x00, /* Page fault linear address (cr2). */
- pt_evd_vmxq = 0x01, /* VMX exit qualification. */
- pt_evd_vmxr = 0x02, /* VMX exit reason. */
-};
-
-/** A EVD packet. */
-struct pt_packet_evd {
- /** The type of control-flow event. */
- enum pt_evd_type type;
-
- /** The payload depending on the type:
- *
- * 0x00: page fault linear address (cr2).
- * 0x01: vmx exit qualification.
- * 0x02: vmx exit reason.
- */
- uint64_t payload;
-};
-#endif /* (LIBIPT_VERSION >= 0x201) */
-
-#if (LIBIPT_VERSION >= 0x202)
-/** A TRIG packet. */
-struct pt_packet_trig {
- /** A bit vector of triggers that are represented by this packet. */
- uint8_t trbv;
-
- /** An instruction count from the last IP packet (FUP, TIP*, or TNT)
- * indicating the instruction to which this packet is attributed.
- *
- * This field is only valid if \@icntv is set.
- */
- uint16_t icnt;
-
- /** A flag saying whether a FUP is following TRIG that provides a
- * reference IP from which to start counting.
- */
- uint32_t ip:1;
-
- /** A flag saying whether the \@icnt field is valid.*/
- uint32_t icntv:1;
-
- /** A flag saying whether there were other triggers firing that are not
- * reported.
- */
- uint32_t mult:1;
-};
-#endif /* (LIBIPT_VERSION >= 0x202) */
-
-/** An unknown packet decodable by the optional decoder callback. */
-struct pt_packet_unknown {
- /** Pointer to the raw packet bytes. */
- const uint8_t *packet;
-
- /** Optional pointer to a user-defined structure. */
- void *priv;
-};
-
-/** An Intel PT packet. */
-struct pt_packet {
- /** The type of the packet.
- *
- * This also determines the \@payload field.
- */
- enum pt_packet_type type;
-
- /** The size of the packet including opcode and payload. */
- uint8_t size;
-
- /** Packet specific data. */
- union {
- /** Packets: pad, ovf, psb, psbend, stop - no payload. */
-
- /** Packet: tnt-8, tnt-64. */
- struct pt_packet_tnt tnt;
-
- /** Packet: tip, fup, tip.pge, tip.pgd. */
- struct pt_packet_ip ip;
-
- /** Packet: mode. */
- struct pt_packet_mode mode;
-
- /** Packet: pip. */
- struct pt_packet_pip pip;
-
- /** Packet: tsc. */
- struct pt_packet_tsc tsc;
-
- /** Packet: cbr. */
- struct pt_packet_cbr cbr;
-
- /** Packet: tma. */
- struct pt_packet_tma tma;
-
- /** Packet: mtc. */
- struct pt_packet_mtc mtc;
-
- /** Packet: cyc. */
- struct pt_packet_cyc cyc;
-
- /** Packet: vmcs. */
- struct pt_packet_vmcs vmcs;
-
- /** Packet: mnt. */
- struct pt_packet_mnt mnt;
-
- /** Packet: exstop. */
- struct pt_packet_exstop exstop;
-
- /** Packet: mwait. */
- struct pt_packet_mwait mwait;
-
- /** Packet: pwre. */
- struct pt_packet_pwre pwre;
-
- /** Packet: pwrx. */
- struct pt_packet_pwrx pwrx;
-
- /** Packet: ptw. */
- struct pt_packet_ptw ptw;
-
-#if (LIBIPT_VERSION >= 0x201)
- /** Packet: cfe. */
- struct pt_packet_cfe cfe;
-
- /** Packet: evd. */
- struct pt_packet_evd evd;
-#endif
-#if (LIBIPT_VERSION >= 0x202)
- /** Packet: trig. */
- struct pt_packet_trig trig;
-#endif
- /** Packet: unknown. */
- struct pt_packet_unknown unknown;
- } payload;
-};
-
-
-
-/* Packet encoder. */
-
-
-
-/** Allocate an Intel PT packet encoder.
- *
- * The encoder will work on the buffer defined in \@config, it shall contain
- * raw trace data and remain valid for the lifetime of the encoder.
- *
- * The encoder starts at the beginning of the trace buffer.
- */
-extern pt_export struct pt_encoder *
-pt_alloc_encoder(const struct pt_config *config);
-
-/** Free an Intel PT packet encoder.
- *
- * The \@encoder must not be used after a successful return.
- */
-extern pt_export void pt_free_encoder(struct pt_encoder *encoder);
-
-/** Hard set synchronization point of an Intel PT packet encoder.
- *
- * Synchronize \@encoder to \@offset within the trace buffer.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_eos if the given offset is behind the end of the trace buffer.
- * Returns -pte_invalid if \@encoder is NULL.
- */
-extern pt_export int pt_enc_sync_set(struct pt_encoder *encoder,
- uint64_t offset);
-
-/** Get the current packet encoder position.
- *
- * Fills the current \@encoder position into \@offset.
- *
- * This is useful for reporting errors.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@encoder or \@offset is NULL.
- */
-extern pt_export int pt_enc_get_offset(const struct pt_encoder *encoder,
- uint64_t *offset);
-
-/* Return a pointer to \@encoder's configuration.
- *
- * Returns a non-null pointer on success, NULL if \@encoder is NULL.
- */
-extern pt_export const struct pt_config *
-pt_enc_get_config(const struct pt_encoder *encoder);
-
-/** Encode an Intel PT packet.
- *
- * Writes \@packet at \@encoder's current position in the Intel PT buffer and
- * advances the \@encoder beyond the written packet.
- *
- * The \@packet.size field is ignored.
- *
- * In case of errors, the \@encoder is not advanced and nothing is written
- * into the Intel PT buffer.
- *
- * Returns the number of bytes written on success, a negative error code
- * otherwise.
- *
- * Returns -pte_bad_opc if \@packet.type is not known.
- * Returns -pte_bad_packet if \@packet's payload is invalid.
- * Returns -pte_eos if \@encoder reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@encoder or \@packet is NULL.
- */
-extern pt_export int pt_enc_next(struct pt_encoder *encoder,
- const struct pt_packet *packet);
-
-
-
-/* Packet decoder. */
-
-
-
-/** Allocate an Intel PT packet decoder.
- *
- * The decoder will work on the buffer defined in \@config, it shall contain
- * raw trace data and remain valid for the lifetime of the decoder.
- *
- * The decoder needs to be synchronized before it can be used.
- */
-extern pt_export struct pt_packet_decoder *
-pt_pkt_alloc_decoder(const struct pt_config *config);
-
-/** Free an Intel PT packet decoder.
- *
- * The \@decoder must not be used after a successful return.
- */
-extern pt_export void pt_pkt_free_decoder(struct pt_packet_decoder *decoder);
-
-/** Synchronize an Intel PT packet decoder.
- *
- * Search for the next synchronization point in forward or backward direction.
- *
- * If \@decoder has not been synchronized, yet, the search is started at the
- * beginning of the trace buffer in case of forward synchronization and at the
- * end of the trace buffer in case of backward synchronization.
- *
- * Returns zero or a positive value on success, a negative error code otherwise.
- *
- * Returns -pte_eos if no further synchronization point is found.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_pkt_sync_forward(struct pt_packet_decoder *decoder);
-extern pt_export int pt_pkt_sync_backward(struct pt_packet_decoder *decoder);
-
-/** Hard set synchronization point of an Intel PT decoder.
- *
- * Synchronize \@decoder to \@offset within the trace buffer.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_eos if the given offset is behind the end of the trace buffer.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_pkt_sync_set(struct pt_packet_decoder *decoder,
- uint64_t offset);
-
-/** Get the current decoder position.
- *
- * Fills the current \@decoder position into \@offset.
- *
- * This is useful for reporting errors.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_pkt_get_offset(const struct pt_packet_decoder *decoder,
- uint64_t *offset);
-
-/** Get the position of the last synchronization point.
- *
- * Fills the last synchronization position into \@offset.
- *
- * This is useful when splitting a trace stream for parallel decoding.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int
-pt_pkt_get_sync_offset(const struct pt_packet_decoder *decoder,
- uint64_t *offset);
-
-/* Return a pointer to \@decoder's configuration.
- *
- * Returns a non-null pointer on success, NULL if \@decoder is NULL.
- */
-extern pt_export const struct pt_config *
-pt_pkt_get_config(const struct pt_packet_decoder *decoder);
-
-/** Decode the next packet and advance the decoder.
- *
- * Decodes the packet at \@decoder's current position into \@packet and
- * adjusts the \@decoder's position by the number of bytes the packet had
- * consumed.
- *
- * The \@size argument must be set to sizeof(struct pt_packet).
- *
- * Returns the number of bytes consumed on success, a negative error code
- * otherwise.
- *
- * Returns -pte_bad_opc if the packet is unknown.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if \@decoder reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@decoder or \@packet is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_pkt_next(struct pt_packet_decoder *decoder,
- struct pt_packet *packet, size_t size);
-
-
-
-/* Event decoder. */
-
-
-
-/** Event types. */
-enum pt_event_type {
- /* Tracing has been enabled/disabled. */
- ptev_enabled,
- ptev_disabled,
-
- /* Tracing has been disabled asynchronously. */
- ptev_async_disabled,
-
- /* An asynchronous branch, e.g. interrupt. */
- ptev_async_branch,
-
- /* A synchronous paging event. */
- ptev_paging,
-
- /* An asynchronous paging event. */
- ptev_async_paging,
-
- /* Trace overflow. */
- ptev_overflow,
-
- /* An execution mode change. */
- ptev_exec_mode,
-
- /* A transactional execution state change. */
- ptev_tsx,
-
- /* Trace Stop. */
- ptev_stop,
-
- /* A synchronous vmcs event. */
- ptev_vmcs,
-
- /* An asynchronous vmcs event. */
- ptev_async_vmcs,
-
- /* Execution has stopped. */
- ptev_exstop,
-
- /* An MWAIT operation completed. */
- ptev_mwait,
-
- /* A power state was entered. */
- ptev_pwre,
-
- /* A power state was exited. */
- ptev_pwrx,
-
- /* A PTWRITE event. */
- ptev_ptwrite,
-
- /* A timing event. */
- ptev_tick,
-
- /* A core:bus ratio event. */
- ptev_cbr,
-
- /* A maintenance event. */
- ptev_mnt,
-
-#if (LIBIPT_VERSION >= 0x201)
- /* An indirect branch event. */
- ptev_tip,
-
- /* A conditional branch indicator event. */
- ptev_tnt,
-
- /* An interrupt status event. */
- ptev_iflags,
-
- /* An interrupt or exception event.
- *
- * This event extends the async_branch event generated for the
- * control-flow change; it does not replace that event.
- */
- ptev_interrupt,
-
- /* A return from interrupt event. */
- ptev_iret,
-
- /* A system management interrupt. */
- ptev_smi,
-
- /* A return from system management mode. */
- ptev_rsm,
-
- /* A SIPI message. */
- ptev_sipi,
-
- /* An INIT reset. */
- ptev_init,
-
- /* A Virtual Machine entry. */
- ptev_vmentry,
-
- /* A Virtual Machine exit. */
- ptev_vmexit,
-
- /* A shutdown event. */
- ptev_shutdown,
-
- /* A user interrupt. */
- ptev_uintr,
-
- /* A return from user interrupt. */
- ptev_uiret,
-#endif
-#if (LIBIPT_VERSION >= 0x202)
- /* A trigger event. */
- ptev_trig,
-
- /* A software interrupt. */
- ptev_swintr,
-
- /* A system call. */
- ptev_syscall,
-#endif
-};
-
-/** An event. */
-struct pt_event {
- /** The type of the event. */
- enum pt_event_type type;
-
- /** A flag indicating that the event IP has been suppressed. */
- uint32_t ip_suppressed:1;
-
- /** A flag indicating that the event is for status update. */
- uint32_t status_update:1;
-
- /** A flag indicating that the event has timing information. */
- uint32_t has_tsc:1;
-
- /** The time stamp count of the event.
- *
- * This field is only valid if \@has_tsc is set.
- */
- uint64_t tsc;
-
- /** The number of lost mtc and cyc packets.
- *
- * This gives an idea about the quality of the \@tsc. The more packets
- * were dropped, the less precise timing is.
- */
- uint32_t lost_mtc;
- uint32_t lost_cyc;
-
- /* Reserved space for future extensions. */
- uint64_t reserved[2];
-
- /** Event specific data. */
- union {
- /** Event: enabled. */
- struct {
- /** The address at which tracing resumes. */
- uint64_t ip;
-
- /** A flag indicating that tracing resumes from the IP
- * at which tracing had been disabled before.
- */
- uint32_t resumed:1;
- } enabled;
-
- /** Event: disabled. */
- struct {
- /** The destination of the first branch inside a
- * filtered area.
- *
- * This field is not valid if \@ip_suppressed is set.
- */
- uint64_t ip;
-
- /* The exact source ip needs to be determined using
- * disassembly and the filter configuration.
- */
- } disabled;
-
- /** Event: async disabled. */
- struct {
- /** The source address of the asynchronous branch that
- * disabled tracing.
- */
- uint64_t at;
-
- /** The destination of the first branch inside a
- * filtered area.
- *
- * This field is not valid if \@ip_suppressed is set.
- */
- uint64_t ip;
- } async_disabled;
-
- /** Event: async branch. */
- struct {
- /** The branch source address. */
- uint64_t from;
-
- /** The branch destination address.
- *
- * This field is not valid if \@ip_suppressed is set.
- */
- uint64_t to;
- } async_branch;
-
- /** Event: paging. */
- struct {
- /** The updated CR3 value.
- *
- * The lower 5 bit have been zeroed out.
- * The upper bits have been zeroed out depending on the
- * maximum possible address.
- */
- uint64_t cr3;
-
- /** A flag indicating whether the cpu is operating in
- * vmx non-root (guest) mode.
- */
- uint32_t non_root:1;
-
- /* The address at which the event is effective is
- * obvious from the disassembly.
- */
- } paging;
-
- /** Event: async paging. */
- struct {
- /** The updated CR3 value.
- *
- * The lower 5 bit have been zeroed out.
- * The upper bits have been zeroed out depending on the
- * maximum possible address.
- */
- uint64_t cr3;
-
- /** A flag indicating whether the cpu is operating in
- * vmx non-root (guest) mode.
- */
- uint32_t non_root:1;
-
- /** The address at which the event is effective. */
- uint64_t ip;
- } async_paging;
-
- /** Event: overflow. */
- struct {
- /** The address at which tracing resumes after overflow.
- *
- * This field is not valid, if ip_suppressed is set.
- * In this case, the overflow resolved while tracing
- * was disabled.
- */
- uint64_t ip;
- } overflow;
-
- /** Event: exec mode. */
- struct {
- /** The execution mode. */
- enum pt_exec_mode mode;
-
- /** The address at which the event is effective. */
- uint64_t ip;
- } exec_mode;
-
- /** Event: tsx. */
- struct {
- /** The address at which the event is effective.
- *
- * This field is not valid if \@ip_suppressed is set.
- */
- uint64_t ip;
-
- /** A flag indicating speculative execution mode. */
- uint32_t speculative:1;
-
- /** A flag indicating speculative execution aborts. */
- uint32_t aborted:1;
- } tsx;
-
- /** Event: vmcs. */
- struct {
- /** The VMCS base address.
- *
- * The address is zero-extended with the lower 12 bits
- * all zero.
- */
- uint64_t base;
-
- /* The new VMCS base address should be stored and
- * applied on subsequent VM entries.
- */
- } vmcs;
-
- /** Event: async vmcs. */
- struct {
- /** The VMCS base address.
- *
- * The address is zero-extended with the lower 12 bits
- * all zero.
- */
- uint64_t base;
-
- /** The address at which the event is effective. */
- uint64_t ip;
-
- /* An async paging event that binds to the same IP
- * will always succeed this async vmcs event.
- */
- } async_vmcs;
-
- /** Event: execution stopped. */
- struct {
- /** The address at which execution has stopped. This is
- * the last instruction that did not complete.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } exstop;
-
- /** Event: mwait. */
- struct {
- /** The address of the instruction causing the mwait.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
-
- /** The mwait hints (eax).
- *
- * Reserved bits are undefined.
- */
- uint32_t hints;
-
- /** The mwait extensions (ecx).
- *
- * Reserved bits are undefined.
- */
- uint32_t ext;
- } mwait;
-
- /** Event: power state entry. */
- struct {
- /** The resolved thread C-state. */
- uint8_t state;
-
- /** The resolved thread sub C-state. */
- uint8_t sub_state;
-
- /** A flag indicating whether the C-state entry was
- * initiated by h/w.
- */
- uint32_t hw:1;
- } pwre;
-
- /** Event: power state exit. */
- struct {
- /** The core C-state at the time of the wake. */
- uint8_t last;
-
- /** The deepest core C-state achieved during sleep. */
- uint8_t deepest;
-
- /** The wake reason:
- *
- * - due to external interrupt received.
- */
- uint32_t interrupt:1;
-
- /** - due to store to monitored address. */
- uint32_t store:1;
-
- /** - due to h/w autonomous condition such as HDC. */
- uint32_t autonomous:1;
- } pwrx;
-
- /** Event: ptwrite. */
- struct {
- /** The address of the ptwrite instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- *
- * In this case, the address is obvious from the
- * disassembly.
- */
- uint64_t ip;
-
- /** The size of the below \@payload in bytes. */
- uint8_t size;
-
- /** The ptwrite payload. */
- uint64_t payload;
- } ptwrite;
-
- /** Event: tick. */
- struct {
- /** The instruction address near which the tick
- * occurred.
- *
- * A timestamp can sometimes be attributed directly to
- * an instruction (e.g. to an indirect branch that
- * receives CYC + TIP) and sometimes not (e.g. MTC).
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } tick;
-
- /** Event: cbr. */
- struct {
- /** The core:bus ratio. */
- uint16_t ratio;
- } cbr;
-
- /** Event: mnt. */
- struct {
- /** The raw payload. */
- uint64_t payload;
- } mnt;
-
-#if (LIBIPT_VERSION >= 0x201)
- /** Event: tip. */
- struct {
- /** The target instruction address. */
- uint64_t ip;
- } tip;
-
- /** Event: tnt. */
- struct {
- /** A sequence of conditional branch indicator bits.
- *
- * Indicators are ordered from oldest (bits[size-1]) to
- * youngest (bits[0]) branch:
- *
- * 0...branch not taken
- * 1...branch taken
- */
- uint64_t bits;
-
- /** The number of valid bits in @bits. */
- uint8_t size;
- } tnt;
-
- /** Event: iflags. */
- struct {
- /** The EFLAGS.IF status. */
- uint32_t iflag:1;
-
- /** The address of the instruction at which the new
- * status applies.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } iflags;
-
- /** Event: interrupt/exception. */
- struct {
- /** A flag saying whether the \@cr2 field is valid. */
- uint32_t has_cr2:1;
-
- /** The interrupt/exception vector. */
- uint8_t vector;
-
- /** The page fault linear address in cr2.
- *
- * This field is only valid if \@has_cr2 is set.
- */
- uint64_t cr2;
-
- /** The address of the instruction at which the
- * interrupt or exception occurred.
- *
- * For faults, this will be the faulting instruction.
- * For traps, this will be the next instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } interrupt;
-
- /** Event: iret. */
- struct {
- /** The address of the instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } iret;
-
- /** Event: smi. */
- struct {
- /** The address of the instruction at/before which the
- * system management interrupt occurred.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } smi;
-
- /** Event: rsm. */
- struct {
- /** The address of the instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } rsm;
-
- /** Event: sipi. */
- struct {
- /** The SIPI vector. */
- uint8_t vector;
- } sipi;
-
- /** Event: init. */
- struct {
- /** The address of the instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } init;
-
- /** Event: vmentry. */
- struct {
- /** The address of the instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } vmentry;
-
- /** Event: vmexit. */
- struct {
- /** A flag saying whether the \@vector field is valid.
- *
- * When set, the vmexit occurred due to an interrupt or
- * exception.
- */
- uint32_t has_vector:1;
-
- /** A flag saying whether the \@vmxr field is valid. */
- uint32_t has_vmxr:1;
-
- /** A flag saying whether the \@vmxq field is valid. */
- uint32_t has_vmxq:1;
-
- /** The interrupt/exception vector.
- *
- * This field is only valid if \@has_vector is set.
- */
- uint8_t vector;
-
- /** The vmexit reason.
- *
- * This field is only valid if \@has_vmxr is set.
- */
- uint64_t vmxr;
-
- /** The vmexit qualification.
- *
- * This field is only valid if \@has_vmxq is set.
- */
- uint64_t vmxq;
-
- /** The address of the instruction at which the
- * interrupt or exception occurred.
- *
- * For faults, this will be the faulting instruction.
- * For traps, this will be the next instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } vmexit;
-
- /** Event: shutdown. */
- struct {
- /** The address of the first instruction that did not
- * complete due to the shutdown.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } shutdown;
-
- /** Event: user interrupt. */
- struct {
- /** The user interrupt vector. */
- uint8_t vector;
-
- /** The address of the instruction before which the
- * user interrupt was delivered.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } uintr;
-
- /** Event: uiret. */
- struct {
- /** The address of the instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } uiret;
-#endif /* (LIBIPT_VERSION >= 0x201) */
-
-#if (LIBIPT_VERSION >= 0x202)
- /** Event: trigger. */
- struct {
- /** A bit vector of triggers represented by this event.
- *
- * Triggers are configured via IA32_RTIT_TRIGGERx_CFG.
- */
- uint8_t trbv;
-
- /** The number of instructions after the anchor.
- *
- * The insn and block decoders will attempty to reduce
- * \@icount to zero and update \@ip.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint16_t icnt;
-
- /** The address of the anchor instruction.
- *
- * If this field is zero, use the address of the last
- * trig, tip, tip.pge, or async event, or the address
- * after applying the final bit in the last tnt event.
- *
- * The insn and block decoders will supply a non-zero
- * address or set \@ip_suppressed.
- *
- * The event is reported when reaching the instruction
- * address before the instruction itself to correctly
- * handle cases where the instruction faults.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
-
- /** A flag saying whether there were other triggers
- * firing that are not reported.
- */
- uint32_t mult:1;
- } trig;
-
- /** Event: software interrupt. */
- struct {
- /** The interrupt vector. */
- uint8_t vector;
-
- /** The address of the instruction that generated the
- * software interrupt.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } swintr;
-
- /** Event: system call. */
- struct {
- /** The address of the instruction.
- *
- * This field is not valid, if \@ip_suppressed is set.
- */
- uint64_t ip;
- } syscall;
-#endif /* (LIBIPT_VERSION >= 0x202) */
- } variant;
-};
-
-
-#if (LIBIPT_VERSION >= 0x201)
-/** Allocate an Intel PT event decoder.
- *
- * The decoder will work on the buffer defined in \@config, it shall contain
- * raw trace data and remain valid for the lifetime of the decoder.
- *
- * The decoder needs to be synchronized before it can be used.
- */
-extern pt_export struct pt_event_decoder *
-pt_evt_alloc_decoder(const struct pt_config *config);
-
-/** Free an Intel PT event decoder.
- *
- * The \@decoder must not be used after a successful return.
- */
-extern pt_export void pt_evt_free_decoder(struct pt_event_decoder *decoder);
-
-/** Synchronize an Intel PT event decoder.
- *
- * Search for the next synchronization point in forward or backward direction.
- *
- * If \@decoder has not been synchronized, yet, the search is started at the
- * beginning of the trace buffer in case of forward synchronization and at the
- * end of the trace buffer in case of backward synchronization.
- *
- * Returns zero or a positive value on success, a negative error code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if no further synchronization point is found.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_evt_sync_forward(struct pt_event_decoder *decoder);
-extern pt_export int pt_evt_sync_backward(struct pt_event_decoder *decoder);
-
-/** Manually synchronize an Intel PT event decoder.
- *
- * Synchronize \@decoder on the syncpoint at \@offset. There must be a PSB
- * packet at \@offset.
- *
- * Returns zero or a positive value on success, a negative error code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if \@offset lies outside of \@decoder's trace buffer.
- * Returns -pte_eos if \@decoder reaches the end of its trace buffer.
- * Returns -pte_invalid if \@decoder is NULL.
- * Returns -pte_nosync if there is no syncpoint at \@offset.
- */
-extern pt_export int pt_evt_sync_set(struct pt_event_decoder *decoder,
- uint64_t offset);
-
-/** Get the current decoder position.
- *
- * Fills the current \@decoder position into \@offset.
- *
- * This is useful for reporting errors.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_evt_get_offset(const struct pt_event_decoder *decoder,
- uint64_t *offset);
-
-/** Get the position of the last synchronization point.
- *
- * Fills the last synchronization position into \@offset.
- *
- * This is useful for splitting a trace stream for parallel decoding.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int
-pt_evt_get_sync_offset(const struct pt_event_decoder *decoder,
- uint64_t *offset);
-
-/* Return a pointer to \@decoder's configuration.
- *
- * Returns a non-null pointer on success, NULL if \@decoder is NULL.
- */
-extern pt_export const struct pt_config *
-pt_evt_get_config(const struct pt_event_decoder *decoder);
-
-/** Determine the next event.
- *
- * On success, provides the next event in \@event.
- *
- * The \@size argument must be set to sizeof(struct pt_event).
- *
- * Returns zero or a positive value on success, a negative error code
- * otherwise.
- *
- * Returns -pte_bad_opc if the packet is unknown.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if \@decoder reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@decoder or \@event is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_evt_next(struct pt_event_decoder *decoder,
- struct pt_event *event, size_t size);
-#endif /* (LIBIPT_VERSION >= 0x201) */
-
-
-
-/* Query decoder. */
-
-
-
-/** Decoder status flags. */
-enum pt_status_flag {
- /** There is an event pending. */
- pts_event_pending = 1 << 0,
-
- /** The address has been suppressed. */
- pts_ip_suppressed = 1 << 1,
-
- /** There is no more trace data available. */
- pts_eos = 1 << 2
-};
-
-/** Allocate an Intel PT query decoder.
- *
- * The decoder will work on the buffer defined in \@config, it shall contain
- * raw trace data and remain valid for the lifetime of the decoder.
- *
- * The decoder needs to be synchronized before it can be used.
- */
-extern pt_export struct pt_query_decoder *
-pt_qry_alloc_decoder(const struct pt_config *config);
-
-/** Free an Intel PT query decoder.
- *
- * The \@decoder must not be used after a successful return.
- */
-extern pt_export void pt_qry_free_decoder(struct pt_query_decoder *decoder);
-
-/** Synchronize an Intel PT query decoder.
- *
- * Search for the next synchronization point in forward or backward direction.
- *
- * If \@decoder has not been synchronized, yet, the search is started at the
- * beginning of the trace buffer in case of forward synchronization and at the
- * end of the trace buffer in case of backward synchronization.
- *
- * If \@ip is not NULL, set it to last ip.
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if no further synchronization point is found.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_qry_sync_forward(struct pt_query_decoder *decoder,
- uint64_t *ip);
-extern pt_export int pt_qry_sync_backward(struct pt_query_decoder *decoder,
- uint64_t *ip);
-
-/** Manually synchronize an Intel PT query decoder.
- *
- * Synchronize \@decoder on the syncpoint at \@offset. There must be a PSB
- * packet at \@offset.
- *
- * If \@ip is not NULL, set it to last ip.
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if \@offset lies outside of \@decoder's trace buffer.
- * Returns -pte_eos if \@decoder reaches the end of its trace buffer.
- * Returns -pte_invalid if \@decoder is NULL.
- * Returns -pte_nosync if there is no syncpoint at \@offset.
- */
-extern pt_export int pt_qry_sync_set(struct pt_query_decoder *decoder,
- uint64_t *ip, uint64_t offset);
-
-/** Get the current decoder position.
- *
- * Fills the current \@decoder position into \@offset.
- *
- * This is useful for reporting errors.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_qry_get_offset(const struct pt_query_decoder *decoder,
- uint64_t *offset);
-
-/** Get the position of the last synchronization point.
- *
- * Fills the last synchronization position into \@offset.
- *
- * This is useful for splitting a trace stream for parallel decoding.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int
-pt_qry_get_sync_offset(const struct pt_query_decoder *decoder,
- uint64_t *offset);
-
-/* Return a pointer to \@decoder's configuration.
- *
- * Returns a non-null pointer on success, NULL if \@decoder is NULL.
- */
-extern pt_export const struct pt_config *
-pt_qry_get_config(const struct pt_query_decoder *decoder);
-
-/** Query whether the next unconditional branch has been taken.
- *
- * On success, provides 1 (taken) or 0 (not taken) in \@taken for the next
- * conditional branch and updates \@decoder.
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_bad_query if no conditional branch is found.
- * Returns -pte_eos if decoding reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@decoder or \@taken is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_qry_cond_branch(struct pt_query_decoder *decoder,
- int *taken);
-
-/** Get the next indirect branch destination.
- *
- * On success, provides the linear destination address of the next indirect
- * branch in \@ip and updates \@decoder.
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_bad_query if no indirect branch is found.
- * Returns -pte_eos if decoding reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@decoder or \@ip is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_qry_indirect_branch(struct pt_query_decoder *decoder,
- uint64_t *ip);
-
-/** Query the next pending event.
- *
- * On success, provides the next event \@event and updates \@decoder.
- *
- * The \@size argument must be set to sizeof(struct pt_event).
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_bad_query if no event is found.
- * Returns -pte_eos if decoding reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@decoder or \@event is NULL.
- * Returns -pte_invalid if \@size is too small.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_qry_event(struct pt_query_decoder *decoder,
- struct pt_event *event, size_t size);
-
-/** Query the current time.
- *
- * On success, provides the time at the last query in \@time.
- *
- * The time is similar to what a rdtsc instruction would return. Depending
- * on the configuration, the time may not be fully accurate. If TSC is not
- * enabled, the time is relative to the last synchronization and can't be used
- * to correlate with other TSC-based time sources. In this case, -pte_no_time
- * is returned and the relative time is provided in \@time.
- *
- * Some timing-related packets may need to be dropped (mostly due to missing
- * calibration or incomplete configuration). To get an idea about the quality
- * of the estimated time, we record the number of dropped MTC and CYC packets.
- *
- * If \@lost_mtc is not NULL, set it to the number of lost MTC packets.
- * If \@lost_cyc is not NULL, set it to the number of lost CYC packets.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@time is NULL.
- * Returns -pte_no_time if there has not been a TSC packet.
- */
-extern pt_export int pt_qry_time(struct pt_query_decoder *decoder,
- uint64_t *time, uint32_t *lost_mtc,
- uint32_t *lost_cyc);
-
-/** Return the current core bus ratio.
- *
- * On success, provides the current core:bus ratio in \@cbr. The ratio is
- * defined as core cycles per bus clock cycle.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@cbr is NULL.
- * Returns -pte_no_cbr if there has not been a CBR packet.
- */
-extern pt_export int pt_qry_core_bus_ratio(struct pt_query_decoder *decoder,
- uint32_t *cbr);
-
-
-
-/* Traced image. */
-
-
-
-/** An Intel PT address space identifier.
- *
- * This identifies a particular address space when adding file sections or
- * when reading memory.
- */
-struct pt_asid {
- /** The size of this object - set to sizeof(struct pt_asid). */
- size_t size;
-
- /** The CR3 value. */
- uint64_t cr3;
-
- /** The VMCS Base address. */
- uint64_t vmcs;
-};
-
-/** An unknown CR3 value to be used for pt_asid objects. */
-static const uint64_t pt_asid_no_cr3 = 0xffffffffffffffffull;
-
-/** An unknown VMCS Base value to be used for pt_asid objects. */
-static const uint64_t pt_asid_no_vmcs = 0xffffffffffffffffull;
-
-/** Initialize an address space identifier. */
-static inline void pt_asid_init(struct pt_asid *asid)
-{
- asid->size = sizeof(*asid);
- asid->cr3 = pt_asid_no_cr3;
- asid->vmcs = pt_asid_no_vmcs;
-}
-
-
-/** A cache of traced image sections. */
-struct pt_image_section_cache;
-
-/** Allocate a traced memory image section cache.
- *
- * An optional \@name may be given to the cache. The name string is copied.
- *
- * Returns a new traced memory image section cache on success, NULL otherwise.
- */
-extern pt_export struct pt_image_section_cache *
-pt_iscache_alloc(const char *name);
-
-/** Free a traced memory image section cache.
- *
- * The \@iscache must have been allocated with pt_iscache_alloc().
- * The \@iscache must not be used after a successful return.
- */
-extern pt_export void pt_iscache_free(struct pt_image_section_cache *iscache);
-
-/** Set the image section cache limit.
- *
- * Set the limit for a section cache in bytes. A non-zero limit will keep the
- * least recently used sections mapped until the limit is reached. A limit of
- * zero disables caching.
- *
- * Returns zero on success, a negative pt_error_code otherwise.
- * Returns -pte_invalid if \@iscache is NULL.
- */
-extern pt_export int
-pt_iscache_set_limit(struct pt_image_section_cache *iscache, uint64_t limit);
-
-/** Get the image section cache name.
- *
- * Returns a pointer to \@iscache's name or NULL if there is no name.
- */
-extern pt_export const char *
-pt_iscache_name(const struct pt_image_section_cache *iscache);
-
-/** Add a new file section to the traced memory image section cache.
- *
- * Adds a new section consisting of \@size bytes starting at \@offset in
- * \@filename loaded at the virtual address \@vaddr if \@iscache does not
- * already contain such a section.
- *
- * Returns an image section identifier (isid) uniquely identifying that section
- * in \@iscache.
- *
- * The section is silently truncated to match the size of \@filename.
- *
- * Returns a positive isid on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@iscache or \@filename is NULL.
- * Returns -pte_invalid if \@offset is too big.
- */
-extern pt_export int pt_iscache_add_file(struct pt_image_section_cache *iscache,
- const char *filename, uint64_t offset,
- uint64_t size, uint64_t vaddr);
-
-/** Read memory from a cached file section
- *
- * Reads \@size bytes of memory starting at virtual address \@vaddr in the
- * section identified by \@isid in \@iscache into \@buffer.
- *
- * The caller is responsible for allocating a \@buffer of at least \@size bytes.
- *
- * The read request may be truncated if it crosses section boundaries or if
- * \@size is getting too big. We support reading at least 4Kbyte in one chunk
- * unless the read would cross a section boundary.
- *
- * Returns the number of bytes read on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@iscache or \@buffer is NULL.
- * Returns -pte_invalid if \@size is zero.
- * Returns -pte_nomap if \@vaddr is not contained in section \@isid.
- * Returns -pte_bad_image if \@iscache does not contain \@isid.
- */
-extern pt_export int pt_iscache_read(struct pt_image_section_cache *iscache,
- uint8_t *buffer, uint64_t size, int isid,
- uint64_t vaddr);
-
-/** The traced memory image. */
-struct pt_image;
-
-
-/** Allocate a traced memory image.
- *
- * An optional \@name may be given to the image. The name string is copied.
- *
- * Returns a new traced memory image on success, NULL otherwise.
- */
-extern pt_export struct pt_image *pt_image_alloc(const char *name);
-
-/** Free a traced memory image.
- *
- * The \@image must have been allocated with pt_image_alloc().
- * The \@image must not be used after a successful return.
- */
-extern pt_export void pt_image_free(struct pt_image *image);
-
-/** Get the image name.
- *
- * Returns a pointer to \@image's name or NULL if there is no name.
- */
-extern pt_export const char *pt_image_name(const struct pt_image *image);
-
-/** Add a new file section to the traced memory image.
- *
- * Adds \@size bytes starting at \@offset in \@filename. The section is
- * loaded at the virtual address \@vaddr in the address space \@asid.
- *
- * The \@asid may be NULL or (partially) invalid. In that case only the valid
- * fields are considered when comparing with other address-spaces. Use this
- * when tracing a single process or when adding sections to all processes.
- *
- * The section is silently truncated to match the size of \@filename.
- *
- * Existing sections that would overlap with the new section will be shrunk
- * or split.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@image or \@filename is NULL.
- * Returns -pte_invalid if \@offset is too big.
- */
-extern pt_export int pt_image_add_file(struct pt_image *image,
- const char *filename, uint64_t offset,
- uint64_t size,
- const struct pt_asid *asid,
- uint64_t vaddr);
-
-/** Add a section from an image section cache.
- *
- * Add the section from \@iscache identified by \@isid in address space \@asid.
- *
- * Existing sections that would overlap with the new section will be shrunk
- * or split.
- *
- * Returns zero on success, a negative error code otherwise.
- * Returns -pte_invalid if \@image or \@iscache is NULL.
- * Returns -pte_bad_image if \@iscache does not contain \@isid.
- */
-extern pt_export int pt_image_add_cached(struct pt_image *image,
- struct pt_image_section_cache *iscache,
- int isid, const struct pt_asid *asid);
-
-/** Copy an image.
- *
- * Adds all sections from \@src to \@image. Sections that could not be added
- * will be ignored.
- *
- * Returns the number of ignored sections on success, a negative error code
- * otherwise.
- *
- * Returns -pte_invalid if \@image or \@src is NULL.
- */
-extern pt_export int pt_image_copy(struct pt_image *image,
- const struct pt_image *src);
-
-/** Remove all sections loaded from a file.
- *
- * Removes all sections loaded from \@filename from the address space \@asid.
- * Specify the same \@asid that was used for adding sections from \@filename.
- *
- * Returns the number of removed sections on success, a negative error code
- * otherwise.
- *
- * Returns -pte_invalid if \@image or \@filename is NULL.
- */
-extern pt_export int pt_image_remove_by_filename(struct pt_image *image,
- const char *filename,
- const struct pt_asid *asid);
-
-/** Remove all sections loaded into an address space.
- *
- * Removes all sections loaded into \@asid. Specify the same \@asid that was
- * used for adding sections.
- *
- * Returns the number of removed sections on success, a negative error code
- * otherwise.
- *
- * Returns -pte_invalid if \@image is NULL.
- */
-extern pt_export int pt_image_remove_by_asid(struct pt_image *image,
- const struct pt_asid *asid);
-
-/** A read memory callback function.
- *
- * It shall read \@size bytes of memory from address space \@asid starting
- * at \@ip into \@buffer.
- *
- * It shall return the number of bytes read on success.
- * It shall return a negative pt_error_code otherwise.
- */
-typedef int (read_memory_callback_t)(uint8_t *buffer, size_t size,
- const struct pt_asid *asid,
- uint64_t ip, void *context);
-
-/** Set the memory callback for the traced memory image.
- *
- * Sets \@callback for reading memory. The callback is used for addresses
- * that are not found in file sections. The \@context argument is passed
- * to \@callback on each use.
- *
- * There can only be one callback at any time. A subsequent call will replace
- * the previous callback. If \@callback is NULL, the callback is removed.
- *
- * Returns -pte_invalid if \@image is NULL.
- */
-extern pt_export int pt_image_set_callback(struct pt_image *image,
- read_memory_callback_t *callback,
- void *context);
-
-
-
-/* Instruction flow decoder. */
-
-
-
-/** The instruction class.
- *
- * We provide only a very coarse classification suitable for reconstructing
- * the execution flow.
- */
-enum pt_insn_class {
-#if (LIBIPT_VERSION >= 0x201)
- /* The instruction has not been classified. */
- ptic_unknown,
-
- /* For backwards compatibility. */
- ptic_error = ptic_unknown,
-#else
- /* The instruction has not been classified. */
- ptic_error,
-#endif
-
- /* The instruction is something not listed below. */
- ptic_other,
-
- /* The instruction is a near (function) call. */
- ptic_call,
-
- /* The instruction is a near (function) return. */
- ptic_return,
-
- /* The instruction is a near unconditional jump. */
- ptic_jump,
-
- /* The instruction is a near conditional jump. */
- ptic_cond_jump,
-
- /* The instruction is a call-like far transfer.
- * E.g. SYSCALL, SYSENTER, or FAR CALL.
- */
- ptic_far_call,
-
- /* The instruction is a return-like far transfer.
- * E.g. SYSRET, SYSEXIT, IRET, or FAR RET.
- */
- ptic_far_return,
-
- /* The instruction is a jump-like far transfer.
- * E.g. FAR JMP.
- */
- ptic_far_jump,
-
- /* The instruction is a PTWRITE. */
- ptic_ptwrite,
-
-#if (LIBIPT_VERSION >= 0x201)
- /* The instruction is an indirect jump or a far transfer. */
- ptic_indirect,
-#endif
-};
-
-/** The maximal size of an instruction. */
-enum {
- pt_max_insn_size = 15
-};
-
-/** A single traced instruction. */
-struct pt_insn {
- /** The virtual address in its process. */
- uint64_t ip;
-
- /** The image section identifier for the section containing this
- * instruction.
- *
- * A value of zero means that the section did not have an identifier.
- * The section was not added via an image section cache or the memory
- * was read via the read memory callback.
- */
- int isid;
-
- /** The execution mode. */
- enum pt_exec_mode mode;
-
- /** A coarse classification. */
- enum pt_insn_class iclass;
-
- /** The raw bytes. */
- uint8_t raw[pt_max_insn_size];
-
- /** The size in bytes. */
- uint8_t size;
-
- /** A collection of flags giving additional information:
- *
- * - the instruction was executed speculatively.
- */
- uint32_t speculative:1;
-
- /** - this instruction is truncated in its image section.
- *
- * It starts in the image section identified by \@isid and continues
- * in one or more other sections.
- */
- uint32_t truncated:1;
-};
-
-
-/** Allocate an Intel PT instruction flow decoder.
- *
- * The decoder will work on the buffer defined in \@config, it shall contain
- * raw trace data and remain valid for the lifetime of the decoder.
- *
- * The decoder needs to be synchronized before it can be used.
- */
-extern pt_export struct pt_insn_decoder *
-pt_insn_alloc_decoder(const struct pt_config *config);
-
-/** Free an Intel PT instruction flow decoder.
- *
- * This will destroy the decoder's default image.
- *
- * The \@decoder must not be used after a successful return.
- */
-extern pt_export void pt_insn_free_decoder(struct pt_insn_decoder *decoder);
-
-/** Synchronize an Intel PT instruction flow decoder.
- *
- * Search for the next synchronization point in forward or backward direction.
- *
- * If \@decoder has not been synchronized, yet, the search is started at the
- * beginning of the trace buffer in case of forward synchronization and at the
- * end of the trace buffer in case of backward synchronization.
- *
- * Returns zero or a positive value on success, a negative error code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if no further synchronization point is found.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_insn_sync_forward(struct pt_insn_decoder *decoder);
-extern pt_export int pt_insn_sync_backward(struct pt_insn_decoder *decoder);
-
-/** Manually synchronize an Intel PT instruction flow decoder.
- *
- * Synchronize \@decoder on the syncpoint at \@offset. There must be a PSB
- * packet at \@offset.
- *
- * Returns zero or a positive value on success, a negative error code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if \@offset lies outside of \@decoder's trace buffer.
- * Returns -pte_eos if \@decoder reaches the end of its trace buffer.
- * Returns -pte_invalid if \@decoder is NULL.
- * Returns -pte_nosync if there is no syncpoint at \@offset.
- */
-extern pt_export int pt_insn_sync_set(struct pt_insn_decoder *decoder,
- uint64_t offset);
-
-#if (LIBIPT_VERSION >= 0x202)
-/** Re-synchronize an Intel PT instruction flow decoder.
- *
- * Scan ahead for the next IP providing packet. Apply state changing packets
- * along the way, including timing packets, but ignore everything else.
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative
- * error code otherwise.
- *
- * Returns pts_ip_suppressed if re-synchronization succeeded with tracing
- * disabled.
- *
- * Returns -pte_event_ignored if an event cannot safely be skipped
- * (e.g. ptwrite). Use pt_insn_event() to read the event, then continue with
- * pt_insn_resync() until re-synchronization completes or fails with an error.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if no further synchronization point is found.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_insn_resync(struct pt_insn_decoder *decoder);
-#endif
-
-/** Get the current decoder position.
- *
- * Fills the current \@decoder position into \@offset.
- *
- * This is useful for reporting errors.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_insn_get_offset(const struct pt_insn_decoder *decoder,
- uint64_t *offset);
-
-/** Get the position of the last synchronization point.
- *
- * Fills the last synchronization position into \@offset.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int
-pt_insn_get_sync_offset(const struct pt_insn_decoder *decoder,
- uint64_t *offset);
-
-/** Get the traced image.
- *
- * The returned image may be modified as long as no decoder that uses this
- * image is running.
- *
- * Returns a pointer to the traced image the decoder uses for reading memory.
- * Returns NULL if \@decoder is NULL.
- */
-extern pt_export struct pt_image *
-pt_insn_get_image(struct pt_insn_decoder *decoder);
-
-/** Set the traced image.
- *
- * Sets the image that \@decoder uses for reading memory to \@image. If \@image
- * is NULL, sets the image to \@decoder's default image.
- *
- * Only one image can be active at any time.
- *
- * Returns zero on success, a negative error code otherwise.
- * Return -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_insn_set_image(struct pt_insn_decoder *decoder,
- struct pt_image *image);
-
-/* Return a pointer to \@decoder's configuration.
- *
- * Returns a non-null pointer on success, NULL if \@decoder is NULL.
- */
-extern pt_export const struct pt_config *
-pt_insn_get_config(const struct pt_insn_decoder *decoder);
-
-/** Return the current time.
- *
- * On success, provides the time at the last preceding timing packet in \@time.
- *
- * The time is similar to what a rdtsc instruction would return. Depending
- * on the configuration, the time may not be fully accurate. If TSC is not
- * enabled, the time is relative to the last synchronization and can't be used
- * to correlate with other TSC-based time sources. In this case, -pte_no_time
- * is returned and the relative time is provided in \@time.
- *
- * Some timing-related packets may need to be dropped (mostly due to missing
- * calibration or incomplete configuration). To get an idea about the quality
- * of the estimated time, we record the number of dropped MTC and CYC packets.
- *
- * If \@lost_mtc is not NULL, set it to the number of lost MTC packets.
- * If \@lost_cyc is not NULL, set it to the number of lost CYC packets.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@time is NULL.
- * Returns -pte_no_time if there has not been a TSC packet.
- */
-extern pt_export int pt_insn_time(struct pt_insn_decoder *decoder,
- uint64_t *time, uint32_t *lost_mtc,
- uint32_t *lost_cyc);
-
-/** Return the current core bus ratio.
- *
- * On success, provides the current core:bus ratio in \@cbr. The ratio is
- * defined as core cycles per bus clock cycle.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@cbr is NULL.
- * Returns -pte_no_cbr if there has not been a CBR packet.
- */
-extern pt_export int pt_insn_core_bus_ratio(struct pt_insn_decoder *decoder,
- uint32_t *cbr);
-
-/** Return the current address space identifier.
- *
- * On success, provides the current address space identifier in \@asid.
- *
- * The \@size argument must be set to sizeof(struct pt_asid). At most \@size
- * bytes will be copied and \@asid->size will be set to the actual size of the
- * provided address space identifier.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@asid is NULL.
- */
-extern pt_export int pt_insn_asid(const struct pt_insn_decoder *decoder,
- struct pt_asid *asid, size_t size);
-
-/** Determine the next instruction.
- *
- * On success, provides the next instruction in execution order in \@insn.
- *
- * The \@size argument must be set to sizeof(struct pt_insn).
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns pts_eos to indicate the end of the trace stream. Subsequent calls
- * to pt_insn_next() will continue to return pts_eos until trace is required
- * to determine the next instruction.
- *
- * Returns -pte_event_ignored to indicate that the user needs to drain events
- * using pt_insn_event() before continuing.
- *
- * Returns -pte_bad_context if the decoder encountered an unexpected packet.
- * Returns -pte_bad_opc if the decoder encountered unknown packets.
- * Returns -pte_bad_packet if the decoder encountered unknown packet payloads.
- * Returns -pte_bad_query if the decoder got out of sync.
- * Returns -pte_eos if decoding reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@decoder or \@insn is NULL.
- * Returns -pte_nomap if the memory at the instruction address can't be read.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_insn_next(struct pt_insn_decoder *decoder,
- struct pt_insn *insn, size_t size);
-
-/** Get the next pending event.
- *
- * On success, provides the next event in \@event and updates \@decoder.
- *
- * The \@size argument must be set to sizeof(struct pt_event).
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns -pte_bad_query if there is no event.
- * Returns -pte_invalid if \@decoder or \@event is NULL.
- * Returns -pte_invalid if \@size is too small.
- */
-extern pt_export int pt_insn_event(struct pt_insn_decoder *decoder,
- struct pt_event *event, size_t size);
-
-
-
-/* Block decoder. */
-
-
-
-/** A block of instructions.
- *
- * Instructions in this block are executed sequentially but are not necessarily
- * contiguous in memory. Users are expected to follow direct branches.
- */
-struct pt_block {
- /** The IP of the first instruction in this block. */
- uint64_t ip;
-
- /** The IP of the last instruction in this block.
- *
- * This can be used for error-detection.
- */
- uint64_t end_ip;
-
- /** The image section that contains the instructions in this block.
- *
- * A value of zero means that the section did not have an identifier.
- * The section was not added via an image section cache or the memory
- * was read via the read memory callback.
- */
- int isid;
-
- /** The execution mode for all instructions in this block. */
- enum pt_exec_mode mode;
-
- /** The instruction class for the last instruction in this block.
- *
- * This field may be set to ptic_unknown (ptic_error prior to v2.1) to
- * indicate that the instruction class is not available. The block
- * decoder may choose to not provide the instruction class in some
- * cases for performance reasons.
- */
- enum pt_insn_class iclass;
-
- /** The number of instructions in this block. */
- uint16_t ninsn;
-
- /** The raw bytes of the last instruction in this block in case the
- * instruction does not fit entirely into this block's section.
- *
- * This field is only valid if \@truncated is set.
- */
- uint8_t raw[pt_max_insn_size];
-
- /** The size of the last instruction in this block in bytes.
- *
- * This field is only valid if \@truncated is set.
- */
- uint8_t size;
-
- /** A collection of flags giving additional information about the
- * instructions in this block.
- *
- * - all instructions in this block were executed speculatively.
- */
- uint32_t speculative:1;
-
- /** - the last instruction in this block is truncated.
- *
- * It starts in this block's section but continues in one or more
- * other sections depending on how fragmented the memory image is.
- *
- * The raw bytes for the last instruction are provided in \@raw and
- * its size in \@size in this case.
- */
- uint32_t truncated:1;
-};
-
-/** Allocate an Intel PT block decoder.
- *
- * The decoder will work on the buffer defined in \@config, it shall contain
- * raw trace data and remain valid for the lifetime of the decoder.
- *
- * The decoder needs to be synchronized before it can be used.
- */
-extern pt_export struct pt_block_decoder *
-pt_blk_alloc_decoder(const struct pt_config *config);
-
-/** Free an Intel PT block decoder.
- *
- * This will destroy the decoder's default image.
- *
- * The \@decoder must not be used after a successful return.
- */
-extern pt_export void pt_blk_free_decoder(struct pt_block_decoder *decoder);
-
-/** Synchronize an Intel PT block decoder.
- *
- * Search for the next synchronization point in forward or backward direction.
- *
- * If \@decoder has not been synchronized, yet, the search is started at the
- * beginning of the trace buffer in case of forward synchronization and at the
- * end of the trace buffer in case of backward synchronization.
- *
- * Returns zero or a positive value on success, a negative error code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if no further synchronization point is found.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_blk_sync_forward(struct pt_block_decoder *decoder);
-extern pt_export int pt_blk_sync_backward(struct pt_block_decoder *decoder);
-
-/** Manually synchronize an Intel PT block decoder.
- *
- * Synchronize \@decoder on the syncpoint at \@offset. There must be a PSB
- * packet at \@offset.
- *
- * Returns zero or a positive value on success, a negative error code otherwise.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if \@offset lies outside of \@decoder's trace buffer.
- * Returns -pte_eos if \@decoder reaches the end of its trace buffer.
- * Returns -pte_invalid if \@decoder is NULL.
- * Returns -pte_nosync if there is no syncpoint at \@offset.
- */
-extern pt_export int pt_blk_sync_set(struct pt_block_decoder *decoder,
- uint64_t offset);
-
-#if (LIBIPT_VERSION >= 0x202)
-/** Re-synchronize an Intel PT block decoder.
- *
- * Scan ahead for the next IP providing packet. Apply state changing packets
- * along the way, including timing packets, but ignore everything else.
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative
- * error code otherwise.
- *
- * Returns pts_ip_suppressed if re-synchronization succeeded with tracing
- * disabled.
- *
- * Returns -pte_event_ignored if an event cannot safely be skipped
- * (e.g. ptwrite). Use pt_blk_event() to read the event, then continue with
- * pt_blk_resync() until re-synchronization completes or fails with an error.
- *
- * Returns -pte_bad_opc if an unknown packet is encountered.
- * Returns -pte_bad_packet if an unknown packet payload is encountered.
- * Returns -pte_eos if no further synchronization point is found.
- * Returns -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_blk_resync(struct pt_block_decoder *decoder);
-#endif
-
-/** Get the current decoder position.
- *
- * Fills the current \@decoder position into \@offset.
- *
- * This is useful for reporting errors.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_blk_get_offset(const struct pt_block_decoder *decoder,
- uint64_t *offset);
-
-/** Get the position of the last synchronization point.
- *
- * Fills the last synchronization position into \@offset.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@offset is NULL.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int
-pt_blk_get_sync_offset(const struct pt_block_decoder *decoder,
- uint64_t *offset);
-
-/** Get the traced image.
- *
- * The returned image may be modified as long as \@decoder is not running.
- *
- * Returns a pointer to the traced image \@decoder uses for reading memory.
- * Returns NULL if \@decoder is NULL.
- */
-extern pt_export struct pt_image *
-pt_blk_get_image(struct pt_block_decoder *decoder);
-
-/** Set the traced image.
- *
- * Sets the image that \@decoder uses for reading memory to \@image. If \@image
- * is NULL, sets the image to \@decoder's default image.
- *
- * Only one image can be active at any time.
- *
- * Returns zero on success, a negative error code otherwise.
- * Return -pte_invalid if \@decoder is NULL.
- */
-extern pt_export int pt_blk_set_image(struct pt_block_decoder *decoder,
- struct pt_image *image);
-
-/* Return a pointer to \@decoder's configuration.
- *
- * Returns a non-null pointer on success, NULL if \@decoder is NULL.
- */
-extern pt_export const struct pt_config *
-pt_blk_get_config(const struct pt_block_decoder *decoder);
-
-/** Return the current time.
- *
- * On success, provides the time at the last preceding timing packet in \@time.
- *
- * The time is similar to what a rdtsc instruction would return. Depending
- * on the configuration, the time may not be fully accurate. If TSC is not
- * enabled, the time is relative to the last synchronization and can't be used
- * to correlate with other TSC-based time sources. In this case, -pte_no_time
- * is returned and the relative time is provided in \@time.
- *
- * Some timing-related packets may need to be dropped (mostly due to missing
- * calibration or incomplete configuration). To get an idea about the quality
- * of the estimated time, we record the number of dropped MTC and CYC packets.
- *
- * If \@lost_mtc is not NULL, set it to the number of lost MTC packets.
- * If \@lost_cyc is not NULL, set it to the number of lost CYC packets.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@time is NULL.
- * Returns -pte_no_time if there has not been a TSC packet.
- */
-extern pt_export int pt_blk_time(struct pt_block_decoder *decoder,
- uint64_t *time, uint32_t *lost_mtc,
- uint32_t *lost_cyc);
-
-/** Return the current core bus ratio.
- *
- * On success, provides the current core:bus ratio in \@cbr. The ratio is
- * defined as core cycles per bus clock cycle.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@cbr is NULL.
- * Returns -pte_no_cbr if there has not been a CBR packet.
- */
-extern pt_export int pt_blk_core_bus_ratio(struct pt_block_decoder *decoder,
- uint32_t *cbr);
-
-/** Return the current address space identifier.
- *
- * On success, provides the current address space identifier in \@asid.
- *
- * The \@size argument must be set to sizeof(struct pt_asid). At most \@size
- * bytes will be copied and \@asid->size will be set to the actual size of the
- * provided address space identifier.
- *
- * Returns zero on success, a negative error code otherwise.
- *
- * Returns -pte_invalid if \@decoder or \@asid is NULL.
- */
-extern pt_export int pt_blk_asid(const struct pt_block_decoder *decoder,
- struct pt_asid *asid, size_t size);
-
-/** Determine the next block of instructions.
- *
- * On success, provides the next block of instructions in execution order in
- * \@block.
- *
- * The \@size argument must be set to sizeof(struct pt_block).
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns pts_eos to indicate the end of the trace stream. Subsequent calls
- * to pt_block_next() will continue to return pts_eos until trace is required
- * to determine the next instruction.
- *
- * Returns -pte_bad_context if the decoder encountered an unexpected packet.
- * Returns -pte_bad_opc if the decoder encountered unknown packets.
- * Returns -pte_bad_packet if the decoder encountered unknown packet payloads.
- * Returns -pte_bad_query if the decoder got out of sync.
- * Returns -pte_eos if decoding reached the end of the Intel PT buffer.
- * Returns -pte_invalid if \@decoder or \@block is NULL.
- * Returns -pte_nomap if the memory at the instruction address can't be read.
- * Returns -pte_nosync if \@decoder is out of sync.
- */
-extern pt_export int pt_blk_next(struct pt_block_decoder *decoder,
- struct pt_block *block, size_t size);
-
-/** Get the next pending event.
- *
- * On success, provides the next event in \@event and updates \@decoder.
- *
- * The \@size argument must be set to sizeof(struct pt_event).
- *
- * Returns a non-negative pt_status_flag bit-vector on success, a negative error
- * code otherwise.
- *
- * Returns -pte_bad_query if there is no event.
- * Returns -pte_invalid if \@decoder or \@event is NULL.
- * Returns -pte_invalid if \@size is too small.
- */
-extern pt_export int pt_blk_event(struct pt_block_decoder *decoder,
- struct pt_event *event, size_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* INTEL_PT_H */
diff --git a/hyperdbg/dependencies/pdbex b/hyperdbg/dependencies/pdbex
index 0e114472..c827cf47 160000
--- a/hyperdbg/dependencies/pdbex
+++ b/hyperdbg/dependencies/pdbex
@@ -1 +1 @@
-Subproject commit 0e1144729a5b2d737cce11d1c0e083033630fff8
+Subproject commit c827cf477cc7de8fb08b989fa7bbcde439a17712
diff --git a/hyperdbg/dependencies/phnt b/hyperdbg/dependencies/phnt
new file mode 160000
index 00000000..619cbb46
--- /dev/null
+++ b/hyperdbg/dependencies/phnt
@@ -0,0 +1 @@
+Subproject commit 619cbb4672c6739bcd0302a1d542f34f51effe93
diff --git a/hyperdbg/dependencies/zydis b/hyperdbg/dependencies/zydis
index e910df2f..d45e7416 160000
--- a/hyperdbg/dependencies/zydis
+++ b/hyperdbg/dependencies/zydis
@@ -1 +1 @@
-Subproject commit e910df2fa54273b1a489b39771d331036e8de2db
+Subproject commit d45e7416b2123706c3695fa802e6b29543f1a549
diff --git a/hyperdbg/libhyperdbg/code/app/dllmain.cpp b/hyperdbg/hprdbgctrl/code/app/dllmain.cpp
similarity index 100%
rename from hyperdbg/libhyperdbg/code/app/dllmain.cpp
rename to hyperdbg/hprdbgctrl/code/app/dllmain.cpp
diff --git a/hyperdbg/hprdbgctrl/code/app/hprdbgctrl.cpp b/hyperdbg/hprdbgctrl/code/app/hprdbgctrl.cpp
new file mode 100644
index 00000000..533406d9
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/app/hprdbgctrl.cpp
@@ -0,0 +1,749 @@
+/**
+ * @file hprdbgctrl.cpp
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @brief Main interface to connect applications to driver
+ * @details
+ * @version 0.1
+ * @date 2020-04-11
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+
+using namespace std;
+
+//
+// Global Variables
+//
+extern HANDLE g_DeviceHandle;
+extern HANDLE g_IsDriverLoadedSuccessfully;
+extern BOOLEAN g_IsVmxOffProcessStart;
+extern Callback g_MessageHandler;
+extern TCHAR g_DriverLocation[MAX_PATH];
+extern LIST_ENTRY g_EventTrace;
+extern BOOLEAN g_LogOpened;
+extern BOOLEAN g_BreakPrintingOutput;
+extern BOOLEAN g_IsConnectedToRemoteDebugger;
+extern BOOLEAN g_OutputSourcesInitialized;
+extern BOOLEAN g_IsSerialConnectedToRemoteDebugger;
+extern BOOLEAN g_IsDebuggerModulesLoaded;
+extern BOOLEAN g_IsReversingMachineModulesLoaded;
+extern LIST_ENTRY g_OutputSources;
+
+/**
+ * @brief Set the function callback that will be called if any message
+ * needs to be shown
+ *
+ * @param handler Function that handles the messages
+ */
+VOID
+HyperDbgSetTextMessageCallback(Callback handler)
+{
+ g_MessageHandler = handler;
+}
+
+/**
+ * @brief Show messages
+ *
+ * @param Fmt format string message
+ */
+VOID
+ShowMessages(const char * Fmt, ...)
+{
+ va_list ArgList;
+ va_list Args;
+ char TempMessage[COMMUNICATION_BUFFER_SIZE + TCP_END_OF_BUFFER_CHARS_COUNT] = {0};
+
+ if (g_MessageHandler == NULL && !g_IsConnectedToRemoteDebugger && !g_IsSerialConnectedToRemoteDebugger)
+ {
+ va_start(Args, Fmt);
+ vprintf(Fmt, Args);
+ va_end(Args);
+ if (!g_LogOpened)
+ {
+ return;
+ }
+ }
+
+ va_start(ArgList, Fmt);
+ int sprintfresult = vsprintf_s(TempMessage, Fmt, ArgList);
+ va_end(ArgList);
+
+ if (sprintfresult != -1)
+ {
+ if (g_IsConnectedToRemoteDebugger)
+ {
+ //
+ // vsprintf_s and vswprintf_s return the number of characters written,
+ // not including the terminating null character, or a negative value
+ // if an output error occurs.
+ //
+ RemoteConnectionSendResultsToHost(TempMessage, sprintfresult);
+ }
+ else if (g_IsSerialConnectedToRemoteDebugger)
+ {
+ KdSendUsermodePrints(TempMessage, sprintfresult);
+ }
+
+ if (g_LogOpened)
+ {
+ //
+ // .logopen command executed
+ //
+ LogopenSaveToFile(TempMessage);
+ }
+ if (g_MessageHandler != NULL)
+ {
+ //
+ // There is another handler
+ //
+ g_MessageHandler(TempMessage);
+ }
+ }
+}
+
+/**
+ * @brief Read kernel buffers using IRP Pending
+ *
+ * @param Device Driver handle
+ */
+void
+ReadIrpBasedBuffer()
+{
+ BOOL Status;
+ ULONG ReturnedLength;
+ REGISTER_NOTIFY_BUFFER RegisterEvent;
+ UINT32 OperationCode;
+ DWORD ErrorNum;
+ HANDLE Handle;
+
+ RegisterEvent.hEvent = NULL;
+ RegisterEvent.Type = IRP_BASED;
+
+ //
+ // Create another handle to be used in for reading kernel messages,
+ // it is because I noticed that if I use a same handle for IRP Pending
+ // and other IOCTLs then if I complete that IOCTL then both of the current
+ // IOCTL and the Pending IRP are completed and return to user mode,
+ // even if it's odd but that what happens, so this way we can solve it
+ // if you know why this problem happens, then contact me !
+ //
+ Handle = CreateFileA(
+ "\\\\.\\HyperDbgDebuggerDevice",
+ GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, /// lpSecurityAttirbutes
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
+ NULL); /// lpTemplateFile
+
+ if (Handle == INVALID_HANDLE_VALUE)
+ {
+ ErrorNum = GetLastError();
+
+ if (ErrorNum == ERROR_ACCESS_DENIED)
+ {
+ ShowMessages("err, access denied\nare you sure you have administrator "
+ "rights?\n");
+ }
+ else if (ErrorNum == ERROR_GEN_FAILURE)
+ {
+ ShowMessages("err, a device attached to the system is not functioning\n"
+ "vmx feature might be disabled from BIOS or VBS/HVCI is active\n");
+ }
+ else
+ {
+ ShowMessages("err, CreateFile failed with (%x)\n", ErrorNum);
+ }
+
+ g_DeviceHandle = NULL;
+ Handle = NULL;
+
+ return;
+ }
+
+ //
+ // allocate buffer for transferring messages
+ //
+ char * OutputBuffer = (char *)malloc(UsermodeBufferSize);
+
+ try
+ {
+ while (TRUE)
+ {
+ if (!g_IsVmxOffProcessStart)
+ {
+ //
+ // Clear the buffer
+ //
+ ZeroMemory(OutputBuffer, UsermodeBufferSize);
+
+ Sleep(DefaultSpeedOfReadingKernelMessages); // we're not trying to eat all of the CPU ;)
+
+ Status = DeviceIoControl(
+ Handle, // Handle to device
+ IOCTL_REGISTER_EVENT, // IO Control Code (IOCTL)
+ &RegisterEvent, // Input Buffer to driver.
+ SIZEOF_REGISTER_EVENT * 2, // Length of input buffer in bytes. (x 2 is bcuz as the
+ // driver is x64 and has 64 bit values)
+ OutputBuffer, // Output Buffer from driver.
+ UsermodeBufferSize, // Length of output buffer in bytes.
+ &ReturnedLength, // Bytes placed in buffer.
+ NULL // synchronous call
+ );
+
+ if (!Status)
+ {
+ //
+ // Error occurred for second time, and we show the error message
+ //
+ // ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
+
+ //
+ // if we reach here, the packet is probably failed, it might
+ // be because of using flush command
+ //
+ continue;
+ }
+
+ //
+ // Compute the received buffer's operation code
+ //
+ OperationCode = 0;
+ memcpy(&OperationCode, OutputBuffer, sizeof(UINT32));
+
+ /*
+ ShowMessages("Returned Length : 0x%x \n", ReturnedLength);
+ ShowMessages("Operation Code : 0x%x \n", OperationCode);
+ */
+
+ switch (OperationCode)
+ {
+ case OPERATION_LOG_NON_IMMEDIATE_MESSAGE:
+
+ if (g_BreakPrintingOutput)
+ {
+ //
+ // means that the user asserts a CTRL+C or CTRL+BREAK Signal
+ // we shouldn't show or save anything in this case
+ //
+ continue;
+ }
+
+ ShowMessages("%s", OutputBuffer + sizeof(UINT32));
+
+ break;
+ case OPERATION_LOG_INFO_MESSAGE:
+
+ if (g_BreakPrintingOutput)
+ {
+ //
+ // means that the user asserts a CTRL+C or CTRL+BREAK Signal
+ // we shouldn't show or save anything in this case
+ //
+ continue;
+ }
+
+ ShowMessages("%s", OutputBuffer + sizeof(UINT32));
+
+ break;
+ case OPERATION_LOG_ERROR_MESSAGE:
+ if (g_BreakPrintingOutput)
+ {
+ //
+ // means that the user asserts a CTRL+C or CTRL+BREAK Signal
+ // we shouldn't show or save anything in this case
+ //
+ continue;
+ }
+
+ ShowMessages("%s", OutputBuffer + sizeof(UINT32));
+
+ break;
+ case OPERATION_LOG_WARNING_MESSAGE:
+
+ if (g_BreakPrintingOutput)
+ {
+ //
+ // means that the user asserts a CTRL+C or CTRL+BREAK Signal
+ // we shouldn't show or save anything in this case
+ //
+ continue;
+ }
+
+ ShowMessages("%s", OutputBuffer + sizeof(UINT32));
+
+ break;
+
+ case OPERATION_COMMAND_FROM_DEBUGGER_CLOSE_AND_UNLOAD_VMM:
+
+ KdCloseConnection();
+
+ break;
+
+ case OPERATION_DEBUGGEE_USER_INPUT:
+
+ KdHandleUserInputInDebuggee((DEBUGGEE_USER_INPUT_PACKET *)(OutputBuffer + sizeof(UINT32)));
+
+ break;
+
+ case OPERATION_DEBUGGEE_REGISTER_EVENT:
+
+ KdRegisterEventInDebuggee(
+ (PDEBUGGER_GENERAL_EVENT_DETAIL)(OutputBuffer + sizeof(UINT32)),
+ ReturnedLength);
+
+ break;
+
+ case OPERATION_DEBUGGEE_ADD_ACTION_TO_EVENT:
+
+ KdAddActionToEventInDebuggee(
+ (PDEBUGGER_GENERAL_ACTION)(OutputBuffer + sizeof(UINT32)),
+ ReturnedLength);
+
+ break;
+
+ case OPERATION_DEBUGGEE_CLEAR_EVENTS:
+
+ KdSendModifyEventInDebuggee(
+ (PDEBUGGER_MODIFY_EVENTS)(OutputBuffer + sizeof(UINT32)),
+ TRUE);
+
+ break;
+
+ case OPERATION_DEBUGGEE_CLEAR_EVENTS_WITHOUT_NOTIFYING_DEBUGGER:
+
+ KdSendModifyEventInDebuggee(
+ (PDEBUGGER_MODIFY_EVENTS)(OutputBuffer + sizeof(UINT32)),
+ FALSE);
+
+ break;
+
+ case OPERATION_HYPERVISOR_DRIVER_IS_SUCCESSFULLY_LOADED:
+
+ //
+ // Indicate that driver (Hypervisor) is loaded successfully
+ //
+ SetEvent(g_IsDriverLoadedSuccessfully);
+
+ break;
+
+ case OPERATION_HYPERVISOR_DRIVER_END_OF_IRPS:
+
+ //
+ // End of receiving messages (IRPs), nothing to do
+ //
+ break;
+
+ case OPERATION_COMMAND_FROM_DEBUGGER_RELOAD_SYMBOL:
+
+ //
+ // Pause debugger after getting the results
+ //
+ KdReloadSymbolsInDebuggee(TRUE,
+ ((PDEBUGGEE_SYMBOL_REQUEST_PACKET)(OutputBuffer + sizeof(UINT32)))->ProcessId);
+
+ break;
+
+ case OPERATION_NOTIFICATION_FROM_USER_DEBUGGER_PAUSE:
+
+ //
+ // handle pausing packet from user debugger
+ //
+ UdHandleUserDebuggerPausing(
+ (PDEBUGGEE_UD_PAUSED_PACKET)(OutputBuffer + sizeof(UINT32)));
+
+ break;
+
+ default:
+
+ //
+ // Check if there are available output sources
+ //
+ if (!g_OutputSourcesInitialized || !ForwardingCheckAndPerformEventForwarding(OperationCode,
+ OutputBuffer + sizeof(UINT32),
+ ReturnedLength - sizeof(UINT32) - 1))
+ {
+ if (g_BreakPrintingOutput)
+ {
+ //
+ // means that the user asserts a CTRL+C or CTRL+BREAK Signal
+ // we shouldn't show or save anything in this case
+ //
+ continue;
+ }
+
+ ShowMessages("%s", OutputBuffer + sizeof(UINT32));
+ }
+
+ break;
+ }
+ }
+ else
+ {
+ //
+ // the thread should not work anymore
+ //
+ free(OutputBuffer);
+
+ //
+ // closeHandle
+ //
+ if (!CloseHandle(Handle))
+ {
+ ShowMessages("err, closing handle 0x%x\n", GetLastError());
+ }
+
+ return;
+ }
+ }
+ }
+ catch (const std::exception &)
+ {
+ ShowMessages("err, exception occurred in creating handle or parsing buffer\n");
+ }
+
+ free(OutputBuffer);
+
+ //
+ // closeHandle
+ //
+ if (!CloseHandle(Handle))
+ {
+ ShowMessages("err, closing handle 0x%x\n", GetLastError());
+ };
+}
+
+/**
+ * @brief Create a thread for pending buffers
+ *
+ * @param Data
+ * @return DWORD Device Handle
+ */
+DWORD WINAPI
+IrpBasedBufferThread(void * data)
+{
+ //
+ // Do stuff. This will be the first function called on the new
+ // thread. When this function returns, the thread goes away. See
+ // MSDN for more details. Test Irp Based Notifications
+ //
+ ReadIrpBasedBuffer();
+
+ return 0;
+}
+
+/**
+ * @brief Install VMM driver
+ *
+ * @return int return zero if it was successful or non-zero if there
+ * was error
+ */
+HPRDBGCTRL_API int
+HyperDbgInstallVmmDriver()
+{
+ //
+ // The driver is not started yet so let us the install driver
+ // First setup full path to driver name
+ //
+
+ if (!SetupDriverName(KERNEL_DEBUGGER_DRIVER_NAME, g_DriverLocation, sizeof(g_DriverLocation)))
+ {
+ return 1;
+ }
+
+ if (!ManageDriver(KERNEL_DEBUGGER_DRIVER_NAME, g_DriverLocation, DRIVER_FUNC_INSTALL))
+ {
+ ShowMessages("unable to install VMM driver\n");
+
+ //
+ // Error - remove driver
+ //
+ ManageDriver(KERNEL_DEBUGGER_DRIVER_NAME, g_DriverLocation, DRIVER_FUNC_REMOVE);
+
+ return 1;
+ }
+
+ return 0;
+}
+
+/**
+ * @brief Stop the driver
+ *
+ * @return int return zero if it was successful or non-zero if there
+ * was error
+ */
+int
+HyperDbgStopDriver(LPCTSTR DriverName)
+{
+ //
+ // Unload the driver if loaded
+ //
+ if (g_DriverLocation[0] != (TCHAR)0 && ManageDriver(DriverName, g_DriverLocation, DRIVER_FUNC_STOP))
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+/**
+ * @brief Stop VMM driver
+ *
+ * @return int return zero if it was successful or non-zero if there
+ * was error
+ */
+HPRDBGCTRL_API int
+HyperDbgStopVmmDriver()
+{
+ return HyperDbgStopDriver(KERNEL_DEBUGGER_DRIVER_NAME);
+}
+
+/**
+ * @brief Remove the driver
+ *
+ * @return int return zero if it was successful or non-zero if there
+ * was error
+ */
+int
+HyperDbgUninstallDriver(LPCTSTR DriverName)
+{
+ //
+ // Unload the driver if loaded. Ignore any errors
+ //
+ if (g_DriverLocation[0] != (TCHAR)0 && ManageDriver(DriverName, g_DriverLocation, DRIVER_FUNC_REMOVE))
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+/**
+ * @brief Remove the VMM driver
+ *
+ * @return int return zero if it was successful or non-zero if there
+ * was error
+ */
+HPRDBGCTRL_API int
+HyperDbgUninstallVmmDriver()
+{
+ return HyperDbgUninstallDriver(KERNEL_DEBUGGER_DRIVER_NAME);
+}
+
+/**
+ * @brief Load the VMM driver
+ *
+ * @return int return zero if it was successful or non-zero if there
+ * was error
+ */
+HPRDBGCTRL_API int
+HyperDbgLoadVmm()
+{
+ char CpuId[13] = {0};
+ DWORD ErrorNum;
+ DWORD ThreadId;
+
+ if (g_DeviceHandle)
+ {
+ ShowMessages("handle of the driver found, if you use 'load' before, please "
+ "unload it using 'unload'\n");
+ return 1;
+ }
+
+ //
+ // Read the vendor string
+ //
+ HyperDbgReadVendorString(CpuId);
+
+ ShowMessages("current processor vendor is : %s\n", CpuId);
+
+ if (strcmp(CpuId, "GenuineIntel") == 0)
+ {
+ ShowMessages("virtualization technology is vt-x\n");
+ }
+ else
+ {
+ ShowMessages("this program is not designed to run in a non-VT-x "
+ "environment !\n");
+ return 1;
+ }
+
+ if (HyperDbgVmxSupportDetection())
+ {
+ ShowMessages("vmx operation is supported by your processor\n");
+ }
+ else
+ {
+ ShowMessages("vmx operation is not supported by your processor\n");
+ return 1;
+ }
+
+ //
+ // Make sure that this variable is false, because it might be set to
+ // true as the result of a previous load
+ //
+ g_IsVmxOffProcessStart = FALSE;
+
+ //
+ // Init entering vmx
+ //
+ g_DeviceHandle = CreateFileA(
+ "\\\\.\\HyperDbgDebuggerDevice",
+ GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, /// lpSecurityAttirbutes
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
+ NULL); /// lpTemplateFile
+
+ if (g_DeviceHandle == INVALID_HANDLE_VALUE)
+ {
+ ErrorNum = GetLastError();
+ if (ErrorNum == ERROR_ACCESS_DENIED)
+ {
+ ShowMessages("err, access denied\nare you sure you have administrator "
+ "rights?\n");
+ }
+ else if (ErrorNum == ERROR_GEN_FAILURE)
+ {
+ ShowMessages("err, a device attached to the system is not functioning\n"
+ "vmx feature might be disabled from BIOS or VBS/HVCI is active\n");
+ }
+ else
+ {
+ ShowMessages("err, CreateFile failed (%x)\n", ErrorNum);
+ }
+
+ g_DeviceHandle = NULL;
+ return 1;
+ }
+
+ //
+ // Initialize the list of events
+ //
+ InitializeListHead(&g_EventTrace);
+
+#if !UseDbgPrintInsteadOfUsermodeMessageTracking
+ HANDLE Thread = CreateThread(NULL, 0, IrpBasedBufferThread, NULL, 0, &ThreadId);
+
+ // if (Thread)
+ // {
+ // ShowMessages("thread Created successfully\n");
+ // }
+
+#endif
+
+ return 0;
+}
+
+/**
+ * @brief Unload VMM driver
+ *
+ * @return int return zero if it was successful or non-zero if there
+ * was error
+ */
+HPRDBGCTRL_API int
+HyperDbgUnloadVmm()
+{
+ BOOL Status;
+
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturnOne);
+
+ ShowMessages("start terminating...\n");
+
+ //
+ // Uninitialize the user debugger if it's initialized
+ //
+ UdUninitializeUserDebugger();
+
+ //
+ // Send IOCTL to mark complete all IRP Pending
+ //
+ Status = DeviceIoControl(g_DeviceHandle, // Handle to device
+ IOCTL_TERMINATE_VMX, // IO Control Code (IOCTL)
+ NULL, // Input Buffer to driver.
+ 0, // Length of input buffer in bytes. (x 2 is bcuz
+ // as the driver is x64 and has 64 bit values)
+ NULL, // Output Buffer from driver.
+ 0, // Length of output buffer in bytes.
+ NULL, // Bytes placed in buffer.
+ NULL // synchronous call
+ );
+
+ //
+ // wait to make sure we don't use an invalid handle in another Ioctl
+ //
+ if (!Status)
+ {
+ ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
+ return 1;
+ }
+
+ //
+ // Send IOCTL to mark complete all IRP Pending
+ //
+ Status = DeviceIoControl(
+ g_DeviceHandle, // Handle to device
+ IOCTL_RETURN_IRP_PENDING_PACKETS_AND_DISALLOW_IOCTL, // IO
+ // Control
+ // code
+ NULL, // Input Buffer to driver.
+ 0, // Length of input buffer in bytes. (x 2 is bcuz as the
+ // driver is x64 and has 64 bit values)
+ NULL, // Output Buffer from driver.
+ 0, // Length of output buffer in bytes.
+ NULL, // Bytes placed in buffer.
+ NULL // synchronous call
+ );
+
+ //
+ // wait to make sure we don't use an invalid handle in another Ioctl
+ //
+ if (!Status)
+ {
+ ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
+ return 1;
+ }
+
+ //
+ // Indicate that the finish process start or not
+ //
+ g_IsVmxOffProcessStart = TRUE;
+
+ Sleep(1000); // Wait so next thread can return from IRP Pending
+
+ //
+ // Send IRP_MJ_CLOSE to driver to terminate Vmxs
+ //
+ if (!CloseHandle(g_DeviceHandle))
+ {
+ ShowMessages("err, closing handle 0x%x\n", GetLastError());
+ return 1;
+ };
+
+ //
+ // Null the handle to indicate that the driver's device is not ready
+ // to use
+ //
+ g_DeviceHandle = NULL;
+
+ //
+ // Debugger module is not loaded anymore
+ //
+ g_IsDebuggerModulesLoaded = FALSE;
+
+ //
+ // Check if we found an already built symbol table
+ //
+ SymbolDeleteSymTable();
+
+ ShowMessages("you're not on HyperDbg's hypervisor anymore!\n");
+
+ return 0;
+}
diff --git a/hyperdbg/libhyperdbg/code/assembly/asm-vmx-checks.asm b/hyperdbg/hprdbgctrl/code/assembly/asm-vmx-checks.asm
similarity index 72%
rename from hyperdbg/libhyperdbg/code/assembly/asm-vmx-checks.asm
rename to hyperdbg/hprdbgctrl/code/assembly/asm-vmx-checks.asm
index dd81a1d8..bc2360d7 100644
--- a/hyperdbg/libhyperdbg/code/assembly/asm-vmx-checks.asm
+++ b/hyperdbg/hprdbgctrl/code/assembly/asm-vmx-checks.asm
@@ -10,32 +10,25 @@ PUBLIC AsmVmxSupportDetection
;------------------------------------------------------------------------
AsmVmxSupportDetection PROC
- push rbx
- push rcx
- push rdx
-
- xor eax, eax
- inc eax
+
+ xor eax, eax
+ inc eax
cpuid
- xor rax, rax
- bt ecx, 05h
- jc VMXSupport
+ xor rax, rax
+ bt ecx, 05h
+ jc VMXSupport
VMXNotSupport:
jmp RetInst
VMXSupport:
- mov rax, 01h
+ mov rax, 01h
RetInst:
- pop rdx
- pop rcx
- pop rbx
-
ret
AsmVmxSupportDetection ENDP
;------------------------------------------------------------------------
-END
\ No newline at end of file
+END
\ No newline at end of file
diff --git a/hyperdbg/libhyperdbg/code/common/common.cpp b/hyperdbg/hprdbgctrl/code/common/common.cpp
similarity index 82%
rename from hyperdbg/libhyperdbg/code/common/common.cpp
rename to hyperdbg/hprdbgctrl/code/common/common.cpp
index 2f494eab..27182631 100644
--- a/hyperdbg/libhyperdbg/code/common/common.cpp
+++ b/hyperdbg/hprdbgctrl/code/common/common.cpp
@@ -44,11 +44,11 @@ SeparateTo64BitValue(UINT64 Value)
* @return VOID
*/
VOID
-PrintBits(const UINT32 Size, const VOID * Ptr)
+PrintBits(const UINT32 Size, const void * Ptr)
{
- UCHAR * Buf = (UCHAR *)Ptr;
- UCHAR Byte;
- INT i, j;
+ unsigned char * Buf = (unsigned char *)Ptr;
+ unsigned char Byte;
+ int i, j;
for (i = Size - 1; i >= 0; i--)
{
@@ -72,10 +72,10 @@ PrintBits(const UINT32 Size, const VOID * Ptr)
BOOL
Replace(std::string & str, const std::string & from, const std::string & to)
{
- SIZE_T StartPos = str.find(from);
- if (StartPos == std::string::npos)
+ size_t start_pos = str.find(from);
+ if (start_pos == std::string::npos)
return FALSE;
- str.replace(StartPos, from.size(), to);
+ str.replace(start_pos, from.size(), to);
return TRUE;
}
@@ -90,7 +90,7 @@ Replace(std::string & str, const std::string & from, const std::string & to)
VOID
ReplaceAll(string & str, const string & from, const string & to)
{
- SIZE_T SartPos = 0;
+ size_t SartPos = 0;
if (from.empty())
return;
@@ -114,7 +114,7 @@ ReplaceAll(string & str, const string & from, const string & to)
* @return const vector
*/
const vector
-Split(const string & s, const CHAR & c)
+Split(const string & s, const char & c)
{
string buff {""};
vector v;
@@ -210,18 +210,18 @@ IsDecimalNotation(const string & s)
* @brief converts hex to bytes
*
* @param hex
- * @return vector
+ * @return vector
*/
-vector
+vector
HexToBytes(const string & hex)
{
- vector Bytes;
+ vector Bytes;
- for (UINT32 i = 0; i < hex.length(); i += 2)
+ for (unsigned int i = 0; i < hex.length(); i += 2)
{
std::string byteString = hex.substr(i, 2);
- CHAR Byte = (CHAR)strtol(byteString.c_str(), NULL, 16);
- Bytes.push_back(Byte);
+ char byte = (char)strtol(byteString.c_str(), NULL, 16);
+ Bytes.push_back(byte);
}
return Bytes;
@@ -283,19 +283,19 @@ ConvertStringToUInt64(string TextToConvert, PUINT64 Result)
}
else
{
- errno = 0;
- CHAR * Unparsed = NULL;
- const CHAR * S = TextToConvert.c_str();
- const UINT64 N = strtoull(S, &Unparsed, 10);
+ errno = 0;
+ char * unparsed = NULL;
+ const char * s = TextToConvert.c_str();
+ const unsigned long long int n = strtoull(s, &unparsed, 10);
- if (errno || (!N && S == Unparsed))
+ if (errno || (!n && s == unparsed))
{
// fflush(stdout);
// perror(s);
return FALSE;
}
- *Result = N;
+ *Result = n;
return TRUE;
}
}
@@ -316,11 +316,11 @@ ConvertStringToUInt64(string TextToConvert, PUINT64 Result)
//
// It's a hex number
//
- const CHAR * Text = TextToConvert.c_str();
- errno = 0;
- UINT64 ResultValue = strtoull(Text, NULL, 16);
+ const char * Text = TextToConvert.c_str();
+ errno = 0;
+ unsigned long long result = strtoull(Text, NULL, 16);
- *Result = ResultValue;
+ *Result = result;
if (errno == EINVAL)
{
@@ -386,8 +386,8 @@ ConvertStringToUInt32(string TextToConvert, PUINT32 Result)
{
try
{
- INT I = std::stoi(TextToConvert);
- *Result = I;
+ int i = std::stoi(TextToConvert);
+ *Result = i;
return TRUE;
}
catch (std::invalid_argument const &)
@@ -435,127 +435,6 @@ ConvertStringToUInt32(string TextToConvert, PUINT32 Result)
}
}
-/**
- * @brief check and convert command token to a 64 bit unsigned integer
- *
- * @param TargetToken the target command token
- * @param Result result will be save to the pointer
- *
- * @return BOOLEAN shows whether the conversion was successful or not
- */
-BOOLEAN
-ConvertTokenToUInt64(CommandToken TargetToken, PUINT64 Result)
-{
- //
- // Extract the token type and value from the tuple
- //
- std::string TargetTokenValue = std::get<1>(TargetToken);
-
- //
- // Convert the token value to 64 bit unsigned integer
- //
- return ConvertStringToUInt64(TargetTokenValue, Result);
-}
-
-/**
- * @brief Get case sensitive string from command token
- *
- * @param TargetToken the target command token
- * @return string the string value of the token
- */
-std::string
-GetCaseSensitiveStringFromCommandToken(CommandToken TargetToken)
-{
- //
- // Extract the token type and value from the tuple
- //
- std::string TargetTokenValue = std::get<1>(TargetToken); // the first index is case sensitive
-
- return TargetTokenValue;
-}
-
-/**
- * @brief Get lower case string from command token
- *
- * @param TargetToken the target command token
- * @return string the string value of the token
- */
-std::string
-GetLowerStringFromCommandToken(CommandToken TargetToken)
-{
- //
- // Extract the token type and value from the tuple
- //
- std::string TargetTokenValue = std::get<2>(TargetToken); // the second index is lower case
-
- return TargetTokenValue;
-}
-
-/**
- * @brief Compare lower case strings
- *
- * @param TargetToken the target command token
- * @param StringToCompare the string to compare
- *
- * @return BOOLEAN shows whether text is equal or not
- */
-BOOLEAN
-CompareLowerCaseStrings(CommandToken TargetToken, const CHAR * StringToCompare)
-{
- //
- // Extract the token type and value from the tuple
- //
- std::string TargetTokenValue = std::get<2>(TargetToken); // the second index is lower case
-
- //
- // Convert the token value to 64 bit unsigned integer
- //
- return _stricmp(TargetTokenValue.c_str(), StringToCompare) == 0;
-}
-
-/**
- * @brief Is token bracket string
- *
- * @param TargetToken the target command token
- *
- * @return BOOLEAN shows whether the token is bracket string or not
- */
-BOOLEAN
-IsTokenBracketString(CommandToken TargetToken)
-{
- //
- // Extract the token type and value from the tuple
- //
- CommandParsingTokenType TargetTokenValue = std::get<0>(TargetToken);
-
- //
- // Check if the token is a bracket string
- //
- return TargetTokenValue == CommandParsingTokenType::BracketString;
-}
-
-/**
- * @brief check and convert command token to a 32 bit unsigned integer
- *
- * @param TargetToken the target command token
- * @param Result result will be save to the pointer
- *
- * @return BOOLEAN shows whether the conversion was successful or not
- */
-BOOLEAN
-ConvertTokenToUInt32(CommandToken TargetToken, PUINT32 Result)
-{
- //
- // Extract the token type and value from the tuple
- //
- std::string TargetTokenValue = std::get<1>(TargetToken);
-
- //
- // Convert the token value to 32 bit unsigned integer
- //
- return ConvertStringToUInt32(TargetTokenValue, Result);
-}
-
/**
* @brief checks whether the string ends with a special string or not
*
@@ -622,8 +501,8 @@ ValidateIP(const string & ip)
* @return true if vmx is supported
* @return false if vmx is not supported
*/
-BOOLEAN
-VmxSupportDetection()
+HPRDBGCTRL_API bool
+HyperDbgVmxSupportDetection()
{
//
// Call assembly function
@@ -674,7 +553,7 @@ SetPrivilege(HANDLE Token, // access token handle
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
- ShowMessages("err, the token does not have the specified (debug) privilege (ACCESS DENIED!)\n");
+ ShowMessages("err, the token does not have the specified privilege (ACCESS DENIED!)\n");
ShowMessages("make sure to run it with administrator privileges\n");
return FALSE;
}
@@ -687,7 +566,7 @@ SetPrivilege(HANDLE Token, // access token handle
*
* @param s
*/
-static inline VOID
+static inline void
ltrim(std::string & s)
{
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) { return !std::isspace(ch); }));
@@ -698,7 +577,7 @@ ltrim(std::string & s)
*
* @param s
*/
-static inline VOID
+static inline void
rtrim(std::string & s)
{
s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) { return !std::isspace(ch); })
@@ -711,7 +590,7 @@ rtrim(std::string & s)
*
* @param s
*/
-VOID
+void
Trim(std::string & s)
{
ltrim(s);
@@ -737,7 +616,7 @@ RemoveSpaces(std::string str)
* @return BOOLEAN shows whether the file exist or not
*/
BOOLEAN
-IsFileExistA(const CHAR * FileName)
+IsFileExistA(const char * FileName)
{
struct stat buffer;
return (stat(FileName, &buffer) == 0);
@@ -750,7 +629,7 @@ IsFileExistA(const CHAR * FileName)
* @return BOOLEAN shows whether the file exist or not
*/
BOOLEAN
-IsFileExistW(const WCHAR * FileName)
+IsFileExistW(const wchar_t * FileName)
{
struct _stat64i32 buffer;
return (_wstat(FileName, &buffer) == 0);
@@ -762,9 +641,9 @@ IsFileExistW(const WCHAR * FileName)
* @param Text
*/
BOOLEAN
-IsEmptyString(CHAR * Text)
+IsEmptyString(char * Text)
{
- SIZE_T Len;
+ size_t Len;
if (Text == NULL || Text[0] == '\0')
{
@@ -772,7 +651,7 @@ IsEmptyString(CHAR * Text)
}
Len = strlen(Text);
- for (SIZE_T i = 0; i < Len; i++)
+ for (size_t i = 0; i < Len; i++)
{
if (Text[i] != ' ' && Text[i] != '\t' && Text[i] != '\n')
{
@@ -854,16 +733,88 @@ StringToWString(std::wstring & ws, const std::string & s)
ws = WsTmp;
}
+/**
+ * @brief Split path and arguments and handle strings between quotes
+ *
+ * @param Qargs
+ * @param Command
+ * @return VOID
+ */
+VOID
+SplitPathAndArgs(std::vector & Qargs, const std::string & Command)
+{
+ int Len = (int)Command.length();
+ bool Qot = false, Sqot = false;
+ int ArgLen;
+
+ for (int i = 0; i < Len; i++)
+ {
+ int start = i;
+ if (Command[i] == '\"')
+ {
+ Qot = true;
+ }
+ else if (Command[i] == '\'')
+ Sqot = true;
+
+ if (Qot)
+ {
+ i++;
+ start++;
+ while (i < Len && Command[i] != '\"')
+ i++;
+ if (i < Len)
+ Qot = false;
+ ArgLen = i - start;
+ i++;
+ }
+ else if (Sqot)
+ {
+ i++;
+ while (i < Len && Command[i] != '\'')
+ i++;
+ if (i < Len)
+ Sqot = false;
+ ArgLen = i - start;
+ i++;
+ }
+ else
+ {
+ while (i < Len && Command[i] != ' ')
+ i++;
+ ArgLen = i - start;
+ }
+
+ string Temp = Command.substr(start, ArgLen);
+ if (!Temp.empty() && Temp != " ")
+ {
+ Qargs.push_back(Temp);
+ }
+ }
+
+ /*
+ for (int i = 0; i < Qargs.size(); i++)
+ {
+ std::cout << Qargs[i] << std::endl;
+ }
+
+ std::cout << Qargs.size();
+
+ if (Qot || Sqot)
+ std::cout << "One of the quotes is open\n";
+ */
+}
+
/**
* @brief Find case insensitive sub string in a given substring
*
* @param Input
* @param ToSearch
* @param Pos
- * @return SIZE_T
+ * @return size_t
*/
-SIZE_T
-FindCaseInsensitive(std::string Input, std::string ToSearch, SIZE_T Pos)
+size_t
+FindCaseInsensitive(std::string Input, std::string ToSearch, size_t Pos)
{
// Convert complete given String to lower case
std::transform(Input.begin(), Input.end(), Input.begin(), ::tolower);
@@ -879,10 +830,10 @@ FindCaseInsensitive(std::string Input, std::string ToSearch, SIZE_T Pos)
* @param Input
* @param ToSearch
* @param Pos
- * @return SIZE_T
+ * @return size_t
*/
-SIZE_T
-FindCaseInsensitiveW(std::wstring Input, std::wstring ToSearch, SIZE_T Pos)
+size_t
+FindCaseInsensitiveW(std::wstring Input, std::wstring ToSearch, size_t Pos)
{
// Convert complete given String to lower case
std::transform(Input.begin(), Input.end(), Input.begin(), ::tolower);
@@ -898,29 +849,31 @@ FindCaseInsensitiveW(std::wstring Input, std::wstring ToSearch, SIZE_T Pos)
* std::transform(vs.begin(), vs.end(), std::back_inserter(vc), ConvertStringVectorToCharPointerArray);
* from: https://stackoverflow.com/questions/7048888/stdvectorstdstring-to-char-array
*
- * @param s
- * @return CHAR*
+ * @param Input
+ * @param ToSearch
+ * @param Pos
+ * @return size_t
*/
-CHAR *
+char *
ConvertStringVectorToCharPointerArray(const std::string & s)
{
- CHAR * Pc = new CHAR[s.size() + 1];
- std::strcpy(Pc, s.c_str());
- return Pc;
+ char * pc = new char[s.size() + 1];
+ std::strcpy(pc, s.c_str());
+ return pc;
}
/**
* @brief Get cpuid results
*
- * @param Func
- * @param SubFunc
- * @param CpuInfo
+ * @param UINT32 Func
+ * @param UINT32 SubFunc
+ * @param int * CpuInfo
* @return VOID
*/
VOID
-CommonCpuidInstruction(UINT32 Func, UINT32 SubFunc, INT * CpuInfo)
+CommonCpuidInstruction(UINT32 Func, UINT32 SubFunc, int * CpuInfo)
{
- CpuIdEx(CpuInfo, Func, SubFunc);
+ __cpuidex(CpuInfo, Func, SubFunc);
}
/**
@@ -931,7 +884,7 @@ CommonCpuidInstruction(UINT32 Func, UINT32 SubFunc, INT * CpuInfo)
UINT32
Getx86VirtualAddressWidth()
{
- INT Regs[4];
+ int Regs[4];
CommonCpuidInstruction(CPUID_ADDR_WIDTH, 0, Regs);
@@ -949,8 +902,8 @@ Getx86VirtualAddressWidth()
BOOLEAN
CheckCpuSupportRtm()
{
- INT Regs1[4];
- INT Regs2[4];
+ int Regs1[4];
+ int Regs2[4];
BOOLEAN Result;
//
@@ -1252,24 +1205,3 @@ CheckAccessValidityAndSafety(UINT64 TargetAddress, UINT32 Size)
//
return TRUE;
}
-
-/**
- * @brief Function to compute log2Ceil
- * @param n
- *
- * @return UINT32
- */
-UINT32
-Log2Ceil(UINT32 n)
-{
- if (n == 0)
- return 0; // log2Ceil(0) is undefined, returning 0 for safety.
-
- n--; // Decrease by 1 to check if it is a power of 2
- UINT32 log2Floor = 0;
- while (n >>= 1)
- {
- log2Floor++;
- }
- return log2Floor + 1;
-}
diff --git a/hyperdbg/hprdbgctrl/code/common/list.cpp b/hyperdbg/hprdbgctrl/code/common/list.cpp
new file mode 100644
index 00000000..58c2fc44
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/common/list.cpp
@@ -0,0 +1,68 @@
+/**
+ * @file list.cpp
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @brief The list working functions headers
+ * @details
+ * @version 0.1
+ * @date 2020-04-11
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+//
+///**
+// * @brief List initializer
+// *
+// * @param ListHead
+// */
+// void
+// InitializeListHead(PLIST_ENTRY ListHead)
+//{
+// ListHead->Flink = ListHead->Blink = ListHead;
+//}
+//
+///**
+// * @brief insert entry to the top of the list
+// *
+// * @param ListHead
+// * @param Entry
+// */
+// void
+// InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry)
+//{
+// PLIST_ENTRY Flink;
+//
+// Flink = ListHead->Flink;
+// Entry->Flink = Flink;
+// Entry->Blink = ListHead;
+// Flink->Blink = Entry;
+// ListHead->Flink = Entry;
+//}
+//
+///**
+// * @brief remove the entry from the list
+// *
+// * @param Entry
+// * @return BOOLEAN
+// */
+// BOOLEAN
+// RemoveEntryList(PLIST_ENTRY Entry)
+//{
+// PLIST_ENTRY PrevEntry;
+// PLIST_ENTRY NextEntry;
+//
+// NextEntry = Entry->Flink;
+// PrevEntry = Entry->Blink;
+// if ((NextEntry->Blink != Entry) || (PrevEntry->Flink != Entry))
+// {
+// //
+// // Error
+// //
+// _CrtDbgBreak();
+// }
+//
+// PrevEntry->Flink = NextEntry;
+// NextEntry->Blink = PrevEntry;
+// return (BOOLEAN)(PrevEntry == NextEntry);
+//}
diff --git a/hyperdbg/libhyperdbg/code/common/spinlock.cpp b/hyperdbg/hprdbgctrl/code/common/spinlock.cpp
similarity index 73%
rename from hyperdbg/libhyperdbg/code/common/spinlock.cpp
rename to hyperdbg/hprdbgctrl/code/common/spinlock.cpp
index 96cc5e0c..4303a100 100644
--- a/hyperdbg/libhyperdbg/code/common/spinlock.cpp
+++ b/hyperdbg/hprdbgctrl/code/common/spinlock.cpp
@@ -29,35 +29,35 @@
* @brief The maximum wait before PAUSE
*
*/
-static UINT32 MaxWait = 65536;
+static unsigned MaxWait = 65536;
/**
* @brief Tries to get the lock otherwise returns
*
- * @param Lock Lock variable
+ * @param LONG Lock variable
* @return BOOLEAN If it was successful on getting the lock
*/
BOOLEAN
SpinlockTryLock(volatile LONG * Lock)
{
- return (!(*Lock) && !CpuInterlockedBitTestAndSet(Lock, 0));
+ return (!(*Lock) && !_interlockedbittestandset(Lock, 0));
}
/**
* @brief Tries to get the lock and won't return until successfully get the lock
*
- * @param Lock Lock variable
+ * @param LONG Lock variable
*/
-VOID
+void
SpinlockLock(volatile LONG * Lock)
{
- UINT32 Wait = 1;
+ unsigned wait = 1;
while (!SpinlockTryLock(Lock))
{
- for (UINT32 i = 0; i < Wait; ++i)
+ for (unsigned i = 0; i < wait; ++i)
{
- CpuPause();
+ _mm_pause();
}
//
@@ -65,13 +65,13 @@ SpinlockLock(volatile LONG * Lock)
// clamp it to the MaxWait.
//
- if (Wait * 2 > MaxWait)
+ if (wait * 2 > MaxWait)
{
- Wait = MaxWait;
+ wait = MaxWait;
}
else
{
- Wait = Wait * 2;
+ wait = wait * 2;
}
}
}
@@ -79,19 +79,19 @@ SpinlockLock(volatile LONG * Lock)
/**
* @brief Tries to get the lock and won't return until successfully get the lock
*
- * @param Lock Lock variable
- * @param MaximumWait Maximum wait (pause) count
+ * @param LONG Lock variable
+ * @param LONG MaxWait Maximum wait (pause) count
*/
-VOID
-SpinlockLockWithCustomWait(volatile LONG * Lock, UINT32 MaximumWait)
+void
+SpinlockLockWithCustomWait(volatile LONG * Lock, unsigned MaximumWait)
{
- UINT32 Wait = 1;
+ unsigned wait = 1;
while (!SpinlockTryLock(Lock))
{
- for (UINT32 i = 0; i < Wait; ++i)
+ for (unsigned i = 0; i < wait; ++i)
{
- CpuPause();
+ _mm_pause();
}
//
@@ -99,13 +99,13 @@ SpinlockLockWithCustomWait(volatile LONG * Lock, UINT32 MaximumWait)
// clamp it to the MaxWait.
//
- if (Wait * 2 > MaximumWait)
+ if (wait * 2 > MaximumWait)
{
- Wait = MaximumWait;
+ wait = MaximumWait;
}
else
{
- Wait = Wait * 2;
+ wait = wait * 2;
}
}
}
@@ -113,9 +113,9 @@ SpinlockLockWithCustomWait(volatile LONG * Lock, UINT32 MaximumWait)
/**
* @brief Release the lock
*
- * @param Lock Lock variable
+ * @param LONG Lock variable
*/
-VOID
+void
SpinlockUnlock(volatile LONG * Lock)
{
*Lock = 0;
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bc.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bc.cpp
similarity index 84%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bc.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bc.cpp
index 4955075c..bf6c6b38 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bc.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bc.cpp
@@ -36,13 +36,12 @@ CommandBcHelp()
/**
* @brief handler of bc command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandBc(vector CommandTokens, string Command)
+CommandBc(vector SplitCommand, string Command)
{
UINT64 BreakpointId;
DEBUGGEE_BP_LIST_OR_MODIFY_PACKET Request = {0};
@@ -50,10 +49,9 @@ CommandBc(vector CommandTokens, string Command)
//
// Validate the commands
//
- if (CommandTokens.size() != 2)
+ if (SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'bc'\n\n");
CommandBcHelp();
return;
}
@@ -61,7 +59,7 @@ CommandBc(vector CommandTokens, string Command)
//
// Get the breakpoint id
//
- if (!ConvertTokenToUInt64(CommandTokens.at(1), &BreakpointId))
+ if (!ConvertStringToUInt64(SplitCommand.at(1), &BreakpointId))
{
ShowMessages("please specify a correct hex value for breakpoint id\n\n");
CommandBcHelp();
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bd.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bd.cpp
similarity index 84%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bd.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bd.cpp
index 6d10ba99..f79206fc 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bd.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bd.cpp
@@ -36,13 +36,12 @@ CommandBdHelp()
/**
* @brief handler of bd command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandBd(vector CommandTokens, string Command)
+CommandBd(vector SplitCommand, string Command)
{
UINT64 BreakpointId;
DEBUGGEE_BP_LIST_OR_MODIFY_PACKET Request = {0};
@@ -50,10 +49,9 @@ CommandBd(vector CommandTokens, string Command)
//
// Validate the commands
//
- if (CommandTokens.size() != 2)
+ if (SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'bd'\n\n");
CommandBdHelp();
return;
}
@@ -61,7 +59,7 @@ CommandBd(vector CommandTokens, string Command)
//
// Get the breakpoint id
//
- if (!ConvertTokenToUInt64(CommandTokens.at(1), &BreakpointId))
+ if (!ConvertStringToUInt64(SplitCommand.at(1), &BreakpointId))
{
ShowMessages("please specify a correct hex value for breakpoint id\n\n");
CommandBdHelp();
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/be.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/be.cpp
similarity index 84%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/be.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/be.cpp
index 7841b03b..1e3a0a69 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/be.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/be.cpp
@@ -36,13 +36,12 @@ CommandBeHelp()
/**
* @brief handler of be command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandBe(vector CommandTokens, string Command)
+CommandBe(vector SplitCommand, string Command)
{
UINT64 BreakpointId;
DEBUGGEE_BP_LIST_OR_MODIFY_PACKET Request = {0};
@@ -50,10 +49,9 @@ CommandBe(vector CommandTokens, string Command)
//
// Validate the commands
//
- if (CommandTokens.size() != 2)
+ if (SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'be'\n\n");
CommandBeHelp();
return;
}
@@ -61,7 +59,7 @@ CommandBe(vector CommandTokens, string Command)
//
// Get the breakpoint id
//
- if (!ConvertTokenToUInt64(CommandTokens.at(1), &BreakpointId))
+ if (!ConvertStringToUInt64(SplitCommand.at(1), &BreakpointId))
{
ShowMessages("please specify a correct hex value for breakpoint id\n\n");
CommandBeHelp();
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bl.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bl.cpp
similarity index 83%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bl.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bl.cpp
index a5751bbf..5339233b 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/bl.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bl.cpp
@@ -32,23 +32,21 @@ CommandBlHelp()
/**
* @brief handler of the bl command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandBl(vector CommandTokens, string Command)
+CommandBl(vector SplitCommand, string Command)
{
DEBUGGEE_BP_LIST_OR_MODIFY_PACKET Request = {0};
//
// Validate the commands
//
- if (CommandTokens.size() != 1)
+ if (SplitCommand.size() != 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'bl'\n\n");
CommandBlHelp();
return;
}
diff --git a/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bp.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bp.cpp
new file mode 100644
index 00000000..26c4e9a1
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/bp.cpp
@@ -0,0 +1,217 @@
+/**
+ * @file bp.cpp
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @brief bp command
+ * @details
+ * @version 0.1
+ * @date 2021-10-03
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+
+//
+// Global Variables
+//
+extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
+
+/**
+ * @brief help of the bp command
+ *
+ * @return VOID
+ */
+VOID
+CommandBpHelp()
+{
+ ShowMessages("bp : puts a breakpoint (0xcc).\n");
+
+ ShowMessages(
+ "Note : 'bp' is not an event, if you want to use an event version "
+ "of breakpoints use !epthook or !epthook2 instead. See "
+ "documentation for more information.\n\n");
+
+ ShowMessages("syntax : \tbp [Address (hex)] [pid ProcessId (hex)] [tid ThreadId (hex)] [core CoreId (hex)]\n");
+
+ ShowMessages("\n");
+ ShowMessages("\t\te.g : bp nt!ExAllocatePoolWithTag\n");
+ ShowMessages("\t\te.g : bp nt!ExAllocatePoolWithTag+5\n");
+ ShowMessages("\t\te.g : bp nt!ExAllocatePoolWithTag+@rcx+rbx\n");
+ ShowMessages("\t\te.g : bp fffff8077356f010\n");
+ ShowMessages("\t\te.g : bp fffff8077356f010 pid 0x4\n");
+ ShowMessages("\t\te.g : bp fffff8077356f010 tid 0x1000\n");
+ ShowMessages("\t\te.g : bp fffff8077356f010 pid 0x4 core 2\n");
+}
+
+/**
+ * @brief bp command handler
+ *
+ * @param SplitCommand
+ * @param Command
+ * @return VOID
+ */
+VOID
+CommandBp(vector SplitCommand, string Command)
+{
+ BOOL IsNextCoreId = FALSE;
+ BOOL IsNextPid = FALSE;
+ BOOL IsNextTid = FALSE;
+
+ BOOLEAN SetCoreId = FALSE;
+ BOOLEAN SetPid = FALSE;
+ BOOLEAN SetTid = FALSE;
+ BOOLEAN SetAddress = FALSE;
+
+ UINT32 Tid = DEBUGGEE_BP_APPLY_TO_ALL_THREADS;
+ UINT32 Pid = DEBUGGEE_BP_APPLY_TO_ALL_PROCESSES;
+ UINT32 CoreNumer = DEBUGGEE_BP_APPLY_TO_ALL_CORES;
+ UINT64 Address = NULL;
+ vector SplitCommandCaseSensitive {Split(Command, ' ')};
+ UINT32 IndexInCommandCaseSensitive = 0;
+ BOOLEAN IsFirstCommand = TRUE;
+
+ DEBUGGEE_BP_PACKET BpPacket = {0};
+
+ if (SplitCommand.size() >= 9)
+ {
+ ShowMessages("incorrect use of the 'bp'\n\n");
+ CommandBpHelp();
+ return;
+ }
+
+ for (auto Section : SplitCommand)
+ {
+ IndexInCommandCaseSensitive++;
+
+ //
+ // Ignore the first argument as it's the command string itself (bp)
+ //
+ if (IsFirstCommand == TRUE)
+ {
+ IsFirstCommand = FALSE;
+ continue;
+ }
+
+ if (IsNextCoreId)
+ {
+ if (!ConvertStringToUInt32(Section, &CoreNumer))
+ {
+ ShowMessages("please specify a correct hex value for core id\n\n");
+ CommandBpHelp();
+ return;
+ }
+ IsNextCoreId = FALSE;
+ continue;
+ }
+ if (IsNextPid)
+ {
+ if (!ConvertStringToUInt32(Section, &Pid))
+ {
+ ShowMessages("please specify a correct hex value for process id\n\n");
+ CommandBpHelp();
+ return;
+ }
+ IsNextPid = FALSE;
+ continue;
+ }
+
+ if (IsNextTid)
+ {
+ if (!ConvertStringToUInt32(Section, &Tid))
+ {
+ ShowMessages("please specify a correct hex value for thread id\n\n");
+ CommandBpHelp();
+ return;
+ }
+ IsNextTid = FALSE;
+ continue;
+ }
+
+ if (!Section.compare("pid"))
+ {
+ IsNextPid = TRUE;
+ continue;
+ }
+ if (!Section.compare("tid"))
+ {
+ IsNextTid = TRUE;
+ continue;
+ }
+ if (!Section.compare("core"))
+ {
+ IsNextCoreId = TRUE;
+ continue;
+ }
+
+ if (!SetAddress)
+ {
+ if (!SymbolConvertNameOrExprToAddress(SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1), &Address))
+ {
+ //
+ // Couldn't resolve or unknown parameter
+ //
+ ShowMessages("err, couldn't resolve error at '%s'\n\n",
+ SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1).c_str());
+ CommandBpHelp();
+ return;
+ }
+ else
+ {
+ //
+ // Means that address is received
+ //
+ SetAddress = TRUE;
+ continue;
+ }
+ }
+ }
+
+ //
+ // Check if address is set or not
+ //
+ if (!SetAddress)
+ {
+ ShowMessages(
+ "please specify a correct hex value as the breakpoint address\n\n");
+ CommandBpHelp();
+ return;
+ }
+ if (IsNextPid)
+ {
+ ShowMessages("please specify a correct hex value for process id\n\n");
+ CommandBpHelp();
+ return;
+ }
+ if (IsNextCoreId)
+ {
+ ShowMessages("please specify a correct hex value for core\n\n");
+ CommandBpHelp();
+ return;
+ }
+ if (IsNextTid)
+ {
+ ShowMessages("please specify a correct hex value for thread id\n\n");
+ CommandBpHelp();
+ return;
+ }
+
+ if (!g_IsSerialConnectedToRemoteDebuggee)
+ {
+ ShowMessages("err, setting breakpoints is not possible when you're not "
+ "connected to a debuggee\n");
+ return;
+ }
+
+ //
+ // Set the details for the remote packet
+ //
+ BpPacket.Address = Address;
+ BpPacket.Core = CoreNumer;
+ BpPacket.Pid = Pid;
+ BpPacket.Tid = Tid;
+
+ //
+ // Send the bp packet
+ //
+ KdSendBpPacketToDebuggee(&BpPacket);
+}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/cpu.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/cpu.cpp
similarity index 95%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/cpu.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/cpu.cpp
index 970d44ec..3845151f 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/cpu.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/cpu.cpp
@@ -27,22 +27,19 @@ CommandCpuHelp()
/**
* @brief cpu command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandCpu(vector CommandTokens, string Command)
+CommandCpu(vector SplitCommand, string Command)
{
- if (CommandTokens.size() != 1)
+ if (SplitCommand.size() != 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'cpu'\n\n");
CommandCpuHelp();
return;
}
-
ReadCpuDetails();
}
@@ -140,12 +137,12 @@ private:
// Calling __cpuid with 0x0 as the function_id argument
// gets the number of the highest valid function ID.
//
- CpuCpuId(cpui.data(), 0);
+ __cpuid(cpui.data(), 0);
nIds_ = cpui[0];
for (int i = 0; i <= nIds_; ++i)
{
- CpuIdEx(cpui.data(), i, 0);
+ __cpuidex(cpui.data(), i, 0);
data_.push_back(cpui);
}
@@ -189,7 +186,7 @@ private:
// Calling __cpuid with 0x80000000 as the function_id argument
// gets the number of the highest valid extended ID.
//
- CpuCpuId(cpui.data(), 0x80000000);
+ __cpuid(cpui.data(), 0x80000000);
nExIds_ = cpui[0];
char brand[0x40];
@@ -197,7 +194,7 @@ private:
for (int i = 0x80000000; i <= nExIds_; ++i)
{
- CpuIdEx(cpui.data(), i, 0);
+ __cpuidex(cpui.data(), i, 0);
extdata_.push_back(cpui);
}
@@ -246,10 +243,10 @@ const InstructionSet::InstructionSet_Internal InstructionSet::CPU_Rep;
/**
* @brief Reads the CPU vendor string
*
- * @return VOID
+ * @return char *
*/
-VOID
-CpuReadVendorString(CHAR * Result)
+HPRDBGCTRL_API VOID
+HyperDbgReadVendorString(char * Result)
{
std::string VendorString = InstructionSet::Vendor();
strcpy(Result, VendorString.c_str());
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/d-u.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/d-u.cpp
similarity index 52%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/d-u.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/d-u.cpp
index c853df5a..75988c29 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/d-u.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/d-u.cpp
@@ -64,22 +64,23 @@ CommandReadMemoryAndDisassemblerHelp()
/**
* @brief u* d* !u* !d* commands handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandReadMemoryAndDisassembler(vector CommandTokens, string Command)
+CommandReadMemoryAndDisassembler(vector SplitCommand, string Command)
{
- UINT32 Pid = 0;
- UINT32 Length = 0;
- UINT64 TargetAddress = 0;
- BOOLEAN IsNextProcessId = FALSE;
- BOOLEAN IsFirstCommand = TRUE;
- BOOLEAN IsNextLength = FALSE;
+ UINT32 Pid = 0;
+ UINT32 Length = 0;
+ UINT64 TargetAddress = 0;
+ BOOLEAN IsNextProcessId = FALSE;
+ BOOLEAN IsFirstCommand = TRUE;
+ BOOLEAN IsNextLength = FALSE;
+ vector SplitCommandCaseSensitive {Split(Command, ' ')};
+ UINT32 IndexInCommandCaseSensitive = 0;
- string FirstCommand = GetCaseSensitiveStringFromCommandToken(CommandTokens.front());
+ string FirstCommand = SplitCommand.front();
//
// By default if the user-debugger is active, we use these commands
@@ -90,19 +91,20 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
Pid = g_ActiveProcessDebuggingState.ProcessId;
}
- if (CommandTokens.size() == 1)
+ if (SplitCommand.size() == 1)
{
//
// Means that user entered one command without any parameter
//
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '%s' command\n\n", FirstCommand.c_str());
CommandReadMemoryAndDisassemblerHelp();
return;
}
- for (auto Section : CommandTokens)
+ for (auto Section : SplitCommand)
{
+ IndexInCommandCaseSensitive++;
+
if (IsFirstCommand)
{
IsFirstCommand = FALSE;
@@ -111,7 +113,7 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
if (IsNextProcessId == TRUE)
{
- if (!ConvertTokenToUInt32(Section, &Pid))
+ if (!ConvertStringToUInt32(Section, &Pid))
{
ShowMessages("err, you should enter a valid process id\n\n");
return;
@@ -122,7 +124,7 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
if (IsNextLength == TRUE)
{
- if (!ConvertTokenToUInt32(Section, &Length))
+ if (!ConvertStringToUInt32(Section, &Length))
{
ShowMessages("err, you should enter a valid length\n\n");
return;
@@ -131,13 +133,13 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
continue;
}
- if (CompareLowerCaseStrings(Section, "l"))
+ if (!Section.compare("l"))
{
IsNextLength = TRUE;
continue;
}
- if (CompareLowerCaseStrings(Section, "pid"))
+ if (!Section.compare("pid"))
{
IsNextProcessId = TRUE;
continue;
@@ -148,13 +150,14 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
//
if (TargetAddress == 0)
{
- if (!SymbolConvertNameOrExprToAddress(GetCaseSensitiveStringFromCommandToken(Section), &TargetAddress))
+ if (!SymbolConvertNameOrExprToAddress(SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1),
+ &TargetAddress))
{
//
// Couldn't resolve or unknown parameter
//
ShowMessages("err, couldn't resolve error at '%s'\n",
- GetCaseSensitiveStringFromCommandToken(Section).c_str());
+ SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1).c_str());
return;
}
}
@@ -164,7 +167,7 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
// User inserts two address
//
ShowMessages("err, incorrect use of the '%s' command\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ FirstCommand.c_str());
CommandReadMemoryAndDisassemblerHelp();
return;
@@ -186,10 +189,10 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
//
// Default length (user doesn't specified)
//
- if (CompareLowerCaseStrings(CommandTokens.at(0), "u") ||
- CompareLowerCaseStrings(CommandTokens.at(0), "!u") ||
- CompareLowerCaseStrings(CommandTokens.at(0), "u64") ||
- CompareLowerCaseStrings(CommandTokens.at(0), "!u64"))
+ if (!FirstCommand.compare("u") ||
+ !FirstCommand.compare("!u") ||
+ !FirstCommand.compare("u64") ||
+ !FirstCommand.compare("!u64"))
{
Length = 0x40;
}
@@ -201,8 +204,7 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
if (IsNextLength || IsNextProcessId)
{
- ShowMessages("incorrect use of the '%s' command\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '%s' command\n\n", FirstCommand.c_str());
CommandReadMemoryAndDisassemblerHelp();
return;
}
@@ -224,93 +226,93 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
Pid = GetCurrentProcessId();
}
- if (CompareLowerCaseStrings(CommandTokens.at(0), "db"))
+ if (!FirstCommand.compare("db"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DB,
- TargetAddress,
- DEBUGGER_READ_VIRTUAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DB,
+ TargetAddress,
+ DEBUGGER_READ_VIRTUAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "dc"))
+ else if (!FirstCommand.compare("dc"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DC,
- TargetAddress,
- DEBUGGER_READ_VIRTUAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DC,
+ TargetAddress,
+ DEBUGGER_READ_VIRTUAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "dd"))
+ else if (!FirstCommand.compare("dd"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DD,
- TargetAddress,
- DEBUGGER_READ_VIRTUAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DD,
+ TargetAddress,
+ DEBUGGER_READ_VIRTUAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "dq"))
+ else if (!FirstCommand.compare("dq"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DQ,
- TargetAddress,
- DEBUGGER_READ_VIRTUAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DQ,
+ TargetAddress,
+ DEBUGGER_READ_VIRTUAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "!db"))
+ else if (!FirstCommand.compare("!db"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DB,
- TargetAddress,
- DEBUGGER_READ_PHYSICAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DB,
+ TargetAddress,
+ DEBUGGER_READ_PHYSICAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "!dc"))
+ else if (!FirstCommand.compare("!dc"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DC,
- TargetAddress,
- DEBUGGER_READ_PHYSICAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DC,
+ TargetAddress,
+ DEBUGGER_READ_PHYSICAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "!dd"))
+ else if (!FirstCommand.compare("!dd"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DD,
- TargetAddress,
- DEBUGGER_READ_PHYSICAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DD,
+ TargetAddress,
+ DEBUGGER_READ_PHYSICAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "!dq"))
+ else if (!FirstCommand.compare("!dq"))
{
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DQ,
- TargetAddress,
- DEBUGGER_READ_PHYSICAL_ADDRESS,
- READ_FROM_KERNEL,
- Pid,
- Length,
- NULL);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DQ,
+ TargetAddress,
+ DEBUGGER_READ_PHYSICAL_ADDRESS,
+ READ_FROM_KERNEL,
+ Pid,
+ Length,
+ NULL);
}
//
// Disassembler (!u or u or u2 !u2)
//
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "u") || CompareLowerCaseStrings(CommandTokens.at(0), "u64"))
+ else if (!FirstCommand.compare("u") || !FirstCommand.compare("u64"))
{
- HyperDbgShowMemoryOrDisassemble(
+ HyperDbgReadMemoryAndDisassemble(
DEBUGGER_SHOW_COMMAND_DISASSEMBLE64,
TargetAddress,
DEBUGGER_READ_VIRTUAL_ADDRESS,
@@ -319,9 +321,9 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
Length,
NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "!u") || CompareLowerCaseStrings(CommandTokens.at(0), "!u64"))
+ else if (!FirstCommand.compare("!u") || !FirstCommand.compare("!u64"))
{
- HyperDbgShowMemoryOrDisassemble(
+ HyperDbgReadMemoryAndDisassemble(
DEBUGGER_SHOW_COMMAND_DISASSEMBLE64,
TargetAddress,
DEBUGGER_READ_PHYSICAL_ADDRESS,
@@ -330,9 +332,9 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
Length,
NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "u2") || CompareLowerCaseStrings(CommandTokens.at(0), "u32"))
+ else if (!FirstCommand.compare("u2") || !FirstCommand.compare("u32"))
{
- HyperDbgShowMemoryOrDisassemble(
+ HyperDbgReadMemoryAndDisassemble(
DEBUGGER_SHOW_COMMAND_DISASSEMBLE32,
TargetAddress,
DEBUGGER_READ_VIRTUAL_ADDRESS,
@@ -341,9 +343,9 @@ CommandReadMemoryAndDisassembler(vector CommandTokens, string Comm
Length,
NULL);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "!u2") || CompareLowerCaseStrings(CommandTokens.at(0), "!u32"))
+ else if (!FirstCommand.compare("!u2") || !FirstCommand.compare("!u32"))
{
- HyperDbgShowMemoryOrDisassemble(
+ HyperDbgReadMemoryAndDisassemble(
DEBUGGER_SHOW_COMMAND_DISASSEMBLE32,
TargetAddress,
DEBUGGER_READ_PHYSICAL_ADDRESS,
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/dt-struct.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/dt-struct.cpp
similarity index 75%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/dt-struct.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/dt-struct.cpp
index c3c3db68..d43e94cf 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/dt-struct.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/dt-struct.cpp
@@ -35,13 +35,13 @@ CommandDtHelp()
"[pid ProcessId (hex)] [padding Padding (yesno)] [offset Offset (yesno)] "
"[bitfield Bitfield (yesno)] [native Native (yesno)] [decl Declaration (yesno)] "
"[def Definitions (yesno)] [func Functions (yesno)] [pragma Pragma (yesno)] "
- "[prefix Prefix (string)] [suffix Suffix (string)] [inline Expansion (string)] "
+ "[prefix Prefix (string)] [suffix Suffix (string)] [inline Expantion (string)] "
"[output FileName (string)]\n\n");
ShowMessages("syntax : \t!dt [Module!SymbolName (string)] [AddressExpression (string)] "
"[padding Padding (yesno)] [offset Offset (yesno)] [bitfield Bitfield (yesno)] "
"[native Native (yesno)] [decl Declaration (yesno)] [def Definitions (yesno)] "
"[func Functions (yesno)] [pragma Pragma (yesno)] [prefix Prefix (string)] "
- "[suffix Suffix (string)] [inline Expansion (string)] [output FileName (string)]\n");
+ "[suffix Suffix (string)] [inline Expantion (string)] [output FileName (string)]\n");
ShowMessages("\n");
ShowMessages("\t\te.g : dt nt!_EPROCESS\n");
@@ -49,7 +49,7 @@ CommandDtHelp()
ShowMessages("\t\te.g : dt nt!_EPROCESS $proc\n");
ShowMessages("\t\te.g : dt nt!_KPROCESS @rax+@rbx+c0\n");
ShowMessages("\t\te.g : !dt nt!_EPROCESS 1f0300\n");
- ShowMessages("\t\te.g : dt MyModule!_MY_STRUCT 7ff00040 pid 1420\n");
+ ShowMessages("\t\te.g : dt nt!_MY_STRUCT 7ff00040 pid 1420\n");
ShowMessages("\t\te.g : dt nt!_EPROCESS $proc inline all\n");
ShowMessages("\t\te.g : dt nt!_EPROCESS fffff8077356f010 inline no\n");
}
@@ -75,7 +75,6 @@ CommandStructHelp()
ShowMessages("\t\te.g : struct nt!* output ntheader.h\n");
ShowMessages("\t\te.g : struct nt!* func yes output ntheader.h\n");
ShowMessages("\t\te.g : struct nt!* func yes output ntheader.h\n");
- ShowMessages("\t\te.g : struct nt!* func yes output \"c:\\users\\sina\\desktop\\nt header.h\"\n");
}
/**
@@ -90,9 +89,9 @@ CommandStructHelp()
* @return BOOLEAN
*/
BOOLEAN
-CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
- std::string & PdbexArgs,
- UINT32 * ProcessId)
+CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
+ std::string & PdbexArgs,
+ UINT32 * ProcessId)
{
UINT32 TargetProcessId = NULL;
BOOLEAN NextItemIsYesNo = FALSE;
@@ -116,7 +115,7 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
//
if (NextItemIsFileName)
{
- PdbexArgs += "\"" + GetCaseSensitiveStringFromCommandToken(Item) + "\" ";
+ PdbexArgs += Item + " ";
NextItemIsFileName = FALSE;
continue;
@@ -127,7 +126,7 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
//
if (NextItemIsProcessId)
{
- if (!ConvertTokenToUInt32(Item, &TargetProcessId))
+ if (!ConvertStringToUInt32(Item, &TargetProcessId))
{
ShowMessages("err, you should enter a valid process id\n\n");
return FALSE;
@@ -142,11 +141,11 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
//
if (NextItemIsYesNo)
{
- if (CompareLowerCaseStrings(Item, "yes"))
+ if (!Item.compare("yes"))
{
PdbexArgs += " ";
}
- else if (CompareLowerCaseStrings(Item, "no"))
+ else if (!Item.compare("no"))
{
PdbexArgs += "- ";
}
@@ -168,24 +167,24 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
//
if (NextItemIsInline)
{
- if (CompareLowerCaseStrings(Item, "none"))
+ if (!Item.compare("none"))
{
PdbexArgs += "n ";
}
- else if (CompareLowerCaseStrings(Item, "all"))
+ else if (!Item.compare("all"))
{
PdbexArgs += "a ";
}
- else if (CompareLowerCaseStrings(Item, "unnamed") || CompareLowerCaseStrings(Item, "unamed"))
+ else if (!Item.compare("unnamed") || !Item.compare("unamed"))
{
PdbexArgs += "i ";
}
else
{
//
- // none/unnamed/all expected but didn't see it
+ // none/inline/all expected but didn't see it
//
- ShowMessages("err, please insert 'none', 'unnamed', or 'all' as the argument\n\n");
+ ShowMessages("err, please insert 'none', 'inline', or 'all' as the argument\n\n");
return FALSE;
}
@@ -198,7 +197,7 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
//
if (NextItemIsString)
{
- PdbexArgs += GetCaseSensitiveStringFromCommandToken(Item) + " ";
+ PdbexArgs += Item + " ";
NextItemIsString = FALSE;
continue;
@@ -207,66 +206,66 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
//
// Check for args
//
- if (CompareLowerCaseStrings(Item, "pid"))
+ if (!Item.compare("pid"))
{
NextItemIsProcessId = TRUE;
}
- else if (CompareLowerCaseStrings(Item, "output"))
+ else if (!Item.compare("output"))
{
NextItemIsFileName = TRUE;
PdbexArgs += "-o ";
}
- else if (CompareLowerCaseStrings(Item, "inline"))
+ else if (!Item.compare("inline"))
{
NextItemIsInline = TRUE;
PdbexArgs += "-e ";
}
- else if (CompareLowerCaseStrings(Item, "prefix"))
+ else if (!Item.compare("prefix"))
{
NextItemIsString = TRUE;
PdbexArgs += "-r ";
}
- else if (CompareLowerCaseStrings(Item, "suffix"))
+ else if (!Item.compare("suffix"))
{
NextItemIsString = TRUE;
PdbexArgs += "-g ";
}
- else if (CompareLowerCaseStrings(Item, "padding"))
+ else if (!Item.compare("padding"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-p";
}
- else if (CompareLowerCaseStrings(Item, "offset") || CompareLowerCaseStrings(Item, "offsets"))
+ else if (!Item.compare("offset") || !Item.compare("offsets"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-x";
}
- else if (CompareLowerCaseStrings(Item, "bitfield") || CompareLowerCaseStrings(Item, "bitfields"))
+ else if (!Item.compare("bitfield") || !Item.compare("bitfields"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-b";
}
- else if (CompareLowerCaseStrings(Item, "native"))
+ else if (!Item.compare("native"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-i";
}
- else if (CompareLowerCaseStrings(Item, "decl"))
+ else if (!Item.compare("decl"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-n";
}
- else if (CompareLowerCaseStrings(Item, "def"))
+ else if (!Item.compare("def"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-l";
}
- else if (CompareLowerCaseStrings(Item, "func"))
+ else if (!Item.compare("func"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-f";
}
- else if (CompareLowerCaseStrings(Item, "pragma"))
+ else if (!Item.compare("pragma"))
{
NextItemIsYesNo = TRUE;
PdbexArgs += "-z";
@@ -276,8 +275,7 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
//
// Unknown args
//
- ShowMessages("err, unknown argument at '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(Item).c_str());
+ ShowMessages("err, unknown argument at '%s'\n\n", Item.c_str());
return FALSE;
}
}
@@ -314,13 +312,13 @@ CommandDtAndStructConvertHyperDbgArgsToPdbex(vector ExtraArgs,
*/
BOOLEAN
CommandDtShowDataBasedOnSymbolTypes(
- const CHAR * TypeName,
+ const char * TypeName,
UINT64 Address,
BOOLEAN IsStruct,
PVOID BufferAddress,
UINT32 TargetPid,
BOOLEAN IsPhysicalAddress,
- const CHAR * AdditionalParameters)
+ const char * AdditionalParameters)
{
UINT64 StructureSize = 0;
BOOLEAN ResultOfFindingSize = FALSE;
@@ -353,7 +351,7 @@ CommandDtShowDataBasedOnSymbolTypes(
//
// Use the current process for the pid
//
- TargetPid = PlatformGetCurrentProcessId();
+ TargetPid = GetCurrentProcessId();
}
}
@@ -398,13 +396,13 @@ CommandDtShowDataBasedOnSymbolTypes(
//
// Read the memory
//
- HyperDbgShowMemoryOrDisassemble(DEBUGGER_SHOW_COMMAND_DT,
- Address,
- IsPhysicalAddress ? DEBUGGER_READ_PHYSICAL_ADDRESS : DEBUGGER_READ_VIRTUAL_ADDRESS,
- READ_FROM_KERNEL,
- TargetPid,
- (UINT32)StructureSize,
- &DtOptions);
+ HyperDbgReadMemoryAndDisassemble(DEBUGGER_SHOW_COMMAND_DT,
+ Address,
+ IsPhysicalAddress ? DEBUGGER_READ_PHYSICAL_ADDRESS : DEBUGGER_READ_VIRTUAL_ADDRESS,
+ READ_FROM_KERNEL,
+ TargetPid,
+ (UINT32)StructureSize,
+ &DtOptions);
return TRUE;
}
@@ -421,26 +419,26 @@ CommandDtShowDataBasedOnSymbolTypes(
/**
* @brief dt and struct command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
* @return VOID
*/
VOID
-CommandDtAndStruct(vector CommandTokens, string Command)
+CommandDtAndStruct(vector SplitCommand, string Command)
{
- CommandToken TempTypeNameHolder;
- std::string PdbexArgs = "";
- BOOLEAN IsStruct = FALSE;
- UINT64 TargetAddress = NULL;
- PVOID BufferAddressRetrievedFromDebuggee = NULL;
- UINT32 TargetPid = NULL;
- BOOLEAN IsPhysicalAddress = FALSE;
+ std::string TempTypeNameHolder;
+ std::string PdbexArgs = "";
+ BOOLEAN IsStruct = FALSE;
+ UINT64 TargetAddress = NULL;
+ PVOID BufferAddressRetrievedFromDebuggee = NULL;
+ UINT32 TargetPid = NULL;
+ BOOLEAN IsPhysicalAddress = FALSE;
//
// Check if command is 'struct' or not
//
- if (CompareLowerCaseStrings(CommandTokens.at(0), "struct") ||
- CompareLowerCaseStrings(CommandTokens.at(0), "structure"))
+ if (!SplitCommand.at(0).compare("struct") ||
+ !SplitCommand.at(0).compare("structure"))
{
IsStruct = TRUE;
}
@@ -452,7 +450,7 @@ CommandDtAndStruct(vector CommandTokens, string Command)
//
// Check if command is '!dt' for physical address or not
//
- if (!IsStruct && CompareLowerCaseStrings(CommandTokens.at(0), "!dt"))
+ if (!SplitCommand.at(0).compare("!dt"))
{
IsPhysicalAddress = TRUE;
}
@@ -461,10 +459,9 @@ CommandDtAndStruct(vector CommandTokens, string Command)
IsPhysicalAddress = FALSE;
}
- if (CommandTokens.size() == 1)
+ if (SplitCommand.size() == 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '%s'\n\n", SplitCommand.at(0).c_str());
if (IsStruct)
{
@@ -479,20 +476,35 @@ CommandDtAndStruct(vector CommandTokens, string Command)
}
//
- // Create TempSplitTokens by copying elements from CommandTokens, excluding the first element
+ // Trim the command
//
- std::vector TempSplitTokens(CommandTokens.begin() + 1, CommandTokens.end());
+ Trim(Command);
+
+ //
+ // Remove dt, struct, or structure from it
+ //
+ Command.erase(0, SplitCommand.at(0).size());
+
+ //
+ // Trim it again
+ //
+ Trim(Command);
+
+ //
+ // Check for the first and second arguments
+ //
+ vector TempSplitCommand {Split(Command, ' ')};
//
// If the size is zero, then it's only a type name
//
- if (TempSplitTokens.size() == 1)
+ if (TempSplitCommand.size() == 1)
{
//
// Call the dt parser wrapper, it's only a structure (type) name
// Call it with default configuration
//
- CommandDtShowDataBasedOnSymbolTypes(GetCaseSensitiveStringFromCommandToken(TempSplitTokens.at(0)).c_str(),
+ CommandDtShowDataBasedOnSymbolTypes(TempSplitCommand.at(0).c_str(),
NULL,
IsStruct,
NULL,
@@ -511,31 +523,31 @@ CommandDtAndStruct(vector CommandTokens, string Command)
//
// Check if the first parameter is an address or valid expression
//
- if (IsStruct || !SymbolConvertNameOrExprToAddress(GetCaseSensitiveStringFromCommandToken(TempSplitTokens.at(0)).c_str(),
+ if (IsStruct || !SymbolConvertNameOrExprToAddress(TempSplitCommand.at(0).c_str(),
&TargetAddress))
{
//
// No it's not, we'll get the first argument as the structure (type) name
// And we have to check whether the second argument is a buffer address or not
//
- if (IsStruct || !SymbolConvertNameOrExprToAddress(GetCaseSensitiveStringFromCommandToken(TempSplitTokens.at(1)).c_str(),
+ if (IsStruct || !SymbolConvertNameOrExprToAddress(TempSplitCommand.at(1).c_str(),
&TargetAddress))
{
//
// The second argument is also not buffer address
// probably the user entered a structure (type) name along with some params
//
- TempTypeNameHolder = TempSplitTokens.at(0);
+ TempTypeNameHolder = TempSplitCommand.at(0);
//
// Remove the first argument
//
- TempSplitTokens.erase(TempSplitTokens.begin());
+ TempSplitCommand.erase(TempSplitCommand.begin());
//
// Convert to pdbex args
//
- if (!CommandDtAndStructConvertHyperDbgArgsToPdbex(TempSplitTokens, PdbexArgs, &TargetPid))
+ if (!CommandDtAndStructConvertHyperDbgArgsToPdbex(TempSplitCommand, PdbexArgs, &TargetPid))
{
if (IsStruct)
{
@@ -552,7 +564,7 @@ CommandDtAndStruct(vector CommandTokens, string Command)
//
// Call the wrapper of pdbex
//
- CommandDtShowDataBasedOnSymbolTypes(GetCaseSensitiveStringFromCommandToken(TempTypeNameHolder).c_str(),
+ CommandDtShowDataBasedOnSymbolTypes(TempTypeNameHolder.c_str(),
TargetAddress,
IsStruct,
BufferAddressRetrievedFromDebuggee,
@@ -566,13 +578,13 @@ CommandDtAndStruct(vector CommandTokens, string Command)
// The second argument is a buffer address
// The user entered a structure (type) name along with buffer address
//
- if (TempSplitTokens.size() == 2)
+ if (TempSplitCommand.size() == 2)
{
//
// There is not parameters, only a symbol name and then a buffer address
// Call it with default configuration
//
- CommandDtShowDataBasedOnSymbolTypes(GetCaseSensitiveStringFromCommandToken(TempSplitTokens.at(0)).c_str(),
+ CommandDtShowDataBasedOnSymbolTypes(TempSplitCommand.at(0).c_str(),
TargetAddress,
IsStruct,
BufferAddressRetrievedFromDebuggee,
@@ -587,18 +599,18 @@ CommandDtAndStruct(vector CommandTokens, string Command)
// the second argument which is buffer address, there are other parameters, so
// we WON'T call it with default parameters
//
- TempTypeNameHolder = TempSplitTokens.at(0);
+ TempTypeNameHolder = TempSplitCommand.at(0);
//
// Remove the first, and the second arguments
//
- TempSplitTokens.erase(TempSplitTokens.begin());
- TempSplitTokens.erase(TempSplitTokens.begin());
+ TempSplitCommand.erase(TempSplitCommand.begin());
+ TempSplitCommand.erase(TempSplitCommand.begin());
//
// Convert to pdbex args
//
- if (!CommandDtAndStructConvertHyperDbgArgsToPdbex(TempSplitTokens, PdbexArgs, &TargetPid))
+ if (!CommandDtAndStructConvertHyperDbgArgsToPdbex(TempSplitCommand, PdbexArgs, &TargetPid))
{
if (IsStruct)
{
@@ -615,7 +627,7 @@ CommandDtAndStruct(vector CommandTokens, string Command)
//
// Call the wrapper of pdbex
//
- CommandDtShowDataBasedOnSymbolTypes(GetCaseSensitiveStringFromCommandToken(TempTypeNameHolder).c_str(),
+ CommandDtShowDataBasedOnSymbolTypes(TempTypeNameHolder.c_str(),
TargetAddress,
IsStruct,
BufferAddressRetrievedFromDebuggee,
@@ -631,13 +643,13 @@ CommandDtAndStruct(vector CommandTokens, string Command)
// The first argument is a buffer address, so we get the first argument as
// a buffer address and the second argument as the structure (type) name
//
- if (TempSplitTokens.size() == 2)
+ if (TempSplitCommand.size() == 2)
{
//
// There is not parameters, only a buffer address and then a symbol name
// Call it with default configuration
//
- CommandDtShowDataBasedOnSymbolTypes(GetCaseSensitiveStringFromCommandToken(TempSplitTokens.at(1)).c_str(),
+ CommandDtShowDataBasedOnSymbolTypes(TempSplitCommand.at(1).c_str(),
TargetAddress,
IsStruct,
BufferAddressRetrievedFromDebuggee,
@@ -652,18 +664,18 @@ CommandDtAndStruct(vector CommandTokens, string Command)
// argument which is structure (type) name, there are other parameters, so
// we WON'T call it with default parameters
//
- TempTypeNameHolder = TempSplitTokens.at(1);
+ TempTypeNameHolder = TempSplitCommand.at(1);
//
// Remove the first, and the second arguments
//
- TempSplitTokens.erase(TempSplitTokens.begin());
- TempSplitTokens.erase(TempSplitTokens.begin());
+ TempSplitCommand.erase(TempSplitCommand.begin());
+ TempSplitCommand.erase(TempSplitCommand.begin());
//
// Convert to pdbex args
//
- if (!CommandDtAndStructConvertHyperDbgArgsToPdbex(TempSplitTokens, PdbexArgs, &TargetPid))
+ if (!CommandDtAndStructConvertHyperDbgArgsToPdbex(TempSplitCommand, PdbexArgs, &TargetPid))
{
if (IsStruct)
{
@@ -680,7 +692,7 @@ CommandDtAndStruct(vector CommandTokens, string Command)
//
// Call the wrapper of pdbex
//
- CommandDtShowDataBasedOnSymbolTypes(GetCaseSensitiveStringFromCommandToken(TempTypeNameHolder).c_str(),
+ CommandDtShowDataBasedOnSymbolTypes(TempTypeNameHolder.c_str(),
TargetAddress,
IsStruct,
BufferAddressRetrievedFromDebuggee,
diff --git a/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/e.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/e.cpp
new file mode 100644
index 00000000..c9906e93
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/e.cpp
@@ -0,0 +1,414 @@
+/**
+ * @file e.cpp
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @brief e* command
+ * @details
+ * @version 0.1
+ * @date 2020-07-27
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+
+//
+// Global Variables
+//
+extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
+extern ACTIVE_DEBUGGING_PROCESS g_ActiveProcessDebuggingState;
+
+/**
+ * @brief help of !e* and e* commands
+ *
+ * @return VOID
+ */
+VOID
+CommandEditMemoryHelp()
+{
+ ShowMessages("eb !eb ed !ed eq !eq : edits the memory at specific address \n");
+ ShowMessages("eb Byte and ASCII characters\n");
+ ShowMessages("ed Double-word values (4 bytes)\n");
+ ShowMessages("eq Quad-word values (8 bytes). \n");
+
+ ShowMessages("\n If you want to edit physical (address) memory then add '!' "
+ "at the start of the command\n");
+
+ ShowMessages("syntax : \teb [Address (hex)] [Contents (hex)] [pid ProcessId (hex)]\n");
+ ShowMessages("syntax : \ted [Address (hex)] [Contents (hex)] [pid ProcessId (hex)]\n");
+ ShowMessages("syntax : \teq [Address (hex)] [Contents (hex)] [pid ProcessId (hex)]\n");
+
+ ShowMessages("\n");
+ ShowMessages("\t\te.g : eb fffff8077356f010 90 \n");
+ ShowMessages("\t\te.g : eb nt!Kd_DEFAULT_Mask ff ff ff ff \n");
+ ShowMessages("\t\te.g : eb nt!Kd_DEFAULT_Mask+10+@rcx ff ff ff ff \n");
+ ShowMessages("\t\te.g : eb fffff8077356f010 90 90 90 90 \n");
+ ShowMessages("\t\te.g : !eq 100000 9090909090909090\n");
+ ShowMessages("\t\te.g : !eq nt!ExAllocatePoolWithTag+55 9090909090909090\n");
+ ShowMessages("\t\te.g : !eq 100000 9090909090909090 9090909090909090 "
+ "9090909090909090 9090909090909090 9090909090909090\n");
+}
+
+/**
+ * @brief !e* and e* commands handler
+ *
+ * @param SplitCommand
+ * @param Command
+ * @return VOID
+ */
+VOID
+CommandEditMemory(vector SplitCommand, string Command)
+{
+ BOOL Status;
+ UINT64 Address;
+ UINT64 * FinalBuffer;
+ vector ValuesToEdit;
+ BOOL SetAddress = FALSE;
+ BOOL SetValue = FALSE;
+ BOOL SetProcId = FALSE;
+ BOOL NextIsProcId = FALSE;
+ DEBUGGER_EDIT_MEMORY EditMemoryRequest = {0};
+ UINT64 Value = 0;
+ UINT32 ProcId = 0;
+ UINT32 CountOfValues = 0;
+ UINT32 FinalSize = 0;
+ vector SplitCommandCaseSensitive {Split(Command, ' ')};
+ UINT32 IndexInCommandCaseSensitive = 0;
+ BOOLEAN IsFirstCommand = TRUE;
+
+ //
+ // By default if the user-debugger is active, we use these commands
+ // on the memory layout of the debuggee process
+ //
+ if (g_ActiveProcessDebuggingState.IsActive)
+ {
+ ProcId = g_ActiveProcessDebuggingState.ProcessId;
+ }
+
+ if (SplitCommand.size() <= 2)
+ {
+ ShowMessages("incorrect use of the 'e*'\n\n");
+ CommandEditMemoryHelp();
+ return;
+ }
+
+ for (auto Section : SplitCommand)
+ {
+ IndexInCommandCaseSensitive++;
+
+ if (IsFirstCommand)
+ {
+ if (!Section.compare("!eb"))
+ {
+ EditMemoryRequest.MemoryType = EDIT_PHYSICAL_MEMORY;
+ EditMemoryRequest.ByteSize = EDIT_BYTE;
+ }
+ else if (!Section.compare("!ed"))
+ {
+ EditMemoryRequest.MemoryType = EDIT_PHYSICAL_MEMORY;
+ EditMemoryRequest.ByteSize = EDIT_DWORD;
+ }
+ else if (!Section.compare("!eq"))
+ {
+ EditMemoryRequest.MemoryType = EDIT_PHYSICAL_MEMORY;
+ EditMemoryRequest.ByteSize = EDIT_QWORD;
+ }
+ else if (!Section.compare("eb"))
+ {
+ EditMemoryRequest.MemoryType = EDIT_VIRTUAL_MEMORY;
+ EditMemoryRequest.ByteSize = EDIT_BYTE;
+ }
+ else if (!Section.compare("ed"))
+ {
+ EditMemoryRequest.MemoryType = EDIT_VIRTUAL_MEMORY;
+ EditMemoryRequest.ByteSize = EDIT_DWORD;
+ }
+ else if (!Section.compare("eq"))
+ {
+ EditMemoryRequest.MemoryType = EDIT_VIRTUAL_MEMORY;
+ EditMemoryRequest.ByteSize = EDIT_QWORD;
+ }
+ else
+ {
+ //
+ // What's this? :(
+ //
+ ShowMessages("unknown error happened !\n\n");
+ CommandEditMemoryHelp();
+ return;
+ }
+
+ IsFirstCommand = FALSE;
+
+ continue;
+ }
+
+ if (NextIsProcId)
+ {
+ //
+ // It's a process id
+ //
+ NextIsProcId = FALSE;
+
+ if (!ConvertStringToUInt32(Section, &ProcId))
+ {
+ ShowMessages("please specify a correct hex process id\n\n");
+ CommandEditMemoryHelp();
+ return;
+ }
+ else
+ {
+ //
+ // Means that the proc id is set, next we should read value
+ //
+ continue;
+ }
+ }
+
+ //
+ // Check if it's a process id or not
+ //
+ if (!SetProcId && !Section.compare("pid"))
+ {
+ NextIsProcId = TRUE;
+ continue;
+ }
+
+ if (!SetAddress)
+ {
+ if (!SymbolConvertNameOrExprToAddress(SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1),
+ &Address))
+ {
+ ShowMessages("err, couldn't resolve error at '%s'\n\n",
+ SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1).c_str());
+ CommandEditMemoryHelp();
+ return;
+ }
+ else
+ {
+ //
+ // Means that the address is set, next we should read value
+ //
+ SetAddress = TRUE;
+ continue;
+ }
+ }
+
+ if (SetAddress)
+ {
+ //
+ // Remove the hex notations
+ //
+ if (Section.rfind("0x", 0) == 0 || Section.rfind("0X", 0) == 0 ||
+ Section.rfind("\\x", 0) == 0 || Section.rfind("\\X", 0) == 0)
+ {
+ Section = Section.erase(0, 2);
+ }
+ else if (Section.rfind('x', 0) == 0 || Section.rfind('X', 0) == 0)
+ {
+ Section = Section.erase(0, 1);
+ }
+ Section.erase(remove(Section.begin(), Section.end(), '`'), Section.end());
+
+ //
+ // Check if the value is valid based on byte counts
+ //
+ if (EditMemoryRequest.ByteSize == EDIT_BYTE && Section.size() >= 3)
+ {
+ ShowMessages("please specify a byte (hex) value for 'eb' or '!eb'\n\n");
+ return;
+ }
+ if (EditMemoryRequest.ByteSize == EDIT_DWORD && Section.size() >= 9)
+ {
+ ShowMessages(
+ "please specify a dword (hex) value for 'ed' or '!ed'\n\n");
+ return;
+ }
+ if (EditMemoryRequest.ByteSize == EDIT_QWORD && Section.size() >= 17)
+ {
+ ShowMessages(
+ "please specify a qword (hex) value for 'eq' or '!eq'\n\n");
+ return;
+ }
+
+ //
+ // Qword is checked by the following function, no need to double
+ // check it above.
+ //
+
+ if (!ConvertStringToUInt64(Section, &Value))
+ {
+ ShowMessages("please specify a correct hex value to change the memory "
+ "content\n\n");
+ CommandEditMemoryHelp();
+ return;
+ }
+ else
+ {
+ //
+ // Add it to the list
+ //
+
+ ValuesToEdit.push_back(Value);
+
+ //
+ // Keep track of values to modify
+ //
+ CountOfValues++;
+
+ if (!SetValue)
+ {
+ //
+ // At least on value is there
+ //
+ SetValue = TRUE;
+ }
+ continue;
+ }
+ }
+ }
+
+ //
+ // Check to prevent using process id in e* commands
+ //
+ if (g_IsSerialConnectedToRemoteDebuggee && ProcId != 0)
+ {
+ ShowMessages(ASSERT_MESSAGE_CANNOT_SPECIFY_PID);
+ return;
+ }
+
+ if (ProcId == 0)
+ {
+ ProcId = GetCurrentProcessId();
+ }
+
+ //
+ // Fill the structure
+ //
+ EditMemoryRequest.ProcessId = ProcId;
+ EditMemoryRequest.Address = Address;
+ EditMemoryRequest.CountOf64Chunks = CountOfValues;
+
+ //
+ // Check if address and value are set or not
+ //
+ if (!SetAddress)
+ {
+ ShowMessages("please specify a correct hex address\n\n");
+ CommandEditMemoryHelp();
+ return;
+ }
+ if (!SetValue)
+ {
+ ShowMessages(
+ "please specify a correct hex value as the content to edit\n\n");
+ CommandEditMemoryHelp();
+ return;
+ }
+ if (NextIsProcId)
+ {
+ ShowMessages("please specify a correct hex value as the process id\n\n");
+ CommandEditMemoryHelp();
+ return;
+ }
+
+ //
+ // Now it's time to put everything together in one structure
+ //
+ FinalSize = (CountOfValues * sizeof(UINT64)) + SIZEOF_DEBUGGER_EDIT_MEMORY;
+
+ //
+ // Set the size
+ //
+ EditMemoryRequest.FinalStructureSize = FinalSize;
+
+ //
+ // Allocate structure + buffer
+ //
+ FinalBuffer = (UINT64 *)malloc(FinalSize);
+
+ if (!FinalBuffer)
+ {
+ ShowMessages("unable to allocate memory\n\n");
+ return;
+ }
+
+ //
+ // Zero the buffer
+ //
+ ZeroMemory(FinalBuffer, FinalSize);
+
+ //
+ // Copy the structure on top of the allocated buffer
+ //
+ memcpy(FinalBuffer, &EditMemoryRequest, SIZEOF_DEBUGGER_EDIT_MEMORY);
+
+ //
+ // Put the values in 64 bit structures
+ //
+ std::copy(ValuesToEdit.begin(), ValuesToEdit.end(), (UINT64 *)((UINT64)FinalBuffer + SIZEOF_DEBUGGER_EDIT_MEMORY));
+
+ //
+ // send the request
+ //
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ KdSendEditMemoryPacketToDebuggee((DEBUGGER_EDIT_MEMORY *)FinalBuffer, FinalSize);
+ return;
+ }
+
+ //
+ // It's on VMI mode
+ //
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+
+ Status = DeviceIoControl(
+ g_DeviceHandle, // Handle to device
+ IOCTL_DEBUGGER_EDIT_MEMORY, // IO Control Code (IOCTL)
+ FinalBuffer, // Input Buffer to driver.
+ FinalSize, // Input buffer length
+ &EditMemoryRequest, // Output Buffer from driver.
+ SIZEOF_DEBUGGER_EDIT_MEMORY, // Length of output buffer in bytes.
+ NULL, // Bytes placed in buffer.
+ NULL // synchronous call
+ );
+
+ if (!Status)
+ {
+ free(FinalBuffer);
+ ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
+ return;
+ }
+
+ if (EditMemoryRequest.Result == DEBUGGER_OPERATION_WAS_SUCCESSFUL)
+ {
+ //
+ // Was successful, nothing to do
+ //
+ }
+ else if (
+ EditMemoryRequest.Result ==
+ DEBUGGER_ERROR_EDIT_MEMORY_STATUS_INVALID_ADDRESS_BASED_ON_CURRENT_PROCESS)
+ {
+ ShowMessages("err, the address is invalid in system process layout\n");
+ }
+ else if (
+ EditMemoryRequest.Result ==
+ DEBUGGER_ERROR_EDIT_MEMORY_STATUS_INVALID_ADDRESS_BASED_ON_OTHER_PROCESS)
+ {
+ ShowMessages("err, the address is invalid based on your specific process id\n");
+ }
+ else if (EditMemoryRequest.Result ==
+ DEBUGGER_ERROR_EDIT_MEMORY_STATUS_INVALID_PARAMETER)
+ {
+ ShowMessages("invalid parameter\n");
+ }
+ else
+ {
+ ShowErrorMessage(EditMemoryRequest.Result);
+ }
+
+ //
+ // Free the malloc buffer
+ //
+ free(FinalBuffer);
+}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/eval.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/eval.cpp
similarity index 77%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/eval.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/eval.cpp
index 202701cb..94ec6492 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/eval.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/eval.cpp
@@ -11,11 +11,12 @@
*/
#include "pch.h"
+using namespace std;
+
//
// Global Variables
//
-extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
-extern ACTIVE_DEBUGGING_PROCESS g_ActiveProcessDebuggingState;
+extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
/**
* @brief help of the ? command
@@ -187,18 +188,21 @@ ErrorMessage:
/**
* @brief handler of ? command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandEval(vector CommandTokens, string Command)
+CommandEval(vector SplitCommand, string Command)
{
- if (CommandTokens.size() == 1)
+ PVOID CodeBuffer;
+ UINT64 BufferAddress;
+ UINT32 BufferLength;
+ UINT32 Pointer;
+
+ if (SplitCommand.size() == 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '?'\n\n");
CommandEvalHelp();
return;
}
@@ -211,7 +215,7 @@ CommandEval(vector CommandTokens, string Command)
//
// Remove the first command from it
//
- Command.erase(0, GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).size());
+ Command.erase(0, SplitCommand.at(0).size());
//
// Trim it again
@@ -238,25 +242,56 @@ CommandEval(vector CommandTokens, string Command)
return;
}
- //
- // Check if we're connected to a remote debuggee (kernel debugger) or the user debugger
- //
- if (g_IsSerialConnectedToRemoteDebuggee || g_ActiveProcessDebuggingState.IsActive)
+ if (g_IsSerialConnectedToRemoteDebuggee)
{
//
- // Send data to the target user debugger or kernel debugger
+ // Send over serial
//
- ScriptEngineExecuteSingleExpression((CHAR *)Command.c_str(), TRUE, FALSE);
+
+ //
+ // Run script engine handler
+ //
+ CodeBuffer = ScriptEngineParseWrapper((char *)Command.c_str(), TRUE);
+
+ if (CodeBuffer == NULL)
+ {
+ //
+ // return to show that this item contains an script
+ //
+ return;
+ }
+
+ //
+ // Print symbols (test)
+ //
+ // PrintSymbolBufferWrapper(CodeBuffer);
+
+ //
+ // Set the buffer and length
+ //
+ BufferAddress = ScriptEngineWrapperGetHead(CodeBuffer);
+ BufferLength = ScriptEngineWrapperGetSize(CodeBuffer);
+ Pointer = ScriptEngineWrapperGetPointer(CodeBuffer);
+
+ //
+ // Send it to the remote debuggee
+ //
+ KdSendScriptPacketToDebuggee(BufferAddress, BufferLength, Pointer, FALSE);
+
+ //
+ // Remove the buffer of script engine interpreted code
+ //
+ ScriptEngineWrapperRemoveSymbolBuffer(CodeBuffer);
}
else
{
//
- // It's a test (simulated) run of the script-engine
+ // It's a test
//
- ShowMessages("this command should not be used while you're in VMI-Mode (not attached to the user debugger) "
- "or not in the debugger mode, the results that you see is a simulated result for TESTING the script engine "
- "and is not based on the status of your system. You can use this command, either in the debugger mode "
- "(kernel debugger), or when you attached to a user debugger\n\n");
+ ShowMessages("this command should not be used while you're in VMI-Mode or not in debugger-mode, "
+ "the results that you see is a simulated result for TESTING script-engine "
+ "and is not based on the status of your system. You can use this command, "
+ "ONLY in debugger-mode\n\n");
ShowMessages("test expression : %s \n", Command.c_str());
ScriptEngineWrapperTestParser(Command);
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/events.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/events.cpp
similarity index 90%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/events.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/events.cpp
index 27561c23..8620d375 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/events.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/events.cpp
@@ -18,7 +18,6 @@ extern LIST_ENTRY g_EventTrace;
extern BOOLEAN g_EventTraceInitialized;
extern BOOLEAN g_BreakPrintingOutput;
extern BOOLEAN g_AutoFlush;
-extern BOOLEAN g_IsVmmModuleLoaded;
extern BOOLEAN g_IsConnectedToRemoteDebuggee;
extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
extern BOOLEAN g_IsSerialConnectedToRemoteDebugger;
@@ -58,13 +57,12 @@ CommandEventsHelp()
/**
* @brief events command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandEvents(vector CommandTokens, string Command)
+CommandEvents(vector SplitCommand, string Command)
{
DEBUGGER_MODIFY_EVENTS_TYPE RequestedAction;
UINT64 RequestedTag;
@@ -72,15 +70,14 @@ CommandEvents(vector CommandTokens, string Command)
//
// Validate the parameters (size)
//
- if (CommandTokens.size() != 1 && CommandTokens.size() != 3)
+ if (SplitCommand.size() != 1 && SplitCommand.size() != 3)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '%s'\n\n", SplitCommand.at(0).c_str());
CommandEventsHelp();
return;
}
- if (CommandTokens.size() == 1)
+ if (SplitCommand.size() == 1)
{
if (!g_EventTraceInitialized)
{
@@ -100,25 +97,25 @@ CommandEvents(vector CommandTokens, string Command)
// Validate second argument as it's not just a simple
// events without any parameter
//
- if (CompareLowerCaseStrings(CommandTokens.at(1), "e"))
+ if (!SplitCommand.at(1).compare("e"))
{
RequestedAction = DEBUGGER_MODIFY_EVENTS_ENABLE;
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "d"))
+ else if (!SplitCommand.at(1).compare("d"))
{
RequestedAction = DEBUGGER_MODIFY_EVENTS_DISABLE;
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "c"))
+ else if (!SplitCommand.at(1).compare("c"))
{
RequestedAction = DEBUGGER_MODIFY_EVENTS_CLEAR;
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "sc"))
+ else if (!SplitCommand.at(1).compare("sc"))
{
- if (CompareLowerCaseStrings(CommandTokens.at(2), "on"))
+ if (!SplitCommand.at(2).compare("on"))
{
KdSendShortCircuitingEventToDebuggee(TRUE);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "off"))
+ else if (!SplitCommand.at(2).compare("off"))
{
KdSendShortCircuitingEventToDebuggee(FALSE);
}
@@ -140,8 +137,7 @@ CommandEvents(vector CommandTokens, string Command)
//
// unknown second command
//
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '%s'\n\n", SplitCommand.at(0).c_str());
CommandEventsHelp();
return;
}
@@ -150,11 +146,11 @@ CommandEvents(vector CommandTokens, string Command)
// Validate third argument as it's not just a simple
// events without any parameter
//
- if (CompareLowerCaseStrings(CommandTokens.at(2), "all"))
+ if (!SplitCommand.at(2).compare("all"))
{
RequestedTag = DEBUGGER_MODIFY_EVENTS_APPLY_TO_ALL_TAG;
}
- else if (!ConvertTokenToUInt64(CommandTokens.at(2), &RequestedTag))
+ else if (!ConvertStringToUInt64(SplitCommand.at(2), &RequestedTag))
{
ShowMessages(
"please specify a correct hex value for tag id (event number)\n\n");
@@ -574,19 +570,6 @@ CommandEventsHandleModifiedEvent(
}
else
{
- //
- // If HyperDbg is operating at the Debugger Mode, we'll indicate that
- // the event will be cleared after continuing the debuggee
- //
- if (g_IsSerialConnectedToRemoteDebuggee)
- {
- ShowMessages("%s successfully cleared, but please note in the Debugger Mode (current mode), HyperDbg "
- "cannot clear events instantly. Instead, it first disables the events, and when "
- "you continue the debuggee (e.g., by pressing the 'g' command), the event will be cleared. "
- "Reapplying the same event without first continuing the debuggee may result in undefined behavior\n",
- Tag == DEBUGGER_MODIFY_EVENTS_APPLY_TO_ALL_TAG ? "events are" : "the event is");
- }
-
//
// The action was applied successfully
//
@@ -698,9 +681,9 @@ CommandEventsModifyAndQueryEvents(UINT64 Tag,
//
//
- // Check if the VMM module is loaded or not
+ // Check if debugger is loaded or not
//
- AssertShowMessageReturnStmt(g_IsVmmModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_VMM_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturnFalse);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturnFalse);
//
// Fill the structure to send it to the kernel
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/exit.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/exit.cpp
similarity index 68%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/exit.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/exit.cpp
index b691c60b..40b78fd3 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/exit.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/exit.cpp
@@ -17,8 +17,6 @@
extern HANDLE g_DeviceHandle;
extern BOOLEAN g_IsConnectedToHyperDbgLocally;
extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
-extern BOOLEAN g_IsKdModuleLoaded;
-extern BOOLEAN g_IsVmmModuleLoaded;
/**
* @brief help of the exit command
@@ -37,18 +35,16 @@ CommandExitHelp()
/**
* @brief exit command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandExit(vector CommandTokens, string Command)
+CommandExit(vector SplitCommand, string Command)
{
- if (CommandTokens.size() != 1)
+ if (SplitCommand.size() != 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'exit'\n\n");
CommandExitHelp();
return;
}
@@ -60,14 +56,11 @@ CommandExit(vector CommandTokens, string Command)
//
//
- // unload and exit if the any module is loaded
+ // unload and exit if the vmm module is loaded
//
if (g_DeviceHandle)
{
- //
- // Unload all modules
- //
- HyperDbgUnloadAllModules();
+ HyperDbgUnloadVmm();
}
}
else if (g_IsSerialConnectedToRemoteDebuggee)
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/flush.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/flush.cpp
similarity index 84%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/flush.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/flush.cpp
index c286207b..dfc51942 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/flush.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/flush.cpp
@@ -14,7 +14,6 @@
//
// Global Variables
//
-extern BOOLEAN g_IsKdModuleLoaded;
extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
/**
@@ -46,16 +45,16 @@ CommandFlushRequestFlush()
if (g_IsSerialConnectedToRemoteDebuggee)
{
//
- // It's on a debugger mode
+ // It's a debug-mode
//
KdSendFlushPacketToDebuggee();
}
else
{
//
- // It's on a local debugging mode
+ // It's a vmi-mode
//
- AssertShowMessageReturnStmt(g_IsKdModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_KD_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
//
// By the way, we don't need to send an input buffer
@@ -102,18 +101,16 @@ CommandFlushRequestFlush()
/**
* @brief flush command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandFlush(vector CommandTokens, string Command)
+CommandFlush(vector SplitCommand, string Command)
{
- if (CommandTokens.size() != 1)
+ if (SplitCommand.size() != 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'flush'\n\n");
CommandFlushHelp();
return;
}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/g.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/g.cpp
similarity index 82%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/g.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/g.cpp
index 5530df30..eba67d26 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/g.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/g.cpp
@@ -67,7 +67,7 @@ CommandGRequest()
{
if (g_ActiveProcessDebuggingState.IsPaused)
{
- UdContinueProcess(g_ActiveProcessDebuggingState.ProcessDebuggingToken);
+ UdContinueDebuggee(g_ActiveProcessDebuggingState.ProcessDebuggingToken);
//
// Target process is running
@@ -76,7 +76,7 @@ CommandGRequest()
}
else
{
- ShowMessages("the target process is already running\n");
+ ShowMessages("err, target process is already running\n");
}
}
}
@@ -85,18 +85,16 @@ CommandGRequest()
/**
* @brief handler of g command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandG(vector CommandTokens, string Command)
+CommandG(vector SplitCommand, string Command)
{
- if (CommandTokens.size() != 1)
+ if (SplitCommand.size() != 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'g'\n\n");
CommandGHelp();
return;
}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/gu.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/gu.cpp
similarity index 72%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/gu.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/gu.cpp
index 36362c21..17aac4c7 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/gu.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/gu.cpp
@@ -43,35 +43,38 @@ CommandGuHelp()
/**
* @brief handler of gu command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandGu(vector CommandTokens, string Command)
+CommandGu(vector SplitCommand, string Command)
{
- UINT32 StepCount;
- BOOLEAN LastInstruction = FALSE;
- BOOLEAN BreakOnNextInstruction = FALSE;
+ UINT32 StepCount;
+ DEBUGGER_REMOTE_STEPPING_REQUEST RequestFormat;
+ BOOLEAN BreakOnNextInstruction = FALSE;
//
// Validate the commands
//
- if (CommandTokens.size() != 1 && CommandTokens.size() != 2)
+ if (SplitCommand.size() != 1 && SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'gu'\n\n");
CommandGuHelp();
return;
}
+ //
+ // Set type of request
+ //
+ RequestFormat = DEBUGGER_REMOTE_STEPPING_REQUEST_STEP_OVER_FOR_GU;
+
//
// Check if the command has a counter parameter
//
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
- if (!ConvertTokenToUInt32(CommandTokens.at(1), &StepCount))
+ if (!ConvertStringToUInt32(SplitCommand.at(1), &StepCount))
{
ShowMessages("please specify a correct hex value for [count]\n\n");
CommandGuHelp();
@@ -103,7 +106,7 @@ CommandGu(vector CommandTokens, string Command)
//
g_IsInstrumentingInstructions = TRUE;
- for (SIZE_T i = 0; i < StepCount; i++)
+ for (size_t i = 0; i < StepCount; i++)
{
//
// For logging purpose
@@ -126,13 +129,25 @@ CommandGu(vector CommandTokens, string Command)
//
// It's the last instruction, so we gonna show the instruction
//
- LastInstruction = TRUE;
+ RequestFormat = DEBUGGER_REMOTE_STEPPING_REQUEST_STEP_OVER_FOR_GU_LAST_INSTRUCTION;
}
- //
- // Perform a GU step
- //
- SteppingStepOverForGu(LastInstruction);
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ //
+ // It's stepping over serial connection in kernel debugger
+ //
+ KdSendStepPacketToDebuggee(RequestFormat);
+ }
+ else
+ {
+ //
+ // It's stepping over user debugger
+ //
+ UdSendStepPacketToDebuggee(g_ActiveProcessDebuggingState.ProcessDebuggingToken,
+ g_ActiveProcessDebuggingState.ThreadId,
+ RequestFormat);
+ }
//
// Check if user pressed CTRL+C
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/i.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/i.cpp
similarity index 81%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/i.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/i.cpp
index 29fdad73..f299fe99 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/i.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/i.cpp
@@ -47,23 +47,22 @@ CommandIHelp()
/**
* @brief handler of i command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandI(vector CommandTokens, string Command)
+CommandI(vector SplitCommand, string Command)
{
- UINT32 StepCount;
+ UINT32 StepCount;
+ DEBUGGER_REMOTE_STEPPING_REQUEST RequestFormat;
//
// Validate the commands
//
- if (CommandTokens.size() != 1 && CommandTokens.size() != 2)
+ if (SplitCommand.size() != 1 && SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'i'\n\n");
CommandIHelp();
return;
}
@@ -77,12 +76,17 @@ CommandI(vector CommandTokens, string Command)
return;
}
+ //
+ // Set type of step
+ //
+ RequestFormat = DEBUGGER_REMOTE_STEPPING_REQUEST_INSTRUMENTATION_STEP_IN;
+
//
// Check if the command has a counter parameter
//
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
- if (!ConvertTokenToUInt32(CommandTokens.at(1), &StepCount))
+ if (!ConvertStringToUInt32(SplitCommand.at(1), &StepCount))
{
ShowMessages("please specify a correct hex value for [count]\n\n");
CommandIHelp();
@@ -104,7 +108,7 @@ CommandI(vector CommandTokens, string Command)
//
g_IsInstrumentingInstructions = TRUE;
- for (SIZE_T i = 0; i < StepCount; i++)
+ for (size_t i = 0; i < StepCount; i++)
{
//
// For logging purpose
@@ -116,15 +120,14 @@ CommandI(vector CommandTokens, string Command)
//
// It's stepping over serial connection in kernel debugger
//
- SteppingInstrumentationStepIn();
+ KdSendStepPacketToDebuggee(RequestFormat);
- if (CompareLowerCaseStrings(CommandTokens.at(0), "ir"))
+ if (!SplitCommand.at(0).compare("ir"))
{
//
// Show registers
//
- HyperDbgRegisterShowAll();
-
+ ShowAllRegisters();
if (i != StepCount - 1)
{
ShowMessages("\n");
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/k.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/k.cpp
similarity index 72%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/k.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/k.cpp
index 9affccd8..3ea810ec 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/k.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/k.cpp
@@ -47,24 +47,26 @@ CommandKHelp()
/**
* @brief k command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandK(vector CommandTokens, string Command)
+CommandK(vector SplitCommand, string Command)
{
- UINT64 BaseAddress = NULL; // Null base address means current RSP register
- UINT32 Length = PAGE_SIZE; // Default length
- BOOLEAN IsFirstCommand = TRUE;
- BOOLEAN IsNextBase = FALSE;
- BOOLEAN IsNextLength = FALSE;
+ UINT64 BaseAddress = NULL; // Null base address means current RSP register
+ UINT32 Length = 0x100; // Default length
+ vector SplitCommandCaseSensitive {Split(Command, ' ')};
+ UINT32 IndexInCommandCaseSensitive = 0;
+ BOOLEAN IsFirstCommand = TRUE;
+ BOOLEAN IsNextBase = FALSE;
+ BOOLEAN IsNextLength = FALSE;
- if (CommandTokens.size() >= 6)
+ string FirstCommand = SplitCommand.front();
+
+ if (SplitCommand.size() >= 6)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '%s'\n\n", FirstCommand.c_str());
CommandKHelp();
return;
}
@@ -81,15 +83,17 @@ CommandK(vector CommandTokens, string Command)
//
if (g_IsRunningInstruction32Bit)
{
- Length = PAGE_SIZE;
+ Length = 0x100;
}
else
{
- Length = PAGE_SIZE * 2;
+ Length = 0x200;
}
- for (auto Section : CommandTokens)
+ for (auto Section : SplitCommand)
{
+ IndexInCommandCaseSensitive++;
+
if (IsFirstCommand)
{
IsFirstCommand = FALSE;
@@ -97,14 +101,14 @@ CommandK(vector CommandTokens, string Command)
}
if (IsNextBase == TRUE)
{
- if (!SymbolConvertNameOrExprToAddress(GetCaseSensitiveStringFromCommandToken(Section),
+ if (!SymbolConvertNameOrExprToAddress(SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1),
&BaseAddress))
{
//
// Couldn't resolve or unknown parameter
//
ShowMessages("err, couldn't resolve error at '%s'\n",
- GetCaseSensitiveStringFromCommandToken(Section).c_str());
+ SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1).c_str());
return;
}
@@ -114,7 +118,7 @@ CommandK(vector CommandTokens, string Command)
if (IsNextLength == TRUE)
{
- if (!ConvertTokenToUInt32(Section, &Length))
+ if (!ConvertStringToUInt32(Section, &Length))
{
ShowMessages("err, you should enter a valid length\n\n");
return;
@@ -123,13 +127,13 @@ CommandK(vector CommandTokens, string Command)
continue;
}
- if (CompareLowerCaseStrings(Section, "l"))
+ if (!Section.compare("l"))
{
IsNextLength = TRUE;
continue;
}
- if (CompareLowerCaseStrings(Section, "base"))
+ if (!Section.compare("base"))
{
IsNextBase = TRUE;
continue;
@@ -139,7 +143,7 @@ CommandK(vector CommandTokens, string Command)
// User inserts unexpected input
//
ShowMessages("err, incorrect use of the '%s' command\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ FirstCommand.c_str());
CommandKHelp();
return;
@@ -147,8 +151,7 @@ CommandK(vector CommandTokens, string Command)
if (IsNextLength || IsNextBase)
{
- ShowMessages("incorrect use of the '%s' command\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the '%s' command\n\n", FirstCommand.c_str());
CommandKHelp();
return;
}
@@ -157,21 +160,21 @@ CommandK(vector CommandTokens, string Command)
// Send callstack request
//
- if (CompareLowerCaseStrings(CommandTokens.at(0), "k"))
+ if (!FirstCommand.compare("k"))
{
KdSendCallStackPacketToDebuggee(BaseAddress,
Length,
DEBUGGER_CALLSTACK_DISPLAY_METHOD_WITHOUT_PARAMS,
g_IsRunningInstruction32Bit);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "kq"))
+ else if (!FirstCommand.compare("kq"))
{
KdSendCallStackPacketToDebuggee(BaseAddress,
Length,
DEBUGGER_CALLSTACK_DISPLAY_METHOD_WITH_PARAMS,
FALSE);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(0), "kd"))
+ else if (!FirstCommand.compare("kd"))
{
KdSendCallStackPacketToDebuggee(BaseAddress,
Length,
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/lm.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/lm.cpp
similarity index 83%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/lm.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/lm.cpp
index ce0cfb12..bc4e0c5d 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/lm.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/lm.cpp
@@ -16,7 +16,6 @@ using namespace std;
//
// Global Variables
//
-extern BOOLEAN g_IsKdModuleLoaded;
extern ACTIVE_DEBUGGING_PROCESS g_ActiveProcessDebuggingState;
/**
@@ -49,7 +48,7 @@ CommandLmHelp()
* @return wstring
*/
std::wstring
-CommandLmConvertWow64CompatibilityPaths(const WCHAR * LocalFilePath)
+CommandLmConvertWow64CompatibilityPaths(const wchar_t * LocalFilePath)
{
std::wstring filePath(LocalFilePath);
@@ -57,7 +56,7 @@ CommandLmConvertWow64CompatibilityPaths(const WCHAR * LocalFilePath)
std::transform(filePath.begin(), filePath.end(), filePath.begin(), ::tolower);
// Replace "\windows\system32" with "\windows\syswow64"
- SIZE_T pos = filePath.find(L":\\windows\\system32");
+ size_t pos = filePath.find(L":\\windows\\system32");
if (pos != std::string::npos)
{
filePath.replace(pos, 18, L":\\Windows\\SysWOW64");
@@ -81,7 +80,7 @@ CommandLmConvertWow64CompatibilityPaths(const WCHAR * LocalFilePath)
* @return BOOLEAN
*/
BOOLEAN
-CommandLmShowUserModeModule(UINT32 ProcessId, const CHAR * SearchModule)
+CommandLmShowUserModeModule(UINT32 ProcessId, const char * SearchModule)
{
BOOLEAN Status;
ULONG ReturnedLength;
@@ -90,14 +89,14 @@ CommandLmShowUserModeModule(UINT32 ProcessId, const CHAR * SearchModule)
PUSERMODE_LOADED_MODULE_DETAILS ModuleDetailsRequest = NULL;
PUSERMODE_LOADED_MODULE_SYMBOLS Modules = NULL;
USERMODE_LOADED_MODULE_DETAILS ModuleCountRequest = {0};
- SIZE_T CharSize = 0;
- WCHAR * WcharBuff = NULL;
+ size_t CharSize = 0;
+ wchar_t * WcharBuff = NULL;
wstring SearchModuleString;
//
// Check if debugger is loaded or not
//
- AssertShowMessageReturnStmt(g_IsKdModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_KD_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturnFalse);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturnFalse);
//
// Set the module details to get the details
@@ -190,7 +189,7 @@ CommandLmShowUserModeModule(UINT32 ProcessId, const CHAR * SearchModule)
if (SearchModule != NULL)
{
CharSize = strlen(SearchModule) + 1;
- WcharBuff = (WCHAR *)malloc(CharSize * 2);
+ WcharBuff = (wchar_t *)malloc(CharSize * 2);
if (WcharBuff == NULL)
{
@@ -204,7 +203,7 @@ CommandLmShowUserModeModule(UINT32 ProcessId, const CHAR * SearchModule)
SearchModuleString.assign(WcharBuff, wcslen(WcharBuff));
}
- for (SIZE_T i = 0; i < ModulesCount; i++)
+ for (size_t i = 0; i < ModulesCount; i++)
{
//
// Check if we need to search for the module or not
@@ -214,7 +213,7 @@ CommandLmShowUserModeModule(UINT32 ProcessId, const CHAR * SearchModule)
//
// Convert FullPathName to string
//
- std::wstring FullPathName((WCHAR *)Modules[i].FilePath);
+ std::wstring FullPathName((wchar_t *)Modules[i].FilePath);
if (FindCaseInsensitiveW(FullPathName, SearchModuleString, 0) == std::wstring::npos)
{
@@ -272,14 +271,43 @@ CommandLmShowUserModeModule(UINT32 ProcessId, const CHAR * SearchModule)
* @return BOOLEAN
*/
BOOLEAN
-CommandLmShowKernelModeModule(const CHAR * SearchModule)
+CommandLmShowKernelModeModule(const char * SearchModule)
{
- PRTL_PROCESS_MODULES ModulesInfo = NULL;
+ NTSTATUS Status = STATUS_UNSUCCESSFUL;
+ PRTL_PROCESS_MODULES ModulesInfo;
+ ULONG SysModuleInfoBufferSize = 0;
string SearchModuleString;
- if (SymbolCheckAndAllocateModuleInformation(&ModulesInfo) == FALSE)
+ //
+ // Get required size of "RTL_PROCESS_MODULES" buffer
+ //
+ Status = NtQuerySystemInformation(SystemModuleInformation, NULL, NULL, &SysModuleInfoBufferSize);
+
+ //
+ // Allocate memory for the module list
+ //
+ ModulesInfo = (PRTL_PROCESS_MODULES)VirtualAlloc(
+ NULL,
+ SysModuleInfoBufferSize,
+ MEM_COMMIT | MEM_RESERVE,
+ PAGE_READWRITE);
+
+ if (!ModulesInfo)
{
- ShowMessages("err, unable get modules information\n");
+ ShowMessages("err, unable to allocate memory for module list (%x)\n",
+ GetLastError());
+ return FALSE;
+ }
+
+ Status = NtQuerySystemInformation(SystemModuleInformation,
+ ModulesInfo,
+ SysModuleInfoBufferSize,
+ NULL);
+ if (!NT_SUCCESS(Status))
+ {
+ ShowMessages("err, unable to query module list (%x)\n", Status);
+
+ VirtualFree(ModulesInfo, 0, MEM_RELEASE);
return FALSE;
}
@@ -303,7 +331,7 @@ CommandLmShowKernelModeModule(const CHAR * SearchModule)
//
// Convert FullPathName to string
//
- std::string FullPathName((CHAR *)CurrentModule->FullPathName);
+ std::string FullPathName((char *)CurrentModule->FullPathName);
if (FindCaseInsensitive(FullPathName, SearchModuleString, 0) == std::string::npos)
{
@@ -318,7 +346,7 @@ CommandLmShowKernelModeModule(const CHAR * SearchModule)
ShowMessages("%x\t", CurrentModule->ImageSize);
auto PathName = CurrentModule->FullPathName + CurrentModule->OffsetToFileName;
- UINT32 PathNameLen = (UINT32)strlen((const CHAR *)PathName);
+ UINT32 PathNameLen = (UINT32)strlen((const char *)PathName);
ShowMessages("%s\t", PathName);
@@ -341,7 +369,7 @@ CommandLmShowKernelModeModule(const CHAR * SearchModule)
ShowMessages("%s\n", CurrentModule->FullPathName);
}
- free(ModulesInfo);
+ VirtualFree(ModulesInfo, 0, MEM_RELEASE);
return TRUE;
}
@@ -349,13 +377,12 @@ CommandLmShowKernelModeModule(const CHAR * SearchModule)
/**
* @brief handle lm command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandLm(vector CommandTokens, string Command)
+CommandLm(vector SplitCommand, string Command)
{
BOOLEAN SetPid = FALSE;
BOOLEAN SetSearchFilter = FALSE;
@@ -363,35 +390,35 @@ CommandLm(vector CommandTokens, string Command)
BOOLEAN OnlyShowKernelModules = FALSE;
BOOLEAN OnlyShowUserModules = FALSE;
UINT32 TargetPid = NULL;
- CHAR Search[MAX_PATH] = {0};
- CHAR * SearchString = NULL;
+ char Search[MAX_PATH] = {0};
+ char * SearchString = NULL;
//
// Interpret command specific details (if any)
//
- for (auto Section : CommandTokens)
+ for (auto Section : SplitCommand)
{
- if (CompareLowerCaseStrings(Section, "lm"))
+ if (!Section.compare("lm"))
{
continue;
}
- else if (CompareLowerCaseStrings(Section, "pid") && !SetPid)
+ else if (!Section.compare("pid") && !SetPid)
{
SetPid = TRUE;
}
- else if (CompareLowerCaseStrings(Section, "m") && !SetSearchFilter)
+ else if (!Section.compare("m") && !SetSearchFilter)
{
SetSearchFilter = TRUE;
}
else if (SetPid)
{
- if (!ConvertTokenToUInt32(Section, &TargetPid))
+ if (!ConvertStringToUInt32(Section, &TargetPid))
{
//
// couldn't resolve or unknown parameter
//
ShowMessages("err, couldn't resolve error at '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(Section).c_str());
+ Section.c_str());
CommandLmHelp();
return;
}
@@ -399,7 +426,7 @@ CommandLm(vector CommandTokens, string Command)
}
else if (SetSearchFilter)
{
- if (GetCaseSensitiveStringFromCommandToken(Section).length() >= MAX_PATH)
+ if (Section.length() >= MAX_PATH)
{
ShowMessages("err, string is too large for search, please enter "
"smaller string\n");
@@ -408,11 +435,11 @@ CommandLm(vector CommandTokens, string Command)
}
SearchStringEntered = TRUE;
- strcpy(Search, GetLowerStringFromCommandToken(Section).c_str());
+ strcpy(Search, Section.c_str());
SetSearchFilter = FALSE;
}
- else if (CompareLowerCaseStrings(Section, "km"))
+ else if (!Section.compare("km"))
{
if (OnlyShowUserModules)
{
@@ -423,7 +450,7 @@ CommandLm(vector CommandTokens, string Command)
OnlyShowKernelModules = TRUE;
}
- else if (CompareLowerCaseStrings(Section, "um"))
+ else if (!Section.compare("um"))
{
if (OnlyShowKernelModules)
{
@@ -440,7 +467,7 @@ CommandLm(vector CommandTokens, string Command)
// Unknown parameter
//
ShowMessages("err, couldn't resolve error at '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(Section).c_str());
+ Section.c_str());
CommandLmHelp();
return;
}
diff --git a/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/load.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/load.cpp
new file mode 100644
index 00000000..7dc5a1fe
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/load.cpp
@@ -0,0 +1,180 @@
+/**
+ * @file load.cpp
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @brief load command
+ * @details
+ * @version 0.1
+ * @date 2020-05-27
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+
+//
+// Global Variables
+//
+extern HANDLE g_IsDriverLoadedSuccessfully;
+extern HANDLE g_DeviceHandle;
+extern BOOLEAN g_IsConnectedToHyperDbgLocally;
+extern BOOLEAN g_IsDebuggerModulesLoaded;
+
+/**
+ * @brief help of the load command
+ *
+ * @return VOID
+ */
+VOID
+CommandLoadHelp()
+{
+ ShowMessages("load : installs the drivers and load the modules.\n\n");
+
+ ShowMessages("syntax : \tload [ModuleName (string)]\n");
+
+ ShowMessages("\n");
+ ShowMessages("\t\te.g : load vmm\n");
+}
+
+/**
+ * @brief load vmm module
+ *
+ * @return BOOLEAN
+ */
+BOOLEAN
+CommandLoadVmmModule()
+{
+ BOOL Status;
+ HANDLE hToken;
+
+ //
+ // Enable Debug privilege
+ //
+ Status = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
+ if (!Status)
+ {
+ ShowMessages("err, OpenProcessToken failed (%x)\n", GetLastError());
+ return FALSE;
+ }
+
+ Status = SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);
+ if (!Status)
+ {
+ CloseHandle(hToken);
+ return FALSE;
+ }
+
+ //
+ // Install vmm driver
+ //
+ if (HyperDbgInstallVmmDriver() == 1)
+ {
+ return FALSE;
+ }
+
+ //
+ // Create event to show if the hypervisor is loaded or not
+ //
+ g_IsDriverLoadedSuccessfully = CreateEvent(NULL, FALSE, FALSE, NULL);
+
+ if (HyperDbgLoadVmm() == 1)
+ {
+ //
+ // No need to handle anymore
+ //
+ CloseHandle(g_IsDriverLoadedSuccessfully);
+ return FALSE;
+ }
+
+ //
+ // Vmm module (Hypervisor) is loaded
+ //
+
+ //
+ // We wait for the first message from the kernel debugger to continue
+ //
+ WaitForSingleObject(
+ g_IsDriverLoadedSuccessfully,
+ INFINITE);
+
+ //
+ // No need to handle anymore
+ //
+ CloseHandle(g_IsDriverLoadedSuccessfully);
+
+ //
+ // If we reach here so the module are loaded
+ //
+ g_IsDebuggerModulesLoaded = TRUE;
+
+ ShowMessages("vmm module is running...\n");
+
+ return TRUE;
+}
+
+/**
+ * @brief load command handler
+ *
+ * @param SplitCommand
+ * @param Command
+ * @return VOID
+ */
+VOID
+CommandLoad(vector SplitCommand, string Command)
+{
+ if (SplitCommand.size() != 2)
+ {
+ ShowMessages("incorrect use of the 'load'\n\n");
+ CommandLoadHelp();
+ return;
+ }
+
+ if (!g_IsConnectedToHyperDbgLocally)
+ {
+ ShowMessages("you're not connected to any instance of HyperDbg, did you "
+ "use '.connect'? \n");
+ return;
+ }
+
+ //
+ // Check for the module
+ //
+ if (!SplitCommand.at(1).compare("vmm"))
+ {
+ //
+ // Check to make sure that the driver is not already loaded
+ //
+ if (g_DeviceHandle)
+ {
+ ShowMessages("handle of the driver found, if you use 'load' before, please "
+ "first unload it then call 'unload'\n");
+ return;
+ }
+
+ //
+ // Load VMM Module
+ //
+ ShowMessages("loading the vmm driver\n");
+
+ if (!CommandLoadVmmModule())
+ {
+ ShowMessages("failed to install or load the driver\n");
+ return;
+ }
+
+ //
+ // If in vmi-mode then initialize and load symbols (pdb)
+ // for previously downloaded symbols
+ // When the VMM module is loaded, we use the current
+ // process (HyperDbg's process) as the base for user-mode
+ // symbols
+ //
+ SymbolLocalReload(GetCurrentProcessId());
+ }
+ else
+ {
+ //
+ // Module not found
+ //
+ ShowMessages("err, module not found\n");
+ }
+}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/output.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/output.cpp
similarity index 86%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/output.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/output.cpp
index 0fafc899..51a96c94 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/output.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/output.cpp
@@ -28,16 +28,12 @@ CommandOutputHelp()
ShowMessages("output : creates an output instance that can be used in event "
"forwarding.\n\n");
- ShowMessages("syntax : \toutput\n");
- ShowMessages("syntax : \toutput [create Name (string)] [file|namedpipe|tcp|module Address (string)]\n");
+ ShowMessages("syntax : \toutput [create Name (string)] [file|namedpipe|tcp Address (string)]\n");
ShowMessages("syntax : \toutput [open|close Name (string)]\n");
ShowMessages("\n");
- ShowMessages("\t\te.g : output\n");
ShowMessages("\t\te.g : output create MyOutputName1 file "
"c:\\rev\\output.txt\n");
- ShowMessages("\t\te.g : output create MyOutputName1 file "
- "\"c:\\rev\\output file.txt\"\n");
ShowMessages("\t\te.g : output create MyOutputName2 tcp 192.168.1.10:8080\n");
ShowMessages("\t\te.g : output create MyOutputName3 namedpipe "
"\\\\.\\Pipe\\HyperDbgOutput\n");
@@ -50,12 +46,12 @@ CommandOutputHelp()
/**
* @brief output command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
* @return VOID
*/
VOID
-CommandOutput(vector CommandTokens, string Command)
+CommandOutput(vector SplitCommand, string Command)
{
PDEBUGGER_EVENT_FORWARDING EventForwardingObject;
DEBUGGER_EVENT_FORWARDING_TYPE Type;
@@ -67,11 +63,11 @@ CommandOutput(vector CommandTokens, string Command)
HANDLE SourceHandle = INVALID_HANDLE_VALUE;
SOCKET Socket = NULL;
HMODULE Module = NULL;
+ vector SplitCommandCaseSensitive {Split(Command, ' ')};
- if ((CommandTokens.size() != 1 && CommandTokens.size() <= 2) || CommandTokens.size() >= 6)
+ if (SplitCommand.size() <= 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'output'\n\n");
CommandOutputHelp();
return;
}
@@ -79,7 +75,7 @@ CommandOutput(vector CommandTokens, string Command)
//
// Check if the user needs a list of outputs or not
//
- if (CommandTokens.size() == 1)
+ if (SplitCommand.size() == 1)
{
IndexToShowList = 0;
@@ -149,7 +145,7 @@ CommandOutput(vector CommandTokens, string Command)
//
// Check if it's a create, open, or close
//
- if (CompareLowerCaseStrings(CommandTokens.at(1), "create"))
+ if (!SplitCommand.at(1).compare("create"))
{
//
// It's a create
@@ -158,10 +154,9 @@ CommandOutput(vector CommandTokens, string Command)
//
// check if the parameters are okay for a create or not
//
- if (CommandTokens.size() <= 4)
+ if (SplitCommand.size() <= 4)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'output'\n\n");
CommandOutputHelp();
return;
}
@@ -169,26 +164,26 @@ CommandOutput(vector CommandTokens, string Command)
//
// Check for the type of the output source
//
- if (CompareLowerCaseStrings(CommandTokens.at(3), "file"))
+ if (!SplitCommand.at(3).compare("file"))
{
Type = EVENT_FORWARDING_FILE;
}
- else if (CompareLowerCaseStrings(CommandTokens.at(3), "namedpipe"))
+ else if (!SplitCommand.at(3).compare("namedpipe"))
{
Type = EVENT_FORWARDING_NAMEDPIPE;
}
- else if (CompareLowerCaseStrings(CommandTokens.at(3), "tcp"))
+ else if (!SplitCommand.at(3).compare("tcp"))
{
Type = EVENT_FORWARDING_TCP;
}
- else if (CompareLowerCaseStrings(CommandTokens.at(3), "module"))
+ else if (!SplitCommand.at(3).compare("module"))
{
Type = EVENT_FORWARDING_MODULE;
}
else
{
ShowMessages("incorrect type near '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(3)).c_str());
+ SplitCommand.at(3).c_str());
CommandOutputHelp();
return;
}
@@ -196,7 +191,7 @@ CommandOutput(vector CommandTokens, string Command)
//
// Check to make sure that the name doesn't exceed the maximum character
//
- if (GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).size() >=
+ if (SplitCommand.at(2).size() >=
MAXIMUM_CHARACTERS_FOR_EVENT_FORWARDING_NAME)
{
ShowMessages("name of the output cannot exceed form %d characters\n\n",
@@ -222,7 +217,7 @@ CommandOutput(vector CommandTokens, string Command)
CONTAINING_RECORD(TempList, DEBUGGER_EVENT_FORWARDING, OutputSourcesList);
if (strcmp(CurrentOutputSourceDetails->Name,
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).c_str()) == 0)
+ SplitCommandCaseSensitive.at(2).c_str()) == 0)
{
//
// Indicate that we found this item
@@ -250,7 +245,9 @@ CommandOutput(vector CommandTokens, string Command)
//
// try to open the source and get the handle
//
- DetailsOfSource = GetCaseSensitiveStringFromCommandToken(CommandTokens.at(4));
+ DetailsOfSource = Command.substr(Command.find(SplitCommandCaseSensitive.at(3)) +
+ SplitCommandCaseSensitive.at(3).size() + 1,
+ Command.size());
SourceHandle = ForwardingCreateOutputSource(Type, DetailsOfSource, &Socket, &Module);
@@ -318,8 +315,7 @@ CommandOutput(vector CommandTokens, string Command)
//
// Move the name of the output source to the buffer
//
- strcpy_s(EventForwardingObject->Name,
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).c_str());
+ strcpy_s(EventForwardingObject->Name, SplitCommandCaseSensitive.at(2).c_str());
//
// Check if list is initialized or not
@@ -336,7 +332,7 @@ CommandOutput(vector CommandTokens, string Command)
InsertHeadList(&g_OutputSources,
&(EventForwardingObject->OutputSourcesList));
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "open"))
+ else if (!SplitCommand.at(1).compare("open"))
{
//
// It's an open
@@ -363,7 +359,7 @@ CommandOutput(vector CommandTokens, string Command)
OutputSourcesList);
if (strcmp(CurrentOutputSourceDetails->Name,
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).c_str()) == 0)
+ SplitCommandCaseSensitive.at(2).c_str()) == 0)
{
//
// Indicate that we found this item
@@ -405,7 +401,7 @@ CommandOutput(vector CommandTokens, string Command)
return;
}
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "close"))
+ else if (!SplitCommand.at(1).compare("close"))
{
//
// It's a close
@@ -432,7 +428,7 @@ CommandOutput(vector CommandTokens, string Command)
OutputSourcesList);
if (strcmp(CurrentOutputSourceDetails->Name,
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).c_str()) == 0)
+ SplitCommandCaseSensitive.at(2).c_str()) == 0)
{
//
// Indicate that we found this item
@@ -479,8 +475,7 @@ CommandOutput(vector CommandTokens, string Command)
//
// Invalid argument
//
- ShowMessages("incorrect option at '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect option at '%s'\n\n", SplitCommand.at(1).c_str());
CommandOutputHelp();
return;
}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/p.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/p.cpp
similarity index 75%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/p.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/p.cpp
index a50a41d2..d4a0c86b 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/p.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/p.cpp
@@ -44,13 +44,12 @@ CommandPHelp()
/**
* @brief handler of p command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandP(vector CommandTokens, string Command)
+CommandP(vector SplitCommand, string Command)
{
UINT32 StepCount;
DEBUGGER_REMOTE_STEPPING_REQUEST RequestFormat;
@@ -58,10 +57,9 @@ CommandP(vector CommandTokens, string Command)
//
// Validate the commands
//
- if (CommandTokens.size() != 1 && CommandTokens.size() != 2)
+ if (SplitCommand.size() != 1 && SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'p'\n\n");
CommandPHelp();
return;
}
@@ -74,9 +72,9 @@ CommandP(vector CommandTokens, string Command)
//
// Check if the command has a counter parameter
//
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
- if (!ConvertTokenToUInt32(CommandTokens.at(1), &StepCount))
+ if (!ConvertStringToUInt32(SplitCommand.at(1), &StepCount))
{
ShowMessages("please specify a correct hex value for [count]\n\n");
CommandPHelp();
@@ -108,7 +106,7 @@ CommandP(vector CommandTokens, string Command)
//
g_IsInstrumentingInstructions = TRUE;
- for (SIZE_T i = 0; i < StepCount; i++)
+ for (size_t i = 0; i < StepCount; i++)
{
//
// For logging purpose
@@ -117,18 +115,29 @@ CommandP(vector CommandTokens, string Command)
// (float)StepCount), i);
//
- //
- // Perform Step-over
- //
- SteppingStepOver();
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ //
+ // It's stepping over serial connection in kernel debugger
+ //
+ KdSendStepPacketToDebuggee(RequestFormat);
+ }
+ else
+ {
+ //
+ // It's stepping over user debugger
+ //
+ UdSendStepPacketToDebuggee(g_ActiveProcessDebuggingState.ProcessDebuggingToken,
+ g_ActiveProcessDebuggingState.ThreadId,
+ RequestFormat);
+ }
- if (CompareLowerCaseStrings(CommandTokens.at(0), "pr"))
+ if (!SplitCommand.at(0).compare("pr"))
{
//
// Show registers
//
- HyperDbgRegisterShowAll();
-
+ ShowAllRegisters();
if (i != StepCount - 1)
{
ShowMessages("\n");
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/pause.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/pause.cpp
similarity index 76%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/pause.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/pause.cpp
index 5d2246e7..8e70bfc7 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/pause.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/pause.cpp
@@ -54,32 +54,28 @@ CommandPauseRequest()
}
else if (g_ActiveProcessDebuggingState.IsActive && UdPauseProcess(g_ActiveProcessDebuggingState.ProcessDebuggingToken))
{
- ShowMessages("please keep interacting with the process until all the threads are intercepted "
- "and halted; you can run the 'g' command to continue the debuggee\n");
+ ShowMessages("please keep interacting with the process until all the "
+ "threads are intercepted and halted; whenever you execute "
+ "the first command, the thread interception will be stopped\n");
}
}
/**
* @brief pause command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandPause(vector CommandTokens, string Command)
+CommandPause(vector SplitCommand, string Command)
{
- if (CommandTokens.size() != 1)
+ if (SplitCommand.size() != 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'pause'\n\n");
CommandPauseHelp();
return;
}
- //
- // request to pause
- //
CommandPauseRequest();
}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/preactivate.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/preactivate.cpp
similarity index 71%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/preactivate.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/preactivate.cpp
index ee88936d..21033c5e 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/preactivate.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/preactivate.cpp
@@ -11,12 +11,6 @@
*/
#include "pch.h"
-//
-// Global Variables
-//
-extern HANDLE g_DeviceHandle;
-extern BOOLEAN g_IsVmmModuleLoaded;
-
/**
* @brief help of the preactivate command
*
@@ -40,22 +34,20 @@ CommandPreactivateHelp()
/**
* @brief preactivate command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandPreactivate(vector CommandTokens, string Command)
+CommandPreactivate(vector SplitCommand, string Command)
{
BOOL Status;
ULONG ReturnedLength;
- DEBUGGER_PREACTIVATE_COMMAND PreactivateRequest = {};
+ DEBUGGER_PREACTIVATE_COMMAND PreactivateRequest = {0};
- if (CommandTokens.size() != 2)
+ if (SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'Preactivate'\n\n");
CommandPreactivateHelp();
return;
}
@@ -63,7 +55,7 @@ CommandPreactivate(vector CommandTokens, string Command)
//
// Set the type of preactivation
//
- if (CompareLowerCaseStrings(CommandTokens.at(1), "mode") || CompareLowerCaseStrings(CommandTokens.at(1), "!mode"))
+ if (!SplitCommand.at(1).compare("mode") || !SplitCommand.at(1).compare("!mode"))
{
PreactivateRequest.Type = DEBUGGER_PREACTIVATE_COMMAND_TYPE_MODE;
}
@@ -73,16 +65,16 @@ CommandPreactivate(vector CommandTokens, string Command)
// Couldn't resolve or unknown parameter
//
ShowMessages("err, couldn't resolve error at '%s'\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(1)).c_str());
+ SplitCommand.at(1).c_str());
return;
}
- AssertShowMessageReturnStmt(g_IsVmmModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_VMM_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
//
// Send IOCTL
//
- Status = PlatformDeviceIoControl(
+ Status = DeviceIoControl(
g_DeviceHandle, // Handle to device
IOCTL_PREACTIVATE_FUNCTIONALITY, // IO Control Code (IOCTL)
&PreactivateRequest, // Input Buffer to driver.
@@ -96,7 +88,7 @@ CommandPreactivate(vector CommandTokens, string Command)
if (!Status)
{
- ShowMessages("ioctl failed with code 0x%x\n", PlatformGetLastError());
+ ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
return;
}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/prealloc.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/prealloc.cpp
similarity index 73%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/prealloc.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/prealloc.cpp
index 0bf9545b..1f13b8cc 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/prealloc.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/prealloc.cpp
@@ -11,11 +11,6 @@
*/
#include "pch.h"
-//
-// Global Variables
-//
-extern BOOLEAN g_IsKdModuleLoaded;
-
/**
* @brief help of the prealloc command
*
@@ -51,62 +46,57 @@ CommandPreallocHelp()
/**
* @brief prealloc command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandPrealloc(vector CommandTokens, string Command)
+CommandPrealloc(vector SplitCommand, string Command)
{
BOOL Status;
ULONG ReturnedLength;
UINT64 Count;
- DEBUGGER_PREALLOC_COMMAND PreallocRequest = {};
- string SecondParam;
+ DEBUGGER_PREALLOC_COMMAND PreallocRequest = {0};
- if (CommandTokens.size() != 3)
+ if (SplitCommand.size() != 3)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'prealloc'\n\n");
CommandPreallocHelp();
return;
}
- SecondParam = GetLowerStringFromCommandToken(CommandTokens.at(1));
-
//
// Set the type of pre-allocation
//
- if (!SecondParam.compare("thread-interception"))
+ if (!SplitCommand.at(1).compare("thread-interception"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_THREAD_INTERCEPTION;
}
- else if (!SecondParam.compare("monitor") || !SecondParam.compare("!monitor"))
+ else if (!SplitCommand.at(1).compare("monitor") || !SplitCommand.at(1).compare("!monitor"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_MONITOR;
}
- else if (!SecondParam.compare("epthook") || !SecondParam.compare("!epthook"))
+ else if (!SplitCommand.at(1).compare("epthook") || !SplitCommand.at(1).compare("!epthook"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_EPTHOOK;
}
- else if (!SecondParam.compare("epthook2") || !SecondParam.compare("!epthook2"))
+ else if (!SplitCommand.at(1).compare("epthook2") || !SplitCommand.at(1).compare("!epthook2"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_EPTHOOK2;
}
- else if (!SecondParam.compare("regular-event"))
+ else if (!SplitCommand.at(1).compare("regular-event"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_REGULAR_EVENT;
}
- else if (!SecondParam.compare("big-event"))
+ else if (!SplitCommand.at(1).compare("big-event"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_BIG_EVENT;
}
- else if (!SecondParam.compare("regular-safe-buffer"))
+ else if (!SplitCommand.at(1).compare("regular-safe-buffer"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_REGULAR_SAFE_BUFFER;
}
- else if (!SecondParam.compare("big-safe-buffer"))
+ else if (!SplitCommand.at(1).compare("big-safe-buffer"))
{
PreallocRequest.Type = DEBUGGER_PREALLOC_COMMAND_TYPE_BIG_SAFE_BUFFER;
}
@@ -116,20 +106,20 @@ CommandPrealloc(vector CommandTokens, string Command)
// Couldn't resolve or unknown parameter
//
ShowMessages("err, couldn't resolve error at '%s'\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(1)).c_str());
+ SplitCommand.at(1).c_str());
return;
}
//
// Get the count of needed pre-allocated buffers
//
- if (!SymbolConvertNameOrExprToAddress(GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)), &Count))
+ if (!SymbolConvertNameOrExprToAddress(SplitCommand.at(2), &Count))
{
//
// Couldn't resolve or unknown parameter
//
ShowMessages("err, couldn't resolve error at '%s'\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).c_str());
+ SplitCommand.at(2).c_str());
return;
}
@@ -138,12 +128,12 @@ CommandPrealloc(vector CommandTokens, string Command)
//
PreallocRequest.Count = (UINT32)Count;
- AssertShowMessageReturnStmt(g_IsKdModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_KD_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
//
// Send IOCTL
//
- Status = PlatformDeviceIoControl(
+ Status = DeviceIoControl(
g_DeviceHandle, // Handle to device
IOCTL_RESERVE_PRE_ALLOCATED_POOLS, // IO Control Code (IOCTL)
&PreallocRequest, // Input Buffer to driver.
@@ -157,7 +147,7 @@ CommandPrealloc(vector CommandTokens, string Command)
if (!Status)
{
- ShowMessages("ioctl failed with code 0x%x\n", PlatformGetLastError());
+ ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
return;
}
diff --git a/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/print.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/print.cpp
new file mode 100644
index 00000000..a2fde89a
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/print.cpp
@@ -0,0 +1,131 @@
+/**
+ * @file print.cpp
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @author M.H. Gholamrezaei (mh@hyperdbg.org)
+ * @brief print command
+ * @details
+ * @version 0.1
+ * @date 2020-10-08
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+
+using namespace std;
+
+//
+// Global Variables
+//
+extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
+
+/**
+ * @brief help of the print command
+ *
+ * @return VOID
+ */
+VOID
+CommandPrintHelp()
+{
+ ShowMessages("print : evaluates expressions.\n\n");
+
+ ShowMessages("syntax : \tprint [Expression (string)]\n");
+
+ ShowMessages("\n");
+ ShowMessages("\t\te.g : print dq(poi(@rcx))\n");
+}
+
+/**
+ * @brief handler of print command
+ *
+ * @param SplitCommand
+ * @param Command
+ * @return VOID
+ */
+VOID
+CommandPrint(vector SplitCommand, string Command)
+{
+ PVOID CodeBuffer;
+ UINT64 BufferAddress;
+ UINT32 BufferLength;
+ UINT32 Pointer;
+
+ if (SplitCommand.size() == 1)
+ {
+ ShowMessages("incorrect use of the 'print'\n\n");
+ CommandPrintHelp();
+ return;
+ }
+
+ //
+ // Trim the command
+ //
+ Trim(Command);
+
+ //
+ // Remove print from it
+ //
+ Command.erase(0, SplitCommand.at(0).size());
+
+ //
+ // Trim it again
+ //
+ Trim(Command);
+
+ //
+ // Prepend and append 'print(' and ')'
+ //
+ Command.insert(0, "print(");
+ Command.append(");");
+
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ //
+ // Send over serial
+ //
+
+ //
+ // Run script engine handler
+ //
+ CodeBuffer = ScriptEngineParseWrapper((char *)Command.c_str(), TRUE);
+
+ if (CodeBuffer == NULL)
+ {
+ //
+ // return to show that this item contains an script
+ //
+ return;
+ }
+
+ //
+ // Print symbols (test)
+ //
+ // PrintSymbolBufferWrapper(CodeBuffer);
+
+ //
+ // Set the buffer and length
+ //
+ BufferAddress = ScriptEngineWrapperGetHead(CodeBuffer);
+ BufferLength = ScriptEngineWrapperGetSize(CodeBuffer);
+ Pointer = ScriptEngineWrapperGetPointer(CodeBuffer);
+
+ //
+ // Send it to the remote debuggee
+ //
+ KdSendScriptPacketToDebuggee(BufferAddress, BufferLength, Pointer, FALSE);
+
+ //
+ // Remove the buffer of script engine interpreted code
+ //
+ ScriptEngineWrapperRemoveSymbolBuffer(CodeBuffer);
+
+ ShowMessages("\n");
+ }
+ else
+ {
+ //
+ // error
+ //
+ ShowMessages("err, you're not connected to any debuggee\n");
+ }
+}
diff --git a/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/r.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/r.cpp
new file mode 100644
index 00000000..02159c12
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/r.cpp
@@ -0,0 +1,365 @@
+/**
+ * @file r.cpp
+ * @author Alee Amini (alee@hyperdbg.org)
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @brief r command
+ * @details
+ * @version 0.1
+ * @date 2021-02-27
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+
+// using namespace std;
+
+//
+// Global Variables
+//
+extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
+
+std::map RegistersMap = {
+ {"rax", REGISTER_RAX},
+ {"eax", REGISTER_EAX},
+ {"ax", REGISTER_AX},
+ {"ah", REGISTER_AH},
+ {"al", REGISTER_AL},
+ {"rbx", REGISTER_RBX},
+ {"ebx", REGISTER_EBX},
+ {"bx", REGISTER_BX},
+ {"bh", REGISTER_BH},
+ {"bl", REGISTER_BL},
+ {"rcx", REGISTER_RCX},
+ {"ecx", REGISTER_ECX},
+ {"cx", REGISTER_CX},
+ {"ch", REGISTER_CH},
+ {"cl", REGISTER_CL},
+ {"rdx", REGISTER_RDX},
+ {"edx", REGISTER_EDX},
+ {"dx", REGISTER_DX},
+ {"dh", REGISTER_DH},
+ {"dl", REGISTER_DL},
+ {"rsi", REGISTER_RSI},
+ {"esi", REGISTER_ESI},
+ {"si", REGISTER_SI},
+ {"sil", REGISTER_SIL},
+ {"rdi", REGISTER_RDI},
+ {"edi", REGISTER_EDI},
+ {"di", REGISTER_DI},
+ {"dil", REGISTER_DIL},
+ {"rbp", REGISTER_RBP},
+ {"ebp", REGISTER_EBP},
+ {"bp", REGISTER_BP},
+ {"bpl", REGISTER_BPL},
+ {"rsp", REGISTER_RSP},
+ {"esp", REGISTER_ESP},
+ {"sp", REGISTER_SP},
+ {"spl", REGISTER_SPL},
+ {"r8", REGISTER_R8},
+ {"r8d", REGISTER_R8D},
+ {"r8w", REGISTER_R8W},
+ {"r8h", REGISTER_R8H},
+ {"r8l", REGISTER_R8L},
+ {"r9", REGISTER_R9},
+ {"r9d", REGISTER_R9D},
+ {"r9w", REGISTER_R9W},
+ {"r9h", REGISTER_R9H},
+ {"r9l", REGISTER_R9L},
+ {"r10", REGISTER_R10},
+ {"r10d", REGISTER_R10D},
+ {"r10w", REGISTER_R10W},
+ {"r10h", REGISTER_R10H},
+ {"r10l", REGISTER_R10L},
+ {"r11", REGISTER_R11},
+ {"r11d", REGISTER_R11D},
+ {"r11w", REGISTER_R11W},
+ {"r11h", REGISTER_R11H},
+ {"r11l", REGISTER_R11L},
+ {"r12", REGISTER_R12},
+ {"r12d", REGISTER_R12D},
+ {"r12w", REGISTER_R12W},
+ {"r12h", REGISTER_R12H},
+ {"r12l", REGISTER_R12L},
+ {"r13", REGISTER_R13},
+ {"r13d", REGISTER_R13D},
+ {"r13w", REGISTER_R13W},
+ {"r13h", REGISTER_R13H},
+ {"r13l", REGISTER_R13L},
+ {"r14", REGISTER_R14},
+ {"r14d", REGISTER_R14D},
+ {"r14w", REGISTER_R14W},
+ {"r14h", REGISTER_R14H},
+ {"r14l", REGISTER_R14L},
+ {"r15", REGISTER_R15},
+ {"r15d", REGISTER_R15D},
+ {"r15w", REGISTER_R15W},
+ {"r15h", REGISTER_R15H},
+ {"r15l", REGISTER_R15L},
+ {"ds", REGISTER_DS},
+ {"es", REGISTER_ES},
+ {"fs", REGISTER_FS},
+ {"gs", REGISTER_GS},
+ {"cs", REGISTER_CS},
+ {"ss", REGISTER_SS},
+ {"rflags", REGISTER_RFLAGS},
+ {"eflags", REGISTER_EFLAGS},
+ {"flags", REGISTER_FLAGS},
+ {"cf", REGISTER_CF},
+ {"pf", REGISTER_PF},
+ {"af", REGISTER_AF},
+ {"zf", REGISTER_ZF},
+ {"sf", REGISTER_SF},
+ {"tf", REGISTER_TF},
+ {"if", REGISTER_IF},
+ {"df", REGISTER_DF},
+ {"of", REGISTER_OF},
+ {"iopl", REGISTER_IOPL},
+ {"nt", REGISTER_NT},
+ {"rf", REGISTER_RF},
+ {"vm", REGISTER_VM},
+ {"ac", REGISTER_AC},
+ {"vif", REGISTER_VIF},
+ {"vip", REGISTER_VIP},
+ {"id", REGISTER_ID},
+ {"idtr", REGISTER_IDTR},
+ {"gdtr", REGISTER_GDTR},
+ {"ldtr", REGISTER_LDTR},
+ {"tr", REGISTER_TR},
+ {"cr0", REGISTER_CR0},
+ {"cr2", REGISTER_CR2},
+ {"cr3", REGISTER_CR3},
+ {"cr4", REGISTER_CR4},
+ {"cr8", REGISTER_CR8},
+ {"dr0", REGISTER_DR0},
+ {"dr1", REGISTER_DR1},
+ {"dr2", REGISTER_DR2},
+ {"dr3", REGISTER_DR3},
+ {"dr6", REGISTER_DR6},
+ {"dr7", REGISTER_DR7},
+ {"rip", REGISTER_RIP},
+ {"eip", REGISTER_EIP},
+ {"ip", REGISTER_IP},
+};
+
+/**
+ * @brief help of the r command
+ *
+ * @return VOID
+ */
+VOID
+CommandRHelp()
+{
+ ShowMessages("r : reads or modifies registers.\n\n");
+
+ ShowMessages("syntax : \tr\n");
+ ShowMessages("syntax : \tr [Register (string)] [= Expr (string)]\n");
+
+ ShowMessages("\n");
+ ShowMessages("\t\te.g : r\n");
+ ShowMessages("\t\te.g : r @rax\n");
+ ShowMessages("\t\te.g : r rax\n");
+ ShowMessages("\t\te.g : r rax = 0x55\n");
+ ShowMessages("\t\te.g : r rax = @rbx + @rcx + 0n10\n");
+}
+
+/**
+ * @brief handler of r show all registers command
+ *
+ * @return BOOLEAN
+ */
+
+VOID
+ShowAllRegisters()
+{
+ DEBUGGEE_REGISTER_READ_DESCRIPTION RegState = {0};
+ RegState.RegisterID = DEBUGGEE_SHOW_ALL_REGISTERS;
+ KdSendReadRegisterPacketToDebuggee(&RegState);
+}
+/**
+ * @brief handler of r command
+ *
+ * @param SplitCommand
+ * @param Command
+ * @return VOID
+ */
+VOID
+CommandR(std::vector SplitCommand, std::string Command)
+{
+ //
+ // Interpret here
+ //
+ PVOID CodeBuffer;
+ UINT64 BufferAddress;
+ UINT32 BufferLength;
+ UINT32 Pointer;
+ REGS_ENUM RegKind;
+ std::vector Tmp;
+
+ std::string SetRegValue = "SetRegValue";
+
+ if (SplitCommand[0] != "r")
+ {
+ return;
+ }
+
+ if (SplitCommand.size() == 1)
+ {
+ //
+ // show all registers
+ //
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ ShowAllRegisters();
+ }
+ else
+ {
+ ShowMessages("err, reading registers (r) is not valid in the current "
+ "context, you should connect to a debuggee\n");
+ }
+
+ return;
+ }
+ //
+ // clear additional space of the command string
+ //
+
+ //
+ // if command does not contain a '=' means user wants to read it
+ //
+ if (Command.find('=', 0) == string::npos)
+ {
+ //
+ // erase '=' from the string now we have just the name of register
+ //
+ Command.erase(0, 1);
+ ReplaceAll(Command, "@", "");
+ ReplaceAll(Command, " ", "");
+ if (RegistersMap.find(Command) != RegistersMap.end())
+ {
+ RegKind = RegistersMap[Command];
+ }
+ else
+ {
+ //
+ // set the Reg to -1(invalid register)
+ //
+ RegKind = (REGS_ENUM)-1;
+ }
+ if (RegKind != -1)
+ {
+ DEBUGGEE_REGISTER_READ_DESCRIPTION RegState = {0};
+ RegState.RegisterID = RegKind;
+
+ //
+ // send the request
+ //
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ KdSendReadRegisterPacketToDebuggee(&RegState);
+ }
+ else
+ {
+ ShowMessages("err, reading registers (r) is not valid in the current "
+ "context, you should connect to a debuggee\n");
+ }
+ }
+ else
+ {
+ ShowMessages("err, invalid register\n");
+ }
+ }
+
+ //
+ // if command contains a '=' means user wants modify the register
+ //
+
+ else if (Command.find('=', 0) != string::npos)
+ {
+ Command.erase(0, 1);
+ Tmp = Split(Command, '=');
+ if (Tmp.size() == 2)
+ {
+ ReplaceAll(Tmp[0], " ", "");
+ string tmp = Tmp[0];
+ if (RegistersMap.find(Tmp[0]) != RegistersMap.end())
+ {
+ RegKind = RegistersMap[Tmp[0]];
+ }
+ else
+ {
+ ReplaceAll(tmp, "@", "");
+ if (RegistersMap.find(tmp) != RegistersMap.end())
+ {
+ RegKind = RegistersMap[tmp];
+ }
+ else
+ {
+ RegKind = (REGS_ENUM)-1;
+ }
+ }
+ if (RegKind != -1)
+ {
+ //
+ // send the request
+ //
+
+ SetRegValue = "@" + tmp + '=' + Tmp[1] + "; ";
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ //
+ // Send over serial
+ //
+
+ //
+ // Run script engine handler
+ //
+ CodeBuffer = ScriptEngineParseWrapper((char *)SetRegValue.c_str(), TRUE);
+ if (CodeBuffer == NULL)
+ {
+ //
+ // return to show that this item contains an script
+ //
+ return;
+ }
+
+ //
+ // Print symbols (test)
+ //
+ // PrintSymbolBufferWrapper(CodeBuffer);
+
+ //
+ // Set the buffer and length
+ //
+ BufferAddress = ScriptEngineWrapperGetHead(CodeBuffer);
+ BufferLength = ScriptEngineWrapperGetSize(CodeBuffer);
+ Pointer = ScriptEngineWrapperGetPointer(CodeBuffer);
+
+ //
+ // Send it to the remote debuggee
+ //
+ KdSendScriptPacketToDebuggee(BufferAddress, BufferLength, Pointer, FALSE);
+
+ //
+ // Remove the buffer of script engine interpreted code
+ //
+ ScriptEngineWrapperRemoveSymbolBuffer(CodeBuffer);
+ }
+ else
+ {
+ //
+ // error
+ //
+ ShowMessages("err, you're not connected to any debuggee\n");
+ }
+ }
+ else
+ {
+ //
+ // error
+ //
+ ShowMessages("err, invalid register\n");
+ }
+ }
+ }
+}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/rdmsr.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/rdmsr.cpp
similarity index 90%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/rdmsr.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/rdmsr.cpp
index b5f948f5..566a2537 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/rdmsr.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/rdmsr.cpp
@@ -11,11 +11,6 @@
*/
#include "pch.h"
-//
-// Global Variables
-//
-extern BOOLEAN g_IsKdModuleLoaded;
-
/**
* @brief help of the rdmsr command
*
@@ -111,13 +106,12 @@ GetWindowsNumaNumberOfCores()
/**
* @brief rdmsr command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandRdmsr(vector CommandTokens, string Command)
+CommandRdmsr(vector SplitCommand, string Command)
{
BOOL Status;
SIZE_T NumCPU;
@@ -129,15 +123,14 @@ CommandRdmsr(vector CommandTokens, string Command)
UINT32 CoreNumer = DEBUGGER_READ_AND_WRITE_ON_MSR_APPLY_ALL_CORES;
BOOLEAN IsFirstCommand = TRUE;
- if (CommandTokens.size() >= 5)
+ if (SplitCommand.size() >= 5)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'rdmsr'\n\n");
CommandRdmsrHelp();
return;
}
- for (auto Section : CommandTokens)
+ for (auto Section : SplitCommand)
{
if (IsFirstCommand == TRUE)
{
@@ -147,7 +140,7 @@ CommandRdmsr(vector CommandTokens, string Command)
if (IsNextCoreId)
{
- if (!ConvertTokenToUInt32(Section, &CoreNumer))
+ if (!ConvertStringToUInt32(Section, &CoreNumer))
{
ShowMessages("please specify a correct hex value for core id\n\n");
CommandRdmsrHelp();
@@ -157,13 +150,13 @@ CommandRdmsr(vector CommandTokens, string Command)
continue;
}
- if (CompareLowerCaseStrings(Section, "core"))
+ if (!Section.compare("core"))
{
IsNextCoreId = TRUE;
continue;
}
- if (SetMsr || !ConvertTokenToUInt64(Section, &Msr))
+ if (SetMsr || !ConvertStringToUInt64(Section, &Msr))
{
ShowMessages("please specify a correct hex value to be read\n\n");
CommandRdmsrHelp();
@@ -188,7 +181,7 @@ CommandRdmsr(vector CommandTokens, string Command)
return;
}
- AssertShowMessageReturnStmt(g_IsKdModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_KD_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
MsrReadRequest.ActionType = DEBUGGER_MSR_READ;
MsrReadRequest.Msr = Msr;
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/s.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/s.cpp
similarity index 81%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/s.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/s.cpp
index 9c3eff59..7024074b 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/s.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/s.cpp
@@ -15,7 +15,6 @@
// Global Variables
//
extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
-extern BOOLEAN g_IsKdModuleLoaded;
extern ACTIVE_DEBUGGING_PROCESS g_ActiveProcessDebuggingState;
/**
@@ -63,7 +62,6 @@ VOID
CommandSearchSendRequest(UINT64 * BufferToSendAsIoctl, UINT32 BufferToSendAsIoctlSize)
{
BOOL Status;
- DWORD BytesReturned;
UINT64 CurrentValue;
PUINT64 ResultsBuffer = NULL;
@@ -88,9 +86,9 @@ CommandSearchSendRequest(UINT64 * BufferToSendAsIoctl, UINT32 BufferToSendAsIoct
BufferToSendAsIoctlSize, // Input buffer length
ResultsBuffer, // Output Buffer from driver.
MaximumSearchResults *
- sizeof(UINT64), // Length of output buffer in bytes.
- &BytesReturned, // Bytes placed in buffer.
- NULL // synchronous call
+ sizeof(UINT64), // Length of output buffer in bytes.
+ NULL, // Bytes placed in buffer.
+ NULL // synchronous call
);
if (!Status)
@@ -104,7 +102,7 @@ CommandSearchSendRequest(UINT64 * BufferToSendAsIoctl, UINT32 BufferToSendAsIoct
//
// Show the results (if any)
//
- for (SIZE_T i = 0; i < MaximumSearchResults; i++)
+ for (size_t i = 0; i < MaximumSearchResults; i++)
{
CurrentValue = ResultsBuffer[i];
@@ -132,13 +130,12 @@ CommandSearchSendRequest(UINT64 * BufferToSendAsIoctl, UINT32 BufferToSendAsIoct
/**
* @brief !s* s* commands handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandSearchMemory(vector CommandTokens, string Command)
+CommandSearchMemory(vector SplitCommand, string Command)
{
UINT64 Address;
vector ValuesToEdit;
@@ -155,7 +152,9 @@ CommandSearchMemory(vector CommandTokens, string Command)
UINT32 CountOfValues = 0;
UINT32 FinalSize = 0;
UINT64 * FinalBuffer = NULL;
- BOOLEAN IsFirstCommand = TRUE;
+ vector SplitCommandCaseSensitive {Split(Command, ' ')};
+ UINT32 IndexInCommandCaseSensitive = 0;
+ BOOLEAN IsFirstCommand = TRUE;
//
// By default if the user-debugger is active, we use these commands
@@ -166,47 +165,45 @@ CommandSearchMemory(vector CommandTokens, string Command)
ProcId = g_ActiveProcessDebuggingState.ProcessId;
}
- if (CommandTokens.size() <= 4)
+ if (SplitCommand.size() <= 4)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
-
+ ShowMessages("incorrect use of the 's*'\n\n");
CommandSearchMemoryHelp();
return;
}
- for (auto Section : CommandTokens)
+ for (auto Section : SplitCommand)
{
+ IndexInCommandCaseSensitive++;
+
if (IsFirstCommand == TRUE)
{
- std::string FirstCommand = GetLowerStringFromCommandToken(Section);
-
- if (!FirstCommand.compare("!sb"))
+ if (!Section.compare("!sb"))
{
SearchMemoryRequest.MemoryType = SEARCH_PHYSICAL_MEMORY;
SearchMemoryRequest.ByteSize = SEARCH_BYTE;
}
- else if (!FirstCommand.compare("!sd"))
+ else if (!Section.compare("!sd"))
{
SearchMemoryRequest.MemoryType = SEARCH_PHYSICAL_MEMORY;
SearchMemoryRequest.ByteSize = SEARCH_DWORD;
}
- else if (!FirstCommand.compare("!sq"))
+ else if (!Section.compare("!sq"))
{
SearchMemoryRequest.MemoryType = SEARCH_PHYSICAL_MEMORY;
SearchMemoryRequest.ByteSize = SEARCH_QWORD;
}
- else if (!FirstCommand.compare("sb"))
+ else if (!Section.compare("sb"))
{
SearchMemoryRequest.MemoryType = SEARCH_VIRTUAL_MEMORY;
SearchMemoryRequest.ByteSize = SEARCH_BYTE;
}
- else if (!FirstCommand.compare("sd"))
+ else if (!Section.compare("sd"))
{
SearchMemoryRequest.MemoryType = SEARCH_VIRTUAL_MEMORY;
SearchMemoryRequest.ByteSize = SEARCH_DWORD;
}
- else if (!FirstCommand.compare("sq"))
+ else if (!Section.compare("sq"))
{
SearchMemoryRequest.MemoryType = SEARCH_VIRTUAL_MEMORY;
SearchMemoryRequest.ByteSize = SEARCH_QWORD;
@@ -216,7 +213,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
//
// What's this? :(
//
- ShowMessages("unknown error happened!\n\n");
+ ShowMessages("unknown error happened !\n\n");
CommandSearchMemoryHelp();
return;
}
@@ -233,7 +230,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
//
NextIsProcId = FALSE;
- if (!ConvertTokenToUInt32(Section, &ProcId))
+ if (!ConvertStringToUInt32(Section, &ProcId))
{
ShowMessages("please specify a correct hex process id\n\n");
CommandSearchMemoryHelp();
@@ -255,7 +252,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
//
NextIsLength = FALSE;
- if (!ConvertTokenToUInt64(Section, &Length))
+ if (!ConvertStringToUInt64(Section, &Length))
{
ShowMessages("please specify a correct hex length\n\n");
CommandSearchMemoryHelp();
@@ -274,7 +271,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
//
// Check if it's a process id or not
//
- if (!SetProcId && CompareLowerCaseStrings(Section, "pid"))
+ if (!SetProcId && !Section.compare("pid"))
{
NextIsProcId = TRUE;
continue;
@@ -283,7 +280,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
//
// Check if it's a length or not
//
- if (!SetLength && CompareLowerCaseStrings(Section, "l"))
+ if (!SetLength && !Section.compare("l"))
{
NextIsLength = TRUE;
continue;
@@ -291,10 +288,10 @@ CommandSearchMemory(vector CommandTokens, string Command)
if (!SetAddress)
{
- if (!SymbolConvertNameOrExprToAddress(GetCaseSensitiveStringFromCommandToken(Section), &Address))
+ if (!SymbolConvertNameOrExprToAddress(SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1), &Address))
{
ShowMessages("err, couldn't resolve error at '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(Section).c_str());
+ SplitCommandCaseSensitive.at(IndexInCommandCaseSensitive - 1).c_str());
CommandSearchMemoryHelp();
return;
}
@@ -313,38 +310,36 @@ CommandSearchMemory(vector CommandTokens, string Command)
//
// Remove the hex notations
//
- std::string TargetVal = GetCaseSensitiveStringFromCommandToken(Section);
-
- if (TargetVal.rfind("0x", 0) == 0 || TargetVal.rfind("0X", 0) == 0 ||
- TargetVal.rfind("\\x", 0) == 0 || TargetVal.rfind("\\X", 0) == 0)
+ if (Section.rfind("0x", 0) == 0 || Section.rfind("0X", 0) == 0 ||
+ Section.rfind("\\x", 0) == 0 || Section.rfind("\\X", 0) == 0)
{
- TargetVal = TargetVal.erase(0, 2);
+ Section = Section.erase(0, 2);
}
- else if (TargetVal.rfind('x', 0) == 0 || TargetVal.rfind('X', 0) == 0)
+ else if (Section.rfind('x', 0) == 0 || Section.rfind('X', 0) == 0)
{
- TargetVal = TargetVal.erase(0, 1);
+ Section = Section.erase(0, 1);
}
-
- TargetVal.erase(remove(TargetVal.begin(), TargetVal.end(), '`'), TargetVal.end());
+ Section.erase(remove(Section.begin(), Section.end(), '`'), Section.end());
//
// Check if the value is valid based on byte counts
//
- if (SearchMemoryRequest.ByteSize == SEARCH_BYTE && TargetVal.size() >= 3)
+ if (SearchMemoryRequest.ByteSize == SEARCH_BYTE && Section.size() >= 3)
{
ShowMessages("please specify a byte (hex) value for 'sb' or '!sb'\n\n");
return;
}
-
- if (SearchMemoryRequest.ByteSize == SEARCH_DWORD && TargetVal.size() >= 9)
+ if (SearchMemoryRequest.ByteSize == SEARCH_DWORD && Section.size() >= 9)
{
- ShowMessages("please specify a dword (hex) value for 'sd' or '!sd'\n\n");
+ ShowMessages(
+ "please specify a dword (hex) value for 'sd' or '!sd'\n\n");
return;
}
-
- if (SearchMemoryRequest.ByteSize == SEARCH_QWORD && TargetVal.size() >= 17)
+ if (SearchMemoryRequest.ByteSize == SEARCH_QWORD &&
+ Section.size() >= 17)
{
- ShowMessages("please specify a qword (hex) value for 'sq' or '!sq'\n\n");
+ ShowMessages(
+ "please specify a qword (hex) value for 'sq' or '!sq'\n\n");
return;
}
@@ -352,7 +347,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
// Qword is checked by the following function, no need to double
// check it above.
//
- if (!ConvertStringToUInt64(TargetVal, &Value))
+ if (!ConvertStringToUInt64(Section, &Value))
{
ShowMessages("please specify a correct hex value to search in the "
"memory content\n\n");
@@ -374,7 +369,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
if (!SetValue)
{
//
- // At least one value is there
+ // At least on walue is there
//
SetValue = TRUE;
}
@@ -456,7 +451,7 @@ CommandSearchMemory(vector CommandTokens, string Command)
if (!g_IsSerialConnectedToRemoteDebuggee)
{
- AssertShowMessageReturnStmt(g_IsKdModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_KD_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
}
//
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/settings.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/settings.cpp
similarity index 71%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/settings.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/settings.cpp
index c54c63d4..8b11d1c3 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/settings.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/settings.cpp
@@ -267,13 +267,13 @@ CommandSettingsLoadDefaultValuesFromConfigFile()
* @brief set the address conversion enabled and disabled
* and query the status of this mode
*
- * @param CommandTokens
+ * @param SplitCommand
* @return VOID
*/
VOID
-CommandSettingsAddressConversion(vector CommandTokens)
+CommandSettingsAddressConversion(vector SplitCommand)
{
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
//
// It's a query
@@ -287,19 +287,19 @@ CommandSettingsAddressConversion(vector CommandTokens)
ShowMessages("address conversion is disabled\n");
}
}
- else if (CommandTokens.size() == 3)
+ else if (SplitCommand.size() == 3)
{
//
// The user tries to set a value as the autoflush
//
- if (CompareLowerCaseStrings(CommandTokens.at(2), "on"))
+ if (!SplitCommand.at(2).compare("on"))
{
g_AddressConversion = TRUE;
CommandSettingsSetValueFromConfigFile("AddrConv", "on");
ShowMessages("set address conversion to enabled\n");
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "off"))
+ else if (!SplitCommand.at(2).compare("off"))
{
g_AddressConversion = FALSE;
CommandSettingsSetValueFromConfigFile("AddrConv", "off");
@@ -311,10 +311,8 @@ CommandSettingsAddressConversion(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
-
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -323,9 +321,8 @@ CommandSettingsAddressConversion(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -334,13 +331,13 @@ CommandSettingsAddressConversion(vector CommandTokens)
* @brief set the auto-flush mode to enabled and disabled
* and query the status of this mode
*
- * @param CommandTokens
+ * @param SplitCommand
* @return VOID
*/
VOID
-CommandSettingsAutoFlush(vector CommandTokens)
+CommandSettingsAutoFlush(vector SplitCommand)
{
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
//
// It's a query
@@ -354,19 +351,19 @@ CommandSettingsAutoFlush(vector CommandTokens)
ShowMessages("auto-flush is disabled\n");
}
}
- else if (CommandTokens.size() == 3)
+ else if (SplitCommand.size() == 3)
{
//
// The user tries to set a value as the autoflush
//
- if (CompareLowerCaseStrings(CommandTokens.at(2), "on"))
+ if (!SplitCommand.at(2).compare("on"))
{
g_AutoFlush = TRUE;
CommandSettingsSetValueFromConfigFile("AutoFlush", "on");
ShowMessages("set auto-flush to enabled\n");
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "off"))
+ else if (!SplitCommand.at(2).compare("off"))
{
g_AutoFlush = FALSE;
CommandSettingsSetValueFromConfigFile("AutoFlush", "off");
@@ -378,9 +375,8 @@ CommandSettingsAutoFlush(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -389,9 +385,8 @@ CommandSettingsAutoFlush(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -399,13 +394,13 @@ CommandSettingsAutoFlush(vector CommandTokens)
/**
* @brief set auto-unpause mode to enabled or disabled
*
- * @param CommandTokens
+ * @param SplitCommand
* @return VOID
*/
VOID
-CommandSettingsAutoUpause(vector CommandTokens)
+CommandSettingsAutoUpause(vector SplitCommand)
{
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
//
// It's a query
@@ -419,19 +414,19 @@ CommandSettingsAutoUpause(vector CommandTokens)
ShowMessages("auto-unpause is disabled\n");
}
}
- else if (CommandTokens.size() == 3)
+ else if (SplitCommand.size() == 3)
{
//
// The user tries to set a value as the autounpause
//
- if (CompareLowerCaseStrings(CommandTokens.at(2), "on"))
+ if (!SplitCommand.at(2).compare("on"))
{
g_AutoUnpause = TRUE;
CommandSettingsSetValueFromConfigFile("AutoUnpause", "on");
ShowMessages("set auto-unpause to enabled\n");
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "off"))
+ else if (!SplitCommand.at(2).compare("off"))
{
g_AutoUnpause = FALSE;
CommandSettingsSetValueFromConfigFile("AutoUnpause", "off");
@@ -443,9 +438,8 @@ CommandSettingsAutoUpause(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -454,9 +448,8 @@ CommandSettingsAutoUpause(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -464,13 +457,13 @@ CommandSettingsAutoUpause(vector CommandTokens)
/**
* @brief set the syntax of !u !u2 u u2 command
*
- * @param CommandTokens
+ * @param SplitCommand
* @return VOID
*/
VOID
-CommandSettingsSyntax(vector CommandTokens)
+CommandSettingsSyntax(vector SplitCommand)
{
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
//
// It's a query
@@ -492,27 +485,27 @@ CommandSettingsSyntax(vector CommandTokens)
ShowMessages("unknown syntax\n");
}
}
- else if (CommandTokens.size() == 3)
+ else if (SplitCommand.size() == 3)
{
//
// The user tries to set a value as the syntax
//
- if (CompareLowerCaseStrings(CommandTokens.at(2), "intel"))
+ if (!SplitCommand.at(2).compare("intel"))
{
g_DisassemblerSyntax = 1;
CommandSettingsSetValueFromConfigFile("AsmSyntax", "intel");
ShowMessages("set syntax to intel\n");
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "att") ||
- CompareLowerCaseStrings(CommandTokens.at(2), "at&t"))
+ else if (!SplitCommand.at(2).compare("att") ||
+ !SplitCommand.at(2).compare("at&t"))
{
g_DisassemblerSyntax = 2;
CommandSettingsSetValueFromConfigFile("AsmSyntax", "att");
ShowMessages("set syntax to at&t\n");
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "masm"))
+ else if (!SplitCommand.at(2).compare("masm"))
{
g_DisassemblerSyntax = 3;
CommandSettingsSetValueFromConfigFile("AsmSyntax", "masm");
@@ -524,9 +517,8 @@ CommandSettingsSyntax(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -535,9 +527,8 @@ CommandSettingsSyntax(vector CommandTokens)
//
// Sth is incorrect
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
@@ -545,17 +536,16 @@ CommandSettingsSyntax(vector CommandTokens)
/**
* @brief settings command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
* @return VOID
*/
VOID
-CommandSettings(vector CommandTokens, string Command)
+CommandSettings(vector SplitCommand, string Command)
{
- if (CommandTokens.size() <= 1)
+ if (SplitCommand.size() <= 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings'\n\n");
CommandSettingsHelp();
return;
}
@@ -563,14 +553,14 @@ CommandSettings(vector CommandTokens, string Command)
//
// Interpret the field name
//
- if (CompareLowerCaseStrings(CommandTokens.at(1), "autounpause"))
+ if (!SplitCommand.at(1).compare("autounpause"))
{
//
// Handle it locally
//
- CommandSettingsAutoUpause(CommandTokens);
+ CommandSettingsAutoUpause(SplitCommand);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "syntax"))
+ else if (!SplitCommand.at(1).compare("syntax"))
{
//
// If it's a remote debugger then we send it to the remote debugger
@@ -585,10 +575,10 @@ CommandSettings(vector CommandTokens, string Command)
// If it's a connection over serial or a local debugging then
// we handle it locally
//
- CommandSettingsSyntax(CommandTokens);
+ CommandSettingsSyntax(SplitCommand);
}
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "autoflush"))
+ else if (!SplitCommand.at(1).compare("autoflush"))
{
//
// If it's a remote debugger then we send it to the remote debugger
@@ -603,10 +593,10 @@ CommandSettings(vector CommandTokens, string Command)
// If it's a connection over serial or a local debugging then
// we handle it locally
//
- CommandSettingsAutoFlush(CommandTokens);
+ CommandSettingsAutoFlush(SplitCommand);
}
}
- else if (CompareLowerCaseStrings(CommandTokens.at(1), "addressconversion"))
+ else if (!SplitCommand.at(1).compare("addressconversion"))
{
//
// If it's a remote debugger then we send it to the remote debugger
@@ -621,17 +611,16 @@ CommandSettings(vector CommandTokens, string Command)
// If it's a connection over serial or a local debugging then
// we handle it locally
//
- CommandSettingsAddressConversion(CommandTokens);
+ CommandSettingsAddressConversion(SplitCommand);
}
}
else
{
//
- // option not found
+ // optionm not found
//
- ShowMessages("incorrect use of the '%s', please use 'help %s' for more information\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str(),
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'settings', please use 'help settings' "
+ "for more details\n");
return;
}
}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/sleep.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/sleep.cpp
similarity index 74%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/sleep.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/sleep.cpp
index 77062b5a..be4b9ceb 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/sleep.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/sleep.cpp
@@ -29,25 +29,23 @@ CommandSleepHelp()
/**
* @brief sleep command help
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandSleep(vector CommandTokens, string Command)
+CommandSleep(vector SplitCommand, string Command)
{
UINT32 MillisecondsTime = 0;
- if (CommandTokens.size() != 2)
+ if (SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'sleep'\n\n");
CommandSleepHelp();
return;
}
- if (!ConvertTokenToUInt32(CommandTokens.at(1), &MillisecondsTime))
+ if (!ConvertStringToUInt32(SplitCommand.at(1), &MillisecondsTime))
{
ShowMessages(
"please specify a correct hex value for time (milliseconds)\n\n");
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/t.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/t.cpp
similarity index 68%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/t.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/t.cpp
index afc48d51..40e9950b 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/t.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/t.cpp
@@ -44,33 +44,37 @@ CommandTHelp()
/**
* @brief handler of t command
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandT(vector CommandTokens, string Command)
+CommandT(vector SplitCommand, string Command)
{
- UINT32 StepCount;
+ UINT32 StepCount;
+ DEBUGGER_REMOTE_STEPPING_REQUEST RequestFormat;
//
// Validate the commands
//
- if (CommandTokens.size() != 1 && CommandTokens.size() != 2)
+ if (SplitCommand.size() != 1 && SplitCommand.size() != 2)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 't'\n\n");
CommandTHelp();
return;
}
+ //
+ // Set type of step
+ //
+ RequestFormat = DEBUGGER_REMOTE_STEPPING_REQUEST_STEP_IN;
+
//
// Check if the command has a counter parameter
//
- if (CommandTokens.size() == 2)
+ if (SplitCommand.size() == 2)
{
- if (!ConvertTokenToUInt32(CommandTokens.at(1), &StepCount))
+ if (!ConvertStringToUInt32(SplitCommand.at(1), &StepCount))
{
ShowMessages("please specify a correct hex value for [count]\n\n");
CommandTHelp();
@@ -93,7 +97,7 @@ CommandT(vector CommandTokens, string Command)
if (g_ActiveProcessDebuggingState.IsActive && !g_ActiveProcessDebuggingState.IsPaused)
{
ShowMessages("the target process is running, use the "
- "'pause' command to pause the process\n");
+ "'pause' command or press CTRL+C to pause the process\n");
return;
}
@@ -102,7 +106,7 @@ CommandT(vector CommandTokens, string Command)
//
g_IsInstrumentingInstructions = TRUE;
- for (SIZE_T i = 0; i < StepCount; i++)
+ for (size_t i = 0; i < StepCount; i++)
{
//
// For logging purpose
@@ -111,18 +115,29 @@ CommandT(vector CommandTokens, string Command)
// (float)StepCount), i);
//
- //
- // Instrument (regular) the instruction
- //
- SteppingRegularStepIn();
+ if (g_IsSerialConnectedToRemoteDebuggee)
+ {
+ //
+ // It's stepping over serial connection in kernel debugger
+ //
+ KdSendStepPacketToDebuggee(RequestFormat);
+ }
+ else
+ {
+ //
+ // It's stepping over user debugger
+ //
+ UdSendStepPacketToDebuggee(g_ActiveProcessDebuggingState.ProcessDebuggingToken,
+ g_ActiveProcessDebuggingState.ThreadId,
+ RequestFormat);
+ }
- if (CompareLowerCaseStrings(CommandTokens.at(0), "tr"))
+ if (!SplitCommand.at(0).compare("tr"))
{
//
// Show registers
//
- HyperDbgRegisterShowAll();
-
+ ShowAllRegisters();
if (i != StepCount - 1)
{
ShowMessages("\n");
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/test.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/test.cpp
similarity index 67%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/test.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/test.cpp
index ffe824d8..2a29a7d1 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/test.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/test.cpp
@@ -14,7 +14,6 @@
//
// Global Variables
//
-extern BOOLEAN g_IsKdModuleLoaded;
extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
/**
@@ -31,6 +30,7 @@ CommandTestHelp()
ShowMessages("syntax : \ttest [Task (string)]\n");
ShowMessages("\n");
+ ShowMessages("\t\te.g : test\n");
ShowMessages("\t\te.g : test query\n");
ShowMessages("\t\te.g : test trap-status\n");
ShowMessages("\t\te.g : test pool\n");
@@ -53,7 +53,7 @@ CommandTestPerformKernelTestsIoctl()
ULONG ReturnedLength;
DEBUGGER_PERFORM_KERNEL_TESTS KernelTestRequest = {0};
- AssertShowMessageReturnStmt(g_IsKdModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_KD_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturnFalse);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturnFalse);
//
// By the way, we don't need to send an input buffer
@@ -63,7 +63,7 @@ CommandTestPerformKernelTestsIoctl()
//
Status = DeviceIoControl(
g_DeviceHandle, // Handle to device
- IOCTL_PERFORM_KERNEL_SIDE_TESTS, // IO Control Code (IOCTL)
+ IOCTL_PERFROM_KERNEL_SIDE_TESTS, // IO Control Code (IOCTL)
&KernelTestRequest, // Input Buffer to driver.
SIZEOF_DEBUGGER_PERFORM_KERNEL_TESTS, // Input buffer length
&KernelTestRequest, // Output Buffer from driver.
@@ -96,110 +96,40 @@ CommandTestPerformKernelTestsIoctl()
}
}
-/**
- * @brief perform test on for all functionalities
- *
- * @return VOID
- */
-VOID
-CommandTestAllFunctionalities()
-{
- HANDLE ThreadHandle;
- HANDLE ProcessHandle;
-
- //
- // Test command parser
- //
- if (!OpenHyperDbgTestProcess(&ThreadHandle, &ProcessHandle, (CHAR *)TEST_CASE_PARAMETER_FOR_MAIN_COMMAND_PARSER))
- {
- ShowMessages("err, start HyperDbg test process for testing the main command parser\n");
- return;
- }
-
- //
- // Test PE parser helpers
- //
- if (!OpenHyperDbgTestProcess(&ThreadHandle, &ProcessHandle, (CHAR *)TEST_CASE_PARAMETER_FOR_PE_PARSER))
- {
- ShowMessages("err, start HyperDbg test process for testing the PE parser\n");
- return;
- }
-
- //
- // Test CodeView RSDS parser helpers
- //
- if (!OpenHyperDbgTestProcess(&ThreadHandle, &ProcessHandle, (CHAR *)TEST_CASE_PARAMETER_FOR_CODEVIEW_RSDS_PARSER))
- {
- ShowMessages("err, start HyperDbg test process for testing the CodeView RSDS parser\n");
- return;
- }
-
- //
- // Test script engine (script parser) using semantic tests
- //
- if (!OpenHyperDbgTestProcess(&ThreadHandle, &ProcessHandle, (CHAR *)TEST_CASE_PARAMETER_FOR_SCRIPT_SEMANTIC_TEST_CASES))
- {
- ShowMessages("err, start HyperDbg test process for testing semantic tests\n");
- return;
- }
-}
-
-/**
- * @brief perform test for all functionalities of hwdbg
- *
- * @return VOID
- */
-VOID
-CommandTestAllHwdbg()
-{
- HANDLE ThreadHandle;
- HANDLE ProcessHandle;
-
- //
- // Test hwdbg functionalities
- //
- if (!OpenHyperDbgTestProcess(&ThreadHandle, &ProcessHandle, (CHAR *)TEST_HWDBG_FUNCTIONALITIES))
- {
- ShowMessages("err, start HyperDbg test process for testing hwdbg functionalities\n");
- return;
- }
-}
-
/**
* @brief perform test on the remote process
*
+ * @param KernelSideInformation Information from kernel
+ * @param KernelSideInformationSize Information from kernel ()
+ *
* @return BOOLEAN returns true if the results was true and false if the results
* was not ok
*/
BOOLEAN
-CommandTestPerformTest()
+CommandTestPerformTest(PDEBUGGEE_KERNEL_AND_USER_TEST_INFORMATION KernelSideInformation, UINT32 KernelSideInformationSize)
{
BOOLEAN ResultOfTest = FALSE;
HANDLE PipeHandle;
HANDLE ThreadHandle;
HANDLE ProcessHandle;
UINT32 ReadBytes;
- CHAR * Buffer = NULL;
+ CHAR * Buffer = {0};
//
// Allocate memory
//
Buffer = (CHAR *)malloc(TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE);
-
- if (!Buffer)
- {
- ShowMessages("err, enable allocate communication buffer\n");
- return FALSE;
- }
-
RtlZeroMemory(Buffer, TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE);
//
// Create tests process to create a thread for us
//
- if (!CreateProcessAndOpenPipeConnection(&PipeHandle,
- &ThreadHandle,
- &ProcessHandle))
+ if (!CreateProcessAndOpenPipeConnection(
+ KernelSideInformation,
+ KernelSideInformationSize,
+ &PipeHandle,
+ &ThreadHandle,
+ &ProcessHandle))
{
ShowMessages("err, enable to connect to the test process\n");
@@ -216,26 +146,11 @@ CommandTestPerformTest()
// Wait for the result of test to be received
//
-SendCommandAndWaitForResponse:
-
- CHAR TestCommand[] = "this is a test command";
-
- BOOLEAN SentMessageResult = NamedPipeServerSendMessageToClient(
- PipeHandle,
- TestCommand,
- (UINT32)strlen(TestCommand) + 1);
-
- if (!SentMessageResult)
- {
- //
- // error in sending
- //
- return FALSE;
- }
+WaitForResponse:
RtlZeroMemory(Buffer, TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE);
ReadBytes =
- NamedPipeServerReadClientMessage(PipeHandle, (CHAR *)Buffer, TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE);
+ NamedPipeServerReadClientMessage(PipeHandle, (char *)Buffer, TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE);
if (!ReadBytes)
{
@@ -247,7 +162,35 @@ SendCommandAndWaitForResponse:
return FALSE;
}
- goto SendCommandAndWaitForResponse;
+ if (strcmp(Buffer, "perform-kernel-test") == 0)
+ {
+ //
+ // Send IOCTL to perform kernel tasks
+ //
+ CommandTestPerformKernelTestsIoctl();
+
+ goto WaitForResponse;
+ }
+ else if (strcmp(Buffer, "success") == 0)
+ {
+ ResultOfTest = TRUE;
+ }
+ else if (Buffer[0] == 'c' &&
+ Buffer[1] == 'm' &&
+ Buffer[2] == 'd' &&
+ Buffer[3] == ':')
+ {
+ //
+ // It's a command as it starts with "cmd:"
+ //
+ ShowMessages("command is : %s\n", &Buffer[4]);
+ HyperDbgInterpreter(&Buffer[4]);
+ goto WaitForResponse;
+ }
+ else
+ {
+ ResultOfTest = FALSE;
+ }
//
// Close connection and remote process
@@ -259,6 +202,72 @@ SendCommandAndWaitForResponse:
return ResultOfTest;
}
+/**
+ * @brief test command for VMI mode
+ *
+ * @return VOID
+ */
+VOID
+CommandTestInVmiMode()
+{
+ BOOL Status;
+ ULONG ReturnedLength;
+ PDEBUGGEE_KERNEL_AND_USER_TEST_INFORMATION
+ KernelSideTestInformationRequestArray;
+
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+
+ //
+ // *** Read kernel-side debugging information ***
+ //
+ KernelSideTestInformationRequestArray = (DEBUGGEE_KERNEL_AND_USER_TEST_INFORMATION *)malloc(TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE);
+
+ RtlZeroMemory(KernelSideTestInformationRequestArray, TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE);
+
+ //
+ // Send Ioctl to the kernel
+ //
+ Status = DeviceIoControl(
+ g_DeviceHandle, // Handle to device
+ IOCTL_SEND_GET_KERNEL_SIDE_TEST_INFORMATION, // IO Control Code (IOCTL)
+ KernelSideTestInformationRequestArray, // Input Buffer to driver.
+ SIZEOF_DEBUGGEE_KERNEL_AND_USER_TEST_INFORMATION, // Input buffer
+ // length
+ KernelSideTestInformationRequestArray, // Output Buffer from driver.
+ TEST_CASE_MAXIMUM_BUFFERS_TO_COMMUNICATE, // Length
+ // of
+ // output
+ // buffer
+ // in
+ // bytes.
+ &ReturnedLength, // Bytes placed in buffer.
+ NULL // synchronous call
+ );
+
+ if (!Status)
+ {
+ ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
+ return;
+ }
+
+ //
+ // Means to check just one command
+ //
+ if (CommandTestPerformTest(KernelSideTestInformationRequestArray, ReturnedLength))
+ {
+ ShowMessages("all the tests were successful :)\n");
+ }
+ else
+ {
+ ShowMessages("all or at least one of the tests failed :(\n");
+ }
+
+ //
+ // Free the kernel-side buffer
+ //
+ free(KernelSideTestInformationRequestArray);
+}
+
/**
* @brief test command for query the state
*
@@ -425,62 +434,60 @@ CommandTestSetDebugBreakState(BOOLEAN State)
/**
* @brief test command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandTest(vector CommandTokens, string Command)
+CommandTest(vector SplitCommand, string Command)
{
UINT64 Context = NULL;
- UINT32 CommandSize = (UINT32)CommandTokens.size();
-
- if (CommandSize == 1)
+ if (SplitCommand.size() == 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
- CommandTestHelp();
+ //
+ // For testing in vmi mode
+ //
+ CommandTestInVmiMode();
}
- else if (CommandSize == 2 && CompareLowerCaseStrings(CommandTokens.at(1), "query"))
+ else if (SplitCommand.size() == 2 && !SplitCommand.at(1).compare("query"))
{
//
// Query the state of debuggee in debugger mode
//
CommandTestQueryState();
}
- else if (CommandSize == 2 && CompareLowerCaseStrings(CommandTokens.at(1), "trap-status"))
+ else if (SplitCommand.size() == 2 && !SplitCommand.at(1).compare("trap-status"))
{
//
// Query the state of trap flag in debugger mode
//
CommandTestQueryTrapState();
}
- else if (CommandSize == 2 && CompareLowerCaseStrings(CommandTokens.at(1), "pool"))
+ else if (SplitCommand.size() == 2 && !SplitCommand.at(1).compare("pool"))
{
//
// Query the state of pre-allocated pools in debugger mode
//
CommandTestQueryPreAllocPoolsState();
}
- else if (CommandSize == 2 && CompareLowerCaseStrings(CommandTokens.at(1), "sync-task"))
+ else if (SplitCommand.size() == 2 && !SplitCommand.at(1).compare("sync-task"))
{
//
// Send target task to the halted cores in debugger mode (synchronous)
//
CommandTestSetTargetTaskToHaltedCores(TRUE);
}
- else if (CommandSize == 2 && CompareLowerCaseStrings(CommandTokens.at(1), "async-task"))
+ else if (SplitCommand.size() == 2 && !SplitCommand.at(1).compare("async-task"))
{
//
// Send target task to the halted cores in debugger mode (asynchronous)
//
CommandTestSetTargetTaskToHaltedCores(FALSE);
}
- else if (CommandSize == 3 && CompareLowerCaseStrings(CommandTokens.at(1), "target-core-task"))
+ else if (SplitCommand.size() == 3 && !SplitCommand.at(1).compare("target-core-task"))
{
- if (!ConvertTokenToUInt64(CommandTokens.at(2), &Context))
+ if (!ConvertStringToUInt64(SplitCommand.at(2), &Context))
{
ShowMessages("err, you should enter a valid hex number as the core id\n\n");
return;
@@ -491,64 +498,47 @@ CommandTest(vector CommandTokens, string Command)
//
CommandTestSetTargetTaskToTargetCore((UINT32)Context);
}
- else if (CommandSize == 3 && CompareLowerCaseStrings(CommandTokens.at(1), "breakpoint"))
+ else if (SplitCommand.size() == 3 && !SplitCommand.at(1).compare("breakpoint"))
{
//
// Change breakpoint state
//
- if (CompareLowerCaseStrings(CommandTokens.at(2), "on"))
+ if (!SplitCommand.at(2).compare("on"))
{
CommandTestSetBreakpointState(TRUE);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "off"))
+ else if (!SplitCommand.at(2).compare("off"))
{
CommandTestSetBreakpointState(FALSE);
}
else
{
- ShowMessages("err, couldn't resolve error at '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).c_str());
+ ShowMessages("err, couldn't resolve error at '%s'\n\n", SplitCommand.at(2).c_str());
return;
}
}
- else if (CommandSize == 3 && CompareLowerCaseStrings(CommandTokens.at(1), "trap"))
+ else if (SplitCommand.size() == 3 && !SplitCommand.at(1).compare("trap"))
{
//
// Change debug break state
//
- if (CompareLowerCaseStrings(CommandTokens.at(2), "on"))
+ if (!SplitCommand.at(2).compare("on"))
{
CommandTestSetDebugBreakState(TRUE);
}
- else if (CompareLowerCaseStrings(CommandTokens.at(2), "off"))
+ else if (!SplitCommand.at(2).compare("off"))
{
CommandTestSetDebugBreakState(FALSE);
}
else
{
- ShowMessages("err, couldn't resolve error at '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(2)).c_str());
+ ShowMessages("err, couldn't resolve error at '%s'\n\n", SplitCommand.at(2).c_str());
return;
}
}
- else if (CommandSize == 2 && CompareLowerCaseStrings(CommandTokens.at(1), "all"))
- {
- //
- // For testing functionalities
- //
- CommandTestAllFunctionalities();
- }
- else if (CommandSize == 2 && CompareLowerCaseStrings(CommandTokens.at(1), "hwdbg"))
- {
- //
- // For testing functionalities of hwdbg
- //
- CommandTestAllHwdbg();
- }
else
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'test'\n\n");
CommandTestHelp();
return;
}
diff --git a/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/unload.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/unload.cpp
new file mode 100644
index 00000000..804e183c
--- /dev/null
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/unload.cpp
@@ -0,0 +1,121 @@
+/**
+ * @file unload.cpp
+ * @author Sina Karvandi (sina@hyperdbg.org)
+ * @brief unload command
+ * @details
+ * @version 0.1
+ * @date 2020-05-27
+ *
+ * @copyright This project is released under the GNU Public License v3.
+ *
+ */
+#include "pch.h"
+
+//
+// Global Variables
+//
+extern BOOLEAN g_IsConnectedToHyperDbgLocally;
+extern BOOLEAN g_IsDebuggerModulesLoaded;
+extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee;
+extern BOOLEAN g_IsSerialConnectedToRemoteDebugger;
+
+/**
+ * @brief help of the unload command
+ *
+ * @return VOID
+ */
+VOID
+CommandUnloadHelp()
+{
+ ShowMessages(
+ "unload : unloads the kernel modules and uninstalls the drivers.\n\n");
+
+ ShowMessages("syntax : \tunload [remove] [ModuleName (string)]\n");
+
+ ShowMessages("\n");
+ ShowMessages("\t\te.g : unload vmm\n");
+ ShowMessages("\t\te.g : unload remove vmm\n");
+}
+
+/**
+ * @brief unload command handler
+ *
+ * @param SplitCommand
+ * @param Command
+ * @return VOID
+ */
+VOID
+CommandUnload(vector SplitCommand, string Command)
+{
+ if (SplitCommand.size() != 2 && SplitCommand.size() != 3)
+ {
+ ShowMessages("incorrect use of the 'unload'\n\n");
+ CommandUnloadHelp();
+ return;
+ }
+
+ //
+ // Check for the module
+ //
+ if ((SplitCommand.size() == 2 && !SplitCommand.at(1).compare("vmm")) || (SplitCommand.size() == 3 && !SplitCommand.at(2).compare("vmm") && !SplitCommand.at(1).compare("remove")))
+ {
+ if (!g_IsConnectedToHyperDbgLocally)
+ {
+ ShowMessages("you're not connected to any instance of HyperDbg, did you "
+ "use '.connect'? \n");
+ return;
+ }
+
+ //
+ // Check to avoid using this command in debugger-mode
+ //
+ if (g_IsSerialConnectedToRemoteDebuggee || g_IsSerialConnectedToRemoteDebugger)
+ {
+ ShowMessages("you're connected to a an instance of HyperDbg, please use "
+ "'.debug close' command\n");
+ return;
+ }
+
+ if (g_IsDebuggerModulesLoaded)
+ {
+ HyperDbgUnloadVmm();
+ }
+ else
+ {
+ ShowMessages("there is nothing to unload\n");
+ }
+
+ //
+ // Check to remove the driver
+ //
+ if (!SplitCommand.at(1).compare("remove"))
+ {
+ //
+ // Stop the driver
+ //
+ if (HyperDbgStopVmmDriver())
+ {
+ ShowMessages("err, failed to stop driver\n");
+ return;
+ }
+
+ //
+ // Uninstall the driver
+ //
+ if (HyperDbgUninstallVmmDriver())
+ {
+ ShowMessages("err, failed to uninstall the driver\n");
+ return;
+ }
+
+ ShowMessages("the driver is removed\n");
+ }
+ }
+ else
+ {
+ //
+ // Module not found
+ //
+ ShowMessages("err, module not found\n");
+ }
+}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/wrmsr.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/wrmsr.cpp
similarity index 79%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/wrmsr.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/wrmsr.cpp
index 7e6fb434..1aff8ece 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/wrmsr.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/wrmsr.cpp
@@ -11,11 +11,6 @@
*/
#include "pch.h"
-//
-// Global Variables
-//
-extern BOOLEAN g_IsKdModuleLoaded;
-
/**
* @brief help of the wrmsr command
*
@@ -38,17 +33,16 @@ CommandWrmsrHelp()
/**
* @brief wrmsr command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
*
* @return VOID
*/
VOID
-CommandWrmsr(vector CommandTokens, string Command)
+CommandWrmsr(vector SplitCommand, string Command)
{
BOOL Status;
UINT64 Msr;
- ULONG ReturnedLength;
DEBUGGER_READ_AND_WRITE_ON_MSR MsrWriteRequest = {0};
BOOL IsNextCoreId = FALSE;
BOOL SetMsr = FALSE;
@@ -57,15 +51,14 @@ CommandWrmsr(vector CommandTokens, string Command)
UINT32 CoreNumer = DEBUGGER_READ_AND_WRITE_ON_MSR_APPLY_ALL_CORES;
BOOLEAN IsFirstCommand = TRUE;
- if (CommandTokens.size() >= 6)
+ if (SplitCommand.size() >= 6)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'wrmsr'\n\n");
CommandWrmsrHelp();
return;
}
- for (auto Section : CommandTokens)
+ for (auto Section : SplitCommand)
{
if (IsFirstCommand == TRUE)
{
@@ -75,7 +68,7 @@ CommandWrmsr(vector CommandTokens, string Command)
if (IsNextCoreId)
{
- if (!ConvertTokenToUInt32(Section, &CoreNumer))
+ if (!ConvertStringToUInt32(Section, &CoreNumer))
{
ShowMessages("please specify a correct hex value for core id\n\n");
CommandWrmsrHelp();
@@ -86,7 +79,7 @@ CommandWrmsr(vector CommandTokens, string Command)
continue;
}
- if (CompareLowerCaseStrings(Section, "core"))
+ if (!Section.compare("core"))
{
IsNextCoreId = TRUE;
continue;
@@ -94,7 +87,7 @@ CommandWrmsr(vector CommandTokens, string Command)
if (!SetMsr)
{
- if (!ConvertTokenToUInt64(Section, &Msr))
+ if (!ConvertStringToUInt64(Section, &Msr))
{
ShowMessages("please specify a correct hex value to be read\n\n");
CommandWrmsrHelp();
@@ -112,7 +105,7 @@ CommandWrmsr(vector CommandTokens, string Command)
if (SetMsr)
{
- if (!SymbolConvertNameOrExprToAddress(GetCaseSensitiveStringFromCommandToken(Section), &Value))
+ if (!SymbolConvertNameOrExprToAddress(Section, &Value))
{
ShowMessages(
"please specify a correct hex value or an expression to put on the msr\n\n");
@@ -151,7 +144,7 @@ CommandWrmsr(vector CommandTokens, string Command)
return;
}
- AssertShowMessageReturnStmt(g_IsKdModuleLoaded, g_DeviceHandle, ASSERT_MESSAGE_KD_NOT_LOADED, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
+ AssertShowMessageReturnStmt(g_DeviceHandle, ASSERT_MESSAGE_DRIVER_NOT_LOADED, AssertReturn);
MsrWriteRequest.ActionType = DEBUGGER_MSR_WRITE;
MsrWriteRequest.Msr = Msr;
@@ -163,9 +156,9 @@ CommandWrmsr(vector CommandTokens, string Command)
IOCTL_DEBUGGER_READ_OR_WRITE_MSR, // IO Control Code (IOCTL)
&MsrWriteRequest, // Input Buffer to driver.
SIZEOF_DEBUGGER_READ_AND_WRITE_ON_MSR, // Input buffer length
- &MsrWriteRequest, // Output Buffer from driver.
- SIZEOF_DEBUGGER_READ_AND_WRITE_ON_MSR, // Length of output buffer in bytes.
- &ReturnedLength, // Bytes placed in buffer.
+ NULL, // Output Buffer from driver.
+ NULL, // Length of output buffer in bytes.
+ NULL, // Bytes placed in buffer.
NULL // synchronous call
);
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/x.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/x.cpp
similarity index 66%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/x.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/x.cpp
index e76ed716..708d8527 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/x.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/x.cpp
@@ -32,24 +32,37 @@ CommandXHelp()
/**
* @brief x command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandX(vector CommandTokens, string Command)
+CommandX(vector SplitCommand, string Command)
{
- if (CommandTokens.size() != 2)
+ if (SplitCommand.size() == 1)
{
- ShowMessages("incorrect use of the '%s'\n\n",
- GetCaseSensitiveStringFromCommandToken(CommandTokens.at(0)).c_str());
+ ShowMessages("incorrect use of the 'x'\n\n");
CommandXHelp();
return;
}
+ //
+ // Trim the command
+ //
+ Trim(Command);
+
+ //
+ // Remove x from it
+ //
+ Command.erase(0, SplitCommand.at(0).size());
+
+ //
+ // Trim it again
+ //
+ Trim(Command);
+
//
// Search for mask
//
- ScriptEngineSearchSymbolForMaskWrapper(GetCaseSensitiveStringFromCommandToken(CommandTokens.at(1)).c_str());
+ ScriptEngineSearchSymbolForMaskWrapper(Command.c_str());
}
diff --git a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/core.cpp b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/~.cpp
similarity index 76%
rename from hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/core.cpp
rename to hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/~.cpp
index 2a1852db..650924e9 100644
--- a/hyperdbg/libhyperdbg/code/debugger/commands/debugging-commands/core.cpp
+++ b/hyperdbg/hprdbgctrl/code/debugger/commands/debugging-commands/~.cpp
@@ -1,5 +1,5 @@
/**
- * @file core.cpp
+ * @file ~.cpp
* @author Sina Karvandi (sina@hyperdbg.org)
* @brief show and change processor
* @details
@@ -38,20 +38,18 @@ CommandCoreHelp()
/**
* @brief ~ command handler
*
- * @param CommandTokens
+ * @param SplitCommand
* @param Command
- *
* @return VOID
*/
VOID
-CommandCore(vector CommandTokens, string Command)
+CommandCore(vector