Wert auf "Clock" aufmodulieren?

Gast #4307468
Lesenswert?

Hi,

ich spiele mich gerade etwas mit VHDL herum und versuche den Wert 0xab 
mit einem Clock signal darzustellen, irgendwie funktioniert es aber 
leider nicht...
Ich bin blutiger Anfänger damit, könnte mir hier jemand einen Tipp geben 
wie ich damit weiterkomme?

clockout2 ist immer das Gleiche wie clockout
1
LIBRARY IEEE;
2
USE IEEE.STD_LOGIC_1164.ALL;
3
USE IEEE.STD_LOGIC_ARITH.ALL;
4
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
5

6
ENTITY simulator1 IS
7
    PORT(clock: IN STD_LOGIC;
8
         clockout: OUT STD_LOGIC;
9
         clockout2: OUT STD_LOGIC;
10
         valid: out STD_LOGIC;
11
         start: out STD_LOGIC;
12
         dclock: out STD_LOGIC;
13

14
         data: out STD_LOGIC);
15
END simulator1;
16

17
ARCHITECTURE behavior OF simulator1 IS
18
     signal num : STD_LOGIC_VECTOR(7 downto 0);
19

20
BEGIN
21
PROCESS(clock)
22
     VARIABLE cnt: integer range 0 to 100;
23
     VARIABLE cnt2: integer range 0 to 255;
24
     variable cnt3: integer range 0 to 1;
25
    variable cnt4: integer range 0 to 7;
26
     variable num2: integer range 0 to 255;
27

28
--     variable number: integer range 0 to 7;
29
     
30
     begin
31
     num <= x"ab"; 
32
         if rising_edge(clock) then
33

34
              cnt := cnt+1;
35
              
36
         end if;
37
               if (cnt = 50) then
38
                  cnt4 := cnt4+1;
39
               end if;
40
               
41
               if (cnt > 50) then
42
                  clockout <= '1';
43
                  
44
                  cnt3 := 1;
45
              else
46
                  cnt3 := 0;
47
                  clockout <= '0';
48
              end if;  
49
             
50
              if (cnt3 = 1) then
51
                  data <= num(cnt4);
52
              else
53
                  data <= '0';
54
              end if;
55

56
              clockout2 <= clock; 
57
END PROCESS;
58
END behavior;
Gast #4307518
Lesenswert?

Hallo,

ich bin zwar auch noch am Anfang, aber kann glaube ich dennoch einige 
Kommentare beisteuern:

Als erstes habe ich weder aus dem Code, noch aus deiner Beschreibung 
verstanden, was du eigentlich vorhast. Kannst du das irgendwie genauer 
formulieren? "clock aufmodulieren"?!

Dann zum Code: Du hast nach der Beschreibung des synchronen Teils deines 
Prozesses (zwischen if rising_edge und end if) noch weiteren Code. 
Dieser Teil der Beschreibung wird nicht synchron ausgeführt, d.h. ist 
unabhängig vom Takt!

Du verwendest auch ziemlich viele Variablen. Ich habe gelernt, diese nur 
im Notfall und gut überlegt zu verwenden, da die Semantik ziemlich 
schnell zu Latches führen kann. Ist dir die Semantik von Variablen 
bewusst? Also, wann der Wert aktualisiert wird und welche Folgen das für 
die Hardware hat?

Gruß

Peter
Gast #4307541
Lesenswert?

Hi,

dort steckt halt noch viel vom experimentieren drinnen, jetzt klappt es 
danke!

1
LIBRARY IEEE;
2
USE IEEE.STD_LOGIC_1164.ALL;
3
USE IEEE.STD_LOGIC_ARITH.ALL;
4
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
5

6
ENTITY simulator1 IS
7
    PORT(clock: IN STD_LOGIC;
8
         clockout: OUT STD_LOGIC;
9
         clockout2: OUT STD_LOGIC;
10
         valid: out STD_LOGIC;
11
         start: out STD_LOGIC;
12
         dclock: out STD_LOGIC;
13
--         signal num : std_logic_vector(7 downto 0);
14
         data: out STD_LOGIC);
15
END simulator1;
16

17
ARCHITECTURE behavior OF simulator1 IS
18
     signal num : STD_LOGIC_VECTOR(7 downto 0);
19

20
BEGIN
21
PROCESS(clock)
22
     VARIABLE cnt: integer range 0 to 100;
23
     VARIABLE cnt2: integer range 0 to 255;
24
     variable cnt3: integer range 0 to 1;
25
    variable cnt4: integer range 0 to 255;
26
     variable num2: integer range 0 to 255;
27

28
--     variable number: integer range 0 to 7;
29
     
30
     begin
31
     num <= x"47"; 
32
         if rising_edge(clock) then
33

34
              cnt := cnt+1;
35
              if (cnt = 50) then
36
               cnt4 := cnt4+1;
37
              end if;
38
               
39
               if (cnt > 50) then
40
                  clockout <= '1';
41
                  
42
                  cnt3 := 1;
43
              else
44
                  cnt3 := 0;
45
                  clockout <= '0';
46
              end if;  
47
             
48

49
         end if;
50
                  if (cnt3 = 1) then
51
                  data <= num(cnt4);
52
              else
53
                  data <= '0';
54
              end if;
55
END PROCESS;
56
END behavior;

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