Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions specification/aie2ps/isa-spec.html
Original file line number Diff line number Diff line change
Expand Up @@ -630,9 +630,14 @@ <h2 id="start_cond_job_preempt-0x1f">START_COND_JOB_PREEMPT (0x1f)</h2>
</table>
<p>Indicates the start of a new job and creates a new entry in the job table,
if preemption flag has been set. The flag is cleared when preemption is
checked, and is set if preemption happens.
checked, and is set if preemption happens, so the job runs only if the flag indicates that a
preemption occurred when the condition is checked.
The job size is auto-calculated and inserted by the assembler and not supplied
explicitly by the user.</p>
explicitly by the user.
In multi-uC case, CERT will do barrier sync after this job, so each uC should have the same number
of this type of conditional jobs.
The conditional job can share page with other jobs, and all jobs following this job in the page
don't start before this job is done.</p>
<h2 id="uc_dma_write_des-0x01">UC_DMA_WRITE_DES (0x01)</h2>
<p>Enqueues a DM2MM uC-DMA transfer and returns a wait handle for it.</p>
<table>
Expand Down Expand Up @@ -1369,8 +1374,10 @@ <h2 id="preempt-0x19">PREEMPT (0x19)</h2>
unit of page to the 1st page of control code, and this address is where the <code>RESTORE</code> control code resides. The opcode
can determine whether preemption is required, and if required, it can also distinguish whether it is to <code>SAVE</code> or to
<code>RESTORE</code>, and run the <code>SAVE</code> or <code>RESTORE</code> control code accordingly.
In multi-uc case, for each preemption point id, the control code of each uc should have this opcode with same <code>id</code>.
This opcode should take one whole job which in turn should take one whole page.</p>
In multi-uC case, at each preemption point, CERT will do barrier sync regardless of whether the preemption happens or not, so
for each preemption point id, the control code of each uc should have this opcode with same <code>id</code>.
This opcode should take one whole job but the job can share page with other jobs. All following jobs in same page don't start
before this preemption job is done</p>
<h2 id="load_pdi-0x1a">LOAD_PDI (0x1a)</h2>
<p>load pdi</p>
<table>
Expand Down Expand Up @@ -1398,10 +1405,13 @@ <h2 id="load_pdi-0x1a">LOAD_PDI (0x1a)</h2>
</tbody>
</table>
<p>pdi itself is also a piece of control code. It can be loaded by other control code at anywhere anytime.
<code>pdi_id</code> is an elf wide unique id and specifies an unique pdi. consecutive loading of same pdi results in following
<code>pdi_id</code> is an elf wide unique id and specifies a unique pdi. If multiple control code elfs run in one hwctx,
the pdi_id should be hwctx wide unique. When this opcode runs, consecutive loading of same pdi results in following
loading skipped by the uC. <code>pdi_host_addr_offset</code> specifies a relative address in unit of page to the 1st page of
the control code and is where the pdi control code resides
This opcode should take one whole job which in turn should take one whole page.</p>
This opcode should take one whole job but the job can share page with other jobs. All jobs following the load pdi job
don't start before the load pdi job is done.
In multi-uc case, cert will do barrier sync after the load_pdi job, so each uc needs to have same number of load pdi jobs</p>
<h2 id="load_cores-0x04">LOAD_CORES (0x04)</h2>
<p>load cores</p>
<table>
Expand Down
20 changes: 15 additions & 5 deletions specification/aie2ps/isa-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,14 @@ Indicates a new job which can be conditionally started according to preemption.

Indicates the start of a new job and creates a new entry in the job table,
if preemption flag has been set. The flag is cleared when preemption is
checked, and is set if preemption happens.
checked, and is set if preemption happens, so the job runs only if the flag indicates that a
preemption occurred when the condition is checked.
The job size is auto-calculated and inserted by the assembler and not supplied
explicitly by the user.
In multi-uC case, CERT will do barrier sync after this job, so each uC should have the same number
of this type of conditional jobs.
The conditional job can share page with other jobs, and all jobs following this job in the page
don't start before this job is done.


