Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > VHDL
VHDL Forum d'entraide sur VHDL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/02/2012, 12h34   #1
Gefroren
Invité de passage
 
Homme
Étudiant
Inscription : février 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Allemagne

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : février 2012
Messages : 3
Points : 0
Points : 0
Par défaut Adapter du code SystemC en VHDL

Bonjour,

Dans le cadre d'un projet, je dois adapter un code en SystemC en VHDL. La partie FSM ça va, mais il y a une partie que je n'arrive pas à adapter : il s'agit de la méthode qui résout (un sudoku) de manière récursive. Le problème c'est qu'elle ne retourne rien.
J'ai donc pensé aux procédure mais la récursion n'est pas autorisée. Je me retrouve donc complètement bloqué
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
	/// solves the puzzle with bruteforce. called recursively
	void solve_bruteforce(size_t r, size_t c)
	{
		//puzzle already solved
		if( this->done )
			return;

		// matrix completely filled. The puzzle is solved
		if( r==this->n )
		{
			this->done=true;
			return;
		}
debug_out(r,c);

		//Move to the next row
		if( c==this->n )
		{
			this->solve_bruteforce(r+1,0);
		}
		else if( this->array[r][c]==0 )
		{	//Empty position
			size_t i;
			for(i=1; i<=this->n; ++i)
			{
				//We have already used this number in this row/column/square
				if( is_set( row_mask[r], i) ||
					is_set( col_mask[c], i) ||
					is_set( sqr_mask[c/this->b + this->b*(r/this->b)], i) )
					continue;

				do_set(row_mask[r], i);
				do_set(col_mask[c], i);
				do_set(sqr_mask[c/this->b + this->b*(r/this->b)], i);
				this->array[r][c]=i;

				this->solve_bruteforce(r,c+1);
				if( this->done )
					return;

				this->array[r][c]=0;
				do_unset(row_mask[r], i);
				do_unset(col_mask[c], i);
				do_unset(sqr_mask[c/this->b + this->b*(r/this->b)], i);
			}
		}
		else
		{	//Position already filled
			this->solve_bruteforce(r,c+1);
		}
	}
Les fonctions do_set, is_set et do_unset sont des fonctions de masques. Comment puis-je m'y prendre?

Merci d'avance pour votre aide !!
Gefroren est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 16h30   #2
mith06
Membre confirmé
 
Ingénieur développement matériel électronique
Inscription : juillet 2010
Messages : 141
Détails du profil
Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : Industrie

Informations forums :
Inscription : juillet 2010
Messages : 141
Points : 200
Points : 200
Salut,

Perso je pense que c'est mort.
La récursivité n'a aucun sens dans la description de matériel (qui est le but du VHDL).
La seul moyen que je vois est de trouver l'équivalent itératif de la l'algo et de faire la machine d'état équivalente.(C'est pas gagné non plus..)

PS: Je n’ai toujours pas compris à quoi sert le systemC, puisque ce cas illustre parfaitement que ce langage n'est pas synthétisable.

Bon courage.
mith06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2012, 11h51   #3
Gefroren
Invité de passage
 
Homme
Étudiant
Inscription : février 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Allemagne

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : février 2012
Messages : 3
Points : 0
Points : 0
Ok, merci pour l'indication j'ai lâché l'affaire niveau récursion. J'ai demandé à un collaborateur de la FAC qui sont sensés nous aider et il m'a dit qu'en fait fallait remplacer la récursion par des boucles. Et pire que normalement avec une seule boucle en plus on pouvait avoir l'équivalent.

Après avoir fait ça, il devient plus facile de le passer en VHDL. Alors moi j'ai essayé plein de trucs mais j'ai rien qui marche, ce truc c'est plus un truc d'info et du coup je galère...

Si quelqu'un arrive à voir la boucle while qui va bien et qui fait rouler le truc j'en serais extrêmement reconnaissant :-p.
Gefroren est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2012, 20h42   #4
gorgonite
Rédacteur/Modérateur

 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur d'études
Inscription : décembre 2005
Messages : 9 963
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 963
Points : 18 158
Points : 18 158
Citation:
Envoyé par mith06 Voir le message
La récursivité n'a aucun sens dans la description de matériel (qui est le but du VHDL).
clairement, trop de débutants croient que VHDL est un langage de programmation alors que c'est un langage de description avec une syntaxe de langage de prog (Ada en l'occurence)

d'ailleurs le code Gefroren montre clairement un code de programmation... pas une vue matériel. donc a priori il ne sert qu'à simuler une fonctionnalité, pas un composant

Citation:
Envoyé par mith06 Voir le message
PS: Je n’ai toujours pas compris à quoi sert le systemC, puisque ce cas illustre parfaitement que ce langage n'est pas synthétisable.

SystemC est un langage de description de systèmes, ie pas uniquement de composants matériels... il est utile pour faire du codesign afin d'avoir une approche plus haut-niveau d'un système complexe

D'ailleurs, depuis SystemC version 2, l'introduction du niveau d'abstraction transactionnel (TLM) en est clairement l'illustration. et en regardant le TLM 2, on va encore plus loin dans cette optique
en gros, c'est potentiellement à peine plus bas-niveau que Simulink... mais ça peut descendre jusqu'au niveau RTL au besoin à un coût temporel et mémoire important en terme de simulation


ps: l'intégralité de VHDL n'est pas non plus synthétisable... juste simulable

Citation:
Envoyé par Gefroren Voir le message
Si quelqu'un arrive à voir la boucle while qui va bien et qui fait rouler le truc j'en serais extrêmement reconnaissant :-p.
c'est potentiellement casse-gueule ton truc... faudrait que tu nous montres où tu en es si tu veux qu'on essaie d'y penser (sinon faudrait 2 jours )

ou lis ceci
http://ce.et.tudelft.nl/publicationf..._896_FPT09.pdf
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h38.


 
 
 
 
Partenaires

Hébergement Web