einfacher Takteiler, Zustand x

Gast #2969372
Lesenswert?

Frohe Weihnachten!

Ich habe ein kleines Problem, was ich nicht verstehe. Habe nun alles 
rausgelöscht was ich nicht brauche und es nur noch ein sehr kleiner 
process übrig geblieben.

Ich möchte im Prinzip nur den CLK durch zwei Teilen (Brauche aber einen 
duty cycle von 50%). Warum funktioniert das so nicht?
1
testprocess : process
2
begin
3
  wait until rising_edge(clk_in);
4
    clk_out <= '0';    
5
    if (testsig2 = 0) then 
6
      testsig2 <= 1;
7
    else 
8
      clk_out <= '1';
9
      testsig2 <= 0;
10
    end if;
11
end process testprocess;
Angehängte Dateien:
Gast #2969501
Lesenswert?

Hallo,

danke für deine Antwort. Der obige Code müsste auch stimmen ... aber 
selbst mit deinem funktioniert es nicht. ... irgedwie steh ich aufem 
Schlauch und es macht mich verrückt ;-)

Eigentlich habe ich einen Counter der hochzählt und bei jedem geraden 
Wert Daten an eine Leitung anlegt und bei jeden ungeraden Wert die Daten 
übernimmt. Deswegen der etwas komplizierte Code.

Leider ist selbst in dem einfachsten Code ein Fehler drin, oder er 
simuliert nicht richtig ....
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3

4

5
entity fasdf is
6
    Port ( clk_in : in  STD_LOGIC;
7
           clk_out : out  STD_LOGIC);
8
end fasdf;
9

10
architecture Behavioral of fasdf is
11
signal clksig : std_logic := '0';
12
begin
13

14
testprocess : process(clk_in)
15
begin
16
  if clk_in'event and clk_in = '1' then 
17
  clksig <= not clksig;
18
  end if;
19
end process testprocess;
20
clk_out <= clksig;
21

22
end Behavioral;



Die TB ist die Standart von Xilinx erzeugte ...
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
 
4
ENTITY tb IS
5
END tb;
6
 
7
ARCHITECTURE behavior OF tb IS 
8
 
9
    -- Component Declaration for the Unit Under Test (UUT)
10
 
11
    COMPONENT fasdf
12
    PORT(
13
         clk_in : IN  std_logic;
14
         clk_out : OUT  std_logic
15
        );
16
    END COMPONENT;
17
    
18

19
   --Inputs
20
   signal clk_in : std_logic := '0';
21

22
   --Outputs
23
   signal clk_out : std_logic;
24

25
   -- Clock period definitions
26
   constant clk_in_period : time := 10 ns;
27
   constant clk_out_period : time := 10 ns;
28
 
29
BEGIN
30
 
31
  -- Instantiate the Unit Under Test (UUT)
32
   uut: fasdf PORT MAP (
33
          clk_in => clk_in,
34
          clk_out => clk_out
35
        );
36

37
   -- Clock process definitions
38
   clk_in_process :process
39
   begin
40
    clk_in <= '0';
41
    wait for clk_in_period/2;
42
    clk_in <= '1';
43
    wait for clk_in_period/2;
44
   end process;
45
 
46
   clk_out_process :process
47
   begin
48
    clk_out <= '0';
49
    wait for clk_out_period/2;
50
    clk_out <= '1';
51
    wait for clk_out_period/2;
52
   end process;
53
 
54

55
   -- Stimulus process
56
   stim_proc: process
57
   begin    
58
      -- hold reset state for 100 ns.
59
      wait for 100 ns;  
60

61
      wait for clk_in_period*10;
62

63
      -- insert stimulus here 
64

65
      wait;
66
   end process;
67

68
END;
Angehängte Dateien:
Gast #2969503
Lesenswert?

Lösch mal den Prozess clk_out_process aus der Testbench. Aus irgendeinem 
unerfindlichen Grund produziert der Wizard für alles was nur irgendwie 
clk enthält einen Prozess mit Takt auch wenn das Signal vom der UUT aus 
eigentlich ein Ausgang ist.

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