www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Aufrufen von library


Autor: Doung W. (honeyleabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe eine library definieren.

package lib is
   type fu_type is (ADD_SUB, MULT_16);
      type vector_width is record
               input_width : integer;
               output_width : integer;
   end record;
   function get_vector_width(fu : fu_type) return vector_width;
   end package lib;

package body lib is

   function get_vector_width(fu : fu_type) return vector_width is

       begin
               if  fu =MULT_16 then
                       return vector_width'(32,32);
               elsif fu = ADD_SUB then
                       return vector_width'(65,33);
                          end if;
        end function get_vector_width;
     end package body lib;

und ich mache andere vhdl file.Brauche ich zu library aufrufen.


library IEEE;
use IEEE.std_logic_1164.all;
use work.lib.all;

entity test is
generic ( fu_in : integer := get_vector_width("add_sub").input_width ;
          fu_out: integer := get_vector_width("add_sub").output_width
        );
port
(
  input: in std_logic_vector(fu_in -1 downto 0);
  output: out std_logic_vector(fu_out -1 downto 0)
);
end tset;

Aber wo ist die fehler?

MFG
Dong

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber wo ist die fehler?

Wie lautet denn die Fehlermeldung?
Was willst Du machen?
Simulieren?
Synthetisieren?
Hast Du eine VHDL Testbench?

Duke

Autor: Doung W. (honeyleabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
>>Aber wo ist die fehler?
>
> Wie lautet denn die Fehlermeldung?
> Was willst Du machen?
> Simulieren?
> Synthetisieren?
> Hast Du eine VHDL Testbench?
>
> Duke

Fehler melden :Type error in selected expression.
ich moechte simulieren

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Du rufst die Funktion get_vector_width() mit einem String als 
Parameter auf, nicht mit fu_type, also wennschon 
get_vector_width(add_sub) nicht get_vector_width("add_sub").
2) Ich wäre mir nicht so sicher, ob Funktionsaufrufe bei der definition 
von Default-Werten zulässig sind.

Autor: Doung W. (honeyleabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Falser schrieb:

> get_vector_width(add_sub) nicht get_vector_width("add_sub").
das punkt.
Ich wäre mir nicht so sicher, ob Funktionsaufrufe bei der definition
von Default-Werten zulässig sind.
das auch geht.

aber wie kann ich funktion von fuer egal fu_type aufrufen?
d,h, ohne Default-Werten

Autor: Doung W. (honeyleabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe schon es probieren.aber funktioniert nichts.

use work.bisr_lib.all;

entity test is
generic (
            fu_nummer : integer;
            fu_nummer1 : integer
         );
port
(
  reset : in std_logic;
  fulogik : in fu_type;
  input00,input01,input02: in std_logic_vector(fu_nummer-1 downto 0);
  sel : in std_logic_vector(1 downto 0);
  output00,output01,output02: out std_logic_vector(fu_nummer1-1 downto 
0)
);
end test;

architecture behav of test is

 begin
   if fulogik = mul16 then
      fu_nummer<= get_vector_width(mul16).input_width;
      fu_nummer1<= get_vector_width(mul16).output_width;
end behav;

Kann jemand mir vorschlaege?

MFG
Dong

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe dein erstes Beispiel mit ModelSim compiliert, und es funktioniert.
Man muß es nur auf:

generic ( fu_in : integer := get_vector_width(add_sub).input_width ;
          fu_out: integer := get_vector_width(add_sub).output_width
        );
ändern, außerdem stimmt "end tset" nicht --> end test

Ansonsten konnte ich es problemlos compilieren.

Beim 2. Beispiel stimmt halt der type nicht. Der definierte Namen lautet 
mult_16, du schreibst aber mul16.

Auf Tippfehler achten !!

Autor: Doung W. (honeyleabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Falser schrieb:
> Habe dein erstes Beispiel mit ModelSim compiliert, und es funktioniert.
> Man muß es nur auf:
>
> generic ( fu_in : integer := get_vector_width(add_sub).input_width ;
>           fu_out: integer := get_vector_width(add_sub).output_width
>         );
> ändern, außerdem stimmt "end tset" nicht --> end test
>
> Ansonsten konnte ich es problemlos compilieren.
>
> Beim 2. Beispiel stimmt halt der type nicht. Der definierte Namen lautet
> mult_16, du schreibst aber mul16.
>
> Auf Tippfehler achten !!

Danke fuer deine Tipp.ABer wie geht's los mit meine Frage?

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist noch deine offene Frage?
Es funktioniert ja wenn Du es richtig schreibst.
Was funktioniert nicht, welche Fehlermeldung, wann, welcher Compiler?
Ansonsten poste noch mal den ganzen Code, als Anhang, nicht im Text.

Autor: Doung W. (honeyleabe)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Falser schrieb:
> Was ist noch deine offene Frage?
> Es funktioniert ja wenn Du es richtig schreibst.
> Was funktioniert nicht, welche Fehlermeldung, wann, welcher Compiler?
> Ansonsten poste noch mal den ganzen Code, als Anhang, nicht im Text.

ich moechte fuer egal basislogik funktion verwenden . abhangig von 
fulogik.

Autor: Klaus Falser (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, das angehängte Beispiel macht was Du möchtest.
ModelSim akzeptiert es, ob es synthetisierbar ist, weiss ich nicht.

Was das Ganze allerdings bringen soll, ist mir nicht ganz klar.
Ich würde Dir aber eher raten, zuerst die Grundlagen von VHDL zu 
studieren, anstatt solche ausgefallenen und wahrscheinlich unsinnigen 
Konstruktionen zu verwenden, die versuchen die Abstraktheiten der SW 
Welt in die HW Welt zu übertragen.

Autor: Doung W. (honeyleabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Falser schrieb:
> Ich glaube, das angehängte Beispiel macht was Du möchtest.
> ModelSim akzeptiert es, ob es synthetisierbar ist, weiss ich nicht.

Danke fuer deine arbeit.
wenn ich deine rlb.vhd file auf ModelSim simuliert, kommt fehlemeldung
 "Fatal: (vsim-3350) Generic 'fulogik' has not been given a value."Das 
ist auch meine Fehler.

Autor: Doung W. (honeyleabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder das Frage ist:
   entity rlb is
     generic (fu : integer);
     port( input : in std_logic_vector(fu downto 0));
   end rlb;
architecture behav of rlb is

  begin
        fu := input +1;         --KANN MAN SO MACHEN????
end behav;

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Doung W.:

> fu := input +1;         --KANN MAN SO MACHEN????
Nein. Ein generic ist innerhalb der architecture wie eine Konstante zu 
verwenden, also read only.

Duke

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Doung
> wenn ich deine rlb.vhd file auf ModelSim simuliert, kommt fehlemeldung
> "Fatal: (vsim-3350) Generic 'fulogik' has not been given a value."

Du mußt irgendetwas beim Kompilieren falsch machen, bei mir klappt's.
- Du kannst aber rlb nicht direkt simulieren, Du mußt rlb_tb als 
top-level
  aufrufen.
- Du mußt das package zuerst compilieren

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.