Aufrufen von library

#1428706
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
#1429433
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.
#1431241
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
#1431354
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
Gast #1431573
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 !!
#1431708
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?
#1432244
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.
Angehängte Dateien:
Gast #1432785
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.
Angehängte Dateien:
#1432924
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.
Gast #1433895
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

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