hwtLib.structManipulators.arrayBuff_writer.
ArrayBuff_writer
[source]¶Bases: hwt.synthesizer.unit.Unit
Collect items and send them over wDatapump when buffer is full or on timeout Cyclically writes items into array over wDatapump Maximum overlap of transactions is 1
[TODO] better fit of items on bus [TODO] fully pipeline
items -> buff -> internal logic -> axi datapump
_config
()[source]¶Configure object parameters
_declr
()[source]¶declarations
_serializeDecision
(parentUnit, obj, isDeclaration, priv)¶Decide to serialize only objs with uniq parameters and class
Parameters: | priv – private data for this function ({frozen_params: obj}) |
---|---|
Returns: | tuple (do serialize this object, next priv) |
hwtLib.structManipulators.arrayItemGetter.
ArrayItemGetter
[source]¶Bases: hwt.synthesizer.unit.Unit
Get specific item from array by index
_config
()[source]¶Configure object parameters
hwtLib.structManipulators.cLinkedListReader.
CLinkedListReader
[source]¶Bases: hwt.synthesizer.unit.Unit
This unit reads items from (circular) linked list like structure
struct node {
item_t items[ITEMS_IN_BLOCK],
struct node * next;
};
synchronization is obtained by rdPtr/wrPtr (tail/head) pointer baseAddr is address of actual node
Attention: | device reads only chunks of size <= BUFFER_CAPACITY/2, |
---|
_config
()[source]¶Configure object parameters
hwtLib.structManipulators.cLinkedListWriter.
CLinkedListWriter
[source]¶Bases: hwt.synthesizer.unit.Unit
This unit writes items to (circular) linked list like structure (List does not necessary need to be circular but space is specified by two pointers like in circular queue)
struct node {
item_t items[ITEMS_IN_BLOCK],
struct node * next;
};
synchronization is obtained by rdPtr/wrPtr (tail/head) pointer baseAddr is address of actual node
Attention: | device writes chunks of max size <= BUFFER_CAPACITY/2 |
---|---|
Attention: | next addr is downloaded on background when items are uploaded (= has to be set when this unit enters this block) |
Note: | wrPtr == rdPtr => queue is empty and there is (2^PTR_WIDTH) - 1 of empty space wrPtr == rdPtr+1 => queue is full wrPtr+1 == rdPtr => there is (2^PTR_WIDTH) - 2 of empty space spaceToWrite = rdPtr - wrPtr - 1 (with uint16_t) |
_config
()[source]¶Configure object parameters
_declr
()[source]¶declarations
baseAddrLogic
(nextBlockTransition_in)[source]¶Logic for downloading address of next block
Parameters: | nextBlockTransition_in – signal which means that baseIndex should be changed to nextBaseIndex if nextBaseAddrReady is not high this signal has no effect (= regular handshake) |
---|---|
Returns: | (baseIndex, nextBaseIndex, nextBaseReady is ready and nextBlockTransition_in can be used) |
hwtLib.structManipulators.mmu_2pageLvl.
MMU_2pageLvl
[source]¶Bases: hwt.synthesizer.unit.Unit
MMU where parent page table is stored in ram this unit and only items from leaf page tables are download on each request over rDatapump interface
Attention: | if item in pagetable is BAD_PHYS_ADDR output signal segfault becomes 1 and unit will stop working |
---|---|
Attention: | rootPageTable has to be initialized before first request over virtIn interface |
Attention: | rootPageTable has write only access |
Attention: | use value -1 to mark that page is not mapped, it will result in segfault signal asserted high when this address is accessed |
_config
()[source]¶Configure object parameters
hwtLib.structManipulators.structReader.
StructReader
(structT, tmpl=None, frames=None)[source]¶Bases: hwtLib.amba.axis_comp.frameParser.AxiS_frameParser
This unit downloads required structure fields over rDatapump interface from address specified by get interface
Variables: |
|
---|---|
Attention: | interfaces of field will not send data in same time |
Note: | names in the picture are just illustrative |
---|
__init__
(structT, tmpl=None, frames=None)[source]¶Parameters: |
|
---|---|
Note: | if tmpl and frames are None they are resolved from structT parseTemplate |
Note: | this unit can parse sequence of frames, if they are specified by “frames” |
Attention: | interfaces for each field in struct will be dynamically created |
Attention: | structT can not contain fields with variable size like HStream |
_config
()[source]¶Configure object parameters
hwtLib.structManipulators.structWriter.
StructWriter
(structT, tmpl=None, frames=None)[source]¶Bases: hwtLib.structManipulators.structReader.StructReader
Write struct specified in constructor over wDatapump interface on address specified over set interface
Variables: |
|
---|
Note: | names in the picture are just illustrative |
---|
_config
()[source]¶Configure object parameters