Input .json file

We use the example from the previous section. That is, assume, that we would like our HW module hs_example to contain two sub-modules, interconnected with a single HSD interface, then we can use the following hs_example.json file:

 {
     "design":
     {
         "name": "hs_example",
         "interfaces":
         [
             {"name":"rst","type":"Reset","active":"1" },
             {"name":"clk","type":"Clock" },
             {"name":"rx_hs","type":"HSD","data":"64","direction":"IN"},
             {"name":"tx_hs","type":"HSD","data":"64","direction":"OUT"}
         ],
         "parameters":
         [
             {"name":"depth","value":"10"}
         ]
     },

     "_comment": "You can put some comments in this way",

     "structure":
     {
         "local_interfaces":
         [
             {"name":"hs","type":"HSD","data":"64","depth":"2"}
         ],
         "design_modules":
         [
             {
                 "name": "module1", "type": "mydesign1",
                 "path": "../mydesign",
                 "connections":
                 [
                     {"direction":"IN","local_name":"rst","connect_to":"rst"},
                     {"direction":"IN","local_name":"clk","connect_to":"clk"},
                     {"direction":"IN","local_name":"rx","connect_to":"rx_hs"},
                     {"direction":"OUT","local_name":"tx","connect_to":"hs"},
                     {"local_name":"PARAM","connect_to":"depth"}
                 ]
             },
             {
                 "name": "module2", "type": "mydesign2",
                 "path": "",
                 "connections":
                 [
                     {"direction":"IN","local_name":"rst","connect_to":"rst"},
                     {"direction":"IN","local_name":"clk","connect_to":"clk"},
                     {"direction":"IN","local_name":"rx","connect_to":"hs"},
                     {"direction":"OUT","local_name":"tx","connect_to":"tx_hs"}
                 ]
             }
         ]
     }
 }

In this example, the (global/top-level) Reset and Clock interfaces are connected to the sub-modules, the rx_hs interface is connected to the input of module1, and the output of module2 is connected to the output interface tx_hs. The two modules are connected via a hand-shake interface (hs) which itself contains a FIFO buffer of depth 2. Note also how comments can be added in the .json file if needed.

Generated directory structure

The .json file above is sufficient to create a structured design in pihdf:

$ module hs_example new

Since, path of module2 is empty, the command above will create a new design (sub-)project for module2 as well. Consequently, the created directory structure of hs_example will look as follows:

        hs_example
        ├── hs_example.dot
        ├── hs_example.json
        ├── hs_example.py
        ├── __init__.py
        ├── out
        ├── src
        │   ├── compile_list.txt
        │   ├── hs_example_beh.py
        │   ├── hs_example_rtl.py
        │   ├── __init__.py
        │   └── modules
        │       ├── __init__.py
        │       └── mydesign2
        │           ├── __init__.py
        │           ├── mydesign2.json
        │           ├── mydesign2.py
        │           ├── out
        │           ├── src
        │           │   ├── compile_list.txt
        │           │   ├── __init__.py
        │           │   ├── mydesign2_beh.py
        │           │   └── mydesign2_rtl.py
        │           └── test
        │               ├── __init__.py
        │               ├── mydesign2_cosim.gtkw
        │               ├── mydesign2.gtkw
        │               ├── t_mydesign2.py
        │               ├── utest_mydesign2.py
        │               └── vectors
        └── test
            ├── hs_pt_cosim.gtkw
            ├── hs_pt.gtkw
            ├── __init__.py
            ├── inreface_map.py
            ├── t_hs_pt.py
            ├── utest_hs_pt.py
            └── vectors

TODO: Note that the directory structure of "mydesign2" resembles the directory structure of "hs_example"...