DE2336676C3 - Einrichtung zur Modifizierung von Mikroprogrammbefehlen - Google Patents

Einrichtung zur Modifizierung von Mikroprogrammbefehlen

Info

Publication number
DE2336676C3
DE2336676C3 DE19732336676 DE2336676A DE2336676C3 DE 2336676 C3 DE2336676 C3 DE 2336676C3 DE 19732336676 DE19732336676 DE 19732336676 DE 2336676 A DE2336676 A DE 2336676A DE 2336676 C3 DE2336676 C3 DE 2336676C3
Authority
DE
Germany
Prior art keywords
microprogram
register
instruction
macro
command
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired
Application number
DE19732336676
Other languages
English (en)
Other versions
DE2336676B2 (de
DE2336676A1 (de
Inventor
Günter 7030 Böblingen Knauft
Oktavy 7030 Böblingen Koltschak
Klaus Dipl.-Ing. 7405 Dettenhausen Kraft
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
IBM Deutschland GmbH
Original Assignee
IBM Deutschland GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by IBM Deutschland GmbH filed Critical IBM Deutschland GmbH
Priority to DE19732336676 priority Critical patent/DE2336676C3/de
Priority to IT2199874A priority patent/IT1010167B/it
Priority to GB2172874A priority patent/GB1433076A/en
Priority to FR7418506A priority patent/FR2238189B1/fr
Priority to JP8081974A priority patent/JPS5334981B2/ja
Publication of DE2336676A1 publication Critical patent/DE2336676A1/de
Publication of DE2336676B2 publication Critical patent/DE2336676B2/de
Application granted granted Critical
Publication of DE2336676C3 publication Critical patent/DE2336676C3/de
Expired legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/223Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Description

45
Die Erfindung betrifft eine Einrichtung zur Modifizierung von Mikroprogrammbefehlen nach dem Oberbegriff des Anspruchs 1.
Zur Erhöhung der Flexibilität des datenverarbeitenden Systems und aus Gründen der Kostenersparnis wird in modernen Rechenanlagen weitgehend von der Technik der Mikroprogrammierung Gebrauch gemacht. Dabei wird ein Programmbefehl im Hauptspeicher (Makrobefehl) als eine zeitliche Folge von Elementaroperationen, sogenannten Mikrooperationen, ausgeführt Diese Mikrooperationen werden durch einzelne Mikrobefehle angestoßen, die aus einem Speicher in Abhängigkeit vom vorliegenden Makrobefehl abgerufen werden. Neben anderen Informationen enthalten diese Mikrobefehle Steuerfelder, aus denen direkt Signale zur Steuerung der Elementaroperationen 6> abgeleitet werden. Einzelheiten dieser Technik sind z. B. beschrieben in dem Buch »Microprogramming« von S. S. Husson, Englewood Cliffs, 1970.
In bekannten Einrichtungen dieser Art, so z. B. in vielen der Rechenanlagen der Reihe IBM/360/370, besteht die Mikroprogrammsequenz zur Ausführung eines Makrobefehls im wesentlichen aus folgenden Schritten:
A) Einleitende Phase
1. Lesen des Makrobefehls im Hauptspeicher;
2. Aufbereitung der Operandenadressen;
B) Ausführungsphase
3. Verzweigen zur speziellen Mikroprogrammausführungsroutine für den vorliegenden Makrobefehl;
4. Ausführung des vorliegenden Makrobefehls;
a) Lesen der Operanden
b) Verarbeiten der Operanden
c) Speichern des Resultats;
5. Verzweigen zu Schritt 1.
Prinzipiell ist nun für jede der unter Punkt 4 geschilderten Befehlsausführungsphasen eine spezielle Mikroprogrammschrittfolge erforderlich. Dies bringt den Nachteil mit sich, daß in Datenverarbeitungsanlagen mit einem mächtigen, aus vielen Instruktionen bestehenden Instruktionssatz ein Mikroprogrammspeicher beträchtlicher Kapazität erforderlich ist, daß weiterhin infolge der notwendigen Programmverzweigungen ein Zeitverlust in der Mikroprogrammausführung auftritt und daß schließlich die Erstellung der Mikroprogramme sehr aufwendig ist
Zur Vermeidung dieser Schwierigkeiten wurde in der deutschen Auslegeschrift 12 50 659 angegeben, für verschiedene Makrobefehle Mikroprogrammroutinen mit gleicher Anfangsadresse zu verwenden und an bestimmten Punkten dieser Routinen, abhängig vom gerade durchzuführenden Makrobefehl, zu verschiedenen Mikroprogrammadressen zu verzweigen. Die vorgeschlagene Adreßmodifizierung erfordert jedoch einen komplizierten Schaltungsaufbau; außerdem ist die Einsparung an Speicherplatz noch nicht optimal, da auch hier verschiedene Mikroinstruktionen für verschiedene Makrobefehle gespeichert werden müßten.
Aufgabe der vorliegenden Erfindung ist es nun, für eine mikroprogrammgesteuerte Befehlsausführungseinheit eine Einrichtung zur Modifizierung von Mikroprogrammbefehlen anzugeben, die einfach strukturiert ist, dabei jedoch eine hohe Flexibilität aufweist und zu einer möglichst großen Speicherplatzeinsparung führt
Dazu geht die Erfindung von der Feststellung aus, daß sich innerhalb des Instruktionsrepertoires einer modernen Datenverarbeitungsanlage Gruppen von Instruktionen zusammenfassen lassen, die denselben Instruktionsaufbau besitzen, bei denen also beispielsweise die Anzahl und die Lage der Felder in einer Instruktion gleich sind und die dasselbe Datenformat besitzen.
Für Instruktionen innerhalb einer derartigen Gruppe unterscheiden sich die oben erwähnten Mikroprogrammschritte 1 bis 5 nur in dem Schritt 4b, wo die eigentliche, durch den Makroinstruktionscode spezifl· zierte Aufgabe durchgeführt wird. Durch Zusammenlegung der verschiedenen Ausführungsphasen für die einzelnen Makroinstruktionen in eine für alle Instruktionen einer Gruppe gemeinsame Phase ließe sich danach eine beträchtliche Einsparung an Speicherplatz und Ausführungszeit erreichen; diese gemeinsame Ausführungsphase muß dabei selbstverständlich entsprechend
der jeweils vorliegenden Instruktion dynamisch modifiziert werden, wobei eine Einrichtung geschaffen werden muß, die diese Modifizierung in einfacher und zeitsparender Weise durchzuführen gestattet
Die Erfindung löst diese Aufgabe entsprechend den im kennzeichnenden Teil des Hauptanspruchs angegebenen Merkmalen.
Vorteilhafte Ausgestaltungen und Weiterbildungen der Erfindung sind den Unteransprüchen zu entnehmen.
Ein Ausfühn-Tigsbeispiel der Erfindung soll im folgenden anhand von Zeichnungen dargestellt werden. Es zeigt
F i g. ί ein Prinzipschaltbild eines Mikroprogrammsteuerwerks gemäß einem Ausführungsbeispiel der Erfindung,
F i g. 2 das Bitmuster der für die Erfindung maßgeblichen Mikroprogrammbefehls-Steuerfelder während der verschiedenen Ausführungsphasen einer Makroinstruktion.
F i g. 1 zeigt in schematischer Weise die wesentlichen Elemente eines Mikroprogrammsteuerwerks, von denen die Erfindung Gebrauch macht Die Makroinstruktionen, auch als Maschineninstruktionen bezeichnet sind im Hauptspeicher HSi in Form von Programmen gespeichert Sie werden in der einleitenden Phase der Befehlausführung aus dem Speicher abgerufen und in ein mit SDR 1 bezeichnetes Speicherausgangsregister 2 gebracht Der Befehlsschlüssel befindet sich dann in einem Feld OPCODEX. Von dort werden die im Makrobefehl enthaltenen Informationen zur Mikroprogrammsteuerung an die entsprechenden Steuerelemente weitergeleitet, so z. B. als Adresseninformation für den Mikroprogrammspeicher CS 4 oder für die Aufbereitung der Operanden. Diese Einzelheiten sind für die vorliegende Erfindung nicht wesentlich und sollen deshalb auch nicht weiter betrachtet werden. Im späteren Verlauf der Befehlsausführung dienen die mit SDRi und SDR 2 bezeichneten Register 2 und 3 zur Aufnahme der Operanden für die in der Ausführung befindliche Instruktion.
Das Mikroprogramm ist im Mikroprogrammspeicher CS 4 enthalten, aus dem die einzelnen Mikroinstruktionen entsprechend der in der Einleitung geschilderten Einzelschritte 1 bis 5 durch ein (nicht dargestelltes) Fortschaltewerk abgerufen und in ein Ausgangsregister CSDR 5 gebracht werden. Von den einzelnen Feldern dieses Registers bestehen Verbindungen zu anderen Systemkomponenten, auf denen die entsprechend der Bitverteilung in den Steuerfeldern erzeugten Steuersignale an die Systemkomponenten, wie z. B. die arithmetische und logische Einheit ALU6, weitergeleitet werden.
Die geniale Aufteilung des Ausgangsregisters CSDR 5 in die zur Steuerung der Anlage notwendigen Felder (und damit die Aufteilung des gesamten Mikrobefehls in entsprechende Felder) ist für die vorliegende Erfindung ohne Belang; deren Einfluß äußert sich nur im Vorhandensein eines zusätzlichen Steuerfeldes 52 und zweier zusätzlicher spezieller Steuerbits 50 und Sl.
Bevor nun die Einzelheiten der Erfindung und ihre Funktionsweise anhand der Elemente 7, 8 und 9 erläutert wird, soll zunächst auf das Makroinstruktionsformat eingegangen werden, wie es in den Rechenanlagen des Systems IBM/360/370 verwendet wird, und auf welchem die Erfindung aufbaut. Es ist jedoch selbstverständlich, daß die Erfindung auch anwendbar ist, wenn andere als die hier geseri'derten Instruktionsformate zugrunde gelegt werden,
In dem genannten System besteht der Instruktionsschlüssel 20 aus acht Bits. Dabei ist er so aufgebaut, daß die hochstelligen vier Bits Gruppen von Instruktionen zusammenfassen, die identisches Instruktions- und Operandenformat besitzen; die niedrigstelligen Bits dienen dann zur Unterscheidung der Einzelinstruktionen innerhalb der 16 Gruppen.
Als Beispiel für eine derartige Zusammenfassung von
ίο Instruktionen in Gruppen können die logischen Register-Register-Operationen dienen, d. h. solche, bei denen der Inhalt zweier Register R 1 und R 2 logisch verknüpft wird:
Operation
Befehlsschlüssel
UND/? 1, Λ2
ODER Al, Λ 2
XOR (Antivalenz) R \,R 2
00010100
00010110
00010111
Weitere Einzelheiten über Instruktionsformate im
System IBM/360/370 sind in der Broschüre i3M System/360, Principles of Operation, IBM Form Nr. GA 22-6821 enthalten.
Innerhalb dieser so definierten Instruktionsgruppen kommt nun die Erfindung zum Tragen. Während der einleitenden Phase steuert ein spezielles ßit 50 der für diese Phase wirksamen Mikroinstruktion die Übertragung der niedrigstelligen Bits des Befehlsschlüssels aus dem Register 2 in das ALU-Index-Register 7. Dort wird der Schlüssel bis zur Ausführungsphase dieses Befehls zwischengespeichert Für jedes der zu speichernden Bits ist dementsprechend eine Selbsthalteschaltung 7a bis Td in üblicher Bauart vorgesehen, die gesetzt wird, wenn zum Zeitpunkt der Übertragung das zu speichernde Bit und das Steuerbit 50 auf»1« stehen.
Wie schon erwähnt laufen die Mikroprogrammschritte für die Ausführung von Makroinstruktionen innerhalb derselben Gruppe in identisch gleicher Weise ab; die einzelnen Mikroinstruktionen sind dabei auch nur einmal im Mikroprogrammspeicher enthalten. Die notwendige Modifizierung der Mikroinstruktion erfolgt im Abschnitt 4b der Ausführungsphase, in dem die Verarbeitung der Operanden durchgeführt wird. Dazu wird der im ALU-Index-Register 7 zwischengespeicherte Teil des Befehlsschlüssels logisch verknüpft mit dem
so Inhalt des Steuerfeldes 52 im gerade angezogenen Mikrobefehl. Dies erfolgt in der Weise, daß ein spezielles Steuerbit 5t in der Mikroprogramminstruktion die UND-Schaltung 8 aktiviert und damit den Inhalt des ALU-Index-Registers der logischen Verknüpfungsschaltung 9 zuführt Gleichzeitig wird der Inhalt des Steuerfeldes 52 der Mikroinstruktion der Jogischui Verknüpfungsschaltung 9 zugänglich gemacht in einer bevorzugten Ausführungsform der Erfindung handelt es sich bei der logischen Verknüpfungsschaltung 9 um eine Schaltung, die das Inklusive ODER verwirklicht Das für alle Instruktionen der Gruppe gleiche Steuerfeld 52 der Mikroinstruktion wird dabei durch die logische Verknüpfungsschaltung 9 mit Hilfe des im ALU-Index-Register gespeicherten Teils des Befehlsschlüssels so modifiziert, daß am Ausgang der logischen Verknüpfungsschaltung 9 die für diese Instruktion spezifischen Steuersignale an die arithmetische und logische Einheit 6 zur Verfügung stehen.
Zur weiteren Verdeutlichung der Erfindung sei die Modifizierung der Mikroinstruktion für den Schritt 4b am Beispiel der Register-Register-Operationen betrachtet. Zur Ausführung dieser Funktion sei angenommen, daß die arithmetische Einheit folgende Steuersignale benötigt:
Operation
Steuersignal
UND R\. Rl
ODKR R\.R2
XOR R 1. R2
1000
1010
K)II
Diese Bitmuster lassen sich nun leicht aus den früher angegebenen Befehlsschlüsseln der Makrobefehle erzeugen, wenn als gemeinsames Steuerfeld 52 der Mikroinstruktion das Bitmuster Ί 100' gewählt wird. Die Verknüpfung dieses Steuerfeldes mit den niedrigstelli gen vier Bits nach den Regeln der Antivalenz ergibt dann gerade die geforderten Steuersignale, beispielsweise für eine UND R I. R 2-Operation:
Niedrigslelligc Bits im Bcfehlsschlüssel
Bitmuster im Steuerfeld 52
Steuerbits
OKK)
IKW)
1Of)O
XOR
In F i g. 2 sind für dieses Beispiel die für die Erfindung maßgeblichen Steuerfelder in der Mikroinstruktion während der Abarbeitung einer Makroinstruktion angegeben. Die übrigen, durch Kreuze angedeuteten Bits unterscheiden sich in nichts von den sonst gebräuchlichen Steuerbits in Mikroinstruktionen. Die früher erwähnten Schritte I bis 5 sind in der Figur durch S 1 bis 55 gekennzeichnet.
Anstelle der Exklusiv-ODER-Funktion kann /ur Verknüpfung von Befehlsschlüssel und Steuerfeld 52 auch eine binäre Addition oder eine sonstige logische Operation gewählt werden. Die Steuerbits 50 und 51 der Mikroinstruktion können entfallen, wenn die ihnen entsprechenden Steuersignale aus anderen Quellen ermittelt werden, beispielsweise durch Decodierung von Teilen des Makro-Befehlsschlüssels 20.
Hliitt

