Forum: FPGA, VHDL & Co. Ausschaltverzögerung


von jens r. (jens72)


Lesenswert?

Hallo Miteinander,
ich bin kein VHDL Programmierer. Der Kollege dazu ist nicht erreichbar 
und ich muss meine Hardware zum laufen kriegen.

Es gibt ein Signal (End_Of_Startup), wenn dieses mit dem ersten '1' 
Impuls anliegt soll an einem Ausgang (Startup1) des Xilinc FPGA 
Bausteins, der Ausgang auch auf '1' gehen und einige Zeit bzw. Takte 
halten. Nach dem eine Taktzahl/Zeit erreicht ist soll es wieder auf '0' 
gehen. So eine Art Ausschaltverzögerung.

Nun habe ich mit meine Unkenntnissen versucht so etwas im großen 
vorhandene VHDL Code dazu reinzumachen. Da bisher der Eingang mit der 
Bezeichnung End_Of_Startup einfach an den Ausgang mit der Bez. Startup1 
gelegt wurde. Zwischen den beiden Ports habe ich nun versucht einen 
Block reinzumachen, die eine bestimmte Aufgabe hat. Das Resultat ist 
dass wenn am Eingang ein Impuls erfolgt dass der Ausgang genauso 
aussieht ohne dass der Ausgang länger gehalten wurde.

Vielleicht entdeckt jemand den Fehler im Code. Vielen Dank. jens

Der Code mit Ausschnitten aus der Haupdatei und der Sub-Datei sieht 
folgendermassen aus:
1
---------------------Main.vhd---------------------
2
3
-- Einbinden der Komponente Startup_Counter 
4
component Startup_Counter is
5
Port (   IN_STARTUP1 : in std_logic;    -- Input
6
           CLK : in std_logic;     -- Clock for timer 
7
           OUT_STARTUP1 : out std_logic);  -- Output =   
8
end component;
9
10
-- .......................................................................
11
-- Begin of the Design Description
12
-- .......................................................................
13
begin
14
-- Connect each signal of the entities with the others
15
-- like in a schematic
16
17
STARTUP : Startup_Counter port  map(  IN_STARTUP1 => End_Of_Startup,
18
          CLK => IntCLK5,
19
          OUT_STARTUP1 => Startup1
20
           );
21
22
23
---------------------

Die andere Datei mit dem Block Startup_Counter
1
---------------------Startup_Counter.vhd---------------------
2
-- ***********************************************************************
3
-- Include Libraries
4
-- ***********************************************************************
5
library IEEE;   
6
use IEEE.STD_LOGIC_1164.ALL;
7
use IEEE.STD_LOGIC_ARITH.ALL;
8
use IEEE.STD_LOGIC_UNSIGNED.ALL;
9
10
-- ***********************************************************************
11
-- Entity Definition
12
-- ***********************************************************************
13
entity Startup_Counter is
14
Port ( IN_STARTUP1 : in std_logic;    -- input 
15
           CLK : in std_logic;     -- Clock 
16
           OUT_STARTUP1 : out std_logic);  -- Output 
17
end Startup_Counter;
18
19
-- ***********************************************************************
20
-- Architecture Description
21
-- ***********************************************************************
22
architecture Behavioral of Startup_Counter is
23
24
-- .......................................................................
25
-- Internal Signals
26
-- .......................................................................
27
signal cnt : std_logic_vector(4 downto 0) := "00000";
28
29
30
begin
31
32
process(CLK)
33
begin
34
  --if rising_edge(CLK) then
35
  if CLK'event and CLK = '1' then
36
37
    if IN_STARTUP1='1' 
38
      cnt <= "00000";
39
    elsif cnt /=100 then
40
      cnt <= cnt+1;
41
    end if;
42
43
    if cnt=100 then
44
      OUT_STARTUP1 <='0';
45
    else
46
      OUT_STARTUP1 <='1';
47
    end if;
48
  
49
  
50
  end if;
51
end process;
52
53
end Behavioral;

von Schlumpf (Gast)


Lesenswert?

Kann es sein, dass cnt einfach über die 100 hinausschießt und dann 
OUT_STARTUP1 sofort wieder auf "1" geht?

von Lattice User (Gast)


Lesenswert?

Mit 5 bits kann man nicht auf 100 zählen.

von Schlumpf (Gast)


Lesenswert?

Lattice User schrieb:
> Mit 5 bits kann man nicht auf 100 zählen.

.. das stimmt wohl ;-)

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


Lesenswert?

Lattice User schrieb:
> Mit 5 bits kann man nicht auf 100 zählen.
Mit einer Simulation sieht man das nach spätestens 33 Takten...

von Schrei (Gast)


Lesenswert?

Lothar Miller schrieb:
> Lattice User schrieb:
>> Mit 5 bits kann man nicht auf 100 zählen.
> Mit einer Simulation sieht man das nach spätestens 33 Takten...

Wäre ja schön wenn in diesem scheiß verdammt großen Gigabyte fressendem 
Webpack ein Simulator drin ist.

Ach das ist der Fall, ja dann...

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


Lesenswert?

Lattice User schrieb:
> Mit 5 bits kann man nicht auf 100 zählen.
Aus diesem Grund empfiehlt es sich, für Zähler einen eingeschränkten 
Integer zu nehmen. Und dann ist das Modul schnell ganz übersichtlich:
1
library IEEE;   
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity Startup_Counter is
6
Port ( CLK          : in std_logic;    
7
       IN_STARTUP1  : in std_logic;
8
       OUT_STARTUP1 : out std_logic);
9
end Startup_Counter;
10
11
architecture Behavioral of Startup_Counter is
12
signal cnt : integer range 0 to 100 := 0;
13
14
begin
15
  process begin
16
    wait until rising_edge(CLK):
17
    if IN_STARTUP1='1' 
18
      cnt <= 0;
19
    elsif cnt /=100 then
20
      cnt <= cnt+1;
21
    end if;
22
23
    if cnt=100 then
24
      OUT_STARTUP1 <='0';
25
    else
26
      OUT_STARTUP1 <='1';
27
    end if;
28
  end process;
29
end Behavioral;

BTW: VHDL ist eh schon eine "geschwätzige" Beschreibungssprache. Da 
brauchst du solche Kommentare eigentlich nicht mehr:
1
-- Include Libraries
2
library IEEE;   
3
4
-- Entity Definition
5
entity Startup_Counter is
6
7
Port ( IN_STARTUP1  : in  std_logic;    -- input 
8
       OUT_STARTUP1 : out std_logic);  -- Output
Die Kommentare sind redundant und bringen keinen Informationszugewinn. 
Eine schöne Formatierung hätte da mehr gebracht...

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.