## UC_DMA_WRITE_DES (0x01)
Expand Down Expand Up @@ -691,8 +696,10 @@ and this address is where the `SAVE` control code resides. `restore_control_code
unit of page to the 1st page of control code, and this address is where the `RESTORE` control code resides. The opcode
can determine whether preemption is required, and if required, it can also distinguish whether it is to `SAVE` or to
`RESTORE`, and run the `SAVE` or `RESTORE` control code accordingly.
In multi-uc case, for each preemption point id, the control code of each uc should have this opcode with same `id`.
This opcode should take one whole job which in turn should take one whole page.
In multi-uC case, at each preemption point, CERT will do barrier sync regardless of whether the preemption happens or not, so
for each preemption point id, the control code of each uc should have this opcode with same `id`.
This opcode should take one whole job but the job can share page with other jobs. All following jobs in same page don't start
before this preemption job is done


## LOAD_PDI (0x1a)
Expand All @@ -704,10 +711,13 @@ load pdi
| opcode (8b) | pad (8b) | pad (16b) | const (32b) | page_id (16b) | pad (16b) | 12B |

pdi itself is also a piece of control code. It can be loaded by other control code at anywhere anytime.
`pdi_id` is an elf wide unique id and specifies an unique pdi. consecutive loading of same pdi results in following
`pdi_id` is an elf wide unique id and specifies a unique pdi. If multiple control code elfs run in one hwctx,
the pdi_id should be hwctx wide unique. When this opcode runs, consecutive loading of same pdi results in following
loading skipped by the uC. `pdi_host_addr_offset` specifies a relative address in unit of page to the 1st page of
the control code and is where the pdi control code resides
This opcode should take one whole job which in turn should take one whole page.
This opcode should take one whole job but the job can share page with other jobs. All jobs following the load pdi job
don't start before the load pdi job is done.
In multi-uc case, cert will do barrier sync after the load_pdi job, so each uc needs to have same number of load pdi jobs


## LOAD_CORES (0x04)
Expand Down
20 changes: 15 additions & 5 deletions specification/aie2ps/isa-spec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,14 @@ operations:
description: |
Indicates the start of a new job and creates a new entry in the job table,
if preemption flag has been set. The flag is cleared when preemption is
checked, and is set if preemption happens.
checked, and is set if preemption happens, so the job runs only if the flag indicates that a
preemption occurred when the condition is checked.
The job size is auto-calculated and inserted by the assembler and not supplied
explicitly by the user.
In multi-uC case, CERT will do barrier sync after this job, so each uC should have the same number
of this type of conditional jobs.
The conditional job can share page with other jobs, and all jobs following this job in the page
don't start before this job is done.
- mnemonic: UC_DMA_WRITE_DES
opcode: 0x01
regular: True
Expand Down Expand Up @@ -624,8 +629,10 @@ operations:
unit of page to the 1st page of control code, and this address is where the `RESTORE` control code resides. The opcode
can determine whether preemption is required, and if required, it can also distinguish whether it is to `SAVE` or to
`RESTORE`, and run the `SAVE` or `RESTORE` control code accordingly.
In multi-uc case, for each preemption point id, the control code of each uc should have this opcode with same `id`.
This opcode should take one whole job which in turn should take one whole page.
In multi-uC case, at each preemption point, CERT will do barrier sync regardless of whether the preemption happens or not, so
for each preemption point id, the control code of each uc should have this opcode with same `id`.
This opcode should take one whole job but the job can share page with other jobs. All following jobs in same page don't start
before this preemption job is done
- mnemonic: LOAD_PDI
opcode: 0x1a
regular: True
Expand All @@ -643,10 +650,13 @@ operations:
brief: load pdi
description: |
pdi itself is also a piece of control code. It can be loaded by other control code at anywhere anytime.
`pdi_id` is an elf wide unique id and specifies an unique pdi. consecutive loading of same pdi results in following
`pdi_id` is an elf wide unique id and specifies a unique pdi. If multiple control code elfs run in one hwctx,
the pdi_id should be hwctx wide unique. When this opcode runs, consecutive loading of same pdi results in following
loading skipped by the uC. `pdi_host_addr_offset` specifies a relative address in unit of page to the 1st page of
the control code and is where the pdi control code resides
This opcode should take one whole job which in turn should take one whole page.
This opcode should take one whole job but the job can share page with other jobs. All jobs following the load pdi job
don't start before the load pdi job is done.
In multi-uc case, cert will do barrier sync after the load_pdi job, so each uc needs to have same number of load pdi jobs
- mnemonic: LOAD_CORES
opcode: 0x04
regular: True
Expand Down
Loading