Hilfe beim Serielle Rechenwerk

Gast #3911140
Ich habe ein problem mit meinem seriellen Subb/Add Rechenwerk.
Es handelt sich dabei um einen normalen 1 bit Adder bei dem mit einer 
Sel Leitung gesteurt wird, ob addiert oder subtrahiert wird. Beim 
subtrahieren wird Y mit einem XOR invertiert und dann müsste noch das 
Cin zu Beginn aus 1 gesetzt werden. und genau hier ist das Problem. wie 
schaffe ich es Cin genau bei Counter=0 für einen Takt auf 1 zu setzen 
ohne es vorher schon bei counter = 15 zu wissen?.

1
entity Adder is
2
    Port ( 
3
        Adder_CLK       : in  STD_LOGIC;
4
        Adder_Enable    : in  STD_LOGIC;
5
        Adder_Sum       : out  STD_LOGIC;
6
        Adder_X         : in  STD_LOGIC;
7
        Adder_Y         : in  STD_LOGIC;
8
        Adder_SubAddSell   : in STD_LOGIC    :='0');
9
end Adder;
10

11
architecture Behavioral of Adder is
12

13
signal Cin, Cout :STD_LOGIC;
14
signal YTemp  :STD_LOGIC;
15
signal Counter : integer range 16 downto 0;
16

17
begin
18

19

20
process (Adder_CLK, Adder_Enable)
21
begin
22
   if (rising_edge(Adder_CLK))  then
23
    if Adder_Enable = '1' then
24
        Cin <= Cout;
25
      if(Counter = 15) then
26
        Counter <= 0;
27
      else
28
        Counter <= Counter +1;
29
      end if;          
30
    end if;
31
   end if;
32
end process ;
33

34

35
YTemp <= Adder_Y xor Adder_SubAddSell;
36
    
37

38
Adder_Sum   <=  Adder_X xor YTemp xor Cin;
39
Cout <= (Adder_X and YTemp) or (Adder_X and Cin) or (Cin and YTemp);
40

41

42
end Behavioral;
Gast
Ok ich war glaube ich ein wenig undeutlich. bei 15 weiß ich noch nicht 
ob im nächsten Takt ein Subtraktion gemacht werden muss weil es ein 
externes signal ist auf das ich kein Einfluss habe. Es müsste also 
kombinatorisch irgendwie durchgeschaltet werden
Moderator (Firma: Titel) Persönliche Seite
Sergej schrieb:
> . bei 15 weiß ich noch nicht ob im nächsten Takt ein Subtraktion gemacht
> werden muss weil es ein externes signal ist auf das ich kein Einfluss
> habe.
Wie "extern" ist das Signal? Ist es auch asynchron?

Wie auch immmer: du stolperst mental noch ein wenig über "Takt" und 
"Rechenzeit" bzw "Laufzeit" für die Kombinatorik. Es sieht so aus:
1
           .---------.         .---------.         .---------.         .----
2
           |         |         |         |         |         |         |
3
    -------'         '---------'         '---------'         '---------'
4
         Takt   Rechenzeit   Takt   Rechenzeit   Takt   Rechenzeit   
5
          0        0          1        1          2        2
In der Rechenzeit wird die eigentliche Arbeit gemacht: Addierer und 
Multiplizierer berechnen neue Ergebnisse, FSM ermitteln neue Zustände, 
usw.
Mit einem Takt werden nur Ergebnisse aus der jweweils vorangegangenen 
Rechenzeit übernommen. Wenn du also mit dem Takt 2 etwas übernehmen 
willst, dann muss es vorher berechnet werden. Logischerweise musst du 
also, wenn du mit dem Takt 1 etwas übernehmen willst, das Ergebnis in 
der Rechenzeit 0 ermitteln. Das ist das Modell in dem ich denke: ein 
Takt führt zu hektischen Neuberechnung von Ergebnissen. Danach kommt 
(irgendwann mal oder ganz schnell) wieder ein Takt.

Aber jetzt kommt ein Trick. Du darfst ganz ungestraft auch in diesem 
Modell denken:
1
            .---------.         .---------.         .---------.         .----
2
            |         |         |         |         |         |         |
3
     -------'         '---------'         '---------'         '---------'
4
Rechenzeit Takt   Rechenzeit   Takt   Rechenzeit   Takt   Rechenzeit   
5
   0        0          1        1          2        2         3
Nur darfst du die beiden Denkweisen nicht vermischen, was du aber gerade 
tust!

Zeichne dir mal auf, wann was berechnet und wann was gespeichert wird. 
Dann dürfte dir schnell klar werden, dass du mit der geeigneten Ansicht 
eigentlich gar kein Problem hast, weil die Definition "Takt 15" einfach 
noch nicht stimmt. Oder andersrum: du kannst in der Rechenzeit vom Takt 
0 ganz unbeschadet das externe Signal einfließen lassen (es muss 
natürlich synchron sein und nicht kurz vor dem Takt 1 noch Unruhe ins 
FPGA bringen), dann wird mit dem Takt 1 das in der Rechnezeit 0 
ermittelte Additions- oder Subtraktionsergebnis übernommen...
Gast
Hallo Lothar, ich glaube der Groschen ist bei mir endlich gefallen(hoffe 
ich;-)).
Das bedeutet dann dass, wenn das signal sich genau zum Takt 0 ändert,ich 
es erst beim takt 1 übernehmen kann, ist das richtig?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.