Giter VIP home page Giter VIP logo

icestudio's Introduction

Build Status Build Mac

Version (Stable) Version (WIP)
License

Digital Design for OpenSource FPGAs made easy: icestudio.io

Platforms

Linux, Mac and Windows

Documentation

Find all the information on this WIKI PAGE

Introduction

Icestudio is a design tool focused on new comers to the FPGA world

  • Step 1: Draw your circuit

  • Step 2: Upload it to your favorite OpenSource FPGA board

  • Step 3: Done! 😀️

Screenshots

Hello world examples from the iceK collection

Alhambra II board

(Example repo)

iceBreaker board

(Example repo)

Icemem collection: example 23

(Icemem example repo)

SPI 7 segments 4 digits controller example

(SPI Display Notes) (In spanish)

RISC-V CPU

(Risc-V FPGA icestudio repo)

Z80 CPU

(Z80-FPGA icestudio repo)

Hack CPU (Nand2tetris project)

(Nand2tetris-icestudio repo)

Languages

Language Translated strings
Spanish (es_ES) Progress
English (en) Progress
German (de_DE) Progress
Russian (ru_RU) Progress
Japanese (ja_JP) Progress
French (fr_FR) Progress
Taiwanese (zh_TW) Progress
Italian (it_IT) Progress
Chinese (zh_CN) Progress
Turkish (tr_TR) Progress
Korean (ko_KR) Progress
Basque (eu_ES) Progress
Czech (cs_CZ) Progress
Catalonian (ca_ES) Progress
Greek (el_GR) Progress
Dutch (nl_NL) Progress
Galician (gl_ES) Progress

Contribute!

Add or update the app translations using Poedit.

Developer note:

  • use grunt gettext to extract the labels from the code and update the template file (template.pot)
  • use scripts/update_translations.sh to update current existing *.po language files based on the template (before editing them)
  • use grunt compiletext to regenerate *.json language files (these are what the IDE really need) to test them

Developer note: use export NWJS_BUILD_TYPE=sdk after npm install to enable the chrome web console.

Contributors

Version Contributors
0.10 kanade-k-1228, vr2045, Carlos Venegas Arrabé, Juan González (Obijuan)
0.9-1 Juan González (Obijuan)
0.9 Carlos Venegas Arrabé, mslider, Joaquim (jojo535275),Fernando Mosquera, TheSnowfield, Juan González (Obijuan)
0.8 Carlos Venegas Arrabé, Joaquim (jojo535275), Fernando Mosquera, Ümit Solmaz, TinLethax, seanybaggins, mslider, Juan González (Obijuan)
0.7 Carlos Venegas Arrabé, Juan González (Obijuan), Joaquim (jojo535275)
0.6 Carlos Venegas Arrabé, Juan González (Obijuan), Miodrag Milanovic, Pascal Cotret, aalku,, Lorea Aldabaldetreku, TimRudy, Sam, Kyle Lomem, pitrz, Francisco Sayas, jojo535275, Fernando Mosquera, Derek Lai, wifasoi, Carls, Datanoise, Andrew Goodney, Jose Miguel Sánchez García, Alejomejia, reclaimed, Marcel Ochsendorf, HwaGyeong
0.5 Carlos Venegas Arrabé, Juan González (Obijuan), Zakary Kamal Ismail, Sam
0.4 Jesus Arroyo, Carlos Venegas Arrabé, Elektor.Labs, Piotr Esden-Tempski, Miodrag Milanović, raTmole, Luca Cristaldi
0.3 Jesus Arroyo, Luke Valenty, Lorea-Aldabaldetreku, Carlos Díaz, Martoni, Xoan Sampaiño, Unai, Francisco Sayas, Pascal Cotret, Juan Jose Luna Espinosa, Salvador E. Tropea, redbeard, Eladio Delgado, Philipp van Kempen
0.2 Jesus Arroyo, Tomás Calvo, Juan González (Obijuan), Carlos Díaz, Xoan Sampaiño, Salvador E. Tropea, Democrito, Martoni, Pascal Cotret
0.1 Jesus Arroyo, Miguel Sánchez de León Peque

Credits

  • Carlos Venegas Arrabé is the main developer since 2019/Oct

  • Jesus Arroyo started this project on 2016/Jan/28. He was the main developer from 2016/Jan to 2019/Oct

  • FPGAwars community has developed this project in a voluntary and altruistic way since 02/2017.

  • BQ sponsored this project from 02/2016 to 02/2017. Thanks

License

Licensed under GPL 2.0 and Creative Commons Attribution-ShareAlike 4.0 International License.


