Forum: FPGA, VHDL & Co. Wie beschreibe ich das in VHDL


von Anfänger (Gast)


Lesenswert?

Hi,

ich bin noch etwas unerfahren mit VHDL. Ich möchte ein DFF beschreiben
das sich >> SYNCHRON << bei einem bestimmten Zählerstand setzt und sich
anderen falls >> SYNCHRON << zurück setzt (auf Null). Habe jetzt viel 
rumprobiert und das Xilinx Synthese baut immer mal einen Asynchronen 
reset
oder ein asynchrones Set ein (gesehen in der Schematic). Hier der 
Codeausschnitt.
1
process(clk)
2
begin
3
   if rising_edge(clk) then
4
       counter <= counter + 1;
5
       if counter = 319 then
6
         counter <= 0;
7
       end if;
8
       if counter = 319 then
9
         outp <= '1';
10
       elsif counter /= 319  then
11
         outp <= '0';
12
       end if;
13
    end if;
14
end process;
Der Synchrone Reset des Zähler (counter) funktioniert. Counter steht auf 
319. Bei der nächsten Taktflanke ist der sReset Eingang auf High un der 
Counter resetet sich. Das signal outp kann doch einfach mit dem 
Vergleicher
gesetzt werden. Also Vergleicherausgang 1 --> DFF wird auf eins gesetzt, 
Vergleicherausgang 0 --> DFF wird auf null gesetzt.
Bei diesem Programmausschnitt baut er mir allerdings ein Ashyncrones 
Reset ein welches das DFF resettet wenn der Vergleicher eine Null 
ausgibt. Daraus folgt doch das outp nur sehr kurz auf eins liegt, also 
keine ganze Taktperiode.


Danke für Antworten.

mfg

von MtheK (Gast)


Lesenswert?

Schonmal so probiert?
Sollte eigentlich laufen...

1
process(clk)
2
begin
3
   if rising_edge(clk) then
4
       if counter = 319 then
5
         outp <= '1';
6
         counter <= 0;
7
       else
8
         outp <= '0';
9
         counter <= counter + 1;
10
       end if;
11
    end if;
12
end process;

von Falk B. (falk)


Lesenswert?

@  Anfänger (Gast)

>das sich >> SYNCHRON << bei einem bestimmten Zählerstand setzt und sich
>anderen falls >> SYNCHRON << zurück setzt (auf Null).

Hast du schon, nur etwas unnötig komplex.

>Habe jetzt viel
>rumprobiert und das Xilinx Synthese baut immer mal einen Asynchronen
>reset
>oder ein asynchrones Set ein (gesehen in der Schematic).

Glaub ich nicht.

1
process(clk)
2
begin
3
   if rising_edge(clk) then
4
       counter <= counter + 1;
5
       if counter = 319 then
6
         counter <= 0;
7
       end if;
8
       if counter = 319 then
9
         outp <= '1';
10
       else
11
         outp <= '0';
12
       end if;
13
    end if;
14
end process;

>Bei diesem Programmausschnitt baut er mir allerdings ein Ashyncrones
>Reset ein welches das DFF resettet wenn der Vergleicher eine Null
>ausgibt.

Das wäre ein dicker Bug. Glaub ich nicht. Ist ehe ein Bedienungsfehler 
beim Simulieren.

> Daraus folgt doch das outp nur sehr kurz auf eins liegt, also
> keine ganze Taktperiode.

MfG
Falk

von Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
die Schematic bekomme ich wenn ich MtheK Version nehme (Antwort 1).
Da ist ein Asynchroner Reset drinn oder nicht ??

mfg

von Falk B. (falk)


Lesenswert?

@  Anfänger (Gast)

>die Schematic bekomme ich wenn ich MtheK Version nehme (Antwort 1).

Was ?

>Da ist ein Asynchroner Reset drinn oder nicht ??

Das muss nicht asynchron sein, es ist erstmal ein Reseteingang, sonst 
nix.

Und ich wette, es ist ein synchroner.

MFG
Falk

von Anfänger (Gast)


Lesenswert?

Ah ok also ist das unter den Umständen (Programmierung) ein synchroner
Reset. Ok dann ist ja alles ok.


Danke

von MtheK (Gast)


Angehängte Dateien:

Lesenswert?

Ich wette mit :p

Quartus gibt für folgenden Code nix asynchrones ... siehe Screenshot.
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.numeric_std.all;
4
5
entity FF_Test is
6
  
7
  port (
8
    iClk         : in  std_ulogic;
9
    inResetAsync : in  std_ulogic;
10
    oFlag        : out std_ulogic);
11
12
end FF_Test;
13
14
architecture Rtl of FF_Test is
15
16
  signal Counter : integer;
17
begin  -- Rtl
18
19
  process (iClk, inResetAsync)
20
  begin  -- process
21
    if inResetAsync = '0' then            -- asynchronous reset (active low)
22
      Counter <= 0;
23
    elsif iClk'event and iClk = '1' then  -- rising clock edge
24
      if Counter = 319 then
25
        oFlag   <= '1';
26
        Counter <= 0;
27
      else
28
        oFlag   <= '0';
29
        Counter <= Counter + 1;
30
      end if;
31
    end if;
32
  end process;
33
34
end Rtl;

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


Lesenswert?

Falk Brunner schrieb:
> Und ich wette, es ist ein synchroner.
Du hättest die Wette gewonnen  ;-)
Ein fdr ist ein Flipflop mit einem synchronen Reset Eingang:
http://www.xilinx.com/itp/xilinx5/data/docs/lib/lib0170_154.html

BTW:
>> Unbenannt.JPG
Ich vermisse einen Hinweis auf die Bildformate... ;-)

von Falk B. (falk)


Lesenswert?

@  Lothar Miller (lkmiller) Benutzerseite

>>> Unbenannt.JPG
>Ich vermisse einen Hinweis auf die Bildformate... ;-)

Kommt in meinem Großhirn nicht mehr an, der Nonsensefilter fischt das 
raus. Nur deftige Spikes kommen da noch durch. ;-)

MFG
Falk

P S Lesetipp für den OP: Bildformate.

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.