# SpinalWorkshop **Repository Path**: pheigenbaum/SpinalWorkshop ## Basic Information - **Project Name**: SpinalWorkshop - **Description**: Labs to learn SpinalHDL - **Primary Language**: Scala - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2022-10-09 - **Last Updated**: 2022-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## SpinalHDL labs There is the list of RTL labs : - Counter : src/main/scala/workshop/counter - PWM with APB : src/main/scala/workshop/pwm - UART : src/main/scala/workshop/uart - Prime : src/main/scala/workshop/prime - Function : src/main/scala/workshop/function - Apb3Decoder : src/main/scala/workshop/apb3decoder - Timer with BusSlaveFactory : src/main/scala/workshop/timer - Blackbox and Clockdomain : src/main/scala/workshop/blackboxAndClock - Stream : src/main/scala/workshop/stream - Mandelbrot : src/main/scala/workshop/mandelbrot - UDP : src/main/scala/workshop/udp - WavePlayer : src/main/scala/workshop/waveplayer In each labs, there is an assets folder which contain a starting template and a solution.
In each labs, there is an spec.md which give basics of the lab. (You can get the Intellij plugin to read it in the IDE)
In the case a lab specification isn't clear, you can find in waves.tar.gz the corresponding working waves.
Those labs make the assumption that you are already comfortable with standards HDL. ### Generate your RTL For each labs, you will find a scala main which will generate your RTL. For example, to run the `CounterMain` by using SBT, you can do as following in the root folder of this repository : ```sh sbt run-main workshop.counter.CounterMain # Run again run-main workshop.counter.CounterMain # Run again run-main workshop.counter.CounterMain ``` Or in a single (But slower) command : ```sh sbt "run-main workshop.counter.CounterMain" ``` All generated RTL will be in root_of_this_repository/rtl. ### Test your RTL For each labs, you will find an automated regression suite in src/test/scala/workshop/xxx For example, to run the `CounterTester` regression by using SBT, you can do as following in the root folder of this repository : ```sh sbt test-only *.CounterTester # To test again test-only *.CounterTester # To test again test-only *.CounterTester ``` Or in a single (But slower) command : ```sh sbt "test-only *.CounterTester" ``` Note : Each tester regenerate the hardware, you don't need to do it manualy. All simulation waves files will be written in root_of_this_repository/waves in the VCD format. ## SpinalSim labs There is the list of SpinalSim labs : - SimCounter : src/main/python/workshop/simCounter - SimStreamJoinFork : src/main/python/workshop/simStreamJoinFork In each labs, there is an assets folder which contain a starting template and a solution.
In each labs, there is an spec.md which give basics of the lab. (You can get the Intellij plugin to read it in the IDE)
For SpinalSim, the simulation waves are located in the simWorkspace folder. ## Cocotb labs There is the list of Cocotb labs : - Counter with cocotb : src/test/python/workshop/counter - FIFO with cocotb : src/test/python/workshop/fifo To run cocotb labs, you have to run `make` in the testbench folder. ## Minimum requirements Those labs use various tools to generate and verify the hardware : - java 8 - SBT - Verilator - Icarus Verilog - Cocotb (http://cocotb.readthedocs.io/en/latest/quickstart.html#installing-cocotb) - Cocotb path in the 'COCOTB' environment variable - GTKwave to open simulation waves (./waves/*.vcd) For the first row of labs, you don't need cocotb/python stuffs. There is how to setup by command line a Debian distribution : ```sh # JAVA 8 sudo add-apt-repository -y ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk -y sudo update-alternatives --config java sudo update-alternatives --config javac # SBT echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823 sudo apt-get update sudo apt-get install sbt -y # Verilator sudo apt-get install git make autoconf g++ flex bison -y # First time prerequisites git clone http://git.veripool.org/git/verilator # Only first time unsetenv VERILATOR_ROOT # For csh; ignore error if on bash unset VERILATOR_ROOT # For bash cd verilator git pull # Make sure we're up-to-date git tag # See what versions exist #git checkout HEAD # Use HEAD development version #git checkout verilator_{version} # Switch to specified version autoconf # Create ./configure script ./configure make -j$(nproc) sudo make install cd .. # iverilog (debian package 9.7 contain bugs) sudo apt-get install -y gperf readline-common bison flex autoconf wget https://github.com/steveicarus/iverilog/archive/v10_0.tar.gz tar -xvf v10_0.tar.gz cd iverilog-10_0 autoconf ./configure make -j4 sudo make install cd .. # COCOTB sudo apt-get install -y git make gcc g++ swig python-dev git clone https://github.com/potentialventures/cocotb export COCOTB=$(pwd)/cocotb echo export COCOTB=$(pwd)/cocotb >> ~/.bashrc # GTKwave sudo apt-get install gtkwave -y # Used for the mandelbrot lab sudo apt-get install python-tk -y # Clone this repo git clone --recursive https://github.com/SpinalHDL/SpinalWorkshop.git SpinalWorkshop cd SpinalWorkshop sbt compile ```