ModelSim Signale verknüpfen

OP #3370533
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 :-)
OP #3370626
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...
#3370962
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.
Gast #3371203
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.
OP #3371327
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
OP #3372021
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;
#3372292
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.
#3373000
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.

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