SkillAgentSearch skills...

SpinalWorkshop

Labs to learn SpinalHDL

Install / Use

/learn @SpinalHDL/SpinalWorkshop
About this skill

Quality Score

0/100

Supported Platforms

Universal

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.<br> 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)<br> In the case a lab specification isn't clear, you can find in waves.tar.gz the corresponding working waves.<br> 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 :

sbt
runMain workshop.counter.CounterMain

# Run again
runMain workshop.counter.CounterMain

# Run again
runMain workshop.counter.CounterMain

Or in a single (But slower) command :

sbt "runMain 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 :

sbt
testOnly *.CounterTester

# To test again
testOnly *.CounterTester

# To test again
testOnly *.CounterTester

Or in a single (But slower) command :

sbt "testOnly *.CounterTester"

Note : Each tester regenerate the hardware, you don't need to do it manually.

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.<br> 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)<br> 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 :

# 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
View on GitHub
GitHub Stars158
CategoryDevelopment
Updated1d ago
Forks45

Languages

Scala

Security Score

80/100

Audited on Apr 1, 2026

No findings