inout Ports supported! // puertos inout soportados!

130 views
Skip to first unread message

charli va

unread,
Oct 17, 2023, 4:15:29 PM10/17/23
to fpga-wars-explora...@googlegroups.com
====> IN ENGLISH BELOW 

Hola a todos! como os comenté estas próximas semanas voy a ir liberando un montón de cosas nuevas que he estado trabajando todo este tiempo y ya van estando maduras.

Hoy os libero en la última wip (https://downloads.icestudio.io), el soporte para puertos de entrada/salida inout de forma nativa.

Es decir ya podemos definir puertos en el verilog como "inout".

Esto nos permite por un lado utilizar verilog que utiliza este tipo de puertos y que es muy necesario para muchos protocolos serie , memorias externas...por ejemplo.

Por otro lado hace universal el uso de los pines de entrada/Salida sin necesidad de implementar primitivas de cada FPGA (ahora se encarga yosys en la síntesis de hacer esto).

De esta forma el mismo código será compatible entre todas las fpgas soportadas por yosys y por ende por Icestudio.

Os mando un .ice que es el ejemplo de la increible colección iceIO modificado , utilizando e mismo bloque pero reescrito para usar los puertos inout.

Captura de pantalla 2023-10-17 a las 21.34.02.png

Ahora lo bueno esque ese bloque ya no es par ala ice40 ni habrá otro para la ecp5... el mismo bloque vale para todas!

Como podemos sustituir las primitivas de cada bloque por el código genérico, lo bueno es que toda la documentación de la iceIO es totalmente válida.

Al usar puertos inout nos encontramos con varios problemas a resolver, que es el poder arrastrar los puertos inout desde el pin de la fpga en el top level a los módulos o bloques internos.

Para ello lo podéis usar en el verilog correspondiente si lo importais, ó ahora podéis definir al igual que los puertos de entrada y los puertos de salida, puertos de entradaSalida (inout).

Como véis en el pantallazo que os paso tenéis el check en los pines para indicar que un pin es inout (ahora puedes elegir un pin en sentido entrada o en sentido salida según te convenga para colocarlo en el diseño) .

Captura de pantalla 2023-10-17 a las 21.34.30.png

y en los bloques tenemos dos gurpos los InOutLeft. los inOutRight, esto es simplementa para colocarlos a un lado u otro del bloque:

Captura de pantalla 2023-10-17 a las 21.34.18.png

Espero que esta funcionalidad os sea útil y vaya abriendo el abanico de posibilidades de icestudio hacia diseños complejos.

Seguimos!!!


Hola a todos! como os comenté estas próximas semanas voy a ir liberando un montón de cosas nuevas que he estado trabajando todo este tiempo y ya van estando maduras.

Hoy os libero en la última wip (https://downloads.icestudio.io), el soporte para puertos de entrada/salida inout de forma nativa.

Es decir ya podemos definir puertos en el verilog como "inout".

Esto nos permite por un lado utilizar verilog que utiliza este tipo de puertos y que es muy necesario para muchos protocolos serie , memorias externas...por ejemplo.

Por otro lado hace universal el uso de los pines de entrada/Salida sin necesidad de implementar primitivas de cada FPGA (ahora se encarga yosys en la síntesis de hacer esto).

De esta forma el mismo código será compatible entre todas las fpgas soportadas por yosys y por ende por Icestudio.

Os mando un .ice que es el ejemplo de la increible colección iceIO modificado , utilizando e mismo bloque pero reescrito para usar los puertos inout.

Captura de pantalla 2023-10-17 a las 21.34.02.png

Ahora lo bueno esque ese bloque ya no es par ala ice40 ni habrá otro para la ecp5... el mismo bloque vale para todas!

Como podemos sustituir las primitivas de cada bloque por el código genérico, lo bueno es que toda la documentación de la iceIO es totalmente válida.

Al usar puertos inout nos encontramos con varios problemas a resolver, que es el poder arrastrar los puertos inout desde el pin de la fpga en el top level a los módulos o bloques internos.

Para ello lo podéis usar en el verilog correspondiente si lo importais, ó ahora podéis definir al igual que los puertos de entrada y los puertos de salida, puertos de entradaSalida (inout).

Como véis en el pantallazo que os paso tenéis el check en los pines para indicar que un pin es inout (ahora puedes elegir un pin en sentido entrada o en sentido salida según te convenga para colocarlo en el diseño) .

Captura de pantalla 2023-10-17 a las 21.34.30.png

y en los bloques tenemos dos gurpos los InOutLeft. los inOutRight, esto es simplementa para colocarlos a un lado u otro del bloque:

Captura de pantalla 2023-10-17 a las 21.34.18.png

Espero que esta funcionalidad os sea útil y vaya abriendo el abanico de posibilidades de icestudio hacia diseños complejos.

Seguimos!!!


ENGLISH ====>

Hello everyone! As I mentioned, in the coming weeks, I'll be releasing a bunch of new things I've been working on for some time, and they are now ripe.

Today, I'm releasing native support for inout input/output ports in the latest work-in-progress (WIP) version (https://downloads.icestudio.io), you need to install it and after install the toolchain, click on the option to use the latest stable (0.9.0).

This means that we can now define ports in Verilog as "inout."

On one hand, this allows us to use Verilog that uses this type of ports, which is crucial for many serial protocols, external memories, and more.

On the other hand, it makes the use of input/output pins universal without the need to implement FPGA-specific primitives (Yosys is now responsible for this during synthesis).

In this way, the same code will be compatible across all FPGA boards supported by Yosys and, consequently, by Icestudio.

I'm sending you a .ice file, which is an example of the incredible modified iceIO collection, using the same block but rewritten to use inout ports.

Captura de pantalla 2023-10-17 a las 21.34.02.png

Now, the great thing is that this block is no longer just for the ice40 or another one for the ecp5... the same block works for all of them!

As we can replace the primitives of each block with generic code, the good news is that all the documentation for iceIO is still entirely valid.

When using inout ports, we encounter several problems to solve, such as being able to drag inout ports from the FPGA pin at the top level to the internal modules or blocks.

To do this, you can use it in the corresponding Verilog if you import it, or now you can define inout ports just like input and output ports.

As you can see in the screenshot I'm providing, you can check the pins to indicate that a pin is inout (now you can choose whether a pin is used as an input or an output as needed for your design).



Captura de pantalla 2023-10-17 a las 21.34.30.png

In the blocks, we have two groups, InOutLeft and InOutRight. This is simply for placing them on one side or the other of the block.
Captura de pantalla 2023-10-17 a las 21.34.18.png

I hope you find this functionality useful and that it expands the range of possibilities for Icestudio in handling complex designs.

Let's keep going!

01-InOut-button-LED-generic.ice

Democrito

unread,
Oct 17, 2023, 8:29:02 PM10/17/23
to FPGAwars: explorando el lado libre
Hola Carlos,

He instalado la nueva wip. No he hecho instalación limpia. He subido un circuito de mediana complejidad y todo bien. Si veo algo extraño te cuento.

Saludos!

charli va

unread,
Oct 18, 2023, 2:17:48 AM10/18/23
to fpga-wars-explora...@googlegroups.com
Muchas gracias democrito!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/f8c027f9-1e3d-403f-9059-a2a9038a3bf3n%40googlegroups.com.

Jose Picó

unread,
Oct 18, 2023, 6:43:34 PM10/18/23
to fpga-wars-explora...@googlegroups.com
Eso  es fantástico.
El  pin inout es lo que le faltaba para ser completo.
Seguro que van a salir muchas cosas.

Sois fantásticos.
Algún día retomaré un poco el tema FPGA/icestudio 

Un saludo



--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

charli va

unread,
Oct 18, 2023, 7:22:11 PM10/18/23
to fpga-wars-explora...@googlegroups.com
Gracias Jose! a ver si te animas que se te echa de menos!

Jo mo

unread,
Oct 19, 2023, 1:03:14 PM10/19/23
to FPGAwars: explorando el lado libre

Ola Charli gracias for this new wip,

i could install it with no problems.
and i successfully test your ice example on my colorligth i5-v7.

it is magic to see that yosis is able to infer the use of the right fpgas bidir primitives just with these two line

  assign pin = oe ? dout : 1'bZ;
  assign din = oe ? 0 : pin;

So, as you wrote the iceIO collection can be slightly simplified, ...good move ;-).

Have a nice evening

charli va

unread,
Oct 19, 2023, 1:35:47 PM10/19/23
to fpga-wars-explora...@googlegroups.com
(CASTELLANO ABAJO) ====>

Thanks Joaquim!! Inout pins open a great field for new ideas and applications.

The next example I'm working on and will send you this weekend at the latest is the port of this awesome verilog project nand2mario to Icestudio.

This is an excellent USB HID host (we can connect mice, keyboards, gamepads...) to our fpgas with very small resource usage.

I'm porting it to Icestudio and now I'm working on polishing details and preparing a nice block interface, but it's already working!

Ideas for name for the new collection of USB peripherals? :)

