Il existe des programmes universitaires qui peuvent avoir accès à des fabrications de chip groupé. cf https://mycmp.fr/ L'idéal serait de bosser avec un labo pour faire un chip de démonstration (couplé avec un openrisc ?).
J'y ai pensé et je comptais me tourner vers le LIRMM (Laboratoire d'Informatique, de Robotique et de Microélectronique de Montpellier) vu que j'habite cette ville. Mais comme pour l'instant j'avais rien à montrer...
Au niveau de la cellule de FPGA, pourquoi ne pas avoir ajouter une "alu" c'est une des premières optimisations qui est ajouté, pour augmenter la vitesse des fonctions mathématiques.
Parce qu'il faut tout que je développe tout en parallèle : l'architecture FPGA, le générateur de RTL, la chaîne d'outils pour la programmation, ... Du coup, je préfère faire aussi simple que possible et améliorer par petites itérations successives histoire de ne pas me noyer sous la complexité. Et il n'y a pas plus simple que juste des LUT et des flip-flops. Mais ça me demande quand même déjà pas mal de travail pour valider que l'architecture n'est pas bancale. Vu que je n'ai encore rien pour faire le placement routage (j'ai bricolé un truc avec yosys pour me faire la synthèse logique et le mapping vers de LUT), je suis obligé de générer le bitstream à la main.
Voila le bitstream que je viens de finaliser pour tester un cœur constitué d'une seule tuile de 4 logique éléments composé de LUT2 :
bitstream = (
( # Switchbox
( # To LE[3].data[1]
0b110 # from south[0]
) << 33
|
( # To LE[3].data[0]
0b111 # from west[0]
) << 30
|
( # To LE[2].data[1]
0b110 # from south[0]
) << 27
|
( # To LE[2].data[0]
0b111 # from west[0]
) << 24
|
( # To LE[1].data[1]
0b110 # from south[0]
) << 21
|
( # To LE[1].data[0]
0b111 # from west[0]
) << 18
|
( # To LE[0].data[1]
0b110 # from south[0]
) << 15
|
( # To LE[0].data[0]
0b111 # from west[0]
) << 12
|
( # To west[0]
0b11 # from le[3]
) << 9
|
( # To south[0]
0b101 # from le[2]
) << 6
|
( # To east[0]
0b100 # from le[1]
) << 3
|
( # To north[0]
0b011 # from le[0]
)
) << 20
|
( # Logic block
( # Logic element 3
0b1 << 4 # Enable LE DFF
|
0b0111 # !(B & A)
) << 15
|
( # Logic element 2
0b1 << 4 # Enable LE DFF
|
0b0110 # B ^ A
) << 10
|
( # Logic element 1
0b1 << 4 # Enable LE DFF
|
0b1000 # B & A
) << 5
|
( # Logic element 0
0b1 << 4 # Enable LE DFF
|
0b1110 # B | A
)
)
)
Oui, c'est moche et error-prone... et la prochaine étape : le test d'un cœur multi-tuile pour faire un adder 4 bits o/
Donc les éléments logiques avec un peu plus d'intelligence (notamment inclusion d'un full-adder et la propagation des carry par du routage dédié) c'est prévu pour la deuxième génération de l'architecture.
[^] # Re: chip de test
Posté par jtremesay (site web personnel) . En réponse au journal k1g1 : le premier FPGA Libre.... Évalué à 6. Dernière modification le 04 novembre 2019 à 10:29.
J'y ai pensé et je comptais me tourner vers le LIRMM (Laboratoire d'Informatique, de Robotique et de Microélectronique de Montpellier) vu que j'habite cette ville. Mais comme pour l'instant j'avais rien à montrer...
Parce qu'il faut tout que je développe tout en parallèle : l'architecture FPGA, le générateur de RTL, la chaîne d'outils pour la programmation, ... Du coup, je préfère faire aussi simple que possible et améliorer par petites itérations successives histoire de ne pas me noyer sous la complexité. Et il n'y a pas plus simple que juste des LUT et des flip-flops. Mais ça me demande quand même déjà pas mal de travail pour valider que l'architecture n'est pas bancale. Vu que je n'ai encore rien pour faire le placement routage (j'ai bricolé un truc avec yosys pour me faire la synthèse logique et le mapping vers de LUT), je suis obligé de générer le bitstream à la main.
Voila le bitstream que je viens de finaliser pour tester un cœur constitué d'une seule tuile de 4 logique éléments composé de LUT2 :
Oui, c'est moche et error-prone... et la prochaine étape : le test d'un cœur multi-tuile pour faire un adder 4 bits o/
Donc les éléments logiques avec un peu plus d'intelligence (notamment inclusion d'un full-adder et la propagation des carry par du routage dédié) c'est prévu pour la deuxième génération de l'architecture.