Dieses Problem kann aufgrund der Art und Weise, wie Analysis &Synthesis die VHDL-Parameterwerte für zwei oder mehr VHDL-Instanzen analysiert, die mit der gleichen Konfiguration konfiguriert sind. Analysis &Synthesis verwendet einen Parameterwert für alle VHDL-Instanzen derselben Entität, selbst wenn Sie für jede Instanz unterschiedliche Parameterwerte verwenden möchten.
Dieses falsche Syntheseproblem tritt in den Quartus® II Softwareversionen 6.0 und früher auf und ist ab Version 6.1 der Quartus II Software behoben.
Als Beispiel dafür, wann dieses Problem auftreten kann, verwendet das folgende Design die gleiche "my_entity_cfg" Konfiguration für alle Instanzen von "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;
Für dieses Design können Sie "inst1" und "inst2" für "my_entity" in Ihrem Top-Level-Design erstellen und zwei verschiedene Parameterwerte an inst1 und inst2 übergeben. Im unten stehenden Beispiel werden "inst1" und "inst2" im Erstklassigen Design instanziiert. Das Erstklassige Design übergibt den Wert "one" auf inst1 und den Wert "two" auf 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);
In diesem Beispiel verwenden Quartus II Softwareversionen 6.0 und früher den Parameterwert "two" für "inst1" und "inst2", was zu falschem Designverhalten führen kann.
Um dieses Problem in Versionen 6.0 und früher zu beheben, erstellen Sie eine Kopie der "my_entity_cfg" Konfiguration, die als "my_entity_cfg1" bezeichnet wird. Ändern Sie das Design der obersten Ebene, um die beiden verschiedenen Konfigurationsnamen zu verwenden, wie in der folgenden Änderung im vorherigen Beispiel:
FOR inst1: my_entity
USE CONFIGURATION work.my_entity_cfg;
END FOR;
FOR inst2: my_entity
USE CONFIGURATION work.my_entity_cfg1;
END FOR;