Forum: FPGA, VHDL & Co. ModelSim Signale verknüpfen


von Tobias K. (teekay)


Lesenswert?

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 :-)

von Klaus F. (kfalser)


Lesenswert?

Klar.
Du schreibst ein neues Top Level Design, welches beide instanziert und 
verknüpfst die Ports.

von Tobias K. (teekay)


Lesenswert?

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...

von user (Gast)


Lesenswert?

Du kannst doch auch beides mischen -> also ein Top und beides 
instanziieren.

von Klaus F. (kfalser)


Lesenswert?

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.

von Schlumpf (Gast)


Lesenswert?

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.

von Tobias K. (teekay)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Tobias K. (teekay)


Lesenswert?

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;

von Klaus F. (kfalser)


Lesenswert?

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!

von Tobias K. (teekay)


Lesenswert?

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...

von Christian R. (supachris)


Lesenswert?

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.

von Tobias K. (teekay)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

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
Noch kein Account? Hier anmelden.