[CALU] Programmable Interrupt Controller (PIC)

  • From: Martin Elshuber <e9825286@xxxxxxxxxxxxxxxxxxxx>
  • To: calu-ss2010-tuwien@xxxxxxxxxxxxx
  • Date: Fri, 21 May 2010 23:01:16 +0200

Ich hab mal eine erste version eines PIC ins repo getan (branch interrupt)

mein vorschlag zur funktionweise ist:
 der PIC kann 4 oder 8 interrupts (0 ist der höchst priore)
 der PIC speichert die sprung addressen dieser interupts
 schreibzugriffe erfolgen über st befehle auf PIC_BASE + 0 bis 7*4
 lese zugriffe sind nicht möglich
 der PIC verwaltet zusätzlich ein interrupt mask (IMASK) register
 schreib zugriffe erfolgen in 2 modi
    PIC_BASE+INTR_CNT*4+0, und PIC_BASE+INTR_CNT*4+4
    wobei INTR_CNT die anzahl der interupts ist
       ersteres macht setbits also (newIMASK= oldIMASK or value)
       zweiteres macht clearbits also (newIMASK= oldIMASK and not value)
 lese zugriffe sind ebenfalls nicht möglich
der PIC hat zusätzlich INTR_CNT eingänge die wenn sie, synchron für einen zyklus eins sind, einen interrupt auslösen wenn sie länger eins sind wird dies als mehrere interrupts behandelt, wobei alle verschluckt werden bis der interrupt ausgelöst wurde.

 das auslösen erfolgt in 2 schritten
1) wenn ein interrupt ausgelöst werden soll dann wird die pipeline 3 zyklen lang gestallt (stall grenze if/id) um etwaige branch-misses abzuwarten
   2) det PIC fügt ein "callp @sprungaddr" ein
* wenn man die branch misses nicht abwarten würde könnte es passieren das das callp weg geflushed wird, und das ist nicht gut * alternativ könnte man das callp als flush border markieren, und bei einem flush die addresse (rücksprung addresse für push) in der jeweiligen pipelinestufe ersetzen * eventuell könnte man noch das entsprechende bit in IMASK löschen, um den programmierer etwas kontrolle auf rekursive intterupts zu geben, er muß es dann halt am ende der interrupt routine erneut setzen (wenn es gewünscht ist)

weiters möchte ich noch anmerken das ich derzeit nur im modelsim gearbeitet habe, und daher keine ahnung habe wie es beim (derzeitigen) PIC mit dem kritischen pfad aussieht. das könnte mit der derzeitigen implementierung durchaus ein problem werden.

lg martin



Other related posts:

  • » [CALU] Programmable Interrupt Controller (PIC) - Martin Elshuber