SucheAltera DE2-115 VHDL Code und Pinbelegung für einen Sinustongenerator

Moderator (Firma: Titel) Persönliche Seite #3539702
Lesenswert?

Pascal K. schrieb:
> Servus, ich suche im Rahmen einer Projektarbeit für ein Altera
> DE2-115 Board den VHDL Code und Pinbelegung für einen Sinustongenerator.
Wie wäre es mit "Selbermachen"? Ist ja nun kein Hexenwerk...

> Hat jemand Erfahrung damit oder kann mir den Code und die Pinbelegung
> dafür posten?
Zum Code: du musst einen Sinus erzeugen und den hinterher auf einem 
DA-Wandler oder per PWM ausgeben. Alles keine Raketentechnik. Dein 
Stichwort: DDFS
http://www.lothar-miller.de/s9y/categories/31-DDFS
Gast #3539748
Lesenswert?

Danke erstmal für die schnelle Antwort lkmiller

Habe jetzt folgenden Quellcode:
1
library IEEE;
2
use IEEE.std_logic_1164.ALL;
3
use IEEE.numeric_std.ALL;
4

5
entity SinusPWM is
6
    Port ( clk : in  STD_LOGIC;
7
           pwmout : out  STD_LOGIC);
8
end SinusPWM;
9

10
architecture Behavioral of SinusPWM is
11
   component DDFS is
12
      Port ( CLK       : in  std_logic;
13
             Freq_Data : in  std_logic_vector (7 downto 0);
14
             Dout      : out std_logic_vector (7 downto 0));
15
   end component;
16
   
17
   component PWM is
18
      Port ( clk      : in  std_logic;
19
             pwmvalue : in  std_logic_vector (7 downto 0);
20
             pwmout   : out std_logic);
21
   end component;
22

23
   signal sinus  : std_logic_vector(7 downto 0);
24
   signal sinusplusoffset  : std_logic_vector(7 downto 0);
25

26
begin
27
   I_ddfs : DDFS 
28
   port map( CLK => clk,
29
             Freq_Data  => x"cc",
30
             Dout => sinus);
31

32
   sinusplusoffset <= std_logic_vector(unsigned(sinus)+to_unsigned(128,8));
33

34
   I_pwm : PWM
35
   port map( CLK => clk,
36
             pwmvalue => sinusplusoffset,
37
             pwmout => pwmout);
38

39
end Behavioral;

Dann habe ich noch 2 VHDL Dateien für PWM und DDFS erstellt mit den 
folgenden Codes:


PWM:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4

5
entity PWM is
6
    Port ( clk      : in  STD_LOGIC;
7
           pwmvalue : in  STD_LOGIC_VECTOR (7 downto 0);
8
           pwmout   : out STD_LOGIC := '0');
9
end PWM;
10

11
architecture Behavioral of PWM is
12
signal cnt : integer range 0 to 254 := 0;
13
begin
14
   process begin
15
      wait until rising_edge(clk);
16
      -- Zähler         
17
      if (cnt<254) then cnt <= cnt+1;
18
      else              cnt <= 0;
19
      end if;      
20
  end process;
21
   
22
   -- Vergleicher
23
   pwmout <= '0' when (cnt>=to_integer(unsigned(pwmvalue))) else '1';
24
  
25
end Behavioral;
26

27
und DDFS:
28

29
library IEEE;
30
  use IEEE.std_logic_1164.all;
31
  use IEEE.numeric_std.all;
32
Entity DDFS is
33
   Port ( CLK       : in  std_logic;
34
          Freq_Data : in  std_logic_vector (7 downto 0);
35
          Dout      : out std_logic_vector (7 downto 0)
36
        );
37
   end DDFS;
38
  
39
Architecture RTL of DDFS is
40
  signal Result  : std_logic_vector (7 downto 0);
41
  signal Accum   : unsigned (20 downto 0) := (others=>'0'); 
42
  alias  Address : unsigned (6 downto 0) is Accum(Accum'high-1 downto Accum'high-7);
