Forum: FPGA, VHDL & Co. Hilfe! MODELSIM: error: Library not found


von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Hallo Leute

Ich bin schon fast am verzweifeln. Modelsim kann zur Simulation 
irgendwelche Librarys nicht finden. Und zwar ist das bei mir die 
XP.library! Diese wird immer eingebunden, wenn mit dem IP-Generator ein 
Modul geschaffen wird, wie hier ein Dual-Port-Block-RAM
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
-- synopsys translate_off
4
library xp;
5
use xp.components.all;
6
-- synopsys translate_on
7
8
entity MEMORY is
9
    port (
10
        WrAddress: in  std_logic_vector(8 downto 0); 
11
        RdAddress: in  std_logic_vector(8 downto 0); 
12
        Data: in  std_logic_vector(7 downto 0); 
13
        WE: in  std_logic; 
14
        RdClock: in  std_logic; 
15
        RdClockEn: in  std_logic; 
16
        Reset: in  std_logic; 
17
        WrClock: in  std_logic; 
18
        WrClockEn: in  std_logic; 
19
        Q: out  std_logic_vector(7 downto 0));
20
end MEMORY;

oder hier bei dem PLL

1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
-- synopsys translate_off
4
library xp;
5
use xp.components.all;
6
-- synopsys translate_on
7
8
entity PLL is
9
    port (
10
        CLK: in std_logic; 
11
        RESET: in std_logic; 
12
        CLKOP: out std_logic; 
13
        LOCK: out std_logic);
14
 attribute dont_touch : boolean;
15
 attribute dont_touch of PLL : entity is true;
16
end PLL;

Ich versuch jetzt schon seit Tagen irgendetwas verständliches für mich 
zu finden, wie ich diese Library einbinden kann und vor allem wo ich die 
finde?

Bisher war ich leider ERFOLGLOS!!!

Die Synthese funktioniert doch prima. Warum wird einem da die Simulation 
so schwer gemacht?.

Ich verwende einen Lattice XP-FPGA.
Programmier-Oberfläche ist ispLEVER Starter
mit ModelSim PE Student

WER KANN MIR DA WETERHELFEN?

Grüße Steffen

von user (Gast)


Lesenswert?

du musst die libraries von Lattice selbst in modelsim compilieren. 
schaue dazu mal in den installordner von lattice, sollte ein vhdl/src 
ordner sein

von Steffen H. (avrsteffen)


Lesenswert?

>du musst die libraries von Lattice selbst in modelsim compilieren.
Was heißt denn in ModelSim selbst compilieren? Kann man denn in ModelSim 
compilieren? Jetzt steh ich total auf dem Schlauch..
Ich dachte man muss da nur eine Library Namens XP. component 
einbinden?!

>schaue dazu mal in den installordner von lattice, sollte ein vhdl/src
>ordner sein
Ich habe im Lattice Install-Ordner einen der "cad_lib" oder "vlib" heißt 
der den Unterordner XP enthält und darin befindet sich auch ein 
Unterordner "src". Allerdings gibt es da keine component.vhd!

Ich kann ja heut abend mal die verschiedenen Ordnerstrukturen als Bild 
hier anhängen.

Hat vielleicht noch irgend jemand eine Idee ??

Grüße
Steffen

von berndl (Gast)


Lesenswert?

Unter Lattice Diamond zumindest gibt es unter diesem vhdl->source Ordner 
etwas fuer ModelSim (mtech?). Darin liegen Batchdateien, mit denen 
ModelSim die Lattice Bibliotheken compiliert.
Das sollte es bei deinem ISPLever ja auch so (oder so aehnlich) geben.

Ansonsten hast du ja auf dein ModelSim PE bestimmt auch Support, oder?

von Duke Scarring (Gast)


Lesenswert?

Steffen H. schrieb:
> Was heißt denn in ModelSim selbst compilieren? Kann man denn in ModelSim
> compilieren?

