Hallo, hat sich von euch schon jemand überlegt wie wir die Pipeline-Register implementieren? a) Jede Stufe in der Pipeline hat eine VHDL Entity. Zur Stufe selbst gehört auch das Register, das am Anfang der Stufe steht (in weiterer Folge Eingangsregister genannt) und übernimmt bei jedem Taktzyklus die Ergebnisse der davorliegenden Stufe. Dieses Eingangsregister besitzt auch ein Enable-Signal mit dem die Übernahme der Daten verhindert werden kann (STALL) und ein Clear-Signal (FLUSH). In der Architecture (für diese Entity) dieser Stufe werden dann die Komponenten, die zu dieser Stufe gehören instantiiert und mit Signalen verbunden. Den oben beschriebenen Ansatz findet ihr exemplarisch in: http://www.soc.tuwien.ac.at/files/marca Unsere Arbeitsaufteilung passt im Moment nicht ganz zu dieser Art der Implementierung. b) Nach logischen Einheiten getrennt, Distributed-Pipeline-Register. Ich versuche es Anhand der SRAM (Daten-RAM) Implementierung beispielhaft zu erklären. Die Teile des Pipeline-Registers, welche für den Zugriff auf das SRAM von Bedeutung sind, werden zusammen mit dem SRAM Zugriff implementiert, und das SRAM Modul übernimmt die Daten von der EX-Stufe (ohne ein zusätzliches Register). Schema (ohne Records, sonst wird es unübersichtlich) [pseusocode] -- SRAM (WB) entity SRAM is port( clk : std_logic; stall : std_logic; -- update pipeline reg on rising_edge(clk) sram_op : sram_op_type; -- NOP, LD , ST (from ID) rx_val : std_logic_array(DATA_WIDTH-1 downto 0); -- register value of st alu_val : std_logic_array(DATA_WIDTH-1 downto 0); -- calc'ed address by alu p_val : std_logic; -- perform operation ... ); end entity SRAM; -- ALU (EX) entity ALU is port( clk : std_logic; stall : std_logic; -- update pipeline reg on rising_edge(clk) aluop : alu_op_type; op1 : std_logic_vector(DATA_WIDTH-1 downto 0); op2 : std_logic_vector(DATA_WIDTH-1 downto 0); alures : std_logic_vector(DATA_WIDTH-1 downto 0); aluflags: std_logic_vector(FLAG_WIDTH-1 downto 0); ... ); end entity ALU; [/pseusocode] Bei der Instantiierung von ALU und SRAM wird dann das Signal "alures" von der Entity ALU mit dem Signal "alu_val" von SRAM verbunden. Der Nachteil dieser Methode ist, dass wir mehrere Register haben, die den selben Inhalt speichern. Beispielsweise wird "alures" sowohl in SRAM alsauch in STACK benötigt. ********************* Ich bin am Überlegen, ob es nicht sinnvoll wäre, wenn wir uns am Mittwoch oder Donnerstag kurz treffen würden, um Fragen und Probleme zu diskutieren oder zu klären. Oder eine Gruppendiskussion in einem IM-System (Skype?) das Gruppengespräche zulässt, dann muss ich nicht extra nach Wien fahren (ca. 75min pro Richtung). lg Günther p.s. @Martin: Hast du das Mail vom Puffitsch bezüglich "generischen Typen (aka integer/boolean)" gelesen/bekommen? Es sollte theoretisch auch an die Mailing-List gegangen sein, ich hab sie aber nur einmal bekommen, darum bin ich mir nicht sicher, ob ihr sie auch bekommen habt.