Skip to content

ucb-ee290c/arty-chipyard

CHIPYARD

Osci on Arty

What is this?

This is a port of the digital side of OsciBear on Arty 35T. In theory it should also work for Arty 100T without any modifications. Not the most elegant code and I don't know what I'm doing sometimes but it works.

What's included?

Key Functionality:

✓   AES accelerator
⨯   BLE Baseband
✓   DMA
✓   1 Custom-sized Rocket core
✓   Adjustable to very slow clock

Periphery:

✓   JTAG (GDB)
✓   UART
✓   GPIO x3
✓   QSPI
✓   1-bit Serial Tilelink

How to generate a bitstream?

Set up chipyard

In addition to following the regular chipyard set up process, a couple of extra submodules needs to be added (if they are not already set up). Notably:

  • https://github.com/ucberkeley-ee290c/sp21-aes-rocc-accel for generators/aes
  • https://github.com:ucberkeley-ee290c/sp21-ble-baseband for generators/baseband (although I think for now this is commented out so probably don't need this)
  • https://github.com/ucberkeley-ee290c/sp21-dma for generators/dma

Make bitstream

Once chipyard, the submodules and Vivado has been set-up properly, run the following command under the fpga directory:

make bitstream SUB_PROJECT=arty-osci

Two pre-generated bitstreams are located here.

Clock

To aid debugging high speed interfaces like TileLink, the current version generates a bitstream with a very slow clock. This is done through modifying two files.

fpga/fpga-shells/xilinx/arty/tcl/ip.tcl

Modifications for this file has NOT been uploaded since it's a different submodule and I didn't want to make a separate repo for a 2 line change. But this mostly concerns outputting a slow clock through Xilinx's clock wizard. I changed CONFIG.CLKOUT2_REQUESTED_OUT_FREQ {65.000} to CONFIG.CLKOUT2_REQUESTED_OUT_FREQ {4.687}, making the built-in divider output a 4.687 MHz signal. This is not strictly necessary as the second file outlines.

fpga/src/main/scala/TestHarness.scala

Oftentimes even a 4 MHz clock isn't slow enough as is the case when probing signals with jumper wires connected in serial. This is remedied through manually instatiating a clock divider in the TestHarness. Simply change the divider width and divisor to fine tune the output frequency.

Note that I'm doing a divide by 32 on the 4.687 MHz signal, giving a 146.5 KHz clock period.

How do I hook this up?

The pinouts are found in the HarnessBinders.scala file.

For quick reference, JTAG:

TCK = jd_2
TMS = jd_5
TDI = jd_4
TDO = jd_0
SRSTn = jd_6

TODO

  • Test the accelerator and the DMA

Questions?

Email [email protected] or find me on the BAR Slack.

Chipyard Framework Test

Quick Links

Using Chipyard

To get started using Chipyard, see the stable documentation on the Chipyard documentation site: https://chipyard.readthedocs.io/

What is Chipyard

Chipyard is an open source framework for agile development of Chisel-based systems-on-chip. It will allow you to leverage the Chisel HDL, Rocket Chip SoC generator, and other Berkeley projects to produce a RISC-V SoC with everything from MMIO-mapped peripherals to custom accelerators. Chipyard contains processor cores (Rocket, BOOM, CVA6 (Ariane)), accelerators (Hwacha, Gemmini, NVDLA), memory systems, and additional peripherals and tooling to help create a full featured SoC. Chipyard supports multiple concurrent flows of agile hardware development, including software RTL simulation, FPGA-accelerated simulation (FireSim), automated VLSI flows (Hammer), and software workload generation for bare-metal and Linux-based systems (FireMarshal). Chipyard is actively developed in the Berkeley Architecture Research Group in the Electrical Engineering and Computer Sciences Department at the University of California, Berkeley.

Resources

Need help?

Contributing

Attribution and Chipyard-related Publications

If used for research, please cite Chipyard by the following publication:

@article{chipyard,
  author={Amid, Alon and Biancolin, David and Gonzalez, Abraham and Grubb, Daniel and Karandikar, Sagar and Liew, Harrison and Magyar,   Albert and Mao, Howard and Ou, Albert and Pemberton, Nathan and Rigge, Paul and Schmidt, Colin and Wright, John and Zhao, Jerry and Shao, Yakun Sophia and Asanovi\'{c}, Krste and Nikoli\'{c}, Borivoje},
  journal={IEEE Micro},
  title={Chipyard: Integrated Design, Simulation, and Implementation Framework for Custom SoCs},
  year={2020},
  volume={40},
  number={4},
  pages={10-21},
  doi={10.1109/MM.2020.2996616},
  ISSN={1937-4143},
}
  • Chipyard
    • A. Amid, et al. IEEE Micro'20 PDF.
    • A. Amid, et al. DAC'20 PDF.
    • A. Amid, et al. ISCAS'21 PDF.

These additional publications cover many of the internal components used in Chipyard. However, for the most up-to-date details, users should refer to the Chipyard docs.

  • Generators
    • Rocket Chip: K. Asanovic, et al., UCB EECS TR. PDF.
    • BOOM: C. Celio, et al., Hot Chips 30. PDF.
      • SonicBOOM (BOOMv3): J. Zhao, et al., CARRV'20. PDF.
      • COBRA (BOOM Branch Prediction): J. Zhao, et al., ISPASS'21. PDF.
    • Hwacha: Y. Lee, et al., ESSCIRC'14. PDF.
    • Gemmini: H. Genc, et al., DAC'21. PDF.
  • Sims
    • FireSim: S. Karandikar, et al., ISCA'18. PDF.
      • FireSim Micro Top Picks: S. Karandikar, et al., IEEE Micro, Top Picks 2018. PDF.
      • FASED: D. Biancolin, et al., FPGA'19. PDF.
      • Golden Gate: A. Magyar, et al., ICCAD'19. PDF.
      • FirePerf: S. Karandikar, et al., ASPLOS'20. PDF.
  • Tools
    • Chisel: J. Bachrach, et al., DAC'12. PDF.
    • FIRRTL: A. Izraelevitz, et al., ICCAD'17. PDF.
    • Chisel DSP: A. Wang, et al., DAC'18. PDF.
    • FireMarshal: N. Pemberton, et al., ISPASS'21. PDF.
  • VLSI
    • Hammer: E. Wang, et al., ISQED'20. PDF.

Acknowledgements

This work is supported by the NSF CCRI ENS Chipyard Award #201662.