Forum: FPGA, VHDL & Co. Sensitivity List Problem bei GENERATE-Konstrukten


von Frager (Gast)


Lesenswert?

Die option "check for Synthesis" liefert bei ModelSIM AE folgenden 
Fehler: "Signal ctrl_we is not in the s.-list" - obwohl es geclocked 
ist. Kann es an dem Generate Konstukt liegen?

Der Code stammt vom open cores SPDIF Decoder.
1
 
2
-- control register generation
3
   CTRLREG : for k in ctrl_din'range generate
4
      -- active bits can be written to
5
      ACTIVE : if ACTIVE_BIT_MASK(k) = '1' generate
6
         CBIT : process (clk, rst)
7
         begin
8
            if rst = '1' then
9
               ctrl_internal(k) <= '0';
10
            else
11
               if rising_edge(clk) then
12
                  if ctrl_wr = '1' then
13
                     ctrl_internal(k) <= ctrl_din(k);
14
                  end if;
15
               end if;
16
            end if;
17
         end process CBIT;
18
      end generate ACTIVE;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> ctrl_we
taucht in dem Code gar nicht auf...

von SuperWilly (Gast)


Lesenswert?

Probier mal statt
1
if rst = '1' then
2
   ctrl_internal(k) <= '0';
3
else
4
    if rising_edge(clk) then

folgendes
1
if rst = '1' then
2
   ctrl_internal(k) <= '0';
3
4
elsif rising_edge(clk) then

Modelsim ist bei der Erkennung von getakteten Prozessen
inkl. async. Reset etwas zu genau

Gruß,
SuperWilly

von SuperWilly (Gast)


Lesenswert?

>> ctrl_we
>taucht in dem Code gar nicht auf...

@Lothar:
Die Taste "e" ist Nachbar(in) der Taste "r",
also weniger Korinthenkakerei hilft manchmal weiter.

Zur Sache ein Nachtrag:

Folgendes Konstrukt wird beim Synthese-Check durch Modelsim
ebenfalls bemängelt:
1
process(Reset, Clk)
2
begin
3
    if rising_edge(Clk) then
4
5
    end if;
6
7
    if Reset='1' then
8
9
    end if;
10
end process;

Gruß,
SuperWilly

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> @Lothar:
> Die Taste "e" ist Nachbar(in) der Taste "r",
> also weniger Korinthenkakerei hilft manchmal weiter.
Den Neben-Satz nach dem Komma hätts nicht mehr gebraucht,
der enthält keine gewinnbringende Information.
BTW: War ja nicht mein Tippfehler...   :-/

> Modelsim ist bei der Erkennung von getakteten Prozessen
> inkl. async. Reset etwas zu genau
Ja, beide Konstrukte werden bei Lattice und Xilinx anstandslos 
synthetisiert.

>Folgendes Konstrukt wird beim Synthese-Check durch Modelsim
>ebenfalls bemängelt: ...
Was macht Modelsim dann mit solchen Clock-Enable:
1
   process (clk, sel2)
2
   begin
3
      if rising_edge(clk) and (sel2='1') then
4
         :
5
      end if;
6
   end process;
7
8
   process (clk, sel3)
9
   begin
10
      if (sel3='1') then
11
         if rising_edge(clk) then
12
            :
13
         end if;
14
      end if;
15
   end process;
Die Xilinx-Synthese verdaut das...  :-o

von SuperWilly (Gast)


Lesenswert?

>Was macht Modelsim dann mit solchen Clock-Enable:

@Lothar

Ja, die Synthese hat damit keine Probleme, Modelsim jedoch meckert auch
hier.

Gruß,
SuperWilly

von Frager (Gast)


Lesenswert?

Danke euch beiden!

von SuperWilly (Gast)


Lesenswert?

Habe das Problem beim Modelsim-Support mal angefragt. Informationen
folgen ...

Gruß,
SuperWilly

von Frager (Gast)


Lesenswert?

Wenn man auf ELSIF umstellt, geht es in der TAT. Ich denke es liegt 
daran, dass er vorher nicht gesamten ELSE-Zweig als getaktet ansieht und 
sich merkt, dass dort Kombinatorik kommen kann.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ich denke es liegt daran ...
... das Modelsim zwar gut simulieren kann, die Synthese aber besser 
anderen überlassen sollte ;-)

von SuperWilly (Gast)


Lesenswert?

Habe von Mentor eine Antwort bezüglich meiner Frage, wieso oben genannte 
Konstrukte vom Synthesis-Checker bemängelt werden,
erhalten:

Der Synthesis-Checker hat (Zitat) "limitations", die Behebung dieser
erhält eine niedrige Priorität, es sei denn ich kann driftige Gründe
nennen, wieso oben genannte Konstrukte als synthese-fähige Konstrukte
erkannt werden sollten.

Was meint Ihr dazu ? Welche wichtigen Gründe sprechen für die 
Unterstützung
solcher "vom Üblichen" abweichenden Register-Beschreibungen mit 
(a)synchroner Reset/Set-Unterstützung ?


Gruß,
SuperWilly

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Welche wichtigen Gründe sprechen für die Unterstützung
> solcher "vom Üblichen" abweichenden Register-Beschreibungen mit
> (a)synchroner Reset/Set-Unterstützung ?
Keiner.
Modelsim simuliert und Synplify/XST&Co synthetisieren.

Wieso sollte man an einen Hammer einen Schraubendreher anbauen?  ;-)

von SuperWilly (Gast)


Lesenswert?

Naja, der Synthese-Checker in Modelsim soll unvollständige 
Sensitivitätslisten aufzeigen, um nachher keine bösen Überraschungen
in Form unterschiedlichen Verhaltens in realer Hardware und Simulation
zu erhalten.
Wenn nun jedoch Konstrukte von Modelsim bemängelt werden, die eigentlich
unproblematisch sind, dann werden die Meldungen ab einer gewissen
Anzahl unübersichtlich und sind nicht mehr hilfreich.
Hat also mit Hammer und Schraubendreher überhaupt nichts zu tun !

Gruß,
SuperWilly

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.