Forum: FPGA, VHDL & Co. vhdl-anfänger: wie packages benutzen?


von KoF (Gast)


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

von FPGA-User (Gast)


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;

von KoF (Gast)


Angehängte Dateien:

Lesenswert?

danke für die hilfe :-)

aber hinbekommen habe ich es immer noch nicht :-(

jetzt anbei die codes ;-)

von FPGA-User (Gast)


Angehängte Dateien:

Lesenswert?

hab mal deine Package-Deklarationen entfernt und die
beiden components in pwm_top eingebunden.
der ModelSim hats gefressen, hoffe das ist das,
was du machen wolltest.

von FPGA-User (Gast)


Lesenswert?

hats geholfen?

von KoF (Gast)


Lesenswert?

danke :-) ich werde es gleich testen :-)

von KoF (Gast)


Angehängte Dateien:

Lesenswert?

hmm, sieht der signalverlauf so richtig aus?
wenn clock toggelt, läuft dout hoch und wird in pwm geschriebnen?

^^ ich muß noch viel lernen!!!

von ups (Gast)


Lesenswert?

die clk würde mir bei 2us aber sorgen bereiten :-)

von KoF (Gast)


Lesenswert?

ja ;-) die wurde auch von hand im simulator getoggelt ;-)

von FPGA-User (Gast)


Lesenswert?

@KoF
also für die Funktion bist Du verantwortlich,
ich kann mir ehrlich gesagt keinen Reim drauf
machen, was da genau ablaufen soll, kann Dir
aber helfen, wenns beim VHDL klemmt.

von fränkie (Gast)


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.

von FPGA-User (Gast)


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

von FPGA-User (Gast)


Lesenswert?

sorry, das Bsp. war schlecht, das Versionregister
sollte man ja eigentlich nur lesen können...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.