IMG-2021.JPG

Captura de pantalla 2023-10-19 a las 19.10.05.png


CASTELLANO ===>

Gracias Joaquim!! Los pines inout nos abren un gran campo para nuevas ideas y aplicaciones.

El siguiente ejemplo en el que estoy trabajando y que les enviaré el fin de semana como tarde es el port del  increíble proyecto en verilog nand2mario a Icestudio.

Este es un excelente host USB HID (podemos conectar mouse, teclados, gamepads...) a nuestras fpgas con un uso de recursos muy pequeño.

Estoy portándolo a Icestudio y ahora estoy trabajando en pulir detalles y preparando una buena interfaz de bloques, ¡pero ya está funcionando!

¿Ideas para la nueva colección de periféricos usb? :)

charli va

unread,
Oct 19, 2023, 1:37:48 PM10/19/23
to fpga-wars-explora...@googlegroups.com
The images, i don't know appears broken in the previous email:

Captura de pantalla 2023-10-19 a las 19.10.05.png
IMG-2021.JPG


Tim Rudy

unread,
Oct 19, 2023, 8:37:14 PM10/19/23
to FPGAwars: explorando el lado libre
Unbelievable! ...Charli! - I had the plan to implement support for inout. Of course I didn't get around to it, so now, all I have to do is look how you did it! And I will test it.

