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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.