From 0c7be6ddc7a8ba72db36be3034ee63fdfa999f15 Mon Sep 17 00:00:00 2001 From: "helmut.neemann" Date: Thu, 22 Dec 2016 08:44:55 +0100 Subject: [PATCH] used separate ControlUnit for Processor with Interrupt-Controller --- src/main/dig/processor/Control.dig | 18 - src/main/dig/processor/ControlIntr.dig | 511 ++++++++++++++++++ src/main/dig/processor/ProcessorIntr.dig | 20 +- .../digital/integration/TestExamples.java | 2 +- 4 files changed, 522 insertions(+), 29 deletions(-) create mode 100644 src/main/dig/processor/ControlIntr.dig diff --git a/src/main/dig/processor/Control.dig b/src/main/dig/processor/Control.dig index 3f7c38b92..1e9b2b2d3 100644 --- a/src/main/dig/processor/Control.dig +++ b/src/main/dig/processor/Control.dig @@ -375,20 +375,6 @@ realisiert, und nicht durch 24 einzelne Schaltnetze. - - Out - - - Description - return from interrupt - - - Label - reti - - - - @@ -467,10 +453,6 @@ realisiert, und nicht durch 24 einzelne Schaltnetze. - - - - diff --git a/src/main/dig/processor/ControlIntr.dig b/src/main/dig/processor/ControlIntr.dig new file mode 100644 index 000000000..3f7c38b92 --- /dev/null +++ b/src/main/dig/processor/ControlIntr.dig @@ -0,0 +1,511 @@ + + + 1 + + + Description + Leitwerk für einen einfachen Prozessor. +Es arbeitet rein kombinatorisch, es handelt sich +also um ein einfaches Schaltwerk. +Da es vergleichsweise komplex ist (24 +Ausgangsbits), wird es durch einen +entsprechenden ROM-Baustein +realisiert, und nicht durch 24 einzelne Schaltnetze. + + + Width + 5 + + + + + In + + + Description + Der Opcode incl. Immediate Bit + + + Label + Op + + + Bits + 7 + + + + + + Splitter + + + Input Splitting + 7 + + + Output Splitting + 6,1 + + + + + + Multiplexer + + + Bits + 6 + + + + + + Const + + + Value + 0 + + + Bits + 6 + + + + + + ROM + + + Label + Logic + + + Bits + 24 + + + Addr Bits + 6 + + + Data + 0,200080,4004c0,4044c0,4008c0,4048c0,400cc0,4010c0,4014c0,c4,d4,4004c4,4004d4,4044c4, +4044d4,4008c4,4008d4,4048c4,4048d4,400cc4,400cd4,4010c4,4010d4,4014c4,4014d4,402cc0, +402cc4,402cd4,400800,400804,400814,4018c0,401cc0,4058c0,405cc0,4020c0,24c0,28c0,20040a, +689,200006,20001e,85,95,200406,685,8018,10018,18018,28018,30018,38018,1a4,20,24,20018, +240004,24001c,240408,80284,80294,80688,100000,800020 + + + lastDataFile + + /home/hneemann/Dokumente/DHBW/Technische_Informatik_II/Systemnahes_Programmieren/java/assembler3/control.dat + + + + + + + Const + + + + + Out + + + Description + Programm Counter in Register Speichern + + + Label + stPC + + + + + + Splitter + + + Input Splitting + 24 + + + Output Splitting + 1*2,3,1*5,5,3,1*6 + + + + + + Out + + + Description + Wert am Datenbus in Register speichern + + + Label + WE + + + + + + Out + + + Description + Aktiviert das Speichern der Konstanten + + + rotation + + + + Label + imm + + + + + + Out + + + Description + absoluten Sprung auslösen + + + Label + absJmp + + + + + + Out + + + Description + Selektor für Mux B + + + Label + muxB + + + Bits + 3 + + + + + + Out + + + Description + SourceRegister auf Datenbus legen + + + Label + srcToD + + + + + + Out + + + Description + Selector für Mux A + + + Label + muxA + + + + + + Out + + + Description + ALU auf den Datenbus legen + + + Label + ALUToBus + + + + + + Out + + + Description + Operation der ALU + + + Label + ALUop + + + Bits + 5 + + + + + + Out + + + Description + Wenn gesetzt führt die ALU eine arithmetische Operation aus, so dass die Flags gespeichert werden müssen. + + + Label + storeFlags + + + + + + Out + + + Description + Art des bedingten Sprunges + + + Label + Branch + + + Bits + 3 + + + + + + Out + + + Description + Ram speichert Daten vom Datenbus + + + Label + st + + + + + + Out + + + Description + Ram gibt Daten auf den Datenbus + + + Label + ld + + + + + + Break + + + Cycles + 600000 + + + Label + Break + + + + + + Out + + + Description + Es wird auf die IO geschrieben + + + Label + ioW + + + + + + Out + + + Description + Es wird IO gelesen + + + Label + ioR + + + + + + PullDown + + + Bits + 24 + + + + + + Out + + + Description + return from interrupt + + + Label + reti + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/dig/processor/ProcessorIntr.dig b/src/main/dig/processor/ProcessorIntr.dig index a6400b434..2b4ca85cf 100644 --- a/src/main/dig/processor/ProcessorIntr.dig +++ b/src/main/dig/processor/ProcessorIntr.dig @@ -14,16 +14,6 @@ An dieser Adresse muss sich die ISR befinden. - - Control.dig - - - rotation - - - - - Register.dig @@ -1283,6 +1273,16 @@ An dieser Adresse muss sich die ISR befinden. + + C:/_daten/sourcen/digital/src/main/dig/processor/ControlIntr.dig + + + rotation + + + + + diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java index f1bb1b1d1..06ac9c56c 100644 --- a/src/test/java/de/neemann/digital/integration/TestExamples.java +++ b/src/test/java/de/neemann/digital/integration/TestExamples.java @@ -28,7 +28,7 @@ public class TestExamples extends TestCase { */ public void testDistExamples() throws Exception { File examples = new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig"); - assertEquals(92, new FileScanner(this::check).scan(examples)); + assertEquals(93, new FileScanner(this::check).scan(examples)); assertEquals(43, testCasesInFiles); }