Added ssr/ssw instructions and added subsystems information
All checks were successful
Central(Architecture) Docs Build / Build Documentation (push) Successful in 15s

This commit is contained in:
Elyan 2024-10-31 00:53:06 +01:00
parent c0f7b6484c
commit ab401b9d1b
6 changed files with 229 additions and 22 deletions

View File

@ -11,3 +11,4 @@ include::execution-engine-spec/intro.adoc[]
include::execution-engine-spec/program-and-exception-status-registers.adoc[]
include::execution-engine-spec/channel-io-overview.adoc[]
include::execution-engine-spec/instructions.adoc[]
include::execution-engine-spec/subsystems.adoc[]

View File

@ -192,3 +192,54 @@
|sp_fault
|===
[id=subsystems-encoding]
==== Subsystems Encoding
[%header,cols="^1,^1,2"]
|===
2+|Value
|Name
|0000~2~
|0000~16~
|ss0
|0001~2~
|0001~16~
|ss1
|0010~2~ .. 1110~2~
|0002~16~ .. 000e~16~
|ss2 .. ss14
|1111~2~
|000f~16~
|ss15
|===
[id=subsystems-registers-encoding]
==== Subsystems Registers Encoding
[%header,cols="^1,^1,2"]
|===
2+|Value
|Name
|00000000~2~
|00000000~16~
|sr0
|00000001~2~
|00000001~16~
|sr1
|00000010~2~ .. 11111110~2~
|00000002~16~ .. 000000fe~16~
|sr2 .. sr254
|11111111~2~
|000000ff~16~
|sr255
|===

View File

@ -23,21 +23,25 @@ rs1::
rs2::
Source register 2.
imm::
Immediate value.
Immediate value. +
Can be interpreted as signed or unsigned depending on the instruction.
reg::
Source/destination register on the _Execution Engine_ side.
Source/destination register on the _Execution Engine_ side. +
See <<registers-encoding>>.
sid::
Subsystem ID.
Subsystem ID. +
See <<subsystems-encoding>>.
sre::
Source/destination register on the subsystem side.
Source/destination register on the subsystem side. +
See <<subsystems-registers-encoding>>.
cmd::
Subsystem command.
Subsystem register command. +
Specific to the accessed subsystem register. More info in <<subsystems>>.
include::instructions-operands-encoding.adoc[]
<<<
=== Instruction list
=== Instruction List
#TODO: List instructions#
* NOP instruction
@ -50,7 +54,7 @@ include::instructions-operands-encoding.adoc[]
* system mode instructions (svc, uret, sret, ...)
* subsystems instructions (ssr & ssw)
==== Miscellaneous instructions
==== Miscellaneous Instructions
===== NOP: No Operation
[wavedrom, ,svg]
....
@ -78,7 +82,7 @@ Exceptions:: None.
[wavedrom, ,svg]
....
{reg: [
{bits: 7, name: 0x7f, type: 8, attr: '0x7f'},
{bits: 7, name: 0x7f, type: 8, attr: '0x7e'},
{bits: 25, name: 'svc_num', type: 5}
], config: {label: {right: 'SVC'}}}
....
@ -97,7 +101,7 @@ Where:
[horizontal]
svc_num:::
A constant identifying the privileged operation to execute. +
Must be in the range 0-33554431 (0x0-0x1FFFFFF).
Must be in the range 0..33554431 (0x0..0x1FFFFFF).
Examples::
+
@ -439,3 +443,101 @@ Updates program state flags:: No.
Exceptions::
MemFault.
<<<
==== Subsystems Instructions
===== SSR: Subsystem Register Read
[wavedrom, ,svg]
....
{reg: [
{bits: 7, name: 0x7d, type: 8, attr: '0x7d'},
{bits: 5, name: 'reg', type: 2},
{bits: 4, name: 'sid', type: 7},
{bits: 8, name: 'sre', type: 2},
{bits: 8, name: 'cmd', type: 8}
], config: {label: {right: 'SSR'}}}
....
Description::
Reads a value from a subsystem register into an _Execution Engine_ register.
Encoding:: E-Type
Assembler syntax::
+
[source]
----
ssr <sid>, <reg>, <sre>, <cmd>
----
+
Where:
[horizontal]
sid:::
The subsystem identifier.
Should be in the range *ss0*..*ss15*.
reg::: The _Execution Engine_ destination register.
sre:::
The subsystem source register.
Should be in the range *sr0*..*sr255*.
cmd::: The subsystem register specific command to use for reading.
Examples::
+
[source]
----
ssr ss0, r1, sr0, 1 <1>
ssr ss15, pc, sr32, 0 <2>
----
<1> Reads the *sr0* register from the *ss0* subsystem into *r1* using the command _0x1_ to do so.
<2> Reads the *sr32* register from the *ss15* subsystem into *pc* using the command _0x0_ to do so.
Privileged instruction:: No. (The access control is done at the register/command level).
Updates program state flags:: No.
Exceptions:: UnknownInstr.
<<<
===== SSW: Subsystem Register Write
[wavedrom, ,svg]
....
{reg: [
{bits: 7, name: 0x7e, type: 8, attr: '0x7e'},
{bits: 5, name: 'reg', type: 2},
{bits: 4, name: 'sid', type: 7},
{bits: 8, name: 'sre', type: 2},
{bits: 8, name: 'cmd', type: 8}
], config: {label: {right: 'SSW'}}}
....
Description::
Writes a value from an _Execution Engine_ register into a subsystem register.
Encoding:: E-Type
Assembler syntax::
+
[source]
----
ssw <sid>, <reg>, <sre>, <cmd>
----
+
Where:
[horizontal]
sid:::
The subsystem identifier.
Should be in the range *ss0*..*ss15*.
reg::: The _Execution Engine_ source register.
sre:::
The subsystem destination register.
Should be in the range *sr0*..*sr255*.
cmd::: The subsystem register specific command to use for writing.
Examples::
+
[source]
----
ssw ss0, r1, sr0, 1 <1>
ssw ss15, pc, sr32, 0 <2>
----
<1> Writes the value in *r1* into the *sr0* register from the *ss0* subsystem using the command _0x1_ to do so.
<2> Writes the value in *pc* into the *sr32* register from the *ss15* subsystem using the command _0x0_ to do so.
Privileged instruction:: No. (The access control is done at the register/command level).
Updates program state flags:: No.
Exceptions:: UnknownInstr.

