Verständnis Problem Pipeline/Simulation

Gast #4175342
Lesenswert?

Hi,
der folgende Code soll eine Operation, hier Minimum, durchführen, das 
Ergebnis in ein FF packen und im nächsten Zyklus ausgeben.
Allerdings kann man bei der Simulation erkennen das von TwoIN bis TwoFF 
schon ein ClkZyklus vergeht und dann noch einer von TwoFF bis TwoOUT.
Meine Vermutung ist, dass in der Simulation neue Daten am Eingang(TwoIN) 
erst bei T + deltaT anliegen und noch mit den Daten zum Zeitpunkt T 
gerechnet wird. Kann dies wer bestätigen oder mich berichtigen?
Danke!
1
  signal sMinTemp      : STD_ULOGIC_VECTOR(gDataWidth - 1 downto 0); --FF
2
begin
3
  process (iAppClock, iAppReset, iAppEnable) is
4
  begin
5
    if (rising_edge(iAppClock)) then
6
      if (iAppReset = '1' or iAppEnable = '0') then
7
        sMinTemp <= (others => '-');
8
        oMin <= (others => '-');  
9
      else
10
        oMin <= sMinTemp; --OUT
11
        if (unsigned(iDatumA) <= unsigned(iDatumB)) then
12
          sMinTemp <= iDatumA; --IN
13
        else
14
          sMinTemp <= iDatumB; --IN
15
        end if;
16
      end if;
17
    end if;
18
  end process;
Angehängte Dateien:
Gast #4175392
Lesenswert?

Danke. Also wenn ichs richtig verstanden habe ist dies schon Logik + FF.
1
process (iAppClock, iAppReset, iAppEnable) is
2
begin
3
  if (rising_edge(iAppClock)) then
4
    if (iAppReset = '1' or iAppEnable = '0') then
5
      oMin <= (others => '0');  
6
    else
7
      if (unsigned(iDatumA) <= unsigned(iDatumB)) then
8
        oMin <= iDatumA; --IN
9
      else
10
        oMin <= iDatumB; --IN
11
      end if;
12
    end if;
13
  end if;
14
end process;
Gast #4175433
Lesenswert?

Ich denke dannach hab ich eigentlich gesucht: Erst Operation dann FF.
Macht man das so?
1
  DelayOperation: if (gDelayed = true) generate
2
    signal sMinTemp      : STD_ULOGIC_VECTOR(gDataWidth - 1 downto 0);
3
  begin
4
    process (iDatumA, iDatumB) is
5
    begin
6
      if (unsigned(iDatumA) <= unsigned(iDatumB)) then
7
        sMinTemp <= iDatumA;
8
      else
9
        sMinTemp <= iDatumB;
10
      end if;
11
    end process;
12

13
    process (iAppClock, iAppReset, iAppEnable) is
14
    begin
15
      if (rising_edge(iAppClock)) then
16
        if (iAppReset = '1' or iAppEnable = '0') then
17
          oMin <= (others => '0');    
18
        else
19
          oMin <= sMinTemp;
20
        end if;
21
      end if;
22
    end process;
23
  end generate DelayOperation;

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