vhdl-anfänger: wie packages benutzen?

Gast #251248
Lesenswert?

man möge mir eine solche anfängerfrage verziehen, doch ich muss sie
einfach stellen, da ich einfach nicht weiter komme.

ich habe 2 packages geschrieben. diese möchte ich jetzt verwenden. sie
sehen so aus:
package 1 ist so definiert:
1
package counter is
2
  component jcounter port(
3
    clk: in std_logic;
4
    dout: buffer std_logic_vector(7 downto 0)
5
    );
6
  end component;
7
end counter;
und package 2 ist so definiert:
1
package pwm is
2
  component pwm port(
3
    clock : in std_logic;
4
    PWM_in : in std_logic_vector (7 downto 0) := "00000000";
5
    PWM_out : out std_logic
6
    );
7
  end component;
8
end pwm;
(die implementierungen poste ich jetzt erstmal nicht da der code sehr
... sagen wir igit aussieht (anfänger halt))

nun möchte ich ein programm schreiben, das den counterinhalt (dout) auf
PWM_in umlenkt. aber wie nur???

würdet ihr mir hierbei bitte helfen?

mfg
KoF
Gast #251249
Lesenswert?

also ich nutze Packages nur für Funktionen, Prozeduren,
Konstanten usw. nicht für Components.

ich gehe davon aus, dass es je 1 File jcounter.vhd und
pwm.vhd gibt.

jetzt schreibst du einfach ein File, das sozusagen
1 Hierarchieebene höher liegt, also diese beiden
Komponenten verbindet. Dazu gibst du in der
architecture die beiden component-Deklarationen an
machst dann 2 Instanzen, die per Signal verbunden werden,
Bsp.:

entity top is
...
end;

architecture behave of top is
   component jcounter
   ...

   component pwm
   ...

begin

   jcounter_unit : jcounter
   port map (
      clk  => clk,
      dout => dout
   );

   pwm_unit : pwm
   port map (
      clk => clk,
      pwm_in => dout, -- !
      pwm_out => pwm_out
   );

end;
Gast #251258
Lesenswert?

Jetzt habe ich mal ne Frage am Rande... Was ist eigendlich der vorteil
von Packages im vergleich dazu, den Code einfach als Component
einzubinden?
Ich sehe da leider keinen Vorteil. Bis jetzt habe ich alles immer mit
"component" eingebunden.
Gast #251259
Lesenswert?

@fränkie

wie gesagt, ich würde Packages für Funktionen, Prozeduren,
Konstanten usw. nutzen. Beispiel :
Ein 32 bit-Register im FPGA soll von einem uC beschrieben
und gelesen werden können.
Die Typ-Deklaration des Registers erfolgt im Package
als "record", z.B.:
1
   type VERSION_REG_TYPE is
2
      record
3
         version  : integer range 0 to 255;
4
         revision : integer range 0 to 255;
5
      end record;

jetzt schreib ich mir 2 Konvertierungsfunktionen dazu :
1
   function slv2reg ( slv : std_logic_vector(15 downto 0) )
2
      return VERSION_REG_TYPE;
3
   
4
   function reg2slv ( reg : VERSION_REG_TYPE )
5
      return std_logic_vector;

Im Source-Code kann ich jetzt einfach schreiben
1
   signal version_reg_q : VERSION_REG_TYPE;
2
   ...
3
   if wr='0' and adr = ADR_VERSION_REG
4
      version_reg_q <= slv2reg(uC_datenbus); -- 32 bit datenbus
5
   ...

jetzt kann ich ganz bequem auf das Register zugreifen und
muss nicht mit einzelnen Bits rumhantieren, eine Änderung
des Registers wird zentral im Package gemacht, das bedeutet
wenig Aufwand


da gibts noch viele Bsp. für die sinnvolle Verwendung von
Packages, man musses nur mal probieren

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