Claims (6)

Patentansprüche;
1. Einrichtung zur Modifizierung von Mikroprogrammbefehlen einer Datenverarbeitungsanlage während ihrer Ausführungsphase in Abhängigkeit vom auszuführenden Makrobefehl, dadurch gekennzeichnet, daß ein erstes Register (7) zur zeitweisen Speicherung des Makrobefehlsschlüssels (20) oder eines Teiles davon, sowie eine Schaltung (9) ι ο zur logischen Verknüpfung des Inhalts des ersten Registers (7) mit einem ausgewählten Teil (Feld 52) eines zweiten, einen Mikroprogrammbefehl enthaltenden Registers (5) vorgesehen sind, wobei das Ergebnis der logischen Verknüpfung einen Mikroprogrammbefehl oder Teile davon darstellt.
2. Einrichtung nach Anspruch 1, dadurch gekennzeichnet, daß die Übertragung des Befehlsschlüssels (20) in das erste Register (7) und die logische Verknüpfung in der Schaltung (9) durch das Mikroprogramm gesteuert werden.
3. Einrichtung nach Anspruch 1 und/oder 2, dadurch gekennzeichnet, daß die logische Verknüpfungsschaltung (9) ein Exklusives ODER realisiert
4. Einrichtung nach Anspruch 1 und/oder 2, dadurch gekennzeichnet, daß die logische Verknüpfungsschaltung (9) eine Addition realisiert
5. Einrichtung nach Anspruch 2, dadurch gekennzeichnet, daß ein erstes Mikroprogrammbefehlssteuerbit (50) die Übertragung von Teilen des Makrobefehlsschlüssels (20) in das erste Register (7) steuert und daß durch ein zweites Mikroprogrammbefehlssteuerbit (51) aktivierte UND-Glieder (8) die Verknüpfung der Inhalte des ersten Registers (7) und des ausgewählten Feldes (32J im zweiten Register (5) steuern.
6. Einrichtung nach einem der Ansprüche 1 bis 5, dadurch gekennzeichnet, daß das zweite Register (5) das Ausgangsregister eines Mikroprogrammspeichers (4) ist
DE19732336676 1973-07-19 1973-07-19 Einrichtung zur Modifizierung von Mikroprogrammbefehlen Expired DE2336676C3 (de)

Priority Applications (5)

Application Number Priority Date Filing Date Title
DE19732336676 DE2336676C3 (de) 1973-07-19 1973-07-19 Einrichtung zur Modifizierung von Mikroprogrammbefehlen
IT2199874A IT1010167B (it) 1973-07-19 1974-04-29 Sistema per modificare istruzioni di un microprogramma
GB2172874A GB1433076A (en) 1973-07-19 1974-05-16 Data processing systems
FR7418506A FR2238189B1 (de) 1973-07-19 1974-05-21
JP8081974A JPS5334981B2 (de) 1973-07-19 1974-07-16

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE19732336676 DE2336676C3 (de) 1973-07-19 1973-07-19 Einrichtung zur Modifizierung von Mikroprogrammbefehlen

Publications (3)

Publication Number Publication Date
DE2336676A1 DE2336676A1 (de) 1975-01-30
DE2336676B2 DE2336676B2 (de) 1980-10-16
DE2336676C3 true DE2336676C3 (de) 1981-06-19

Family

ID=5887367

Family Applications (1)

Application Number Title Priority Date Filing Date
DE19732336676 Expired DE2336676C3 (de) 1973-07-19 1973-07-19 Einrichtung zur Modifizierung von Mikroprogrammbefehlen

Country Status (5)

Country Link
JP (1) JPS5334981B2 (de)
DE (1) DE2336676C3 (de)
FR (1) FR2238189B1 (de)
GB (1) GB1433076A (de)
IT (1) IT1010167B (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4085439A (en) * 1976-08-27 1978-04-18 Itek Corporation Computer programming system having greatly reduced storage capacity and high speed
JPS6019017B2 (ja) * 1976-12-15 1985-05-14 富士通株式会社 デ−タ処理システム
AU541189B2 (en) * 1980-02-11 1984-12-20 Data General Corporation Data processing system
JPS5835579A (ja) * 1981-08-28 1983-03-02 Toppan Printing Co Ltd 反射型ホログラムの製造方法
JPS5835578A (ja) * 1981-08-28 1983-03-02 Toppan Printing Co Ltd ホログラムの複製方法
DE3311475C1 (de) * 1983-03-29 1984-08-16 Siemens AG, 1000 Berlin und 8000 München Mikroprogramm-Steuereinrichtung
GB8421066D0 (en) * 1984-08-18 1984-09-19 Int Computers Ltd Microprogram control
US4825363A (en) * 1984-12-05 1989-04-25 Honeywell Inc. Apparatus for modifying microinstructions of a microprogrammed processor
GB2215879A (en) * 1988-03-23 1989-09-27 Benchmark Technologies Numerical processor using microcode
EP0334621A3 (de) * 1988-03-23 1992-12-30 Du Pont Pixel Systems Limited System mit verbesserter Befehlsausführung
US6184902B1 (en) 1997-04-30 2001-02-06 Hewlett-Packard Company Centralized branch intelligence system and method for a geometry accelerator
US5956047A (en) * 1997-04-30 1999-09-21 Hewlett-Packard Co. ROM-based control units in a geometry accelerator for a computer graphics system

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE1250659B (de) * 1964-04-06 1967-09-21 International Business Machines Corporation, Armonk, NY (V St A) Mikroprogrammgesteuerte Datenverarbeitungsanlage

Also Published As

Publication number Publication date
IT1010167B (it) 1977-01-10
GB1433076A (en) 1976-04-22
JPS5334981B2 (de) 1978-09-25
FR2238189A1 (de) 1975-02-14
DE2336676B2 (de) 1980-10-16
FR2238189B1 (de) 1976-06-25
DE2336676A1 (de) 1975-01-30
JPS5040050A (de) 1975-04-12

Similar Documents

Publication Publication Date Title
DE2755273C2 (de)
DE2813128C2 (de) Steuereinrichtung für Mikroprogrammspeicher
DE2714805C2 (de)
DE1250659B (de) Mikroprogrammgesteuerte Datenverarbeitungsanlage
DE2322674C3 (de) Mikroprogramm-Steuereinrichtung
DE2542751C2 (de) Datenverarbeitungsanlage
DE2318069C2 (de) Mikroprogrammierte Rechenanlage mit Erweiterung von Steuerfunktionen mittels festverdrahteter logischer Matrix
DE2417795C2 (de) Datenverarbeitungsanlage
DE3688232T2 (de) Datenverarbeitungssystem.
DE1774296B2 (de) Restruktuierbare Steuereinheit für elektronische Digitalrechner
DE2847934A1 (de) Datenverarbeitungseinrichtung mit einem mikrobefehlsspeicher
DE3689389T2 (de) Datenverarbeitungsprozessor.
DE2336676C3 (de) Einrichtung zur Modifizierung von Mikroprogrammbefehlen
DE2719635A1 (de) Anordnung fuer eine erweiterung einer mikroprogrammsteuerung einer datenverarbeitungsanlage
DE2910839A1 (de) Einrichtung zur ausfuehrung einer speziellen verzweigungsinstruktion
DE2717658A1 (de) Anordnung zur ansteuerung eines mikroprogrammspeichers
DE1269393B (de) Mikroprogramm-Steuerwerk
DE1197650B (de) Parallel-Addierer
DE1806535B2 (de) Seriell arbeitende digitale rechenanlage
DE1935944B2 (de) Steuereinrichtung in einer elektronischen Datenverarbeitungsanlage
DE2835110A1 (de) Schneller echtzeit-rechneremulator
DE3586709T2 (de) Informationsverarbeitungseinheit.
DE2245284A1 (de) Datenverarbeitungsanlage
DE2759120C2 (de)
DE3226214C2 (de) Datenverarbeitungsanlage

Legal Events

Date Code Title Description
OD Request for examination
C3 Grant after two publication steps (3rd publication)
8339 Ceased/non-payment of the annual fee