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.