• [^] # Re: FPGA HLS

    Posté par . En réponse au journal Le VHDL prend-il l'eau ?. Évalué à 8.

    En fait, tu definis des fifo a l'aide de type C qui sont des ac_channel (je ne sais pas si ce typedef vient avec l'outil ou si c'est standard). Tu peux ensuite découper ton algo C en fonctions qui prennent ces ac_channels en entree/sortie, ce qui te permet de structurer une parallélisation.

    Tu codes ensuite ton algo en attendant la data sur ces channels, en les processant et en les envoyant sur une channel de sortie. Tu fais ca sur des blocs, voir des sous-blocs. Tu peux ensuite dans ton C utiliser des boucles while, des boucles for, bref du C classique. Petit truc sympa: tu nommes avec des etiquettes tes boucles, tu peux dire au synthétiseur de soit le faire avec un compteur (N cycles, petite surface), soit de pisser toutes combinaisons en métal (1 cycle, grande surface). Ca permet, a partir du même code source, de faire un produit low cost ou high end.

    Alors, effectivement, a la fin ton C (dit synthetisable), il a été pas mal restructuré, et on peut se demander la pertinence de le faire en C plutot qu'en vdhl: l'interet est que tu peux creer un testbench en C pur et te passer completement d'outils pour simuler, tu es directement en C. Ton temps de non-reg devient très rapide. Un autre avantage: a chaque changement de techno, il suffit de changer de target, et le vhdl généré est bon par conception.

    Le workflow devient:
    - tu pars d'un modele C pur, tu structures tes blocs toujours en C pur (c'est toujours un modèle),
    - tu designes tes blocs en C synthetisable,
    - et tu verifies chacun de tes blocs en changeant l'instance C model par le C synthetisable

    Une fois que chacun de tes blocs est verifié: tu genères tout en vhdl, tu assembles, et pouf ! ca juste marche.