Array in der Port-Liste der Entity

OP Persönliche Seite #1644891
Lesenswert?

Hallo an alle,

Vor zwei Wochen begann ich mich mit dem Thema FPGA und VHDL zu 
beschäftigen.
Als Übung habe ich eine Mehrphasige PWM Beschreibung entworfen.

Dazu habe ich jedoch eine Frage
1
library IEEE;
2
use ieee.numeric_std.all;
3

4
package rgbdata_pgk is
5
        type pwmdata_t is array (0 to 2) of unsigned(8 downto 0);
6
end rgbdata_pgk;
7

8
library IEEE;
9
library work;
10
use work.rgbdata_pgk.all;
11
use IEEE.std_logic_1164.all;
12
use IEEE.numeric_std.all;
13

14

15
entity rgbpwm is
16
  generic(outputs : integer := 3;
17
          resolution : integer := 9);
18
  
19
  port(clk : in std_ulogic;
20
       reset : in std_ulogic;
21
       pwmdata : in pwmdata_t;
22
       pwm : out std_logic_vector(outputs-1 downto 0));
23
end rgbpwm;
24

25
architecture behaviour of rgbpwm is
26

27
signal pwm_cnt : unsigned(resolution-1 downto 0) := (others => '0');
28
signal pwm_data_i : pwmdata_t;
29

30
begin
31
  
32
  PWMCALC: process(clk, reset)
33
  begin
34
    if(reset = '1') then
35
      pwm_cnt <= (others => '0');
36
      for i in 0 to outputs-1 loop
37
        pwm_data_i(i) <= (others => '0');
38
      end loop;
39
    elsif(rising_edge(clk)) then
40
      if(pwm_cnt = 2**resolution-1) then
41
        pwm_cnt <= (others => '0');
42
        for i in 0 to outputs-1 loop
43
          pwm_data_i(i) <= pwmdata(i);
44
        end loop;
45
      else
46
        pwm_cnt <= pwm_cnt + 1;
47
      end if;
48
    end if;
49
  end process;
50
  
51
  PWMOUT: process(clk)
52
  begin
53
    for i in 0 to outputs-1 loop
54
      if(pwm_cnt>pwm_data_i(i)) then
55
        pwm(i) <= '1';
56
      else
57
        pwm(i) <= '0';
58
      end if;
59
    end loop;
60
  end process;
61

62
end behaviour;

Oben ist mein Code. Was mir nicht gefällt, ich habe das Array in einem 
Package definiert. Wenn ich jetzt die Anzahl der Phasen bzw. deren 
Auflösung ändern möchte muss ich das im Package und bei den Generics 
ändern.

Wie kann ich das machen, dass ich das nur an einer Stelle ändern muss.

Wie beurteilt ihr prinzipiell meinen Code?

Danke im Voraus
lg Robert
OP Persönliche Seite #1644914
Lesenswert?

dr.schmock schrieb:
> Wo ist die clk-Abfrage in "PWMOUT: process(clk)"?

Danke für den Hinweis. Mea Culpa, leider hatte ich das falsche File 
upgeloadet :/
1
 PWMOUT: process(clk)
2
  begin
3
  if(rising_edge(clk)) then
4
    for i in 0 to ouputs-1 loop
5
      if(pwm_cnt>pwm_data_i(i)) then
6
      pwm(i) <= '1';
7
      else
8
      pwm(i) <= '0';
9
      end if;
10
    end loop;
11
  end if;
12
  end process;

Durch die Definition der Konstanten kann ich die aber durch die Entity 
darüber nicht mehr konfigurieren, oder?

lg Robert

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