View File

@ -104,5 +104,5 @@ Channel::
This exception is generated when an I/O device communicates with the _Execution Engine_ through a channel.
If data is passed alongside the exception then it is stored in main memory and ready to be read by the time this exception is generated.
include::subsystems.adoc[]
include::subsystems-intro.adoc[]

View File

@ -0,0 +1,12 @@
[id=subsystems-intro]
=== Subsystems
Subsystems are extra components interacting with an _Execution Engine_.
.Examples of functions of subsystems
* Manage virtual memory and cache
* Manage memory access rights
* Manage Channel I/O
* Debug the system
A generic interface is provided to interact with the subsystems through the use of the `ssr` and `ssw` instructions.

View File

@ -1,14 +1,55 @@
[id=subsystems-intro]
=== Subsystems
Subsystems are extra components interacting with an _Execution Engine_.
[id=subsystems]
== Subsystems
=== Specified Subsystems
.Examples of subsystems
* Execution Engine State Sybsystem
* Memory Management Subsystem
* Cache Control Subsystem
* Channel I/O Subsystem
* Debugging Subsystem
* Hardware Management Subsystem
The {central-arch-name} allows up to 16 subystem identifiers. Not all of these identifiers are used currently.
A generic interface is provided to interact with the subsystems through the use of the `ssr` and `ssw` instructions.
.Subsystems that are specified
[cols="1,2,3"]
|===
|ID |Name |Description
|0
|Execution Engine Control Subsystem
|#TODO: Describe it.#
|1
|Memory & Cache Control Subsystem
|#TODO: Describe it.#
|2
|Hardware Management Subsystem
|#TODO: Describe it.#
|3
|Debugging Subsystem
|#TODO: Describe it.# See <<debugging-subsystem>>.
|4
|Channel I/O Subsystem
|#TODO: Describe it.#
|===
[id=debugging-subsystem]
=== Debugging Subsystem
==== Description
#TODO: Describe it.#
==== Registers / Commands
===== sr0: Simulation Control
The Simulation Control register is a register that is 32-bits wide. It is accessible in unprivileged and privileged modes.
Writing to it is only possible when the _Execution Engine_ in which the software executes is being simulated. Real hardware should generate an *UnknownInstr* exception if it happens.
[source]
----
ssr ss3, r0, sr0, 0 <1>
ssw ss3, r0, sr0, 0 <2>
----
<1> Read the Simulation Control register.
<2> Write in the Simulation Control register.
The register contains the value 1 when under simulation and 0 otherwise.
Writing any value to it while under simulation has the effect of ending the simulation.