www.mikrocontroller.net

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


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
process(clk)
begin
   if rising_edge(clk) then
       counter <= counter + 1;
       if counter = 319 then
         counter <= 0;
       end if;
       if counter = 319 then
         outp <= '1';
       elsif counter /= 319  then
         outp <= '0';
       end if;
    end if;
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

Autor: MtheK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schonmal so probiert?
Sollte eigentlich laufen...

process(clk)
begin
   if rising_edge(clk) then
       if counter = 319 then
         outp <= '1';
         counter <= 0;
       else
         outp <= '0';
         counter <= counter + 1;
       end if;
    end if;
end process;

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

process(clk)
begin
   if rising_edge(clk) then
       counter <= counter + 1;
       if counter = 319 then
         counter <= 0;
       end if;
       if counter = 319 then
         outp <= '1';
       else
         outp <= '0';
       end if;
    end if;
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

Autor: Anfänger (Gast)
Datum:
Angehängte Dateien:

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

mfg

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anfänger (Gast)
Datum:

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


Danke

Autor: MtheK (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich wette mit :p

Quartus gibt für folgenden Code nix asynchrones ... siehe Screenshot.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity FF_Test is
  
  port (
    iClk         : in  std_ulogic;
    inResetAsync : in  std_ulogic;
    oFlag        : out std_ulogic);

end FF_Test;

architecture Rtl of FF_Test is

  signal Counter : integer;
begin  -- Rtl

  process (iClk, inResetAsync)
  begin  -- process
    if inResetAsync = '0' then            -- asynchronous reset (active low)
      Counter <= 0;
    elsif iClk'event and iClk = '1' then  -- rising clock edge
      if Counter = 319 then
        oFlag   <= '1';
        Counter <= 0;
      else
        oFlag   <= '0';
        Counter <= Counter + 1;
      end if;
    end if;
  end process;

end Rtl;


Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/li...

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.