Forum: FPGA, VHDL & Co. Lauflicht Ws2812B


von Benedikt S. (bene_sch)


Lesenswert?

Hallo liebe Leute,
Für ein Projekt haben wir uns überlegt mit dem RGB-Ledstreifen eine Art 
Roulette zu entwerfen. Nun ist unser Problem, dass wir nicht wissen, wie 
wir bei einer Zufallszahl "anhalten" können bzw den process unterbrechen 
können, sodass er am ende nur noch das eine Bitmuster ausgibt.
Das Licht läuft zurzeit einfach die ganze Zeit durch.
Unser Code :
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
-- Uncomment the following library declaration if using
6
-- arithmetic functions with Signed or Unsigned values
7
--use IEEE.NUMERIC_STD.ALL;
8
9
-- Uncomment the following library declaration if instantiating
10
-- any Xilinx leaf cells in this code.
11
--library UNISIM;
12
--use UNISIM.VComponents.all;
13
14
entity logic is
15
       Port ( clk : in STD_Logic;
16
       dout : out  STD_LOGIC;
17
       schalter : in STD_LOGIC);
18
end logic;
19
20
architecture Behavioral of logic is
21
    
22
   signal blau : STD_LOGIC_VECTOR(23 downto 0) := x"000055";
23
   signal gruen : STD_LOGIC_VECTOR(23 downto 0) := x"550000";
24
   signal kugel : STD_LOGIC_VECTOR(23 downto 0) := x"FFFFFF";
25
   signal rot : STD_LOGIC_VECTOR(23 downto 0) := x"005500";
26
   signal aus : STD_LOGIC_VECTOR(23 downto 0) := x"000000";
27
   variable clk2ctr_int : integer;
28
   signal clk2:STD_LOGIC;
29
   signal clk2ctr : unsigned (13 downto 0) ;
30
   signal clk32: STD_LOGIC;
31
   signal clkctr : unsigned(2 downto 0) := (others => '0');
32
   signal in_data_phase : std_logic := '0';
33
   signal bit_count     : unsigned(10 downto 0) := (others => '0');
34
   signal count         : unsigned(11 downto 0) := (others => '0');
35
   signal data          : std_logic_vector(24*38-1 downto 0) := (others => '0');
36
   
37
begin 
38
process(clk)
39
begin
40
if rising_edge(clk) then                -- clk von 32 Mbits bestimmen
41
    if clkctr = 3 then
42
        clk32 <= '1';
43
        clkctr <= (others=> '0');
44
    else 
45
        clk32<='0';
46
        clkctr <= clkctr+1;
47
end if;
48
else 
49
end if;
50
51
52
       
53
end process;
54
55
56
process(clk32) 
57
   begin
58
      if rising_edge(clk32) then
59
         if in_data_phase = '1' then
60
            if count < 11 then
61
               dout <= '1';
62
               count <= count+1;
63
            elsif count < 29 then
