Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/02/2023, à 12:30

Nuliel

fpga et toolchain open-source

Bonjour,
J'aimerais apprendre à programmer un fpga. J'ai fait pas mal de recherches et j'ai pu voir qu'il y a des solutions open source pour remplacer les environnements très lourds des constructeurs via différents articles sur linuxfr: notamment https://linuxfr.org/news/la-liberation- … -pour-2020, mais aussi un projet qui s'appelle LUNA qui se base sur un fpga lattice et amaranth.
Après beaucoup de recherches, je suis tombé sur amaranth hdl, f4pga, https://github.com/YosysHQ/oss-cad-suite-build . Quelles sont les différences entre ces toolchains? Y a t'il à un endroit la liste des outils composant ces toolchains? Arrive t'on sur des fpga supportés au même niveau que l'outil propriétaire, et si non quels sont généralement les manques?
Bref même en ayant fait beaucoup de recherches, pour moi ça reste vraiment flou l'état de l'open source pour les fpga, mais ça semble faisable.
Et au passage si vous avez un cours complet de vhdl à conseiller, je prends smile

Merci d'avance,
Nuliel

Edit: je comprends bien la différence entre fpga et microcontrôleur (en particulier utile pour des très grosses optimisations ou pour du vrai temps réel), je le dis avant d'avoir la question smile

Dernière modification par Nuliel (Le 26/02/2023, à 13:27)

Hors ligne

#2 Le 03/02/2024, à 10:50

Nuliel

Re : fpga et toolchain open-source

Bon je me réponds, je me suis acheté une board avec un fpga HX-8K: https://www.latticesemi.com/Products/De … Board.aspx
J'utilise Ice Studio et une toolchain open source (apio et compagnie), j'ai réussi à faire clignoter une led en moins d'une heure d'utilisation, et digikey a fait une série de vidéo bien faite. A voir les limites de cette toolchain

Hors ligne

#3 Le 03/02/2024, à 14:56

Edmond Dantès

Re : fpga et toolchain open-source

Salut.

Test avec ChatGPT 3.5

User
Salut.
Réponds moi comme si tu étais un développeur informatique expérimenté, spécialiste des systèmes embarqués.
Les codes que tu produis sont commentés pour faciliter leur compréhension par un débutant.
Pose-moi des questions pour t'assurer que tu as bien compris et eventuellement corriger mon prompte. Propose moi des améliorations de mon prompt afin d'optimiser le résultat.

ChatGPT
Salut! Bien sûr, je suis là pour t'aider en tant que développeur expérimenté en systèmes embarqués. Avant de commencer, pourriez-vous me donner plus de détails sur le langage de programmation que vous utilisez, le matériel cible, et l'objectif spécifique de votre code? Cela me permettra de mieux adapter mes suggestions et questions à votre contexte.

User
ecris un code pour faire clignoter une LEd sur un fpga HX-8K

ChatGPT
Bien sûr, je peux t'aider avec ça. Avant de commencer, quelques questions pour m'assurer de bien comprendre tes besoins :

    Quel langage de description matérielle utilisez-vous pour le FPGA (VHDL, Verilog, etc.) ?
    Quelle est la fréquence à laquelle vous souhaitez faire clignoter la LED ?
    Utilisez-vous un outil de développement FPGA spécifique (Xilinx Vivado, Intel Quartus, etc.) ?
    Avez-vous déjà une configuration matérielle de base pour le FPGA ?

Ces informations me permettront de créer un code adapté à votre environnement spécifique.

User
1. propose un langage
2. Un cycle de 1 seconde
3. Ice studio
4. Oui

ChatGPT
Parfait, merci pour ces informations. Pour Ice Studio, qui est basé sur le langage SpinalHDL pour les FPGAs Lattice ICE40, voici un exemple de code qui fait clignoter une LED avec un cycle d'une seconde :

// Import des librairies nécessaires
import spinal.core._
import spinal.lib._

// Définition du module
class BlinkingLED extends Component {
  val io = new Bundle {
    val led = out Bool  // Définition de la sortie pour la LED
  }

  // Compteur pour diviser la fréquence
  val counter = Reg(UInt(24 bits)) init (0)

