Ce problème peut survenir en raison de la manière dont l’analyse et la synthèse analysent les valeurs du paramètre VHDL pour deux instances VHDL ou plus qui sont configurées avec la même configuration. L’analyse et la synthèse utilisent un paramètre de valeur pour toutes les instances VHDL de la même entité, même lorsque vous prévoyez d’utiliser une valeur de paramètre différente pour chaque instance.
Ce problème de synthèse incorrecte se produit dans les versions 6.0 et antérieures du logiciel Quartus® II, et est corrigé à partir de la version 6.1 du logiciel Quartus II.
Par exemple, lorsque ce problème peut survenir, la conception suivante utilise la même configuration « my_entity_cfg » pour toutes les instances de « my_entity ».
CONFIGURATION my_top_cfg OF my_top IS
FOR top_arc
FOR ALL: my_entity
USE CONFIGURATION work.my_entity_cfg;
END FOR;
END FOR;
END my_top_cfg;
Pour cette conception, vous pouvez créer « inst1 » et « inst2 » pour « my_entity » dans votre conception de haut niveau et transmettre deux valeurs de paramètres différentes à la fois à l’inst1 et à l’inst2. Dans l’exemple ci-dessous, les termes « inst1 » et « inst2 » sont instantanés dans la conception de haut niveau. La conception de haut niveau transmet la valeur « un » à l’inst1 et la valeur « deux » à l’inst2.
inst1: my_entity
GENERIC MAP(type => one)
PORT MAP(
data0 => a,
data1 => b,
result => one_out);
inst2: my_entity
GENERIC MAP(type => two)
PORT MAP(
data0 => a,
data1 => b,
result => two_out);
Dans cet exemple, les versions 6.0 et antérieures du logiciel Quartus II utilisent la valeur de paramètre « deux » pour « inst1 » et « inst2 », ce qui peut entraîner un comportement de conception incorrect.
Pour résoudre ce problème dans les versions 6.0 et antérieures, créez une copie de la configuration « my_entity_cfg » appelée « my_entity_cfg1 ». Modifiez la conception de haut niveau pour utiliser les deux noms de configuration différents, comme dans la modification suivante apportée à l’exemple précédent :
FOR inst1: my_entity
USE CONFIGURATION work.my_entity_cfg;
END FOR;
FOR inst2: my_entity
USE CONFIGURATION work.my_entity_cfg1;
END FOR;