64
               if data(data'high) = '1' then
65
                  dout <= '1';
66
               else
67
                  dout <= '0';
68
               end if;
69
               count <= count+1;
70
            elsif(count < 39) then
71
               dout <= '0';
72
               count <= count+1;
73
            else
74
               dout <= '0';
75
               count <= (others => '0');
76
               if bit_count = data'high-1 then
77
                  in_data_phase <= '0';
78
               else
79
                  bit_count <= bit_count + 1;
80
                  data <= data(data'high-1 downto 0) & '0';
81
                  bit_count <= bit_count+1;
82
               end if;
83
            end if;
84
         else
85
            -- send the reset signal (50us of low)
86
            dout <= '0';
87
         if count=1599 then
88
         --   if clk2ctr = 1000 then 
89
           --     data <= rot & rot& rot &rot ;
90
             --   clk2ctr <= (others => '0');
91
            --else 
92
              --  clk2ctr <= clk2ctr +1;
93
               -- data <= blau & blau &blau & blau;
94
            --end if;
95
        --   if schalter = '1' then
96
           clk2ctr_int := TO_INTEGER(unsigned(clk2ctr));
97
           case clk2ctr_int is
98
                when 0 to 442 => data <= kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
99
                when 443 to 485 =>data <= gruen & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
100
                when 486 to 886 =>data <= gruen & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
101
                when 887 to 1328 => data <= gruen & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
102
                when 1329 to 1771 =>data <= gruen & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
103
                when 1772 to 2212 =>data <= gruen & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau  & aus;
104
                when 2213 to 2654 =>data <= gruen & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
105
                when 2655 to 3096 =>data <= gruen & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
106
                when 3097 to 3538 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
107
                when 3539 to 3980 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
108
                when 3981 to 4422 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
109
                when 4423 to 4864 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
110
                when 4865 to 5306 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
111
                when 5307 to 5748 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
112
                when 5749 to 6190 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
113
                when 6191 to 6632 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
114
                when 6633 to 7074 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
115
                when 7075 to 7516 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
116
                when 7517 to 7958 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
117
                when 7959 to 8400 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
118
                when 8401 to 8842 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
119
                when 8843 to 9284 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
120
                when 9285 to 9726 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
121
                when 9727 to 10168 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
122
                when 10169 to 10610 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
123
                when 10611 to 11052 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
124
                when 11053 to 11494 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
125
                when 11495 to 11936 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
126
                when 11937 to 12378 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
127
                when 12379 to 12820 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & aus ;
128
                when 12821 to 13262 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & aus ;
129
                when 13263 to 13704 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & aus ;
130
                when 13705 to 14146 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & aus ;
131
                when 14147 to 14588 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & aus ;
132
                when 14589 to 15030 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & aus ;
133
                when 15031 to 15472 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & aus ;
134
                when  15473 to 15914 =>  data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & aus ;
135
                --when 15915 to 16356 => data <= kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
136
                --when 34426 to 35310 =>data <= gruen & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
137
                --when 35311 to 36195 =>data <= gruen & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
138
                --when 36196 to 37080 => data <= gruen & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
139
                --when 37081 to 37965 =>data <= gruen & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
140
                --when 37966 to 38850 =>data <= gruen & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
141
                --when 38851 to 39735 =>data <= gruen & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
142
                --when 39736 to 40620 =>data <= gruen & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
143
                --when 40621 to 41505 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
144
                --when 41506 to 42390 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
145
                --when 42391 to 19482 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
146
                --when 19483 to 21253 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
147
                --when 21254 to 23024 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
148
                --when 23025 to 24795 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
149
                --when 24796 to 26566 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
150
                --when 26567 to 28337 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
151
                --when 28338 to 30108 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
152
                --when 30109 to 31879 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
153
                --when 31880 to 33650 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
154
                --when 33651 to 35421 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
155
                --when 35422 to 37192 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
156
                --when 37193 to 38963 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
157
                --when 38964 to 40734 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
158
                --when 40735 to 42505 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
159
                --when 42506 to 44276 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
160
                --when 44277 to 46047 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
161
                --when 46048 to 47818 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
162
                --when 47819 to 49589 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau & rot & blau ;
163
                --when 49590 to 51360 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau & rot & blau ;
164
                --when 51361 to 53131 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau & rot & blau ;
165
                --when 53132 to 54902 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau & rot & blau ;
166
                --when 54903 to 56673 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau & rot & blau ;
167
                --when 56674 to 58444 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau & rot & blau ;
168
                --when 58445 to 60215 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau & rot & blau ;
169
                --when 60216 to 61986 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & rot & blau ;
170
                --when 61987 to 63757 =>data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & kugel & blau ;
171
                --when  63758 to 65528 =>  data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel ;
172
                when others => data <= gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & kugel & aus ;
173
            end case;
174
            clk2ctr <= clk2ctr +1;
175
            in_data_phase <= '1';
176
            bit_count <= (others => '0');
177
            count <= (others => '0');
178
          --end if;
179
        else
180
           count <= count + 1;
181
         end if;
182
      end if;
183
  end if;
184
  
185
end process;
186
187
188
189
190
191
end Behavioral;
Die clock wird von einer 100MHz clock auf eine 33MHz clock 
runtergeregelt und über die 33Mhz clock dass entsprechende Bitmuster für 
High/Low ausgegeben.
Evtl Intelligentere Lösungen für die switch case auch wenn nicht dann 
einfach das unterbrechen der schleife.

Grüße Benedikt

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Benedikt S. schrieb:
> bzw den process unterbrechen können
Ich vermute hier noch sehr grundlegende Verständnisprobleme mit der 
"Funktion" eines Prozesses und der Harwarebeschreibung allgemein...

> Die clock wird von einer 100MHz clock auf eine 33MHz clock
> runtergeregelt
So wird in einem FPGA neimals(!!!) ein Takt erzeugt. Wenn unbedingt ein 
niedrigerer Takt nötig ist, dann geht das mit den Taktmanagern des 
FPGAs. Und sonst gibt es nur 1 einzigen Takt im Design. Der Rest wird 
mit Clock-Enables gemacht...

So wie das t dort unten im letzten Beispiel als Clock-Enable für einen 
4Hz-"Takt" dient:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html


Und dieses "Monsterfeld" gehört doch eigentlich in ein entsprechend 
breites RAM...

: Bearbeitet durch Moderator
von Benedikt S. (bene_sch)


Lesenswert?

>> bzw den process unterbrechen können
> Ich vermute hier noch sehr grundlegende Verständnisprobleme mit der
> "Funktion" eines Prozesses und der Harwarebeschreibung allgemein...
Mir ist natürlich klar dass ich einen Prozess nicht unterbrechen kann, 
aber trotzdem würde ich gerne nach einmaligem durchlaufen der switch 
case nicht wieder rein springen wie stell ich das an? bzw nicht 
einmaligem sonder nachdem mein clk2ctr komplett durchgezählt hat


> Und dieses "Monsterfeld" gehört doch eigentlich in ein entsprechend
> breites RAM...
Wie ist das gemeint?

: Bearbeitet durch User
von VHDL hotline (Gast)


Angehängte Dateien:

Lesenswert?

Benedikt S. schrieb:
> Mir ist natürlich klar dass ich einen Prozess nicht unterbrechen kann,
> aber trotzdem würde ich gerne nach einmaligem durchlaufen der switch
> case nicht wieder rein springen wie stell ich das an?

Mit einer FSM (Zustandsmaschine).

Grundsätzlich hat dein Code drei Probleme:

- es fehlt eine übersichtliche Zustandsmaschine (if/then auf ein Signal 
ist zwar eine Art FSM aber wenn es komplex wird, wird es schlecht zu 
handeln)

- mehrere clks sind hier nicht sinnvoll; außerdem ist dein 33 MHz clk 
ein 25 MHz clk, da du immer von 0 bis 3 zählst -> Taktteiler 4

- die Beschreibung wo die Kugel ist braucht so sehr viel Speicher: der 
lange Vektor rot & blau &... wird in allen Varianten in Flipflops 
abgelegt;
das könnte man besser über Multiplexing eines Signals oder 
Schieberegister lösen oder indem man die Pattern in einem RAM ablegt

Ich hab mal einen Vorschlag angehangen, da es schwierig zu erklären ist, 
wie es richtig geht und du ja schon etwas vorgelegt hast. Die 
Erweiterung, wie man das ganze anhält, steckt zwar implizit drin, ist 
aber noch nicht aktiv. Das überlasse ich dir ;-) .
Achtung: Der Code ist gerade nur mit einem Texteditor enststanden und 
wurde nicht auf syntaktische oder emantsiche Korrektheit überprüft.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Benedikt S. schrieb:
> aber trotzdem würde ich gerne nach einmaligem durchlaufen der switch
> case nicht wieder rein springen wie stell ich das an?
Du brauchst einen Zustandsautomaten bzw. eine FSM...

>> Und dieses "Monsterfeld" gehört doch eigentlich in ein entsprechend
>> breites RAM...
> Wie ist das gemeint?
Ein RAM ist ein dedizierter Speicherbaustein im FPGA. So wie du es 
beschrieben hast, werden da stattdessen wertvolle Slices verwendet.
Ein Tipp: lies das Datenblatt des FPGAs und mach dir Gedanken, wie du 
die darin befindlichen Komponenten zu deinem Vorteil nutzen kannst. Du 
hast sie mit dem Kauf des FPGAs ja schließlich auch bezahlt...

von Benedikt S. (bene_sch)


Lesenswert?

Okay da ist jetz viel dabei von dem ich noch nie gehört habe. Müssen uns 
vhdl leider so schnell wie möglich selber beibringen, da der Prof ne 
null ist und das selber nicht kann..ich bemühe mich jetzt mal das zu 
verstehen.

Das mit dem Schieberegister habe ich mir natürlich auch schon überlet 
weil ich informatisch jetzt nicht komplett blöd bin aber die umsetzung 
in vhdl war das größte hinderniss..genauso wenig habe ich schonmal von 
einem zustandaautomaten gehört.(Und die 25Mhz clock naja da hab ich wohl 
mal ganz und garnicht mitgedacht...)
Danke schonmal!!

: Bearbeitet durch User
von Benedikt S. (bene_sch)


Lesenswert?

Also, da ich den Programmcode nicht einfach übernehmen wollte habe ich 
mich jetzt selber mal an eine FSM gesetzt jetzt habe ich folgendes 
Problem und zwar funktioniert mein 2. bzw 3.state nicht richtig, was ist 
falsch?
Habe die data ausgabe und Lows/Highs in eine component verlagert.

mein code (LED nur um zu schauen ob der Schalter funktioniert):
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
-- Uncomment the following library declaration if using
5
-- arithmetic functions with Signed or Unsigned values
6
use IEEE.NUMERIC_STD.ALL;
7
8
-- Uncomment the following library declaration if instantiating
9
-- any Xilinx leaf cells in this code.
10
--library UNISIM;
11
--use UNISIM.VComponents.all;
12
13
entity main is
14
    Port ( clk : in STD_LOGIC;
15
         schalter : in STD_LOGIC;
16
         outPin : out STD_LOGIC;
17
         led : out STD_LOGIC);
18
end main;
19
20
architecture Behavioral of main is
21
--States
22
signal state : integer range 1 to 3 := 1;
23
--Farben der LEDs
24
signal blau : STD_LOGIC_VECTOR(23 downto 0) := x"000055";
25
signal gruen : STD_LOGIC_VECTOR(23 downto 0) := x"550000";
26
signal kugel : STD_LOGIC_VECTOR(23 downto 0) := x"FFFFFF";
27
signal rot : STD_LOGIC_VECTOR(23 downto 0) := x"005500";
28
signal aus : STD_LOGIC_VECTOR(23 downto 0) := x"000000";
29
signal stdData : std_logic_vector(24*38-1 downto 0) := gruen & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & rot & blau & aus ;
30
--ClkTeiler
31
signal clkctr : unsigned(2 downto 0) := (others => '0');
32
signal clk32: STD_LOGIC;
33
--Highs/Lows für Ausgabe
34
signal inData : std_logic_vector(24*38-1 downto 0) := (others => '0');
35
signal tmpData : std_logic_vector(24*38-1 downto 0) := stdData;
36
--Shiften
37
signal kugelctr : integer range 0 to 37 := 0; 
38
--Zufallszahl
39
signal rndint : integer range 0 to 37 := 2;
40
--"Warten in der Schleife"
41
signal timer : integer range 0 to 200 := 0;
42
43
component Zaehllogik is
44
    port(dout :out STD_Logic;
45
         clk32 : in STD_Logic;
46
         dataIn  : in std_logic_vector(24*38-1 downto 0) := (others => '0')
47
         );
48
end component; 
49
50
begin
51
eins:Zaehllogik port map(
52
    dout => outPin,
53
    clk32 => clk32,
54
    dataIn => inData
55
    );
56
            
57
    process(clk)
58
    begin
59
     if rising_edge(clk) then                -- clk von 25 MHz bestimmen
60
         if clkctr = 3 then
61
              clk32 <= '1';
62
              clkctr <= (others=> '0');
63
          else 
64
              clk32<='0';
65
               clkctr <= clkctr+1;
66
            end if;
67
        else 
68
     end if;
69
    end process;
70
71
    process(clk32,Schalter)
72
    begin
73
        case state is
74
            when 1 =>--Alle LEDs sind normal an
75
                    inData <= stdData;
76
                    
77
                    if Schalter = '1' then --Sobald der Schalter umgelegt wird wird in den nächsten Zustand gesprungen
78
                        state <= 2;
79
                        led <= Schalter;
80
                    end if;
81
             
82
            when 2 =>--Kugel läuft durch. Alle 10mal(timer) wird die Kugel um eins weiter geschoben
83
                    for I in 0 to 3700 loop
84
                        if timer = 100 then
85
                            timer <= 0;
86
                            inData <=stdData;
87
                            inData ((kugelctr-1)*24 to kugelctr*24-1) <=kugel;
88
                            tmpData <= inData;
89
                        else 
90
                            inData <= tmpData;
91
                            timer <= timer +1;
92
                        end if;
93
                        if kugelctr = 37 then
94
                            kugelctr <= 0;
95
                        else 
96
                            kugelctr <= kugelctr+1;
97
                        end if;
98
                    end loop;
99
                    state <= 3;
100
            
101
            when 3 =>--nach durchlaufen läuft er genau bis zufallszahl und bleibt dort stehen
102
                    for J in 1 to 37 loop
103
                        if rndint = J then
104
                            exit;
105
                        else
106
                            inData <= stdData;
107
                            inData((J-1)*24 downto J*24-1) <=kugel;
108
                        end if;
109
                    end loop;
110
                    
111
                    inData <= stdData;
112
                    inData ((rndint-1)*24 downto rndint*24-1)<=kugel;
113
                    
114
                    if Schalter = '0' then -- wenn der schalter wieder umgelegt wird springt er zurück in den anfangszustand
115
                        state <= 0;
116
                        led <= Schalter;
117
                    end if;          
118
        end case;
119
    end process;
120
                                            
121
                 
122
123
124
125
end Behavioral;

und die component :
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
-- Uncomment the following library declaration if using
5
-- arithmetic functions with Signed or Unsigned values
6
use IEEE.NUMERIC_STD.ALL;
7
8
-- Uncomment the following library declaration if instantiating
9
-- any Xilinx leaf cells in this code.
10
--library UNISIM;
11
--use UNISIM.VComponents.all;
12
13
entity Zaehllogik is
14
    Port (dout :out STD_Logic;
15
          clk32 : in STD_Logic;
16
          dataIn  : in std_logic_vector(24*38-1 downto 0) := (others => '0') 
17
           );
18
end Zaehllogik;
19
20
architecture Behavioral of Zaehllogik is
21
22
signal in_data_phase : std_logic := '0';
23
signal bit_count     : unsigned(10 downto 0) := (others => '0');
24
signal count         : unsigned(11 downto 0) := (others => '0');
25
signal data : std_logic_vector(24*38-1 downto 0) := (others => '0');
26
27
begin
28
29
process(clk32,dataIn) 
30
   begin
31
      if rising_edge(clk32) then
32
         if in_data_phase = '1' then
33
            if count < 11 then
34
               dout <= '1';
35
               count <= count+1;
36
            elsif count < 29 then
37
               if data(data'high) = '1' then
38
                  dout <= '1';
39
               else
40
                  dout <= '0';
41
               end if;
42
               count <= count+1;
43
            elsif(count < 39) then
44
               dout <= '0';
45
               count <= count+1;
46
            else
47
               dout <= '0';
48
               count <= (others => '0');
49
               if bit_count = data'high-1 then
50
                  in_data_phase <= '0';
51
               else
52
                  bit_count <= bit_count + 1;
53
                  data <= data(data'high-1 downto 0) & '0';
54
                  bit_count <= bit_count+1;
55
               end if;
56
            end if;
57
         else
58
            -- send the reset signal (50us of low)
59
            dout <= '0';
60
            if count = 1599 then
61
                data <= dataIn;
62
   
63
            
64
            
65
               in_data_phase <= '1';
66
               bit_count <= (others => '0');
67
               count <= (others => '0');
68
            else
69
               count <= count + 1;
70
            end if;
71
         end if;
72
      end if;
73
      
74
  
75
   end process;
76
77
end Behavioral;

von VHDL hotline (Gast)


Lesenswert?

Das ist falsch:
1. Deine Fehlerbeschreibung ist nicht ausreichend.
2. Du verwendest einen abgeleiteten clock statt clock enable.
3. Du reagierst im synchronen Prozess nicht auf die Taktflanke.
3. Du verwendest for-Schleifen in VHDL falsch.
4. Du hast den Schalter weder einsynchronisiert noch entprellt.
5. Du hast nicht simuliert.
6. Du hast nicht simuliert.
7. Du hast nicht simuliert.

Zu beachten ist besonders 5-7. Simuliere und dir wird einiges klarer 
werden. Außerdem sparst du eine Menge Zeit gegenüber trial and error in 
Hardware.

von S. N. (higgns)


Lesenswert?

Hi,

ohne jetzt die Funktionalität deines Codes nachvollzogen zu haben ein 
paar Tips zur "Infrastruktur":

Deiner Statemachine fehlt der Takt (if rising_edge(..)).

Wie lkmiller schon erwähnt hat, ist es nicht sinnvoll die Takteingänge 
deiner synchronen Logik mit einem im Fabric generierten Signal 
anzusteuern. Du musst aber auch nicht gleich einen Clockmanager 
verwenden. Am einfachsten wäre es statt dem Takt ein Clock Enable Signal 
zu definieren welches Bedingung für den rest der Logik ist. Das sähe 
dann in Etwa so aus:
1
process(clk) begin
2
...
3
if cnt = 3 then
4
    CE <= '1';
5
else
6
    CE <= '0';
7
end if;
8
...
9
end process;
10
11
...
12
...
13
14
-- restliche funktionalität
15
process(clk) begin
16
    if rising_edge(clk) then
17
        if CE = '1' then
18
            ...
19
        end if;
20
    end if;
21
end process;

von Benedikt Schwarg (Gast)


Lesenswert?

Also bist jetzt über trial and error rausgefunden zur 
Fehlerbeschreibung. CASE 1 passt, Allelichter sind an.
CASE 2 alle Lichter bleiben an. Auch wenn Schalter (ist ein Switch) 
umgelegt wurde.
Case 3 das selbe er bleibt an ohne etwas zu machen.

So des weiteren die for schleife ist dafür da, dass alles 3mal 
durchlaufen werden soll bevor ich in den nächsten state springe kann man 
das auch anders machen oder was ist an der Verwendung so falsch?

Zu der taktflanke im lrocess in main; muss ich darauf überhaupt 
reagieren?
Also kann ich das ganze nicht auch ohne clock machen?

Clock enable muss ich mich einlesen, genauso wie in die Simulation in 
vivado..

von Benedikt Schwarg (Gast)


Lesenswert?

> Zu der taktflanke lrocess in main; muss ich darauf überhaupt
> reagieren? Also kann ich das ganze nicht auch ohne clock machen?
Also das ist natürlich blöd formuliert aber müsste ich nicht auf eine 
andere clock reagieren, da meine daten ja alle 25MHz/1600 in meiner 
Component überschrienen werden

von P. K. (pek)


Lesenswert?

Benedikt Schwarg schrieb:
> So des weiteren die for schleife ist dafür da, dass alles 3mal
> durchlaufen werden soll bevor ich in den nächsten state springe kann man
> das auch anders machen oder was ist an der Verwendung so falsch?
Du denkst falsch. In HDL wir ein FOR-Loop nicht sequentiell abgearbeitet 
sondern es ist alles gleichzeitig vorhanden. Was du hier brauchst ist 
ein Zähler, also eine Sub-FSM innerhalb des States.

Benedikt Schwarg schrieb:
> Clock enable muss ich mich einlesen, genauso wie in die Simulation in
> vivado..
Tu das! Und zwar mit oberster Priorität. Bevor du auch nur wieder etwas 
anderes am Design machst.
(Das nicht zu tun wäre etwa dasselbe, wie über Blasen an den Füssen zu 
klagen weil man täglich 50km zu Fuss gehen muss, eigentlich ein Auto hat 
aber keine Zeit investieren will, damit fahren zu lernen.)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

P. K. schrieb:
> Was du hier brauchst ist ein Zähler, also eine Sub-FSM innerhalb des
> States.
Aber aufpassen, dass du diesen Zähler nicht in einen kombinatorischen 
Prozess einbaust. Denn das gäbe die berüchtigte kombinatorische 
Schleife:
http://www.lothar-miller.de/s9y/categories/36-Kombinatorische-Schleife

Sieh auch das dort:
http://www.lothar-miller.de/s9y/archives/43-Ein-oder-Zwei-Prozess-Schreibweise-fuer-FSM.html

Und zum Thema "Taktteiler" siehe das Clock-Enable dort im Lauflicht:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html
Das gesamte Design läuft mit 10MHz. Aber die LEDs werde nur mit 3Hz 
weitergeschaltet. Ich würde übrigens empfehlen, dass du genau solche 
kleinen Codeschnipsel-Projekte vor dem ersten "produktiven" Projekt 
machst und nicht gleich mit dem "Roulette" anfängst. Ein Flugzeugbauer 
wird evtl. auch erst mal ein paar Papierflieger falten und Modellflieger 
aufbauen, vor er sich an den Düsenjäger macht...

: Bearbeitet durch Moderator
von Benedikt S. (bene_sch)


Lesenswert?

> Was du hier brauchst ist ein Zähler, also eine Sub-FSM innerhalb des
> States.
1
when 2 =>--Kugel läuft durch. Alle 10mal(timer) wird die Kugel um eins weiter geschoben
2
                        if timer = 5 then
3
                            runvar <= runvar +1;
4
                            timer <= 0;
5
                            --inData <=stdData;
6
                            inData ((kugelctr*24-1) downto ((kugelctr-1)*24)) <=kugel;
7
                            tmpData <= inData;
8
                            if kugelctr = 37 then
9
                                kugelctr <= 0;
10
                             else 
11
                                kugelctr <= kugelctr+1;
12
                            end if;
13
                        else 
14
                            inData <= tmpData;
15
                            timer <= timer +1;
16
                        end if;
17
                    if runvar = 111 then
18
                        runvar <= 0;
19
                        state <= 3;
20
                    end if;
Sowas?

Also clock enable habe ich jetzt so verstanden :
1
 
2
process(clk)
3
begin
4
    if rising_edge(clk) then
5
        if clkctr = 3 then
6
            clke <= '1';
7
            clkctr <= 0;            
8
        else
9
            clke <= '0';
10
            clkctr <= clkctr+1;
11
        end if;
12
     end if;
13
end process;
14
15
    process(clk,Schalter)
16
    begin
17
        if rising_edge(clk) then
18
            if clke = '1' then

Gibt es gute Guides für die Vivado Simulation? Die Videos auf Youtube 
veraten mir nicht wie ich clocks einbinde sonder zeigen nur die größten 
Basics und der Guide von Vivado selber ist zu viel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Benedikt S. schrieb:
> Die Videos auf Youtube veraten mir nicht wie ich clocks einbinde
Du musst keine "Clocks einbinden", sondern eine Testbench schreiben, die 
den Takt erzeugt und dein Design als Komponente (component) enthält. 
Ich kanns offenbar nicht oft genug sagen, aber irgendwann könnte es ja 
klappen: sieh dir mal ein paar Beispiele auf meiner HP an...

Dort wird z.B. mit
    clk <= not clk after 10 ns;
einfach ein Takt für den Sinusgenerator erzeugt:
http://www.lothar-miller.de/s9y/archives/57-Sinusausgabe-mit-PWM.html
In dieser Testbench ist dann der Sinusgenerator als Komponente 
eingebunden und verdrahtet...

Eine Testbench erkennt man übrigens daran, dass sie keine Ports nach 
aussen hat:
ENTITY tb_sinusPWM_vhd IS
   -- keine Ports in der Entity --> das ist eine Testbench
END tb_sinusPWM_vhd;

: Bearbeitet durch Moderator
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.