hallo, kann jemandem mir Vielleich helfen,ich will in einem 16 Bit Prozessor ganz normale und einfache pipeline dran entwicklen,können sie mir vielleicht sagen ,was ich genau da an den prozessor ändere....
Du solltest Dich vielleicht erstmal informieren, wovon Du da sprichst. Einen CPU-Chip kannst Du nicht einfach aufschleifen und nochwas "reinbauen". Peter
also ich habe eigentlich den 16 bit prozessor bis jetzt selbst weiter entwickelt und getestet,mit vhdl .Ich arbeite in einem projekt an der uni,ich will jetzt dass für mich statt ein befehl, 3 bis 5 befehle gleichzeitig bearbeiten,der 16 bit pmp besteht ganz normal aus steuerwerk ein operationwerk ein ram,wenn es ihnen weiter helft,wenn nicht dann schreiben sie mir bitte dann kann ich ihnen noch weiter mein 16 bit beschreiben ,danke ersmal für die info peter und johannes
Hi. Einen Prozessor mit einer Pipeline auszustatten ist nicht ganz so einfach. Auch bedeutet das eigentlich nicht, dass du 3-5 Befehle gleichzeitig abwickeln kannst. Eine Pipeline ermöglicht dir, während dein Prozessor einen Befehl ausführt zum Beispiel den nächsten Befehl schon aus dem RAM zu holen. Deshalb benötigt der Prozessor zum Beispiel für einen Befehl nicht 5 Clockzyklen sondern nur 1. Das bedeutet natürlich einen Geschwindigkeitsgewinn um den Faktor 5. Du musst praktisch deine Architektur unterteilen. Wenn du das zum Beispiel so machst: * Befehl aus Programmspeicher holen * Daten aus RAM holen * Befehl ausführen Wenn nun ein Befehl fertig aus dem Programmspeicher geholt wurde, dann holt der nächste Befehl aus dem RAM die für den Befehl benötigten Daten. Gleichzeitig wird aber auch schon wieder der nächste Befehl aus dem Programmspeicher geholt! Danach folgt das Ausführen des 1. Befehls und nebenbei wird schon der 3. Befehl und das 2. mal die Daten geholt. Das Prinzip ist ja eigentlich relativ einfach und einleuchtet. Es gibt aber auch einige Hindernisse auf die du aufpassen musst. Das wären zum Beispiel, wenn dein Programm einen Sprungbefehl enthält, dann dürfen, die 2 nachfolgenden Befehle, die sich der Prozessor schon geholt hat, nicht mehr ausgeführt werden, da diese ja unter dem Sprungbefehl stehen würden, und vorerst gar nicht ausgeführt werden sollen! Deshalb heissts aufpassen bei Sprungbefehlen, Funktionsaufrufen und dergleichen. mfg Andreas -- Student of Telematics http://mikrocontroller.at.tt Graz, University of Technology
Es sei denn man baut in die Pipeline eine Branch-Prediction ein und diese hat mit einer Trefferwahrscheinlichkeit von 75% den Sprung korrekt vorrausgesagt. Also liegen in der Pipeline schon mit 75% Wahrschenlichkeit die richtigen Daten und Befehle vor. Damit das noch besser funktioniert besteht die Pipeline nicht nur aus Speicherzugriff + Befehl ausführen, sondern meistens aus - Programmcode laden - Programmcode dekodieren zu Befehl - Branchprediction - Daten holen - Befehl ausführen So, eine Pipelin macht aberim Grunde keinen Sinn, mann sollte schon 2 Pipelines benutzen, die quasi in parallel arbeiten. Die Idee besteht dabei das das Befehlset ja aus ganz unterschiedlichen Befehlen bestehen. Während eine Gruppe nur Daten hin- und herschiebt, gibt es Gruppen die aufwändige Berechnungen durchführen und eine Recheneineheit benötigen, eine Gruppe die Sprunge ausführen und die Flags dazu auswerten usw. usw. Nun bei mehrern Pipelinen ist es sehr sehr wahrscheinlich das immer nur eine dieser Pipelines zb. Speicher kopiert und die andere die Recheneinheit benötigt. Ich weis nur das Intel einige seiner CPU's wieder vom Markt nehmen musste weil damals als das Thema Pipeline aktuell wurde selbst in fertig ausgelieferten CPU's fehler auftraten. Gruß Hagen
danke erstaml für die info, aber ich brauche vielleicht noch eine richtige helfe das bedeutet,wie funktiniert eine pipeline und was für bauteile brauche ich da also ich habe ein steuerwerk,die frage ist brauche ich beim pipeline 2 stw?ich habe ein systembus ......ich will genaue wissen wo soll ich komplett änderen,vielleich konnen sie mir ein beispiel schicken?oder noch weiter erklären wie ich es genau ändern muss. gruß paul,
Wie zuvor schon gesagt wurde, du musst deinen Core in Blöcke unterteilen, sowie die Abarbeitung eines Befehles auch: - Befehl aus Programmspeicher holen - Befehl dekodieren - Daten aus RAM holen - Befehl ausführen - Daten abspeichern jeder Block bekommt jetzt Flip-Flops als Eingang, in denen die gerade auszuführende Arbeit/Daten abgelegt werden. Das bedeutet, dass mit jedem Clock-Impuls die Infos in den nächsten Block geschoben werden. Aufpassen muss man nur wie bereits erwähnt, bei: 1. Sprung-Befehlen hier müssen dann evtl. die bereits geholten Befehle verworfen werden. 2. Du hast bspw. folgenden Code: move R0,#500 move R1,#200 adc R0,R1 move R0,R7 Da der adc-Befehl und der nachfolgende move-Befehl "gleichzeitig" ausgeführt werden, dass in R7 der falsche Wert abgelegt wird. Weiß jetzt nicht mehr genau wie der Fachbegriff hierfür ist, müsste ich erst nachschauen. Also zusammengefasst: Jeder Block (Alu, Codefetch, usw.) bekommen Register am Eingang, alle Register haben einen gemeinsamen Clock-Eingang besondere Beachtung gibt es bei Sprüngen und wie in Fall 2 beschrieben!
Danke bis jetzt für die info, und Wenn jemandem noch mehr weisst, und mich weiter helfen kann ,dann wäre ich sehr dankbar dafür, cio paul
>> Da der adc-Befehl und der nachfolgende move-Befehl "gleichzeitig" >> ausgeführt werden, dass in R7 der falsche Wert abgelegt wird. Weiß >> jetzt nicht mehr genau wie der Fachbegriff hierfür ist, müsste ich >> erst nachschauen. Das ist ein Miss, und die Pipeline muss einen Waitstate einlegen um sicherzustellen das das Register R7 auch korrekt befüllt wurde. Deshalb gibt es auch eine U und V Pipe bei vielen Intel CPU's und nur in der U Pipe können ganz bestimmte Befehle ausgeführt werden. Damit solche Misses nicht zu häufig auftreten, bzw. als Optimeirungsmethode, wird in neuen Compilern ein sogenanntes Instruction-Shuffeling durchgeführt. Dabei werden die Befehle sequentiell so angeordnet das sie möglichst abwechselnd in der U und dann V Pipe ausgeführt werden können, sich also nicht gegenseitig beeinflussen oder benötigen. Nur dann würde die CPU auch tatsächlich aus zB. 5 Takt-Befehlen diese zu 1 Takt Befehlen ausführend können. Ich meine gelesen zu haben das die ganze Pipline-Logik heutzutage mehr an Raum auf den Chips verbrauchen als der Rest der CPU. Keine leichte Aufgabe. Gruß Hagen
>Das ist ein Miss, und die Pipeline muss einen Waitstate einlegen um sicherzustellen das das Register R7 auch korrekt befüllt wurde. Da kann ich dir leider nicht ganz zustimmen, sicherlich ist das eine Möglichkeit, aber es geht auch anders ! Eben so wie ich beschrieben habe !!! >Damit solche Misses nicht zu häufig auftreten, bzw. als Optimeirungsmethode, wird in neuen Compilern ein sogenanntes Instruction-Shuffeling durchgeführt. Richtig das kann man machen ! >Ich meine gelesen zu haben das die ganze Pipline-Logik heutzutage mehr an Raum auf den Chips verbrauchen als der Rest der CPU. Keine leichte Aufgabe. Kann ich dir glaube ich mich zu erinnern nur zustimmen, aber der Aufwand lohnt sich, wenn man einen Prozessor schneller machen möchte, ohne den Takt zu erhöhen. Irgendwann kann man das ja auch nicht mehr !!!
@Paul: schau dir mal die folgende Seite an: http://www.cs.iastate.edu/~prabhu/Tutorial/title.html @Hagen: wenn ich ne Seite gefunden habe, die das beschreibt, was ich meine schreibe ich sie hier. Es geht, habe es selbst während des Studiums gehört. man nimmt einfach den Pfad nach der Alu und holt ihn direkt in Alu-Pfad (anstatt aus dem Register-File). siehe auch http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/forward.html funktioniert aber glaube ich nur bei einem bestimmten Proz. (DLX glaube ich war das, müsste ich aber noch mal nachschaun, wenn ich das Zeug finde) !!! PS.: schaut euch doch mal die Seite genauer an, scheint ganz gut zu sein.
Hi man kann mit langen Pipelines aber auch ganz toll auf die Schnauze fallen wie es Intel mit seiner Netburst Architektur gerade ganz toll vorführt. Ultralange (WIMRE um die 30 Stufen beim Prescott) Pipeline und trotzdem miese Performance im Vergleich zu anderen Prozessoren bei gleichem Takt. Es bringt einfach nichts ein so lange Pipeline zu bauen die dann die Hälfte der Zeit leer läuft. Aber hauptsache der Takt ist schön hoch. Matthias
Danke alle für die info, falls noch seiten gibt oder wichtige info dann wäre ich noch sehr dankbar. @ C3P0 und Hagen-danke für die info, @C3P0 wenn du noch mit pipeline gut umgehst,kannst du vielleicht mir mehr helfen,ich kann dir mehr info geben von mein prozessor,kann sein dass du so eine lösung für mich findest?aber wegen den Internetseite war ein sehr gute idee,ich muss die komlett lesen und verstehen das dauert, gruß paul
30 Stufen ist ja bekloppt, das ding besteht ja nur noch aus Registern ! Kein Wunder dass die so teuer sind. Ja ich werde mir das auch mal anschauen.
@C3P0 mein cpu besteht ganz normal aus opw und stw ,also opw besteht aus ar und pc und akku und ipr und ...ganz normale register aner nur ein systembus,ich habe schon angefangen ersmal mit diese ordnung was du mir vorher erklärst hast,wenn du noch idee hast dann schreib es mir cio
@Paul: kannst du mal ein Bild/Zeichnung deiner CPU machen, dann kann ich es mir besser vorstellen/ansehen. was ist opw, stw, ar und ipr, ich weis nicht was du damit meinst !
Hallo !! Ich würde das Buch "Prozessorbau" von Christian Siemers empfehlen. Da steht eigentlich alles drinnen was man für den (grundsätzlichen) Prozessorentwurf braucht; auch Pipelineing. Vielleicht kannst du dir das ja in (d)einer (Uni)Bibliothek ausleihen. Schöne Grüße, Thomas
Kann jemandem mir noch weiter helfen,ich habe bis jetzt ein paar schritte gemacht aber so richtig nicht,hat jemandem ein beispiel für mich?oder ein paar tips,die mir noch weiter den weg zeigen???????? cio paul
Hallo, mir ist da wieder ne gute Seite mit vielleicht Anregungen eingefallen: http://www.opencores.org/browse.cgi/by_category
Ein Nachteil der Pipeline ist, daß es fast nicht möglich ist, anhand abgezählter Befehlsfolgen die Zeitdauer einer Programmsequenz zuermitteln. Man weiss eben nie wie die Pipeline den Befehlsablauf optimiert. Tipper
Hi Das Verhalten einer Pipeline ist 100%ig vorherzusagen. Wär ja schlimm wenn nicht. Es ist ab einer gewissen Anzahl Stufen und der Verkopplung mit Sprungvorhersage, Cache usw. allerdings derartig komplex das man es als Mensch kaum noch erfassen kann. Matthias
Matthias: Sicherlich, ein bedingter Sprung wird ausgeführt oder er wird nicht ausgeführt. Dies ist auch eine 100%ige Vorhersage. Der praktische Wert dieser Aussage ist, wie du selber schreibst, gleich Null. Tipper
Hi das ändert aber nichts daran das ich zu jedem Zeitpunkt exakt vorhersagen kann wie sich der Prozessor verhält solange die komplette Vorgeschichte bekannt ist. Matthias
Das ist richtig, aber du kannst dies nur für eine ganz bestimmte Befehlssequenz machen. Denn die konkreten Taktanzahlen einer Pipeline hängen vom der aktuellen Befehlssequenz, den internen Register und Flaginhalten ab. D.h. man muß um die Taktanzahlen auszurechnen immer den kompletten Code analysieren. Je mehr verschiedene Befehle es gibt je höher wird die kombinatorische Vielfalt an möglichen Befehlssequenzen. In den meisten Fällen ist diese so groß das es eben nicht mehr möglich sein wird eine einheitliche Vorhersage der benötigten Taktzyklen abzugeben. D.h. theoretisch ist alles exakt vorherzusagen, praktisch gesehen kann man bei Piplined Systemen nur unter sehr engen vorgegebenen Bedingungen die Taktanzahl für ein kleines Stückchen Programmcode vorrausberechnen. Kommt nun noch ein Interrupt dazwischen verändert sich wiederum alles, sogar der Zeitpunkt wann der IQR auftritt ist entscheidend. Ich gebe Tipper als absolut recht wenn er sagt: "Ein Nachteil der Pipeline ist, daß es fast nicht möglich ist, anhand abgezählter Befehlsfolgen die Zeitdauer einer Programmsequenz zuermitteln." Und er damit einen Vergleich einer piplined CPU mit zB. dem AVR unterstellt. Es ist eben NICHT mehr möglich einfach mal die Befehle abzuzählen und in Taktzyklen umzurechnen. Gruß Hagen
Ich glaube nicht, daß eine Pipeline in einer FPGA-CPU einen Sinn macht. Wenn es Dir auf Geschwindigkeit ankommt, dann bist Du mit einer standard GHz-CPU besser. Und eine effektive Pipeline wird mindestens soviel Gatter belegen, wie die CPU, wenn nicht noch mehr. Der FPGA-Platz ist einfach zu kostbar, um ihn mit einer Pipeline zu vergeuden. Lieber die CPU selber aufbohren (z.B. 32 Bit), das bringt mehr. Eine FPGA-CPU macht ja nur in Nischenanwendungen wirklich Sinn (spezielle Hardware-Algorithmen). Und eine Pipeline als Hobbyprojekt, nur um zu beweisen, daß es geht, dazu wäre mir meine Arbeitszeit viel zu kostbar. Schließlich ist ein Studium auch dazu da, effektives Arbeiten zu lernen, d.h. die optimale Balance zwischen Fertigteil und Selbermachen. Peter
Bezüglich des Sinnes einer Pipeline in einer "Software" CPU kann ich nicht viel sagen, (bin gerade am Anfang der Vorlesungen Embedded Systems und Modern approaches in digital design) allerdings wurde uns das Pipeline Prinzip an Hand des PIC16F84 nähergebracht. Und der ist schon 100%ig vorhersagbar. Allerdings handelt es sich auch nur um eine Pipeline für (soweit ich mich gerade erinnere) 2 "Stufen" , so daß der einzige Pipelinestall bei einer call oder goto Anweisung auftrat ... aber vielleicht kommt da ja noch mehr :-) Ach und btw: uns wurde gesagt in den Softwareprozessoren läge die Zukunft ... allerdings war das nicht der Prof :-) Grüße Cpt
@Paul: wenn ich mich nicht irre, dann war vor ein paar Stunden ein neuer Thread da, wo isser denn hin ???
Entweder sollte ich ne neue Brille kaufen, nen Computerkurs besuchen oder der andere Thread ist schon wieder fort !
hallo C3P0, erstmal wie war dein Urlaub? Jemand hat das gelöscht 2 mal ,eigentlich es ist komisch. Haben sie mein mail gesehen wo ein paar zeichnung drau sind?
Zunächst einmal: Macht es überhaupt Sinn als Privatmann sich eine eigene CPU in einem FPGA zu planen ? Mit Sicherheit nicht, es sei denn man will etwas lernen oder man beschäftigt sich aus schulischen Gründen damit ! Aber nichts desto trotz ist es ein sehr interessantes Thema, das man sich durchaus vornehmen sollte. Danke, der war wesentlich wärmer als er hier in Deutschland gewesen wäre !!! Na dürfte ja nicht so viele geben, die das hier machen dürfen !!! Vielleicht schreibt ja mal derjenige,der es war, warum er das gemacht hat !!! aber ich glaube es sind noch mehr Threads als deiner verschwunden ! Ja ich habe mir die Zeichnungen mal angesehen ! Um sich das Leben zu vereinfachen: 1. Trennen von Programmcode und Daten, dann hast du mein Fetch und WB keine Probleme des gleichzeitigen Zugriffs auf den Speicher 2. du solltest einen Befehlssatz haben, der Operationen nur mit dem Akku und einem 2. Register unterstützt (könnte bei dir das OPR-Reg. sein) Transfers: nur vom MEM -> AKKU oder MEM <- AKKU oder MEM -> 2.Reg oder MEM <- 2.Reg Du könntest zwischen dem Fetch/Decode und Execute/MEM-Data/WB eine Pipe einbauen Du müsstest dazu dein Steuerwerk komplett neuschreiben !!! Ablauf: 1. PC->AR 2. Instruction ins MAR-Reg. 3. jetzt wird der Befehl dekodiert hier kommt die PIPE hin: hier benutzt du ein n-Bit Flip-Flop, dass die folgenden Signale aufnimmt: a. alle Signale aus der Dekodiereinheit b. die Signale die an die Akkumulatoreinheit gelegt werden sollen c. Sonstige Signale zu Steuerzwecken d. 1 Signal, das auskunft darüber gibt, ob sinnvolle Infos in der PIPE sind oder ob ein STALL durchgeführt werden soll in der 2. Stufe: 4. Ausführen des Befehls (Akkumulatoreinheit) 5. zurückschreiben des Wertes in AKKU/2.Reg Anmerkungen: Aufgrund deines bisher gewählten Aufbaus, wirst du wohl einiges ändern müssen!!! Aufpassen musst du noch bei Sprungbefehlen. hierzu ist es notwendig, die Stall Info in der PIPE zu setzen, wenn ein Sprung ausgeführt wurde !!! Dann wird der vorhergehende Befehl nicht ausgeführt und es geht nach dem Sprung ganz normal weiter!!! So ich hoffe ich habe dir ein wenig weiterhelfen können und nicht allzuviel vergessen, aber ich denke es gibt hier einige die dann etwas dazu schreiben werden... wenn noch Fragen/Probleme sind als her damit
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.