Below, we show the supported interfaces that can be used in pihdf to build and connect HW modules.
All interfaces (except Reset and Clock) can be used as input/output global interfaces or local interfaces to
connect HW sub-modules. When used as local interfaces, optionally, a size of a fifo buffer can be specified
by using "buf_size": "value" pair. For a local interface, tag "direction" is not allowed.
For convenience, we also give an example of how each interface can be used in the .json file as a
global interface and the format of command add.
Reset
A reset input interface, active level can be specified.
Example: To add an active high reset (called rst) to a HW module design, add the following line to section interfaces of the corresponding .json file:
{ "name": "rst", "type": "Reset", "active": "1" }
Clock
A clock input interface.
Example: To add a clock (called clk) to a HW module design, add the following line to section interfaces of the corresponding .json file:
{ "name": "clk", "type": "Clock" }
HSD
The use of HSD interface is twofold:
1) A hand-shake (ready-valid) interface with specified data width. A push behavior (optional) can also be specified as shown in the example below:
{ "name": "rx_hs", "type": "HSD", "fields": "64", "direction": "IN", "push": "True" }
To use command add:
$ module PATH add HSD "-n rx_hs -w 64 -d IN -p True"
2) HSD can be used as a container interface, in which data is represented as a set of fields. Fields are given in file data_fields.py, part of pihdf.
A push behavior (optional) can also be specified. The default is "False", therefore, if push behavior is not needed, this tag can be omitted as in the following example:
{ "name": "tx_port_flds", "type": "HSD", "direction": "OUT", "fields":"port_fields" }
To use command add:
$ module PATH add HSD "-n tx_port_flds -d OUT -l port_fields"
STAvln
A streaming interface for packed data (ready, valid, sop, eop, empty, data, error).
A packet is defined with start-of-packet (sop) and end-of-packet (eop) signals.
Example: To add an output STAvln interface called rx_avln which has a data width of 64 bits to a HW module design, add the following line to section interfaces of the corresponding .json file:
{ "name": "rx_avln", "type": "STAvln", "width": "64", "direction": "OUT" }
Alternatively, from a terminal, you can use command add to do the same thing:
$ module MPATH add STAvln "-n rx_avln -w 64 -d OUT"
In this example, MPATH is the path to the HW module's root directory.
Note: Tag push is not allowed with STAvln interfaces.
Bus
A container interface consisting of a set of supported interfaces.
The supported interfaces are given in file data_fields.py, part of pihdf.
Example: To add a BUS called axi4_slave of type AXI4LS to a HW module design, add the following line to section interfaces of the corresponding .json file:
{ "name": "axi4_slave", "type": "Bus", "interfaces": "AXI4LS" }
Alternatively, use command add as follows:
$ module MPATH add Bus "-n axi4_slave -i AXI4LS"
Note: Since a BUS may contain both, input and output interfaces, tag direction is not used.
Parameter
Used to specify top-level parameters, i.e., compile-time generics.
Example: To add a parameter par_1 with a default value 10 to a HW module design, add the following line to section parameters of the corresponding .json file:
{ "name": "par_1", "value": "10" }
To use command add, from a terminal:
$ module MPATH add Parameter "-n par_1 -v 10"
Again, MPATH is the path to the HW module's root directory.
Note: To define a local interface, use the same json format; do not use tag direction.
Note: Command add cannot be used to define local interfaces.