icestudio's People

Contributors

aalku avatar alejomejia1 avatar benitoss avatar c47d avatar cavearr avatar esden avatar fsayas avatar jesus89 avatar jojo535275 avatar kanade-k-1228 avatar kylelomen avatar lorea-aldabaldetreku avatar mgesteiro avatar mmicko avatar mslider avatar obijuan avatar pcotret avatar philippvk avatar pitrz avatar ratmole avatar sam210723 avatar seanybaggins avatar set-soft avatar timrudy avatar tschundler avatar usnetv avatar vr2045 avatar wifasoi avatar xoan avatar yomboprime avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

icestudio's Issues

Add the `default_nettype none to begining of all verilog files generated

By default, al the unkwon labels in a verilog file are defined as wires. This bahaviour is very dangerous. Any typo on the signals name will be not detected.

To solve this, all the verilog files include this command in the beginning:
`default_nettype none

If the tools detect a signal that has not been previously declared, an error will be shown

It very import that icestudio add automatically that statement. It will prevent a lot of hours of debugging

This feature was suggested by Carlos Santiago Díaz in this thread in the FPGAwars group:

https://groups.google.com/d/msg/fpga-wars-explorando-el-lado-libre/lwcM-2Ufejs/I0e9mpHVCAAJ

Constant values on both counter blocks

If the counterAsc and counterDes blocks are used on the user project without the constant blocks they use a default value that i left on the component implementation, in case of using the constant blocks the latter constants are used.

It is better left the implementation like this or change the constants inside the blocks or warn the user that no constants are used at the project level?

[Upgrade] Visual improvement

Better wires
Paper pan
Zoom in/out
Multi-select
Edit code block ports
Block size adjustment
More CSS...
Bug z level html elements
Open other menus on hover
Message during Build, Upload until the end

Basic bus specification

It would be great to have parcial implementation of the buses, only for connecting blocks.

Let's take this two blocks as an example, conected by a wire. It is done in icestudio like this:

two-blocks

If it was a bus (8 bits) instead of a wire, the generated code (in human readable verilog code) will be:

`default_nettype none

module main ();


 wire [7:0] w0;  //-- Bus de union

 bloque1 TEST1 (
  .out(w0)
 );

 bloque2 TEST2 (
  .in(w0)
 );
endmodule


//-- Bloque 1: Bus de salida de 8 bits
module bloque1 (output [7:0] out);
 assign out = 8'hFF;

endmodule

//-- Bloque 2: Bus de entrada de 8 bits
module bloque2 (input [7:0] in);
 wire [7:0] temp;

 assign temp = in;


endmodule

This is another example: the connection of 3 blocks:

three-blocks

If it was an 8 bits bus, the generated code should be like this:

`default_nettype none

module main ();

 wire [7:0] w0;
 wire [7:0] w1;

 assign w1 = w0;

 bloque1 v62df90 (
  .out(w0)
 );

 bloque2 v8cd364 (
  .in(w0)
 );

 bloque3 ve05eb2 (
  .in(w1)
 );

endmodule

module bloque1 (output [7:0] out);
 assign out = 8'hFF;

endmodule

module bloque2 (input [7:0] in);
 wire temp;

 assign temp = in;


endmodule

module bloque3 (input [7:0] in);
 wire temp;

 assign temp = in;
endmodule

Restrictions:

  • Only buses with the same width can be connected
  • Connection between output buses with input buses (no input/output buses yet)

This implementation will let us to include a lot of new circuit in icestudio

Is there a plan to support other FPGA than Lattice ?

The name of icestudio is oriented for ice40. But is there plan to support other platforms ?
I wonder if it's easy to port icestudio for armadeus platforms apf27 (xilinx spartan3a), apf51 (xilinx spartan6) and apf6_sp (Altera/intel CycloneV) ?
Of course, there is no open-source toolchain to synthetize for it, but maybe we can do somethings to drive close-source tools ?

I/O blocks multibit (bus)

Add multibit Input and Output blocks.

For example,

  1. Add an input block a[7:0].

  2. Expand the block to show its combo boxes.

  3. Edit the port values and connect the block to a [7:0] input pin.

[Linux][Bug] Error when executed from nautilus

0.1-Beta-1

Ubuntu 15.10

When I execute icestudio directly from Nautilus, I get the error "Apio not installed". But if I execute from the command line (in the same directory when is located icestudio) it works ok

Enable Drivers Hangs or Requires Internet Connection

