www.mikrocontroller.net

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


Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
package counter is
  component jcounter port(
    clk: in std_logic;
    dout: buffer std_logic_vector(7 downto 0)
    );
  end component;
end counter;
und package 2 ist so definiert:
package pwm is
  component pwm port(
    clock : in std_logic;
    PWM_in : in std_logic_vector (7 downto 0) := "00000000";
    PWM_out : out std_logic
    );
  end component;
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

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: KoF (Gast)
Datum:
Angehängte Dateien:
  • pwm.zip (814 Bytes, 15 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
danke für die hilfe :-)

aber hinbekommen habe ich es immer noch nicht :-(

jetzt anbei die codes ;-)

Autor: FPGA-User (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hats geholfen?

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke :-) ich werde es gleich testen :-)

Autor: KoF (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!!!

Autor: ups (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die clk würde mir bei 2us aber sorgen bereiten :-)

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ;-) die wurde auch von hand im simulator getoggelt ;-)

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: fränkie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.:
   type VERSION_REG_TYPE is
      record
         version  : integer range 0 to 255;
         revision : integer range 0 to 255;
      end record;

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

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

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

Autor: FPGA-User (Gast)
Datum:

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

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.