Nested Interfaces

mProg
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 147
Registriert: 25. Apr 2015 00:10

Nested Interfaces

Beitrag von mProg » 19. Feb 2017 11:20

Ich habe eine generelle Frage über Nested Interfaces dass mir noch nicht so ganz klar ist:
Wenn wir zum Beispiel diesen Code nehmen:

Code: Alles auswählen

interface ESABusWr_Master_Fabric;
	method ActionValue#(Tuple2#(Bit#(16), Bit#(8))) request;
endinterface

interface ESABusWr_Master;
	interface ESABusWr_Master_Fabric fab;
endinterface

module mkESABusWr_Master(ESABusWr_Master);

	FIFO#(Tuple2#(Bit#(16), Bit#(8))) requestIn <- mkFIFO();

	interface ESABusWr_Master_Fabric fab;
		method ActionValue#(Tuple2#(Bit#(16), Bit#(8))) request;
			requestIn.deq();
			return requestIn.first();
		endmethod
	endinterface

endmodule 
Da ist der Interface ESABusWr_Master_Fabric, der nur eine Methode hat im Interface ESABusWr_Master.
Meine Frage ist, warum man nicht anstelle dem Interface ESABusWr_Master_Fabric einfach eine Methode request im Interface ESABusWr_Master definiert.
Was mir selbst einfällt ist, dass es auch hier gehen würde, aber mit dem Interface ESABusWr_Master_Fabric ist eine allgemeine Schnittstelle gedacht, und deshalb wird es als Interface implementiert.
Ich weiß nicht, ob das richtig ist

JHofmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 23. Apr 2015 10:43

Re: Nested Interfaces

Beitrag von JHofmann » 19. Feb 2017 11:26

Moin,

genau, ESABusWr_Master_Fabric ist als allgemeine Schnittstelle Gedacht. Darüber laufen alle Operationen wie z.B. Verbinden der Komponenten.

Das eigentliche Interface hat damit sozusagen zwei Seiten:

Code: Alles auswählen

interface ESABusWr_Master;
  interface ESABusWr_Master_Fabric fab;                          // Zum Bus
  interface Put#(Tuple2#(Bit#(16), Bit#(8))) request;          // Zum eigenen Modul
endinterface
Die Abstraktion ist insbesondere dann Nützlich wenn der Bus sich z.B. nicht an Bluespec Handshake-Konventionen hält. Ein Modul das 'ESABusWr_Master' implementiert würde dann die Übersetzung vom 'request'-Interface auf den eigentlichen Bus übernehmen.

Da das Beispiel relativ einfach ist, braucht man hier keine komplizierte Übersetzung. Bei AXI z.B. ist das Modul allerdings etwas umfangreicher.

Viele Grüße,

Antworten

Zurück zu „Archiv“