Ausschaltverzögerung

OP #3156013
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;
Moderator (Firma: Titel) Persönliche Seite #3156301
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...

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