Forum: FPGA, VHDL & Co. Quartus 18.0


von Student (Gast)


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;

von Sigi (Gast)


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.

von Donni D. (Gast)


Lesenswert?

Wie schon angemerkt, genau so soll es auch sein. Was willst du denn 
sonst als Ergebnis haben, einen Zähler der zählt und nichts macht?
Für alles andere kannst du ModelSim nutzen und gucken ob es generell 
funktioniert, aber halt nur Simuliert

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


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"

: Bearbeitet durch Moderator
von Weltbester FPGA-Pongo (Gast)


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.

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.