Sensitivity List Problem bei GENERATE-Konstrukten

Gast #1204447
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;
Gast #1204640
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
Gast #1204673
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
Moderator (Firma: Titel) Persönliche Seite #1204704
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
Gast #1238505
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
Gast #1238661
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren