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
>Aber wo ist die fehler? Wie lautet denn die Fehlermeldung? Was willst Du machen? Simulieren? Synthetisieren? Hast Du eine VHDL Testbench? Duke
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
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.
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
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
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 !!
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?
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.
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.
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.
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.
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;
@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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.