Project Hierarchy ================= Caravan is made to provided maximum re-usability to it's users as well as to the developers/contributors creating their own bus protocol implementations. Design structure ---------------- The proposed folder structure is shown below: :: main ├── scala │ ├── caravan │ │ ├── bus │ │ │ ├── common │ │ │ │ └── *.scala │ │ │ ├── wishbone │ │ │ │ ├── Harness.scala │ │ │ │ └── *.scala │ │ │ ├── amba │ │ │ │ ├── apb │ │ │ │ │ ├── Harness.scala │ │ │ │ │ └── *.scala │ │ │ ├── tilelink │ │ │ │ ├── tlul │ │ │ │ │ ├── Harness.scala │ │ │ │ │ └── *.scala Inside the ``main`` folder all the source code for the design is present. The ``common`` folder contains all the ``.scala`` helper classes and code that can be re-used for other bus topologies. Other folders are bus specific such as the ``wishbone`` folder. The common file among all the bus specific folders is the ``Harness.scala``, this file is the top level design that takes the stimuli from the test-bench and provides it to the protocol adapters to verify their correct functionality. Test structure -------------- The proposed folder structure is shown below: :: test ├── scala │ ├── wishbone │ │ ├── HarnessTest.scala │ │ └── *.scala │ ├── apb │ │ ├── HarnessTest.scala │ │ └── *.scala │ ├── tlul │ │ ├── HarnessTest.scala │ │ └── *.scala The ``test`` folder contains the test-benches of the whole design. There are protocol specific folders such as ``apb``, ``wishbone``, ``tlul``. The mandatory test-bench to have is the ``HarnessTest.scala`` for providing stimuli to the ``Harness`` module in the design. Other than that, the developer can write as many unit tests as possible for the verification of the IP.