# Autres langages > Autres langages > VHDL >  Implmenter quations diffrentielles en FPGA, possible ?

## thejavator

Bonjour,

Est-il possible d'implememter des equations differentielles sur un FPGA ? Mom tuteur de stage m'a demamde si je savais faire ca mais je doute que ca soit possible.
Desole pour les accents je suis sur un qwerty.

----------


## titiri

Bonjour,

    Si la question est "en VHDL", je dirais non. Jamais entendu parl de cela et mes souvenirs (rafraichis par wikipedia) de la rsolution de ces quations (ne serait-ce que d'ordre 1) requiert du calcul formel. Hors de question en VHDL.
    Par contre, si la question est bien "sur un FPGA", alors l la rponse est clairement oui :
Sur Altera, utilisez Qsys pour implmenter un Nios (P softcore et compatible avec toutes les familles Altera, sauf les "trop vieilles"). Aprs, vous pouvez le programmer en C. Il y a fort  parier que des bibliothques open-source existent dj. ::mouarf:: Sur Xilinx, utilisez MicroBlase (grosso-modo philosophie/concept que le Nios, mais beaucoup plus "compliqu"  utiliser  ::aie:: )

    En conclusion, si le FPGA n'est pas encore choisi, je vous conseille plutt Altera avec le Nios. Je le rpte, le Nios est un vrai P mais implment dans les ressources "classiques" du FPGA (LUT, registres, RAM). Il est mme envisageable de n'utiliser que les blocs RAM internes du FPGA pour y stocker le code --> donc aucun composant externe  :8-): 

Cdlt

----------


## thejavator

merci beaucoup pour votre rponse.
Je pensais que le VHDL tait le langage pour le FPGA, faut que je relise mes cours...
J'ai eja utilis xilinx mais je sais plus si c'tait pour du FPGA

----------


## sgievounet

Salut,

Il faut se rappeler et bien garder  l'esprit que le VHDL est un langage de description. Description de quoi? Description en fait qui te permet de modeliser ce que tu veux ou calcul que tu veux avec de la logique combinatoire, et pouvoir s'aider  mmoriser/temporiser avec RAM (cache). Sur un FPGA il y a mme des multiplieurs pour avoir plus de force de calcul de disponible. Aprs, tout a est une histoire de compromis entre: vitesse, ressource, latence et prcision...

Une equation diffrentielle, biensur que tu peux l'implmenter. Une boucle d'asservissement implment dans un FPGA, du genre une PLL, c'est l'utilisation d'une equation diffrentielle pour atteindre la stabilit.

En tout cas, si tu as la solution de ton equation, tu peux tenter. Mais, clairement, les formules mathmatiques non linaires (du type racine, exposant, exponentielle ou arctangeante), a coute trs chre niveau occupation de ressources FPGA ou niveau vitesse...

Si je peux me permettre un avis, utiliser un softcore du type (NIOS ou Microblaze) c'est franchement pas l'objectif du FPGA, vaut mieux passer sur un DSP, ou sinon, se pencher  decrire l'equation  implmenter l'equation en VHDL pour monter en dbit de calcul. Le softcore c'est plutot de l'appoint...

Tu peux dcrire une peu plus le contexte de ce que tu souhaites raliser, plus en dtail?

----------


## thejavator

je dois realiser un oscillateur chaotique: l'oscillateur de Lorenz. C'est explique dans ce documemt mais je suis completement perdu  ::(: 
http://www.sciencedirect.com/science...07570412005734

----------


## thejavator

en fait il n y a pas  d equations differentielles a implementer, il fallait discretiser les equation par une methodes.
je dois juste implementer 3 equations qui dependent de l'etat precedent, je l ai fait sur matlab voici le code :



```

```

je n'obtiens pas ce que je veux avec les courbes mais deja faire ca en vhdl serait pas mal, j'ai essayer aussi une application sur matlab qui convertit le langage matlab vers HDL mais je n'y arrive pas.

j'ai tente sur modelsim mais j'ai plein d'erreur...
je vous met le code ci-dessous:


```

```

voila les erreurs qu'il m'affiche:



> ** Error: \\pstudfsnb\home8\w13046248\My Documents\Work\lorenz.vhd(42): Cannot read output "y".
> ** Error: \\pstudfsnb\home8\w13046248\My Documents\Work\lorenz.vhd(42): Cannot read output "x".
> ** Error: \\pstudfsnb\home8\w13046248\My Documents\Work\lorenz.vhd(42): Cannot read output "x".
> ** Error: \\pstudfsnb\home8\w13046248\My Documents\Work\lorenz.vhd(42): Cannot read output "z".
> ** Error: \\pstudfsnb\home8\w13046248\My Documents\Work\lorenz.vhd(43): Cannot read output "x".


J'ai plein d'erreurs comme quoi il n'arrive pas a lire les variables de sorties X,Y et Z.
J'ai declare les variables de sorties en "real" je sais pas si c'est vraiment normal de pouvoir faire ca...

----------


## sgievounet

N'utilise pas de variable type real, le FPGA ne saura faire.

Etape 1: Modifie ton Matlab pour que tout se fasse sans nombre  virgule... Tu multiplies tes entres par 2^valeur, valeur etant ce qui te suffira pour pas perdre en precision, idem pour tes constante. Le FPGA, les nombres  virgule, il ne connait pas...

Etape 2:
Ensuite ecris ton code avec plein de variables intermediaires. En gros, par affectation ou par ligne, tu as le droit de faire une operation ( * ou + ou -)
Tu vois ce que je veux dire?

Etape 3: Va falloir casser la boucle FOR

----------


## thejavator

pourquoi il faut faire qu'une seule opration par affectation ? casser la boucle for c'est  dire ? normalement c'est une boucle infinie que je dois faire mais la c'est un test.

----------


## sgievounet

Dans le premier lien tu trouveras un bout de code qui implmente un correlateur (je ne l'ai pas test mais j'imagine qu'il tourne, c'est souvent le cas sur ce blog)

http://vhdlguru.blogspot.fr/2011/06/...ir-filter.html

Globalement a se compose de deux fichiers:
Le FIR (correlateur) <-> qui pourrait tre ta fonction de traitement de Lorentz
Le Testbench, c'est ce qui permet de ecrire et relire depuis le FIR ( ou ce qu'on appelle plus communment Unit Under Test)
Le DFF n'a pas vraaiment lieu d'avoir son entit ou fichier, il aurait pu tre mis directement dans le FIR.

Ta boucle FOR, a pourrait tre des donnes que tu relis depuis un fichier et stimule dans le UUT en VHDL. Je te conseille donc de la sortir de ta fonction matlab et  la limite utiliser du permanent pour les variables globales.

Concernant, les oprations  mettre sur plusieurs affectations, a vise  viter l'engorgement en implmentation une fois sur cible, et donc diminution de la frquence de traitement atteignable.  http://zone.ni.com/reference/en-XX/h...pts/registers/

Vaut mieux se focaliser sur les deux fichiers du premier lien, comprendre s'en inspirer.

Fait gaff, le VHDL en autodidact, ca peut trs vite devenir prise de tte  :;):

----------