Particularly, I want to see how the support connects inout transparently from top level of a design across modules as you mentioned. (Deeper level is not valid, or at least not fully supported, for FPGAs: I expect the implementation, in yosys tooling or in Icestudio, uses multiplexing underneath the covers). This is a question that I've had on my mind a long time: My collection of 7400 devices needs to have *lots* of tri-state devices. It's not very complete without them. https://github.com/TimRudy/ice-chips-verilog.

I will look at this implementation inside Icestudio. Very exciting. You made my day. (It's 8:30pm here where I am.)

My admiration and thanks for moving the technology along!

  - Tim

charli va

unread,
Oct 20, 2023, 10:50:57 AM10/20/23
to fpga-wars-explora...@googlegroups.com
Thank you very much for your words Tim!!! They are very motivating! Your collection is incredible and will be very useful to the community.

I am very happy to read you here.

A big hug!

Obijuan

unread,
Apr 6, 2024, 9:39:18 AMApr 6
to FPGAwars: explorando el lado libre
(English Below)

Ya está actualizada la colección iceIO. He liberado la versión 0.2, cuyos bloques de entrada/salida están implementados directmente en Verilog. Ahora ya hay un único bloque es válido para cualquiera de las dos familias de FPGAS: ICE40 y ECP5 (Antes había bloques para cada una de ellas)

Estos bloques sólo se pueden usar con versiones de icestudio iguales o superiores a la 0.12 (que es la actual wip, y que pronto liberaremos)

También está actualizada toda la documentación

Muchas gracias Charli por este gran avance!

--------------------------------------
(English)

The iceIO collection is now updated. I've just released version 0.2, which includes the new InOut blocks implemented in Verilog. Now there is only one block valid for all the FPGA family: ICE40 and ECP5 (Before there were different blocks for each family)


These blocks can only be used with Icestudio 0.12 or higher (It is currently the latest wip, that will be released very soon)

Also the wiki documentation has been updated

Thanks a lot to Charli for this big improvement!

Best regards, Obijuan


charli va

unread,
Apr 6, 2024, 10:33:51 AMApr 6
to fpga-wars-explora...@googlegroups.com
A por todas! gracias a ti por el gran trabajo con las colecciones, dentro de nada estará disponible la "icestore" o como la queramos llamar donde desde icestudio podremos instalar colecciones, bloques... estoy. seguro que te ayudará mucho con las clases y a la comunidad en descubrir todo el trabajo que ya hay hecho.

Un gran abrazo Maestro!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Obijuan

unread,
Apr 6, 2024, 1:30:19 PMApr 6
to FPGAwars: explorando el lado libre
Yo estoy deseando que las colecciones se puedan instalar automáticamente. Sólo con eso la herramineta mejora una barbaridad para la gente nueva

Propongo el siguiente nombre:  "icehub"

charli va

unread,
Apr 6, 2024, 2:50:49 PMApr 6
to fpga-wars-explora...@googlegroups.com
ME parece un nombre fenómeno!

Reply all
Reply to author
Forward
0 new messages