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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.