4. Using the encodings from riscv-opcodes¶
The rvopcodesdecoder is a decoder plugin for RISCV-ISAC, dependent on the official riscv-opcodes repository. The rvopcodesdecoder plugin automatically builds the decode tree and decodes instructions based on the encodings specified in the repository. The plugin will support any instruction/extension as long as it is specified in the format adhereing to the official repository.
4.1. Usage¶
4.1.1. Initial Setup¶
Standard version: This use case is intended for users who want to use the rvopcodes repo as is from riscv/riscv-opcodes. The command generates a
rvop-plugin
folder with all the necessary files needed for the plugin. This path will have to be passed via the CLI while running coverage.riscv_isac setup --plugin-path ./rvop-plugin
Custom Version: This use case is intended for users who have a custom/modified version of the rvopcodes encodings locally. The
<path-to-rvopcodes>
in the following command should point to the path on the system where the custom/modifiedriscv-opcodes
repository contents are located. The command generates a symlink to the path inside the plugin folder and hence all changes to the encodings are picked up automatically. To add an extension, the user has to create a file with therv<xlen>
prefix followed by the extension name. The file can then be populated with the instruction encodings in the appropriate format. Similar steps can be followed for updating existing extensions too.riscv_isac setup --plugin-path ./rvop-plugin --rvop-path <path-to-rvopcodes>
4.1.2. Using the decoder with ISAC for coverage¶
To use rvopcodesdecoder as the decoder in RISCV-ISAC, rvopcodesdecoder
should be supplied as argument for --decoder-name
option with the --decoder-path
set to the path of rvop-plugin
generated in the previous step.. For example,
riscv_isac --verbose info coverage --decoder-name rvopcodesdecoder --decoder-path ./rvop-plugin -t trace.log --parser-name spike -o coverage.rpt -e add-01.out -c rv64i.cgf -x 64
Note
Pseudo instructions are always decoded into the mnemonics of the base instruction in this plugin. For example, zext.h is always decoded as pack only.