On OS X 10.12.1 with Icestudio 0.2.3 Beta, enabling drivers caused a complaint that an internet connection is required. I don't have any internet connectivity problems. After reading the install instructions again I installed the most current Python 2.7. Now enabling drivers causes the app to hang.

Add board Rules

Create a new concept in order to define default configurations in an FPGA board, using a file rules.json in a board directory that contains rules for undefined pins or connections. E.g. All unconnected "clk" ports are connected to CLK pin, if LED0 is not connected it is set to 0.

These smart rules will simplify the design and the setup of the designs.

New Project format

Update "ice" project format, version 1.0.0

package
 - name
 - version
 - description
 - author
 - image
design
 - board
 - state
    - pan
    - zoom
 - graph
    - blocks
    - wires
 - dependencies
version

Package section must be set in "Edit > Preferences > Project information".

Also, this project can be "Added as block" in other projects, instead of "Exporting" and "Importing" a block ".iceb". Therefore, ".iceb" format will be deprecated.

[Projects] Different board notification

When a project is loaded, if its target board is different from the selected board the following options must be shown:

  • Load the complete project with its board
  • Load the project for the selected board without the FPGA information

Disable multiple input config connections

If input is connected to a config block, it can not be connected to any other block.

If input is connected to a non config block, it can not be connected to a config block.

ACC0 project does not build

I cannot upload the ACC0 project into the Icezum because it does not build on icestudio 0.2. The steps to reproduce the problem (in my computer) are:

  1. I am using icestudio 2.0 installed from the Released package. Execute it
  2. Download the ACC0.ice and rom.list files
  3. Open the project in Icestudio
  4. Click on Tools/Build

The Build start notification appears... and after some seconds, it desappears. No success notification is received.

If the project is exported as verilog (and also the .pcf), it is built correctly with apio build (and apio upload). It works ok in the icezum 1.0

I still do not know if this is a bug, or is something related to my computer. I am testing in ubuntu 16.04-64 bits. I need someone to reproduce it

Import block includes

When a block is imported, the //included files must be copied also (.v, .vh and .list)

  • If this file does not exist in the orig directory -> message(ok)
  • It this file already exists in the dest directory -> message(replace, cancel)

Can't execute icestudio properlly after update.

Hi, thanks for the improvements :)
Just updated icestudio from git and when trying to execute it i got the following screen shoot.
icestudio

Just to ask if somebody have the same results.

Thanks in advance.

[Feature] Block selection

It would be great if the user can select more than one modules using a box selecction. It will be very useful for moving many modules at the same time or deleting them

Problema con atajos de teclado.

Cuando modificas una etiqueta de un bloque, si haces un CTRL+C (por ejemplo, para copiar esa etiqueta), además te hace un clonado del bloque ;)

Lo mismo sucede si estás en un bloque de código, al hacer un CTRL+C te hace un clonado del bloque.

También, cuando estás modificando una etiqueta, si presionas CTRL+SUPR, te muestra la ventana de verificación de borrado del bloque actual.

Memory file not found

I have implemented a 16x8 rom as a code block. Its content is loaded from an external file. When building the project, it does not find the file.

screenshot from 2016-08-06 19-35-17

The verilog code is (inside the block):

reg [7:0] rom [0:15];
reg [7:0] data;
wire [3:0] addr;

//-- Name of the file with the rom contents
parameter ROMFILE = "rom2.list";

assign addr = {a3,a2,a1,a0};

always @(negedge clk) begin
  data <= rom[addr];
end

assign {d7,d6,d5,d4,d3,d2,d1,d0} = data;

initial begin
  $readmemh(ROMFILE, rom);
end

This is the icestudio project:

rom16x8-master.ice.zip

[Linux][Bug] Can't load external .json files

0.1-beta1

Platform: ubuntu 15.10

Examples works ok. But I cannot load external projects previously saves as .json files. It does not generate any error message, just the screen remains blank. No file is loaded

Use spawn|exec|fork to launch a new Window

Current method using gui.Window.open generates strange issues:

  • If parent windows is removed, new windows can not be properly loaded
  • Exploring a child's block changes the parent but not the child
  • ...

Then, new Windows must be created using spawn|exec|fork.

In order to open files in childs, Icestudio must capture its args, and load argv[0] as a project:
./icestudio /path/to/project.ice

[Windows 10][Bug] Freeze on open

When opening icestudio-0.3.0-beta-win64 by double clicking on icestudio.exe in Windows 10 x64 (Build 14986), Explorer hangs and icestudio doesn't open.

I have found a work around:
Go to the icestudio-0.3.0-beta-win64 folder open icestudio.exe through powershell

