Wie beschreibe ich das in VHDL

Gast #1866558
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
Gast #1866595
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;
#1866597
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
#1866621
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
Gast #1866636
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;
Angehängte Dateien:

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