  // Fréquence du clignotement (1 Hz)
  val blinkFrequency = 12'000'000  // Fréquence du FPGA (12 MHz dans cet exemple)
  val blinkDivider = blinkFrequency / 2  // Pour un cycle d'une seconde, diviser par 2

  // Incrémentation du compteur à chaque cycle
  counter := counter + 1

  // Allumer ou éteindre la LED en fonction du compteur
  io.led := counter < blinkDivider
}

// Génération du bitstream
object BlinkingLEDMain {
  def main(args: Array[String]) {
    SpinalConfig(
      targetDirectory = "output",  // Répertoire de sortie pour les fichiers générés
      defaultConfigForClockDomains = ClockDomainConfig(
        resetKind = SYNC // Synchronisation du signal de reset
      )
    ).generateVerilog(new BlinkingLED) // Génération du code Verilog
  }
}

Assurez-vous de bien configurer Ice Studio pour utiliser le code généré dans le répertoire de sortie. N'hésitez pas à me poser des questions supplémentaires si nécessaire, et ajustez le code en conséquence.

Dernière modification par Edmond Dantès (Le 03/02/2024, à 15:00)


« Je te hais plus qu'aucun des dieux qui vivent sur l'Olympe
Car tu ne rêves que discordes, guerres et combats. »
Trouble obsessionnelcompulsif
Le TdCT est revenu (ils reviennent tous)

Hors ligne

#4 Le 03/02/2024, à 15:12

Nuliel

Re : fpga et toolchain open-source

Pour préciser, là je suis en verilog mais j'aimerais plutôt faire du VDHL, pour l'instant je ne sais pas comment passer sur ce deuxième langage.
J'ai allumé une LED, fait clignoter une LED, fait un compteur en branchant une breadboard et des boutons. Tout ça fonctionne bien, bref j'apprends tranquillement à utiliser apio.

Le code proposé est vachement compliqué, perso j'ai ça au niveau verilog:

// Count up each second
module clock_counter (

// Inputs
input               clk,
input               rst_btn,

// Outputs
output  reg [3:0]   led
);

wire rst;
reg div_clk;
reg [31:0] count;
localparam [31:0] max_count = 6000000;

// Reset is the inverse of the reset button
assign rst = ~rst_btn;

