(no commit message)
authorlkcl <lkcl@web>
Thu, 27 Jun 2019 18:03:45 +0000 (19:03 +0100)
committerIkiWiki <ikiwiki.info>
Thu, 27 Jun 2019 18:03:45 +0000 (19:03 +0100)
simple_v_extension/vblock_format.mdwn

index 27c2b8c86891a9875b84316330c16cc5ee2c5aac..ac38a60c3c4642175dfa33c8390fd6a15644d188 100644 (file)
@@ -166,12 +166,13 @@ The format is as follows:
 | status | vlset | 16xil | pplen | rplen | mode | vlblk | opptr |
 | 2 | 1 | 3 | 2 | 2 | 1 | 16 | 5 |
 
-* status is the key field that effectively ezposes the inner FSM (Finite State Machine) directly.
+* status is the key field that effectively exposes the inner FSM (Finite State Machine) directly.
 * status = 0b00 indicates that the processor is not in "VBLOCK Mode". It is instead in standard RV Scalar opcode execution mode. The processor will leave this mode only after it encounters the beginning of a valid VBLOCK opcode.
 * status = 0b01 indicates that vlset, 16xil, pplen, rplen and mode have all been copied directly from the VBLOCK so that they do not need to be read again from the instruction stream.
 * status=0b10 indicates that the VL Block has been read from the instruction stream and decoded (and copied into vlblk).
 * status=0b11 indicates that the Predicate and Register Blocks have been read from the instruction stream (and put into internal Vector Context)  Simpler implementations are permitted to reset status back to 0b10 and re-read the data after return from a trap. They are not however permitted to destroy opptr in the process.
 * opptr points to where instructions begin in the VBLOCK. 0 indicates the start of the opcodes, and is in multiples of 16 bits ( 2 bytes).  This is the equivalent of a Program Counter, for VBLOCKs.
+* at the end of a VBLOCK, when the last instruction executes (assuming it does not change opptr to earlir in the block), status is reset to 0b00 to indicate exit from the VBLOCK FSM, and the current Vector Predicate and Register Context destroyed (Note: the STATE CSR is **not** altered by exit from a VBLOCK Context).
 
 When status=0b11, opptr may be written to using CSRRWI. Doing so will cause execution to jump within the block, exactly as if PC had been set in normal RISC-V eexecution. Writing a value outside of the range of the instruction block will cause an illegal instruction exception. Writing a value (any value) when status is not 0b11 likewise causes an illegal instruction exception.