Pages : 1
#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
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
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-8KChatGPT
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. OuiChatGPT
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 verilogChatGPT
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 ?
ChatGPTIl 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,.
ChatGPTSalut! 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 ?
ChatGPTLes œ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)
Pages : 1