Collection of SystemVerilog exercises for the School of Digital Circuit Synthesis
Not a day without a line in Verilog
Collection of tasks of increasing complexity
Yuri Panchul, 2021-2024
Links
- School of Digital Circuit Synthesis
- Lesson one: introduction to the design flow and exercises with combinational logic
Installation instructions
The tasks can be solved with any Verilog simulator that supports SystemVerilog. And also with the free Icarus Verilog simulator, which, although it does not support all of SystemVerilog, does support Verilog 2005 with some SystemVerilog elements, sufficient for solving our tasks. Icarus Verilog is used with GTKWave, a program for working with timing diagrams. We will not need GTKWave for the first ten tasks, but it is worth installing it together with Icarus Verilog for the future.
Installation on Linux
Under Ubuntu and Debain based Linux you can install Icarus Verilog and GTKWave with the command:
sudo apt-get install verilog gtkwave
Note:
If you have an old version of Linux distribution (Ubuntu), then when you install Icarus Verilog you will get an old version that does not support always_comb
, always_ff
and many other SystemVerilog constructs. How to solve this problem:
-
Checking iverilog version
iverilog -v
If the iverilog version is less than 11, go to point 3.
-
Installation of preliminary packages
sudo apt-get install build-essential bison flex gperf readline-common libncurses5-dev nmon autoconf
-
Download the latest version of iverilog
To date (8.25.2024) the latest version of Iverilog: 12.0 Go here and download the archive.
-
Assembly iverilog
-
Extract the archive:
tar -xzf verilog-12.0.tar.gz
-
Enter into the verilog folder:
cd verilog-12.0
-
Configure iverilog:
./configure --prefix=/usr
-
Run the make checks
make check
As a result, several inscriptions of
HELLO, World!
Will appear in the terminal -
Install icarus
sudo make install
-
Verilator
Additionally, to check the code for some syntactic and stylistic errors, you can install Verilator (version 5.002+).
For Ubuntu 23.04 and above:
sudo apt-get install verilator
For earlier versions of Ubuntu or other distributions, you can install Verilator along with OSS CAD Suite.
If using OSS CAD SUITE, for setting the environment, it is recommended to use export PATH="<extracted_location>/oss-cad-suite/bin:$PATH"
instead of source <extracted_location>/oss-cad-suite/environment
, because latter requires additional unset VERILATOR_ROOT
command.
To perform the check, add the --lint
or -l
option to the script: ./run_linux_mac.sh --lint
The result will be written to lint.txt
Installation on Windows
The Icarus Verilog version for Windows can be downloaded from this site
Video Instructions for the installation of icarus verilog on Windows
Installation on Apple Mac
Icarus can even be put on Apple Mac, which is unusual for EDA tools (EDA - Electronic Design Automation). This can be done in the console using the Brew:
brew install icarus-verilog
Video Instructions for the installation of icarus verilog on macos
Execution and checking tasks
To check the tasks for Linux and MacOS, you need to open the console in the folder and start the script ./run_linux_mac.sh
. It will create a file log.txt with the results of compilation and simulation of all set tasks.
To check the tasks for Windows, you need to open the console in the task folder and run the bat file run_windows.bat
. This will also create a file log.txt with the results of the check.
After the test for all tasks will show PASS.
GTKWave alternative
Instead of GTKWave you can use cross-platform waveform viewer Surfer.
It looks much nicer on modern screens (and especially on Wayland), works faster and you can even try it out in your web browser without installing.
Recommended literature that will help in solving problems
-
Harris D.M., Harris S.L., “Digital circuitry and computer architecture: RISC-V”. There is a version for a tablet for a previous edition (based on MIPS architecture), but there are shorter slides for lectures.
-
Романов А.Ю., Панчул Ю.В. и коллектив авторов. «Цифровой синтез. Практический курс»