Quartus 18.0

Gast #5736292
Lesenswert?

Hallo zusammen,

ich ersuche eure Hilfe und zwar habe ich mich vor kurzem mit VHDL und 
Quartus beschäftigt und bin auf ein komisches Verhalten vom Quartus 
gestoßen und zwar wenn der Ausgangszustand sein Wert nicht veränder wird 
kein Design erstellt. Kann man irgend-wo dem Kompiler sagen, dass er 
dies nicht tun soll?

Gruss
A
1
 library IEEE;
2
 use IEEE.STD_LOGIC_1164.ALL;
3
 use IEEE.numeric_std.all;
4
 
5
 entity blink2 is
6
    Port ( 
7
           clk : in  std_logic;
8
           LED : out std_logic
9
    );
10
 end blink2;
11
 
12
 architecture RTL of blink2 is
13
    constant max_count : natural := 48000000;
14
    signal Rst : std_logic;
15
   
16
 begin
17

18
    Rst <= '0';
19

20
compteur1 : process
21
  variable count : natural range 0 to max_count;
22
    begin
23
      wait until rising_edge(clk);
24
      if Rst = '1' then
25
        count := 0;
26
        led <= '1';
27
      elsif rising_edge(clk) then
28
        if count < max_count/2 then
29
           count := count + 1;
30
           led <= '1';
31
        elsif count < max_count then
32
           led <= '0';
33
           count := count + 1;
34
        else
35
           led <= '1';
36
           count := 0;
37
        end if;
38
      end if;
39
    end process compteur1; 
40
  
41
 end RTL;

dabei wird etwas generiert, wenn ich aber nur eine Zeile auskommentiere 
dann erzeugt der Kompiler nichts und gibt keine Fehlermeldung aus:
1
 library IEEE;
2
 use IEEE.STD_LOGIC_1164.ALL;
3
 use IEEE.numeric_std.all;
4
 
5
 entity blink2 is
6
    Port ( 
7
           clk : in  std_logic;
8
           LED : out std_logic
9
    );
10
 end blink2;
11
 
12
 architecture RTL of blink2 is
13
    constant max_count : natural := 48000000;
14
    signal Rst : std_logic;
15
   
16
 begin
17

18
    Rst <= '0';
19

20
    compteur1 : process
21
      variable count : natural range 0 to max_count;
22
    begin
23
      wait until rising_edge(clk);
24
      if Rst = '1' then
25
        count := 0;
26
        led <= '1';
27
      elsif rising_edge(clk) then
28
        if count < max_count/2 then
29
           count := count + 1;
30
           led <= '1';
31
        elsif count < max_count then
32
           --led <= '0';
33
           count := count + 1;
34
        else
35
           led <= '1';
36
           count := 0;
37
        end if;
38
      end if;
39
    end process compteur1; 
40
  
41
 end RTL;
Gast #5736304
Lesenswert?

Student schrieb:
> wenn ich aber nur eine Zeile auskommentiere
> dann erzeugt der Kompiler nichts und gibt keine Fehlermeldung aus:

Btw, wenn kein Fehler da ist, dann wird auch keine Meldung
ausgegeben, warum auch?

Zu "nichts": Da Counter etc. in Deinem Desing ja
nicht gebraucht werden, werden sie vom Compiler
vollständig entfernt. Das ist nicht komisch, sonder
sehr gut! Schau Dir aber mal die Ausgangspins im
ChipPlaner an. Da diese ja einen (konstanten) Wert
treiben, müssen sie auch intern so beschaltet sein.
Moderator (Firma: Titel) Persönliche Seite #5736330
Lesenswert?

Student schrieb:
> zwar wenn der Ausgangszustand sein Wert nicht veränder wird kein Design
> erstellt.
Wenn man von dem Design an den FPGA Pins nichts "merkt", weil sie sich 
nie ändern, dann wird das Design so optimiert, dass die Pins einfach den 
richtigen Pegel haben.
Und wenn es da keine Vorgabe gibt, dann werden sie auf irgendeinen Pegel 
geklemmt.

Das passiert aber erst spät im Designprozess. Den RTL Schaltplan, den 
dein Synthesizer erzeugt, kannst du trotzdem noch anschauen...

BTW:
>>  variable count : natural range 0 to max_count;
Ich würde da ein Signal nehmen und das zudem noch mit einem Startwert 
initialisieren.
Dazu der Klassiker: Beitrag "Variable vs Signal"
Gast #5739042
Lesenswert?

Student schrieb:
> ich ersuche eure Hilfe und zwar habe ich mich vor kurzem mit VHDL und
> Quartus beschäftigt und bin auf ein komisches Verhalten vom Quartus
> gestoßen

Das Verhalten ist deshalb nicht komisch, weil es so definiert ist, eine 
Schaltung über die Funktion zu definieren und denn du Teile dieser 
Definition nicht gibts, dann kommt nicht das Gewünschte raus.

Stell dir vor, du beauftragst deine Tochter damit, Zum Supermarkt zu 
fahren, Waren in den Korb zu legen und zu bezahlen. Wenn du dann 
vergisst, sie zu beauftragen, Dir was vpr die Türe zu legen, dann 
vereinfacht sie deine Aufgabe dahingehend, dass sie sich das Auto 
schnappt und das Gald in der Disco verprasst.

Das Ergebnis ist dasselbe: Du hast das bekommen, was du abgefragt hast, 
nämlich nichts.

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