Shortcut from the icestudio-0.3.0-beta-win64 folder:
Alt then F then R
Type: ".\icestudio.exe"

A run command also seems to work:
Windows Key + R
type: "cmd /K C:\icestudio-0.3.0-beta-win64\icestudio.exe"
(replace with your path"

[Feature] Change in the background color of the input-config block

The input-config block is a kind of special block, different than the rest. It only can be used near a input pad and it does not belongs to the digital electronic standard. So I propose to change the background to a different color, to avoid confusions or error (Yesterday I made a mistake joining two of this blocks by mistake, because one of them was inside another block. As they had the same color than standard blocks It took me a while to find the error).

After thinking about it, I realized that the config block are different, and should have a different blackground color.

I propose to use a color near to the yellow of the input pads: a kind of light orange or something similar

[Feature] Context menu for blocks

Adding a context menu for every module. Tipically the context menus are activated by right clilcking. Then context menu should include at least two options:

  • delete block
  • duplicate block

Drivers en Windows 8.1 64 bits

Estoy trabajando con la placa ICE40-HX8K en Windows 8.1 con 64 bits, y no consigo que Icestudio detecte la placa. Instalé los drivers libusbk, como adjunto en una captura, pero no hay forma. Lo he intentado en varios ordenadores con el mismo sistema operativo.

Sin embargo en Ubuntu funciona todo a la primera.

Por otro lado estaría genial que Icestudio aceptara etiquetas para los cables, de forma parecida a como se hace en Altium Designer a la hora de hacer esquemas. Simplificaría mucho todo.

Muchas gracias.

ftusb

Add Constant block

Add an orange block with a pin connection at the bottom. This block contains the name and a textbox field:

 _________
|    x    |
|  _____  |
| |_____| |
|_________|
     |

npm install errors

Icestudio version: 0.2.0-beta2-dev
Platform: Ubuntu 16.04

A info block is placed in a blank project. When the verify/build option is pressed, the following error messages appears: main.v:2:error: unkwnown module type: main_basic_info

info-error

info-test.ice.zip

[Verilog][Code generation] Input not connected to a wire in the Verilog code generation

This bug was first observed by Eladio Delgado. He told me the problem and I started to do some test in order to determinate in which part of the stack was originated.

It seems that in some cases the generated Verilog connections are not working ok

I've isolated the problem in this example:

test2-nok

It is a D-flip-flop in which the negated output q_n is connected back to the d input to create a T Flip-flop

The generated verilog code is:

// Code generated by Icestudio 0.3.0-beta3-dev
// Wed, 08 Feb 2017 06:21:21 GMT

`default_nettype none

module main (
 input vd5501f,
 input vclk,
 output v834948,
 output [0:6] vinit
);
 wire w0;
 wire w1;
 wire w2;
 wire w3;
 assign w0 = vd5501f;
 assign v834948 = w1;
 assign w3 = vclk;
 main_v9ef512 v9ef512 (
  .clk(w0),
  .q(w1),
  .q_n(w2)
 );
 assign vinit = 7'b0000000;
endmodule

module main_v9ef512 (
 input d,
 input clk,
 output q,
 output q_n
);
 reg qi = 0;
 always @(posedge clk)
   qi <= d;
 assign q = qi;
 assign q_n = ~qi;
endmodule

We can observe that the d signal is not connected when the module ** main_v9ef512** is instantiated

It should have generated something like this:

main_v9ef512 v9ef512 (
  .clk(w0),
  .q(w1),
  .q_n(w2),
  .d(w2)
 );

(Or using any other temporal wire between q_n and d)

Parameters in blocks

The idea is to generate graphic blocks with upper pins to connect "Constant" blocks

For example,

  1. Add a code block with parameters "N,B"

  2. Connect two constant blocks with values 22 and 0 to the code block N and B connections.

  3. Export the project as a block

Then all the code blocks are parsed and a "parameters" list generated and included in the block.iceb file.


"parameters": [
  {
    "name": "N",
    "value: "22",
    "default": "22"
  },
  {
    "name": "B",
    "value: "0",
    "default": "0"
  }
] 
  1. Import the block.iceb file in a new project

The block appears with the upper pins "N,B".

  1. Edit the parameters.

Add and connect two Constant blocks N and B and write the values 23, 1.

  1. Save the project

These new values are updated in the project.ice file ("parameters" list).

  1. Build the project

The verilog compiler adds the parameters into the corresponding modules.

modtype #(
     .N(23),
     .B(1)) modname (...)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.