Hallo zusammen, ich habe eine frage zu ModelSim. Ich habe zwei top level entitys die ich simuliere. Ein Ausgangssignal der einen soll als Eingangssignal der anderen dienen. Leider gelingt es mir in ModelSim nicht diese Signale miteinander zu verknüpfen. Ist das überhaupt möglich? Vielen dank schonmal :-)
Klar. Du schreibst ein neues Top Level Design, welches beide instanziert und verknüpfst die Ports.
Danke, aber gibt es auch eine andere Möglichkeit? Das Problem ist, das ich die eine top als Gate Level Simulation simulieren möchte. Die andere Top liefert die Stimuli, diese liest werte aus eine txt datei (textio) und diese funktioniert nur (warum auch immer) als RTL Simulation. Daher ist eine gemeinsame Top nicht möglich...
Du kannst doch auch beides mischen -> also ein Top und beides instanziieren.
Tobias K. schrieb: > Danke, aber gibt es auch eine andere Möglichkeit? Nicht dass ich wüßte. > Daher ist eine gemeinsame Top nicht möglich... Ach geh, ModelSim weiss nichts von Gate Level Simulation und RTL Simulation, es simuliert nur VHDL Modelle. Du scheinst irgendwie aus dem ISE zu simulieren und hast 2 Projekt oder so. Beschreib einmal was Du machst und machen möchtest.
Tobias, das was du beschreibst, ist eine ganz normale Testbench. Mit einem Device under Test, was deinem Gate-Level-Modell entspricht (also, das was du testen möchtest) und dem Tester, der den Stimulus liefert und ggf die Response zurückliest und auswertet. Wenn man die beiden Teile zusammenfügt, nennt man das eine Testbench. Und die selbst ist dann wiederum ein Toplevel, welcher eben die beiden genannten Komponenten enthält.
Schlumpf schrieb: > Tobias, das was du beschreibst, ist eine ganz normale Testbench. > Mit einem Device under Test, was deinem Gate-Level-Modell entspricht > (also, das was du testen möchtest) und dem Tester, der den Stimulus > liefert und ggf die Response zurückliest und auswertet. > Wenn man die beiden Teile zusammenfügt, nennt man das eine Testbench. > Und die selbst ist dann wiederum ein Toplevel, welcher eben die beiden > genannten Komponenten enthält. Ja, Richtig genau das möchte ich machen. Ich starte die Simulation aus Quartus als Gate-Level-Simulation. HIer kommt dann auch der Ursprung von meinem Problem. Wenn ich den Tester, der meine Stimuli liefert hier mit einbaue, funktioniert das nicht. Grund dafür ist, das mein Tester nur in der RTL-Level Simulation Funktioniert. Ich benutze Textio um aus einer Textdatei Werte zu lesen. Das mache ich so: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; USE ieee.numeric_std.all; use std.textio.all; use ieee.std_logic_textio.all; entity testbench is port( data_out : out std_logic_vector(15 downto 0); clk : in std_logic ); end testbench ; architecture top of testbench is begin wave1: process(clk) is file file_in : text open read_mode is "sample1.txt"; variable line_in : line; variable input_tmp : integer := 0; begin if rising_edge(clk) then if (not endfile(file_in)) then readline(file_in,line_in); read(line_in,input_tmp); data_out <= std_logic_vector(to_signed(input_tmp,16)); end if; end if; end process wave1; end; Eventuell kann mir einer Sagen warum das nicht in der Gate-Level-Simulation funktioniert. Damit wäre das Problem dann schon behoben. Mein Lösungsansatz war das Device under Test als Gate-Level-Simulation aus Quartus zu starten, in ModelSim den oben zu sehenen Tester zu Compilieren und dann die Signale zu verknüpfen. Daher meine Frage wie man die Signale Verknüpft. Viele Grüße
Du kannst dir ein Projekt in Modelsim aufsetzen und simulieren, musst halt dann nur die sdf Files für die Gate Level Verzögerungen mit angeben beim vsim. Ist keine Hexerei und gut dokumentiert.
Hat jemadn eine Idee warum das in der Gate-Level-Simulation nicht funktioniert?
1 | LIBRARY ieee; |
2 | use ieee.std_logic_1164.all; |
3 | use ieee.std_logic_arith.all; |
4 | USE ieee.numeric_std.all; |
5 | use std.textio.all; |
6 | use ieee.std_logic_textio.all; |
7 | |
8 | entity testbench is |
9 | port( |
10 | data_out : out std_logic_vector(15 downto 0); |
11 | clk : in std_logic |
12 | );
|
13 | end testbench ; |
14 | |
15 | architecture top of testbench is |
16 | |
17 | begin
|
18 | |
19 | wave1: process(clk) is |
20 | file file_in : text open read_mode is "sample1.txt"; |
21 | variable line_in : line; |
22 | variable input_tmp : integer := 0; |
23 | |
24 | begin
|
25 | if rising_edge(clk) then |
26 | if (not endfile(file_in)) then |
27 | readline(file_in,line_in); |
28 | read(line_in,input_tmp); |
29 | data_out <= std_logic_vector(to_signed(input_tmp,16)); |
30 | end if; |
31 | end if; |
32 | end process wave1; |
33 | end; |
Tobias K. schrieb: > Hat jemadn eine Idee warum das in der Gate-Level-Simulation nicht > funktioniert? a) was funktioniert nicht? b) das kann keine Top-Level Testbench sein. Eine Testbench hat keine Ports!
Klaus Falser schrieb: > a) was funktioniert nicht? Es werden keine Werte Eingelesen, die Bedingung "(not endfile(file_in))" wird nicht erfüllt. In der RTL-Simulation funktioniert es aber Klaus Falser schrieb: > b) das kann keine Top-Level Testbench sein. Eine Testbench hat keine > Ports! Richtig! Das File ist zum Testen ob das lesen aus einer Textdatei funktioniert...
Warum setzt du nicht mal in ModelSim ein Projekt auf und probierst das direkt? Dauert keine 10 Minuten. Es funktioniert auf jeden Fall. Ich hatte damals (als ich noch nicht wusste, dass das sinnlos ist) auch mal eine Timing-Simulation mit ModelSim und File-Stimuli gemacht. Zwar mit Xilinx, aber ModelSim ist ModelSim. Du brauchst dann das erzeugte VHDL File plus das Delay-File, das gibts du dem ModelSim an und schon macht der das.
Christian R. schrieb: > Ich > hatte damals (als ich noch nicht wusste, dass das sinnlos ist) auch mal > eine Timing-Simulation mit ModelSim und File-Stimuli gemacht. Wieso sinnlos?
Sinnlos, weil man zur Fehlersuche/Debugging nur eine Verhaltenssimulation braucht und alles was Timing angeht, macht man über korrekt gesetzt Constraints. Dann sagen die Tools dir, ob das Timing passt oder nicht. Je nach Hersteller gibts dann auch wieder Tools, um zu analysieren, was da schief läuft. Eine Timing-Simulation ist ziemlich unnütz.
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.