User Guide


Blocks menu


It contains the basic blocks:

  • Input: show a dialog to insert the name and type of the input block.
  • Output: show a dialog to insert the name and type of the output block.
  • Constant: show a dialog to insert the name and type of the constant block.
  • Memory: show a dialog to insert the name and type of the memory block.
  • Code: show a dialog to insert the ports and parameters of the code block.
  • Information: create an empty text box block.


Input and output ports can be set to virtual. Virtual ports are used to independent-FPGA projects. Also, they can be configured as a bus by adding the notation [x:y] to the port name.


Constant and memory blocks can be set to local. Local parameters are not exposed when the project is added as a block.


Multiple input, output, constant and memory blocks can be created using the comma separator. For example: x, y, z will create 3 blocks with those names. FPGA I/O ports values are set in the block combo box. These values can be set by searching and also unset by doing click on the cross. Double click over input, output, constant or memory block allows to modify the block name and type. In code block ports definition, multiple input and output ports, and parameters, can be created also using the comma separator.


It contains all stored blocks sorted by categories. This menu is generated when the application starts. It can show the Default collection or any installed collection.


This is the main panel. It contains the blocks and the wires.

Pan & Zoom

Pan is performed using the Ctrl + mouse left button or mouse right button over the background. Zoom is performed using mouse wheel.



Block selection is performed with the mouse left button. Blocks can be selected/unselected individually using Shift+left-click. In addition, several blocks can be selected by a selection box. A selection is canceled when the background is left-clicked.


Move blocks

Any block or blocks selection can be moved in the design using the mouse left button over the block or the selection. Also a blocks selection can be moved with the arrow keys.


Resize text blocks

Memory, Code, and Information blocks can be resized with the resize tool in the bottom-right corner of the block.


Block examination

Non-basic blocks can be read only examined by double clicking the block using the mouse left button. This is a recursive action. In order to go back, click on the < back link or press the back key.

During the examination, pan, zoom and code navigation are enabled. Also the ‘Fit content’ action.



The examination path is stored in the breadcrumbs. This allows to go back to any previous block.

Verilog error detection

The Verify, Build and Upload errors are captured and showed in the design with a notification.


If the error comes from a Code block it is marked in red an inline annotation is set:


If the error comes from a Constant block it is marked in red.


If the error comes from a Generic block it is marked in red.



Icestudio allows to undo/redo the following actions:

  • Add or remove a block.
  • Add or remove a wire.
  • Move a block or a blocks selection.
  • Edit an I/O block: name, type and value.
  • Edit a Constant block: name, type and value.
  • Edit a Memory block: name, type, format and value.
  • Edit a Code block: ports, parameters and content.
  • Edit an Information block: type and content.
  • Change the board.
  • Change the language.
  • Change the Project information: when undo/redo a Project information change, a clickable notification will appear to access the Project information section.

Take a snapshot

Taking a png snapshot of the application is as easy as press Ctrl+P. A save dialog appears to set the name and the path of the captured image.