43
  alias  Sign    : std_logic is Accum(Accum'high); -- MSB
44
begin
45
   process begin
46
     wait until rising_edge(CLK);
47
     Accum <= Accum + unsigned(Freq_Data);
48
   end process;
49

50
   process (Address)
51
     type Rom128x8 is array (0 to 127) of std_logic_vector (7 downto 0); 
52
     constant Sinus_Rom : Rom128x8 := (
53
       x"00",  x"03",  x"06",  x"09",  x"0c",  x"0f",  x"12",  x"15",
54
       x"18",  x"1b",  x"1e",  x"21",  x"24",  x"27",  x"2a",  x"2d",
55
       x"30",  x"33",  x"36",  x"39",  x"3b",  x"3e",  x"41",  x"43",
56
       x"46",  x"49",  x"4b",  x"4e",  x"50",  x"52",  x"55",  x"57",
57
       x"59",  x"5b",  x"5e",  x"60",  x"62",  x"64",  x"66",  x"67",
58
       x"69",  x"6b",  x"6c",  x"6e",  x"70",  x"71",  x"72",  x"74",
59
       x"75",  x"76",  x"77",  x"78",  x"79",  x"7a",  x"7b",  x"7b",
60
       x"7c",  x"7d",  x"7d",  x"7e",  x"7e",  x"7e",  x"7e",  x"7e",
61
       x"7f",  x"7e",  x"7e",  x"7e",  x"7e",  x"7e",  x"7d",  x"7d",
62
       x"7c",  x"7b",  x"7b",  x"7a",  x"79",  x"78",  x"77",  x"76",
63
       x"75",  x"74",  x"72",  x"71",  x"70",  x"6e",  x"6c",  x"6b",
64
       x"69",  x"67",  x"66",  x"64",  x"62",  x"60",  x"5e",  x"5b",
65
       x"59",  x"57",  x"55",  x"52",  x"50",  x"4e",  x"4b",  x"49",
66
       x"46",  x"43",  x"41",  x"3e",  x"3b",  x"39",  x"36",  x"33",
67
       x"30",  x"2d",  x"2a",  x"27",  x"24",  x"21",  x"1e",  x"1b",
68
       x"18",  x"15",  x"12",  x"0f",  x"0c",  x"09",  x"06",  x"03" );
69
   begin
70
     Result <= Sinus_Rom (to_integer(Address));
71
   end process;
72
   
73
   -- Output registers
74
   -- ----------------
75
   process begin
76
     wait until rising_edge(CLK);
77
     if (Sign='1') 
78
     then Dout <= Result;
79
     else Dout <= std_logic_vector (- signed(Result));
80
     end if;
81
   end process;
82

83
end RTL;


Beim Kompilieren gibt es keine Fehler, wie sieht dann konkret die 
Pin-Belegung aus?
Moderator (Firma: Titel) Persönliche Seite #3540136
Lesenswert?

Pascal K. schrieb:
> Wie muss ich die Pins belegen, wenn ich den Sinuston über Lautsprecher
> vom Board hören will?
Wie ist der Lautsprecher vom Board angeschlossen?
Denk dran: du studierst und hast dir die Projektarbeit ausgesucht, und 
du solltest was dafür tun und was dabei lernen. Oder meinst du nicht? 
:-/

Wenn du dir vergegenwärtigst, dass ein Lautsprecher schon ein Tiefpass 
ist, dann muss nur deine PWM-Frequenz ausreichend hoch sein, und es 
reicht aus, wenn du den Lautsprecher direkt an einen FPGA-Pin 
anschließt. So habe ich das beim SAB0600 Nachbau auch gemacht:
Beitrag "SAB0600 in VHDL (war: Warum ist hier weniger los als)"
http://www.lothar-miller.de/s9y/archives/85-SAB0600.html

Pascal K. schrieb:
> Beim Kompilieren gibt es keine Fehler
Ja, irgendwie logisch. Das ist ja auch im Groben mein DDFS Code.
BTW: mach bitte die Tokens [ vhdl ] und [ /vhdl  ] ohne die Leerzeichen 
um den Code. Das ist besser für das Syntax-Highlighting...

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