Ja logisch. Wenn man auf das GUI-Geraffel verzichten würde, könnte man 
die Zusammenhänge auch besser sehen:
1
--
2
-- vcom testbench.vhd
3
-- vsim testbench
4
-- add wave *
5
-- run 50 ns
6
------------------------------------------------------------
7
8
library ieee;
9
use ieee.std_logic_1164.all;
10
11
entity testbench is
12
end entity testbench;
13
...

Bei Dir müßte es ungefähr so heißen:
1
vlib xp
2
vcom -work xp .../lattice/.../src/.../*.vhd

Duke

von Steffen H. (avrsteffen)


Lesenswert?

WOW, Danke für eure schnellen Antworten.

@berndel
>Unter Lattice Diamond zumindest gibt es unter diesem vhdl->source Ordner
>etwas fuer ModelSim (mtech?). Darin liegen Batchdateien, mit denen
>ModelSim die Lattice Bibliotheken compiliert.
Welche Endungen sollten diese Datein denn haben? Ich weiß gar nicht mehr 
so recht wonach ich suchen sollte..

@Duke
Ich bin leider kein IT-ler. Deswegen versteh ich auch nichts von batchs 
und GUI-Geraffel :)
>Bei Dir müßte es ungefähr so heißen:
1
vlib xp
2
vcom -work xp .../lattice/.../src/.../*.vhd
Soll ich in etwa sowas mit in die Testbench schreiben oder soll das so 
ungefähr das sein, was dann bei ModelSim im Message-Window zu sehen sein 
sollte?

Irgendwie komm ich mir gerade voll doof vor.. :(

von berndl (Gast)


Lesenswert?

Diese Dateien heissen <irgendwas>.bat (sog. Batch Dateien). Kannst du 
dir ja mal mit z.B. Notepad anschauen. Und dort drin stehen dann die 
Kommandos 'vlib ...' und 'vcom ...' die Duke erwaehnt hat.

Du kannst diese Teile von Modelsim von einer Command Line ('cmd') 
starten, genauso wie du Modelsim an sich auch so starten kannst. Da die 
meiste EDA-SW ja urspruenglich aus der Unix Welt stammt, muss man nicht 
immer nur auf ein Icon klicken...

von Steffen H. (avrsteffen)


Lesenswert?

Okay, danke Jungs

Werd ich gleich mal versuchen. Meld mich sobald es neue Erkenntnisse 
gibt. Habe, glaub ich, gerade ein kleines Licht am Ende des Tunnels 
gesehen.

Schau´n wir mal

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

So, hab jetzt mal ein Screenshot von der Ordnerstruktur des ispLEVER 
Starter mit angehangen. Eine ".bat"-Datei hab ich gar nicht gefunden. 
Aber in der Synthesis eine "xp.vhd"
Da sind alle BlackBoxes gelistet.

Ist das eventuell meine Lib?

Ich errinnere nochmal: #ERROR .... Library XP not found

Wer kann helfen?

von Steffen H. (avrsteffen)


Lesenswert?

Es will einfach nicht gehen!


# -- Loading package standard
# -- Loading package std_logic_1164
# ** Error: I:/FPGA/Versuche/Test_MEM/MEM_V1/MEMORY.vhd(10): Library xp 
not found.
# ** Error: I:/FPGA/Versuche/Test_MEM/MEM_V1/MEMORY.vhd(11): (vcom-1136) 
Unknown identifier "xp".
# ** Error: I:/FPGA/Versuche/Test_MEM/MEM_V1/MEMORY.vhd(14): VHDL 
Compiler exiting
vcom -reportprogress 300 -work work 
I:/FPGA/Versuche/Test_MEM/MEM_V1/MEMORY.vhd
# Model Technology ModelSim PE Student Edition vcom 6.6d Compiler 
2010.11 Nov  2 2010

Also ModelSim versucht beim compilien von MEMORY.vhd die Library xp zu 
finden.. "xp.vhd" war es nicht!
Wie sieht denn so eine Lib aus? Welche Endung??? xp.lib hab ich schon 
gefunden. Die scheint es aber nicht zu sein.

von Steffen H. (avrsteffen)


Lesenswert?

Ach ja, hier nochmal der Anfangs-Code aus "MEMORY.vhd"
1
(07) library IEEE;
2
(08) use IEEE.std_logic_1164.all;
3
(09) -- synopsys translate_off
4
(10) library xp;
5
(11) use xp.components.all;
6
(12) -- synopsys translate_on
7
(13)
8
(14) entity MEMORY is
9
(15)    port (
10
(16)        WrAddress: in  std_logic_vector(8 downto 0); 
11
(17)        RdAddress: in  std_logic_vector(8 downto 0); 
12
(18)        Data: in  std_logic_vector(7 downto 0); 
13
(19)        WE: in  std_logic; 
14
(20)        RdClock: in  std_logic; 
15
(21)        RdClockEn: in  std_logic; 
16
(22)        Reset: in  std_logic; 
17
(23)        WrClock: in  std_logic; 
18
(24)        WrClockEn: in  std_logic; 
19
(25)        Q: out  std_logic_vector(7 downto 0));
20
(26) end MEMORY;

Frag mich auch wo ModelSim die Library erwartet?

von berndl (Gast)


Lesenswert?

du willst simulieren und suchst im Directory 'synthesis'? Nee, geh mal 
eins drueber in 'simulation', da muss es was ala Modelsim, Modeltech, 
mtech oder so geben. Und da liegen die Batchdateien drin (.bat, oder 
heissen die bei Wintendo mittlerweile .cmd?)

Mal ganz grundlegend zum Verstaendnis: Ein Simulator (z.B. Modelsim) 
versteht VHDL. Wenn du jetzt aber IC- oder FPGA-Hersteller bist, dann 
hast du auf dem Chip Bloecke, die halt etwas komplizierter als 'a AND b' 
sind. Die sind in Silizium gegossen. Ein Hersteller liefert daher eine 
VHDL 'Verhaltensbeschreibung' seiner speziellen Hardware mit. Diese 
Beschreibung ist i.A. nicht synthetisierbar, sie modelliert nur das 
Verhalten der Komponente. Und das ist genau das, was dein Simulator 
braucht. Und damit nicht jedesmal die ganze Library mit deinem Design 
kompiliert werden muss, kannst du das in einem Extraschritt mit deinem 
Simulator machen und danach nur noch 'einbinden'. Und genau darum geht 
es hier.

Du musst also mit dem Simulator deiner Wahl den vom FPGA Hersteller 
gelieferten Code compilieren (in eine Library), das kann jeder Simulator 
(sonst waere er zu nix zu gebrauchen...).

Wenn das ganze dann spaeter in HW synthetisiert werden soll, dann ist 
das was ganz anderes. Dein Synthesetool 'kennt' diese Komponenten schon 
und verdrahtet das schon richtig. Aber der Simulator weiss davon nix, du 
kannst ja schliesslich nicht verlangen, dass die Jungs und Maedels von 
Modelsim 'alle' FPGA Spezialbausteine in ihrer SW abbilden koennen. Dazu 
gibt's dann die .vhdl Beschreibungen der Hersteller.

Und ja, manchmal ist es tricky, diese Beschreibungen richtig im 
Simulator ans laufen zu bekommen (Stichwort Modelsim und Xilinx: 1ps 
Aufloesung im Simulator einstellen sonst tut z.B. die PLL nicht)

Gruss,
- berndl

von Steffen H. (avrsteffen)


Lesenswert?

Danke berndl

Ich glaub jetzt komm ich langsam dahinter wie du das meinst ;)

Muss noch ein wenig probieren, meld mich nochmal. Hat dann die Datei 
"xp.lib" auch gar nix damit zu tun?

Gruß
Steffen

von berndl (Gast)


Lesenswert?

Steffen H. schrieb:
> Hat dann die Datei
> "xp.lib" auch gar nix damit zu tun?

Vermutlich nicht. Du musst mit dem Simulator (bei Modelsim irgendwas mit 
'vlib' und 'vcom' wie Duke oben schon beschrieben hat) die Lattice .vhd 
Files kompilieren, die landen dann in einem Verzeichnis 'xp'. Dann musst 
du dem Simulator beim kompilieren deines Designs noch sagen, dass 
irgendwo unter 'xp' noch eine Library liegt (bei Modelsim ist das die 
Datei 'modelsim.ini', die wird aus dem Modelsim Verzeichnis immer in 
dein aktuelles Verzeichnis kopiert).

Aber da muss es doch bei der Lattice oder Modelsim Hilfe oder bei Tante 
google was geben...

Bei Xilinx gibt's ein extra Programm dafuer ('compxlib'?), bei Lattice 
Diamond habe ich da ein paar Batchdateien gesehen (aber es selbst noch 
nicht gemacht, also wenn du's geschafft hast bitte hier posten).

Was liegt denn in dem 'simulation' Verzeichnis bei dir? Da sollte der 
Schluessel zum Erfolg drinne liegen...

von berndl (Gast)


Lesenswert?

achso, wegen dem Verzeichnis 'xp': Du verwendest wohl einen Lattice 'XP' 
Baustein? Da wuerde er naemlich dann auch saemtliche 'XP' Primitives 
(wie z.B. PLL, Multiplier, RAM, ...) erwarten. Daher auch der Name 
'xp'...

von Mathi (Gast)


Lesenswert?

Steffen H. schrieb:
> Hat dann die Datei
> "xp.lib" auch gar nix damit zu tun?

Bei der .lib-Datei kann es sich um eine Datei im sog. Liberty-Format 
handeln. Diese Dateien werden von sehr vielen Synthese-Tools verwendet. 
Inhalt sind Angaben zur Funktion von (Komplex-)Gattern und Primitiven 
und deren Energieverbrauch.
Das sind übrigens einfache ASCII Dateien und können mit jedem Editor 
bearbeitet werden.

Wie aber erwähnt: es KANN eine solche Datei sein, MUSS aber nicht 
:-)

von Steffen H. (avrsteffen)


Lesenswert?

Mathi schrieb:
> Steffen H. schrieb:
>> Hat dann die Datei
>> "xp.lib" auch gar nix damit zu tun?
>
> Bei der .lib-Datei kann es sich um eine Datei im sog. Liberty-Format
> handeln. Diese Dateien werden von sehr vielen Synthese-Tools verwendet.
> Inhalt sind Angaben zur Funktion von (Komplex-)Gattern und Primitiven
> und deren Energieverbrauch.
> Das sind übrigens einfache ASCII Dateien und können mit jedem Editor
> bearbeitet werden.
>
> Wie aber erwähnt: es KANN eine solche Datei sein, MUSS aber nicht
> :-)
Ist es.. Hab ich schon geöfnet gehabt.

Hab es jetzt hinbekommen. Danke nochmal an ALLE

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

So, hier mal ein kleiner Ausschnitt aus der Lib "xp"


Hab eine "Neue Library" in ModelSim angelegt und physisch zu der unter 
ispLEVER Starter => Vlib => xp gemapt.
Dann alle Komponenten unter ispLEVER Starter => Vlib => xp => src mit 
ModelSim kompiliert. Und siehe da.. Kein Fehler mehr zur fehlenden 
Library.

Jippi..

Also danke nochmal an ALLE.

Super Forum hier!

Best regards
Steffen

von Steffen H. (avrsteffen)


Lesenswert?

Oh nein!!!

Jetzt gibt es sogar einen "Fatal Error"!

# ** Fatal: (vsim-3483) Delay in signal assignment is not ascending.
#    Time: 105 ns  Iteration: 1  Process: 
/tb/u1/memory_0_0_0/dp8ka_inst/p108 File: 
I:/Lattice/ispLEVER_Starter/Vlib/xp/src/ORCA_MEM.vhd
# Fatal error in Process p108 at 
I:/Lattice/ispLEVER_Starter/Vlib/xp/src/ORCA_MEM.vhd line 2394
#
# HDL call sequence:
# Stopped at I:/Lattice/ispLEVER_Starter/Vlib/xp/src/ORCA_MEM.vhd 2394 
Process p108
#
Hier ein Ausschnitt von "ORCA_MEM.vhd"
1
  P108 : PROCESS(clkb_ipd)
2
  BEGIN
3
     IF (clkb_ipd'event and clkb_ipd = '1' and clkb_ipd'last_value = '0') THEN
4
        IF ((g_reset = '0') or (rstb_ipd = '1')) THEN
5
           clkb_valid <= '0';
6
        ELSE
7
           IF (ceb_ipd = '1') THEN
8
              IF (csb_en = '1') THEN 
9
                 clkb_valid <= '1', '0' after 0.2 ns; -- <= line 2394
10
              ELSE
11
                 clkb_valid <= '0';
12
              END IF;
13
           ELSE
14
              clkb_valid <= '0';
15
           END IF;
16
        END IF;
17
     END IF;
18
  END PROCESS;

Was kann denn das nun wieder sein?

von Steffen H. (avrsteffen)


Lesenswert?

Hab mal mir mal den Fehler genauer anzeigen lassen. Das geht ja mit 
"verror + Fehlernummer"

>verror 3483
>#
># vsim Message # 3483:
># Delays in a signal assignment statement must be specified in
># increasing order of time.
># [DOC: IEEE Std 1076-1993 VHDL LRM - 8.4.1 Updating a projected output 
>waveform]
>#

Frei übersetzt:
Verzögerungen in einem Signalzuweisungsbefehl müssen in der zunehmenden 
Ordnung der Zeit angegeben werden


Was hat dies zu bedeuten? Hoffentlich nur eine Sache der Einstellung von 
ModelSim.

von berndl (Gast)


Lesenswert?

Steffen H. schrieb:
> clkb_valid <= '1', '0' after 0.2 ns; -- <= line 2394

Mir faellt da nur eines ein: Hast du in der Modelsim.ini (in deinem 
Design Verzeichnis) die Simulator Aufloesung auf 'ps' stehen (oder wie 
der Modelsim PE Default auf 'ns')?

Guck dir die Datei mal mit nem Editor genau an.

von Steffen H. (avrsteffen)


Lesenswert?

Ich such die schon die ganze Zeit. Daran hab ich auch gleich gedacht. 
Danke berndl

von Steffen H. (avrsteffen)


Lesenswert?

>; Simulator resolution
>; Set to fs, ps, ns, us, ms, or sec with optional prefix of 1, 10, or 100.
Resolution = ns

oder

>; Set SystemC default time unit.
>; Set to fs, ps, ns, us, ms, or sec with optional
>; prefix of 1, 10, or 100.  The default is 1 ns.
>; The ScTimeUnit value is honored if it is coarser than Resolution.
>; If ScTimeUnit is finer than Resolution, it is set to the value
>; of Resolution. For example, if Resolution is 100ps and ScTimeUnit is ns,
>; then the default time unit will be 1 ns.  However if Resolution
>; is 10 ns and ScTimeUnit is ns, then the default time unit will be 10 ns.
ScTimeUnit = ns


????

von berndl (Gast)


Lesenswert?

setz mal beide auf 'ps' fuer Picosekunden

von Steffen H. (avrsteffen)


Lesenswert?

Jepp, hab ich. Der Fatal Error kommt aber leider immer noch. Beim 
Starten sieht man auch die einstellung von 1ps time resulution.
Also scheint es übernommen worden zu sein.

Ich dachte auch erst, dass es an den "." von 0.2ns liegt. Scheint aber 
doch etwas anderes zu sein :(

von Steffen H. (avrsteffen)


Lesenswert?

Vielleicht liegt es an der Limitierung von den 10000 Code-Zeilen?

von Steffen H. (avrsteffen)


Lesenswert?

ModelSim PE Student Edition Performance
- Capacity: 10,000 lines of executable code
- Performance (up to capacity): 30% of PE
- Performance (exceeding capacity): 1% of PE (i.e., 100 times slower 
than PE).

von Klaus F. (kfalser)


Lesenswert?

Steffen H. schrieb:
> Vielleicht liegt es an der Limitierung von den 10000 Code-Zeilen?

Kann eher nicht sein, der Simulator wird dann nur langsamer, aber er 
sollte trotzdem arbeiten.

von Klaus F. (kfalser)


Lesenswert?

Steffen H. schrieb:
> # ** Fatal: (vsim-3483) Delay in signal assignment is not ascending.
> #    Time: 105 ns  Iteration: 1  Process:

Steht da immer noch 105 ns oder steht jetzt 105000 ps?

von Steffen H. (avrsteffen)


Lesenswert?

Klaus Falser schrieb:
> Steffen H. schrieb:
>> # ** Fatal: (vsim-3483) Delay in signal assignment is not ascending.
>> #    Time: 105 ns  Iteration: 1  Process:
>
> Steht da immer noch 105 ns oder steht jetzt 105000 ps?

Da hab ich gar nicht drauf geachtet. Das kann ich aber heut abend sagen. 
Hab gestern mal noch den PLL getestet. Die funktioniert so wie sie soll. 
Und das alles ganz ohne irgendwelche Fehler.

Ich denk schon, dass es an den
1
clkb_valid <= '1', '0' after 0.2 ns; -- <= line 2394
liegt.

von D. I. (Gast)


Lesenswert?

Probier mal

>
> Ich denk schon, dass es an den
>
1
> clkb_valid <= '1' after 100 ps, '0' after 200 ps; -- <= line 2394
2
>
> liegt.

von berndl (Gast)


Lesenswert?

was auch noch interessant waere zu wissen: Welches Directory hast du 
denn nun verwendet um die Libs zu kompilieren? Sicher, dass es die 
richtigen Files fuer ModelSim sind/waren?

von Steffen H. (avrsteffen)


Lesenswert?

berndl schrieb:
> was auch noch interessant waere zu wissen: Welches Directory hast du
> denn nun verwendet um die Libs zu kompilieren? Sicher, dass es die
> richtigen Files fuer ModelSim sind/waren?

Ich habe die Dateien aus dem Pfad "Vlib/xp/src" genommen.

von Steffen H. (avrsteffen)


Lesenswert?

So, endlich Feierabend..

Hab mal das Transcript angehangen. ModelSim sagt tatsächlich Time: 105 
ns!

Mal sehen, ob wir das Problem heute lösen können.. Also ran an den Speck 
:)

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Na sowas, da hat er den Anhang nicht geschluckt..

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Und hier mal die Wave dazu.

von Steffen H. (avrsteffen)


Lesenswert?

berndl schrieb:
> was auch noch interessant waere zu wissen: Welches Directory hast du
> denn nun verwendet um die Libs zu kompilieren? Sicher, dass es die
> richtigen Files fuer ModelSim sind/waren?

Du hattest wahrscheinlich Recht. Ich hab die XP Library nochmal neu 
angelegt und dieses mal alle Dateien unter 
"ispLEVER_Starter\cae_library\simulation\vhdl\xp\src" kompiliert.

Tada! Und siehe da, es geht jetzt endlich :)

Ich Danke euch vielmals für die zahlreiche Hilfe und Tips zu diesem 
Problem.

Grüße Steffen

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Hier mal noch der Screenshot von der Wave.

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.