Signale in ModelSIM werden falsch dargestellt (?)

Gast #677474
Lesenswert?

Kennt jemand das Problem, daß Signale, die infolge eines Eintaktvorgangs 
eigentlich einen Takt verzögern ändern müssten, bereits zum Takt mit der 
Quelle mitändern ?

Es scheint ein Darstellungsproblem zu sein, denn die Reaktion auf das 
scheinbar falsche Signal stimmt.

Woran kann es liegen ?
#677535
Lesenswert?

@ Gast (Gast)

>Kennt jemand das Problem, daß Signale, die infolge eines Eintaktvorgangs
>eigentlich einen Takt verzögern ändern müssten, bereits zum Takt mit der
>Quelle mitändern ?

Ja.

>Es scheint ein Darstellungsproblem zu sein,

Nö.

> denn die Reaktion auf das
>scheinbar falsche Signal stimmt.

>Woran kann es liegen ?

Deine Testbench ist falsch. Deine Eingangssignale dürfen sich erst NACH 
der Taktflanke ändern, 10ps reichen schon. Wenn sie sich genau parallel 
mit der Taktflanke ändern knallts.

MFG
Falk
Gast #678112
Lesenswert?

Habe es mal rauskopiert und entschärft. So sieht der Code aus:
1
input: process (reset, clk)                
2
begin
3
  if (reset = '1') then
4
    instream <= (others => '1');
5
    wen <= '0';
6
    error <= '0';
7
  elsif rising_edge(clk) then                
8
    if (localreset = '1') then      
9
      instream <= (others => '1');
10
      wen <= '0';
11
      error <= '0';
12
    elsif (data_new = '1') then -- new data coming
13
      if (ram_full = '1') then -- ok to write ?      
14
        instream <= (others => '1');
15
        wen <= '0';
16
        error <= '1';              
17
      else -- ram not full, write !
18
        if (test = '1') then -- select data
19
          instream <= test_data;
20
        else
21
          instream <= datainput;  
22
        end if;
23
        wen <= '1';
24
        error <= '0';
25
      end if;
26
    else -- no local reset
27
      instream <= (others => '1');      
28
      wen <= '0';
29
    end if;
30
  end if;
31
end process input;

Sowohl instream als auch wen wechseln mit der Taktflanke, wenn auch das 
data_new ändert und nicht, wenn es bereits 1 war, also einen Takt 
später- Ich sehe nur noch nicht, ob es nicht das datanew ist, das zu 
spät dargestellt wird.

Die Reaktion auf den localreset funktioniert, wie erwartet: localreset 
geht auf 1, die Signale bleiben und wechseln erst zur nächsten 
Taktflanke auf Startzustand. Auch der asynchrone Reset läuft. Dieser 
kommt, wie auch das localreset und der clk aus der testbench, während 
das datanew aus einer anderen Schaltung produziert wird. Das sieht aber 
logisch und korrekt aus. (?)
Gast #678136
Lesenswert?

Ich versuche mal Dein Problem zusammen zu fassen:
instream und wen ändern sich mit der gleichen Flanke wie auch data_new, 
obwohl sie sich erst ändern sollen wenn data_new 1 ist?

Die Frage ist, woher kommt das data_new? Wird es in der gleichen 
Taktdomäne erzeugt?
Gast #678252
Lesenswert?

Ja, ist ein file. Dierekter Ausgang des FF mit demselben Takt. Ich 
reduziere / anonymisiere jetzt mal das Design und die Testbench und 
simuliere es noch mal. Wenn das soweit ist, dann kriegt das Mentor als 
Hausaufgabe. Es ist übrigens nicht das erste mal, dass ich sowas habe.

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