Forum: FPGA, VHDL & Co. einfacher Takteiler, Zustand x


von synthese (Gast)


Angehängte Dateien:

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;

von Josef G. (bome) Benutzerseite


Lesenswert?

Ich hätte geschrieben:

if clk_in'event and clk_in = '1' then clk_out <= not clk_out; end if;

oder entsprechendes mit rising_edge.
Was du geschrieben hast, verstehe ich nicht.

von synthese (Gast)


Angehängte Dateien:

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;

von Hmm (Gast)


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.

von synthese (Gast)


Lesenswert?

Okay, Danke das ist es .. man man man ... das hat mich jetzt ein paar 
Minuten gekostet!!! Vielen Dank.
Frohe Weihnachten an alle!

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.