// Count up on (divided) clock rising edge or reset on button push
always @ (posedge div_clk or posedge rst) begin
    if (rst == 1'b1) begin
        led <= 4'b0;
    end else begin
        led <= led + 1'b1;
    end
end

// Clock divider
always @ (posedge clk or posedge rst) begin
    if (rst == 1'b1) begin
        count <= 32'b0;
    end else if (count == max_count) begin
        count <= 32'b0;
        div_clk <= ~div_clk;
    end else begin
        count <= count + 1;
    end
end

endmodule

et ça pour la définition des signaux:

# LED   name given pin used
set_io      led[0]      C3
set_io      led[1]      B3
set_io      led[2]      C4
set_io      led[3]      C5
set_io      led[4]      A1
set_io      led[5]      A2
set_io      led[6]      B4
set_io      led[7]      B5

# IO for buttons
set_io  -pullup yes    button[0]      B16
set_io  -pullup yes    button[1]      C16
set_io  -pullup yes    rst_btn      D16

# Oscillator
set_io              clk     J3

Hors ligne

#5 Le 03/02/2024, à 15:23

Edmond Dantès

Re : fpga et toolchain open-source

user
réécris ce code en verilog

ChatGPT
Bien sûr, voici une version en Verilog pour le même scénario :

module BlinkingLED(
  input wire clk,   // Entrée de l'horloge
  output reg led   // Sortie pour la LED
);
  
  reg [23:0] counter = 0;  // Compteur pour diviser la fréquence
  
  // Fréquence du clignotement (1 Hz)
  parameter blinkFrequency = 12_000_000;  // Fréquence du FPGA (12 MHz dans cet exemple)
  parameter blinkDivider = blinkFrequency / 2;  // Pour un cycle d'une seconde, diviser par 2
  
  // Incrémentation du compteur à chaque front montant de l'horloge
  always @(posedge clk) begin
    counter <= counter + 1;
  end

  // Allumer ou éteindre la LED en fonction du compteur
  always @(posedge clk) begin
    if (counter < blinkDivider) begin
      led <= 1'b1;
    end else begin
      led <= 1'b0;
    end
  end

endmodule

« Je te hais plus qu'aucun des dieux qui vivent sur l'Olympe
Car tu ne rêves que discordes, guerres et combats. »
Trouble obsessionnelcompulsif
Le TdCT est revenu (ils reviennent tous)

Hors ligne

#6 Le 03/02/2024, à 15:26

Edmond Dantès

Re : fpga et toolchain open-source

en VHDL :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity BlinkingLED is
  Port (
    clk : in STD_LOGIC;   -- Entrée de l'horloge
    led : out STD_LOGIC  -- Sortie pour la LED
  );
end BlinkingLED;

architecture Behavioral of BlinkingLED is
  signal counter : unsigned(23 downto 0) := (others => '0');  -- Compteur pour diviser la fréquence

  -- Fréquence du clignotement (1 Hz)
  constant blinkFrequency : integer := 12_000_000;  -- Fréquence du FPGA (12 MHz dans cet exemple)
  constant blinkDivider : integer := blinkFrequency / 2;  -- Pour un cycle d'une seconde, diviser par 2

begin
  -- Processus pour l'incrémentation du compteur à chaque front montant de l'horloge
  process(clk)
  begin
    if rising_edge(clk) then
      counter <= counter + 1;
    end if;
  end process;

  -- Processus pour allumer ou éteindre la LED en fonction du compteur
  process(clk)
  begin
    if rising_edge(clk) then
      if counter < blinkDivider then
        led <= '1';
      else
        led <= '0';
      end if;
    end if;
  end process;

end Behavioral;

Dernière modification par Edmond Dantès (Le 03/02/2024, à 15:27)


« Je te hais plus qu'aucun des dieux qui vivent sur l'Olympe
Car tu ne rêves que discordes, guerres et combats. »
Trouble obsessionnelcompulsif
Le TdCT est revenu (ils reviennent tous)

Hors ligne

#7 Le 03/02/2024, à 15:31

bruno

Re : fpga et toolchain open-source

User
Où peut-on acheter des œufs de lapin ?
ChatGPT

Il peut être difficile de trouver des œufs de lapin à acheter, car les lapins ne sont pas élevés principalement pour leurs œufs comme le sont les poules. Cependant, voici quelques suggestions pour vous aider à trouver des œufs de lapin :

    Marchés fermiers locaux : Certains éleveurs de lapins peuvent vendre leurs œufs directement sur les marchés fermiers locaux. Recherchez les marchés de producteurs dans votre région.

    Élevages de lapins : Contactez des éleveurs de lapins dans votre région. Vous pouvez trouver des éleveurs via des associations d'élevage, des annonces en ligne ou en visitant des salons agricoles locaux.

    Magasins spécialisés pour animaux de compagnie : Certains magasins spécialisés pour animaux peuvent proposer des œufs de lapin, bien que cela soit moins courant que pour les œufs de poule.

    Marchés en ligne : Explorez les plateformes en ligne qui se spécialisent dans la vente de produits d'élevage ou d'animaux de compagnie. Assurez-vous de respecter les lois et réglementations locales liées à la vente et à l'achat d'animaux.

    Réseaux sociaux et forums : Consultez des groupes ou forums en ligne dédiés aux lapins et à l'élevage. Certains éleveurs ou passionnés pourraient être disposés à vendre des œufs ou à vous orienter vers des sources fiables.

N'oubliez pas de vérifier la légalité et la réglementation locale liées à l'achat, la vente et la possession d'œufs de lapin, car elles peuvent varier d'une région à l'autre. De plus, gardez à l'esprit que la disponibilité des œufs de lapin peut être limitée par rapport aux œufs de poule, et il se peut que vous ayez du mal à en trouver facilement.

Faire confiance à ce machin pour écrire du code, est-ce bien raisonnable ?

#8 Le 03/02/2024, à 15:58

Edmond Dantès

Re : fpga et toolchain open-source

Tout dépend du prompt.

User
Salut
Réponds-moi comme si tu étais un spécialiste de la distribution alimentaire,.
ChatGPT

Salut! Bien sûr, je suis là pour répondre à toutes tes questions sur la distribution alimentaire. Que puis-je faire pour toi aujourd'hui?
User
Les œufs de lapins existent-ils ? Si oui est-il possible d'en acheter ?
ChatGPT

Les œufs de lapin ne sont pas couramment consommés, car les lapins sont des mammifères vivipares, ce qui signifie qu'ils donnent naissance à des petits au lieu de pondre des œufs. Contrairement aux oiseaux, les lapins ne produisent pas d'œufs comestibles.

Si tu cherches des œufs, tu devrais te tourner vers les œufs de poule, qui sont les plus courants et largement disponibles sur le marché. Les œufs de caille sont également une alternative plus petite et peuvent être trouvés dans certaines épiceries spécialisées. Cependant, les œufs de lapin ne font pas partie des options alimentaires habituelles.

Édit : Fin du HS pour moi.

Dernière modification par Edmond Dantès (Le 03/02/2024, à 15:59)


« Je te hais plus qu'aucun des dieux qui vivent sur l'Olympe
Car tu ne rêves que discordes, guerres et combats. »
Trouble obsessionnelcompulsif
Le TdCT est revenu (ils reviennent tous)

Hors ligne

#9 Le 03/02/2024, à 16:09

Edmond Dantès

Re : fpga et toolchain open-source

User
Écris un tutoriel pour déployer ce code VHDL sur un  fpga HX-8K, en utilisant un  PC Linux/Ubuntu.
Pose-moi des questions pour affiner ta réponse
ChatGPT

Bien sûr, voici un tutoriel pour déployer le code VHDL sur un FPGA HX-8K à l'aide d'un PC sous Linux/Ubuntu. Avant de commencer, assurez-vous d'avoir installé les outils nécessaires tels que le logiciel IceStorm, yosys, et les pilotes pour le HX-8K. Si vous ne les avez pas encore installés, vous pouvez le faire à l'aide de la commande suivante :

bash

sudo apt-get install yosys arachne-pnr icebox iceprog

Maintenant, suivez ces étapes :
Étape 1: Rédaction du Code VHDL

Assurez-vous d'avoir le code VHDL pour le clignotement de la LED. Vous pouvez utiliser le code VHDL que je vous ai fourni précédemment, sauvegardez-le dans un fichier avec l'extension .vhd (par exemple, BlinkingLED.vhd).
Étape 2: Synthèse du Code VHDL avec Yosys

Utilisez Yosys pour synthétiser le code VHDL et générer le netlist. Ouvrez un terminal et exécutez les commandes suivantes :

bash

yosys
read_vhdl BlinkingLED.vhd
synth_ice40 -top BlinkingLED -blif BlinkingLED.blif

Étape 3: Place-and-Route avec Arachne-PNR

Utilisez Arachne-PNR pour mapper le netlist sur les ressources matérielles du FPGA et générer le fichier de placement et routage. Exécutez les commandes suivantes :

bash

arachne-pnr -d 8k -o BlinkingLED.txt -p BlinkingLED.pcf BlinkingLED.blif

Étape 4: Génération du Bitstream

Utilisez IcePack pour générer le fichier bitstream à partir du fichier de placement et routage. Exécutez la commande suivante :

bash

icepack BlinkingLED.txt BlinkingLED.bin

Étape 5: Programmation du FPGA

Connectez votre FPGA HX-8K à votre PC à l'aide d'un programmateur compatible. Assurez-vous que le FPGA est alimenté et en mode programmation. Utilisez IceProg pour téléverser le bitstream sur le FPGA :

bash

sudo iceprog BlinkingLED.bin

Étape 6: Observations

Votre FPGA HX-8K devrait maintenant clignoter la LED conformément au code VHDL que vous avez écrit.

N'hésitez pas à poser des questions si vous rencontrez des problèmes ou si vous avez besoin de plus d'informations sur une étape spécifique.

« Je te hais plus qu'aucun des dieux qui vivent sur l'Olympe
Car tu ne rêves que discordes, guerres et combats. »
Trouble obsessionnelcompulsif
Le TdCT est revenu (ils reviennent tous)

Hors ligne

#10 Le 03/02/2024, à 16:20

bruno

Re : fpga et toolchain open-source

Bon, je pense que Nuliel est parfaitement capable d'utiliser ChatGPT. Donc si tu n'as aucune solution personnelle a apporter il vaut mieux t'abstenir.

Dernière modification par bruno (Le 03/02/2024, à 16:21)