mikrocontroller.net

Forum: FPGA, VHDL & Co. Array in der Port-Liste der Entity


Autor: Robert S. (razer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
library IEEE;
use ieee.numeric_std.all;

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

library IEEE;
library work;
use work.rgbdata_pgk.all;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;


entity rgbpwm is
  generic(outputs : integer := 3;
          resolution : integer := 9);
  
  port(clk : in std_ulogic;
       reset : in std_ulogic;
       pwmdata : in pwmdata_t;
       pwm : out std_logic_vector(outputs-1 downto 0));
end rgbpwm;

architecture behaviour of rgbpwm is

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

begin
  
  PWMCALC: process(clk, reset)
  begin
    if(reset = '1') then
      pwm_cnt <= (others => '0');
      for i in 0 to outputs-1 loop
        pwm_data_i(i) <= (others => '0');
      end loop;
    elsif(rising_edge(clk)) then
      if(pwm_cnt = 2**resolution-1) then
        pwm_cnt <= (others => '0');
        for i in 0 to outputs-1 loop
          pwm_data_i(i) <= pwmdata(i);
        end loop;
      else
        pwm_cnt <= pwm_cnt + 1;
      end if;
    end if;
  end process;
  
  PWMOUT: process(clk)
  begin
    for i in 0 to outputs-1 loop
      if(pwm_cnt>pwm_data_i(i)) then
        pwm(i) <= '1';
      else
        pwm(i) <= '0';
      end if;
    end loop;
  end process;

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

Autor: dr.schmock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannst die Konstanten für die Generics ja auch ins Package packen.

Wo ist die clk-Abfrage in "PWMOUT: process(clk)"?

Autor: Robert S. (razer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 :/
 PWMOUT: process(clk)
  begin
  if(rising_edge(clk)) then
    for i in 0 to ouputs-1 loop
      if(pwm_cnt>pwm_data_i(i)) then
      pwm(i) <= '1';
      else
      pwm(i) <= '0';
      end if;
    end loop;
  end if;
  end process;

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

lg Robert

Autor: dr.schmock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab diese Konstanten immer bei der Instantiierung übergeben (so weit 
ich weiß).
z.B.
PWM_Inst : rgbpwm is
generic map (outputs => konst_aus_package,
--usw.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.