Hier mein Code:
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 Noise2 is |
7 | Port ( |
8 | D : out std_logic_vector (7 downto 0); |
9 | Speaker : out std_logic; |
10 | Taste1 : in bit; |
11 | Taste2 : in bit; |
12 | LED_rot : out std_logic |
13 | ); |
14 | end Noise2; |
15 | |
16 | architecture Behavioral of Noise2 is |
17 | signal Schieberegister : std_logic_vector(31 downto 0); |
18 | begin |
19 | Noisegenerator: process (Taste2) |
20 | begin |
21 | if (Taste2 = '1' and Taste2'event) |
22 | then |
23 | if Schieberegister(31) = '1' then |
24 | Schieberegister <= Schieberegister(30 downto 0) & '0'; |
25 | elsif Taste1 = '1' then |
26 | Schieberegister <= x"00000001"; |
27 | else |
28 | Schieberegister <= (Schieberegister(30 downto 0) & '0'); |
29 | Schieberegister <= Schieberegister xor x"04C11DB7"; |
30 | end if; |
31 | end if; |
32 | end process Noisegenerator; |
33 | |
34 | D <= Schieberegister(7 downto 0); |
35 | Speaker <= Schieberegister(0); |
36 | LED_rot <= '1'; |
37 | |
38 | end Behavioral; |
Ich habe das so in C programmiert:
1 | //*************************************************************************** |
2 | //* Meine 32-Bit Zufallszahlenroutine in C |
3 | //* wenn Übergabewert ungleich 0 dann wird mit Übergabewert initialisiert! |
4 | //*************************************************************************** |
5 | int my_rand(int init_rand) |
6 | {
|
7 | static unsigned int Z; |
8 | if (init_rand) Z = init_rand; |
9 | |
10 | if (Z & 0x80000000) |
11 | {
|
12 | Z<<=1; |
13 | Z^=0x04C11DB7; |
14 | } |
15 | else |
16 | {
|
17 | Z<<=1; |
18 | } |
19 | return Z; |
20 | } |
21 | //*************************************************************************** |
Habe auch schon:
1 | Schieberegister <= Schieberegister sll 1; |
probiert, da gab's dann Fehlermeldung.