Session 1: Introduction & Development Pipeline¶
What this session is about¶
Setting up the IIC-OSIC-TOOLS Docker environment, connecting via noVNC, exploring the example projects, and writing a first Hello World Verilog module.
Step 1 — Starting the Container¶
The Fab Futures tools run inside a Docker container called IIC-OSIC-TOOLS. Everything needed for chip design — ngspice, iverilog, KLayout, OpenROAD, Yosys — is pre-installed inside.
Container stopped, ready to start:

Container running — VNC connection details:

Step 2 — Connecting via noVNC¶
Opening the Browser VNC link gives a full Linux desktop running inside the container. Right-clicking the background opens the application menu.

All work is saved to /foss/designs/ so it persists between container restarts.
Step 3 — Running the Example Simulations¶
The /foss/examples/ directory contains four example Verilog projects with a Makefile that automates compilation and simulation.
Directory listing and Makefile:


make sim-fortune — Fortune Teller:
The fortune teller simulates button presses and responds with random predictions over UART.

make sim-synth — Pocket Synth:
The pocket synth generates musical notes. The testbench verifies the correct frequencies: C=262 Hz, E=330 Hz, G=392 Hz, B=494 Hz.

make sim-dice — Dice Roller:
The dice roller simulates 5 button presses, each producing a random number 1–6 via UART.

make sim-led — Morse Beacon:
The Morse beacon encodes “HELLO” as Morse code and drives an LED. The testbench verifies the LED on/off transitions.

make sim-all — All simulations at once:


GTKWave — viewing the dice roller waveform:
After simulation, the .vcd file can be opened in GTKWave to inspect signals. Here the dice roller testbench signals are visible including rolling_led, rx_byte, seg[6:0], and state machine signals.

Step 4 — Hello World in Verilog¶
After exploring the examples, the first task is to write an original Verilog module.
Creating the working directory:
cd /foss/designs
mkdir hello_world
cd hello_world

Writing hello.v in gvim:
module hello;
initial
$display("Hello Microcontroller !:)");
endmodule

Compiling and running:
First attempt had a missing closing quote error. After fixing in gvim, it compiled and ran successfully:
iverilog -g2012 -o hello.vvp hello.v
vvp hello.vvp
Hello Microcontroller !

What I learned¶
The IIC-OSIC-TOOLS container gives you a complete chip design environment in a browser — no local installation needed. The four example projects cover a range of Verilog patterns: state machines (fortune teller), counters and frequency generation (pocket synth), UART serial output (dice roller), and timing-based LED control (Morse beacon).
Verilog syntax is strict about quotes and string literals — the $display function requires standard ASCII quotes, not curly ones. The -g2012 flag selects SystemVerilog 2012 compatibility mode which is needed for some features. iverilog compiles to a .vvp bytecode file which is then executed with vvp.