USB Device Programming class project. This project allows a Python/Tk program running on a PC host to monitor/control a test-CPU programmed into an altera development board.

Dependencies:   C12832_lcd USBDevice mbed-rtos mbed mmSPI

Revision:
7:d1aca9ccbab8
Parent:
3:659ffc90b59e
Child:
12:d10f526ca443
diff -r b42075c1c1c1 -r d1aca9ccbab8 mmRTL/cpu.txt
--- a/mmRTL/cpu.txt	Sun Sep 01 03:19:59 2013 +0000
+++ b/mmRTL/cpu.txt	Sun Sep 01 03:48:07 2013 +0000
@@ -1,169 +1,169 @@
 /*----------------------------------copyright---//----------------------------*/
-//  licensed for personal and academic use.
-//  commercial use must be approved by the account-holder of
-//  gated.clock@gmail.com
+//      licensed for personal and academic use.
+//      commercial use must be approved by the account-holder of
+//      gated.clock@gmail.com
 /*-----------------------------------module-----//----------------------------*/
-    module cpu
+        module cpu
         (
-      iMOSI,
+          iMOSI,
           oMISO,
-      iSPIclk,
-      iCPUclk,
-      iKEY,
-      iSW,
-      oLEDR,
-      oLEDG,
-      oDummyLoad
+          iSPIclk,
+          iCPUclk,
+          iKEY,
+          iSW,
+          oLEDR,
+          oLEDG,
+          oDummyLoad
         );
 /*--------------------------------description---//------------------------------
-    the demonstration cpu datapath.
+        the demonstration cpu datapath.
 
-    the CPU consists of
-    R0 -  8-bit register and accumulator.
-    R1 -  8-bit register and main-memory address register.
-    R2 -  8-bit register and main-memory high data byte.
-    R3 -  8-bit register and main-memory low  data byte.
-    PC -  8-bit program counter.
-    IR - 16-bit instruction register.
-    ID -        combinatorial instruction decoder.
-    MM -        16-bit-wide x 256-address Main Memory.
+        the CPU consists of
+        R0 -  8-bit register and accumulator.
+        R1 -  8-bit register and main-memory address register.
+        R2 -  8-bit register and main-memory high data byte.
+        R3 -  8-bit register and main-memory low  data byte.
+        PC -  8-bit program counter.
+        IR - 16-bit instruction register.
+        ID -        combinatorial instruction decoder.
+        MM -        16-bit-wide x 256-address Main Memory.
 
-    the instruction words is sixteen bits long, and is comprised of
-    <15:13> = source resource.
-    <12:10> = destination resource.
-    <    9> = write-enable.
-    <    8> = program-counter-enable.
-    < 7: 0> = immediate data.
+        the instruction words is sixteen bits long, and is comprised of
+        <15:13> = source resource.
+        <12:10> = destination resource.
+        <    9> = write-enable.
+        <    8> = program-counter-enable.
+        < 7: 0> = immediate data.
 
-    the registers (U00 through U05) have a iSel input which define the source.
-    the instruction decoder (U06) enables the loading of the destinations.
+        the registers (U00 through U05) have a iSel input which define the source.
+        the instruction decoder (U06) enables the loading of the destinations.
 
-    the SPI shadow registers (U19-U25) monitor the CPU state, and can
-    control the CPU state by asserting U19's bits 1 and 2.
+        the SPI shadow registers (U19-U25) monitor the CPU state, and can
+        control the CPU state by asserting U19's bits 1 and 2.
 
-    U08 provides a shadow register load-enable pulse which
-        begins at the falling edge of a CPU clock and ends at
-        the falling edge of the next SPI clock, allowing the shadow
+        U08 provides a shadow register load-enable pulse which
+            begins at the falling edge of a CPU clock and ends at
+            the falling edge of the next SPI clock, allowing the shadow
             registers the ability to capture the state of the CPU.
 
-    U30 routes internal nets out to the green LED bank according
-        to the setting of switches SW<3:0>.
+        U30 routes internal nets out to the green LED bank according
+            to the setting of switches SW<3:0>.
 
 -------------------------------------notes------//------------------------------
 
-    fpga board pin assignments.
+        fpga board pin assignments.
 
 
-    project:
-    MOSI    P17
-    MISO    D15
-    SPIclk  E20
-    CPUclk  E14
+        project:
+        MOSI    P17
+        MISO    D15
+        SPIclk  E20
+        CPUclk  E14
 
 
-    key3    T21
-    key2    T22
-    key1    R21
-    key0    R22 iRstn
+        key3    T21
+        key2    T22
+        key1    R21
+        key0    R22     iRstn
 
-    sw9 L2
-    sw8 M1
-    sw7 M2
-    sw6 U11
-    sw5 U12
-    sw4 W12
-    sw3 V12
-    sw2 M22
-    sw1 L21
-    sw0 L22
+        sw9     L2
+        sw8     M1
+        sw7     M2
+        sw6     U11
+        sw5     U12
+        sw4     W12
+        sw3     V12
+        sw2     M22
+        sw1     L21
+        sw0     L22
 
-    ledr9   R17
-    ledr8   R18
-    ledr7   U18
-    ledr6   Y18
-    ledr5   V19
-    ledr4   T18
-    ledr3   Y19
-    ledr2   U19
-    ledr1   R19
-    ledr0   R20
+        ledr9   R17
+        ledr8   R18
+        ledr7   U18
+        ledr6   Y18
+        ledr5   V19
+        ledr4   T18
+        ledr3   Y19
+        ledr2   U19
+        ledr1   R19
+        ledr0   R20
 
-    ledg7   Y21
-    ledg6   Y22
-    ledg5   W21
-    ledg4   W22
-    ledg3   V21
-    ledg2   V22
-    ledg1   U21
-    ledg0   U22
+        ledg7   Y21
+        ledg6   Y22
+        ledg5   W21
+        ledg4   W22
+        ledg3   V21
+        ledg2   V22
+        ledg1   U21
+        ledg0   U22
 ------------------------------------defines-----//----------------------------*/
 /*-----------------------------------ports------//----------------------------*/
-    input           iMOSI;          // SPI input.
-    output          oMISO;          // SPI output.
-    input           iSPIclk;        // SPI clock.
-    input           iCPUclk;        // CPU clock.
-    input   [ 3:0]  iKEY;           // keypress.
-    input   [ 9:0]  iSW;            // slide-switches.
-    output  [ 9:0]  oLEDR;          // red   LED bank.
-    output  [ 7:0]  oLEDG;          // green LED bank.
-    output          oDummyLoad;     // anti-optimization.
+        input           iMOSI;                  // SPI input.
+        output          oMISO;                  // SPI output.
+        input           iSPIclk;                // SPI clock.
+        input           iCPUclk;                // CPU clock.
+        input   [ 3:0]  iKEY;                   // keypress.
+        input   [ 9:0]  iSW;                    // slide-switches.
+        output  [ 9:0]  oLEDR;                  // red   LED bank.
+        output  [ 7:0]  oLEDG;                  // green LED bank.
+        output          oDummyLoad;             // anti-optimization.
 /*-----------------------------------wires------//----------------------------*/
-    wire            iMOSI;          // SPI input.
-    wire            oMISO;          // SPI output.
-    wire            iSPIclk;        // SPI clock.
-    wire            iCPUclk;        // CPU clock.
-    wire    [ 3:0]  iKEY;           // keypress.
-    wire    [ 9:0]  iSW;            // slide-switches.
-    wire    [ 9:0]  oLEDR;          // red   LED bank.
-    wire    [ 7:0]  oLEDG;          // green LED bank.
+        wire            iMOSI;                  // SPI input.
+        wire            oMISO;                  // SPI output.
+        wire            iSPIclk;                // SPI clock.
+        wire            iCPUclk;                // CPU clock.
+        wire    [ 3:0]  iKEY;                   // keypress.
+        wire    [ 9:0]  iSW;                    // slide-switches.
+        wire    [ 9:0]  oLEDR;                  // red   LED bank.
+        wire    [ 7:0]  oLEDG;                  // green LED bank.
 
-    wire            wCEPC;          // program counter count-enable.
-    wire    [15:0]  wIR;            // instruction register.
-    wire            wLEIR;          // instruction register load-enable.
-    wire            wLEPC;          // program counter load-enable.
-    wire            wLER0;          // R0 load-enable.
-    wire            wLER1;          // R1 load-enable.
-    wire            wLER2;          // R2 load-enable.
-    wire            wLER3;          // R3 load-enable.
-    wire    [15:0]  wMMD;           // main-memory data-out.
-    wire    [15:0]  wMMI;           // main-memory instruction-out.
-    wire    [ 7:0]  wPC;            // program-counter.
-    wire    [ 7:0]  wR0;            // R0.
-    wire    [ 7:0]  wR1;            // R1.
-    wire    [ 7:0]  wR2;            // R2.
-    wire    [ 7:0]  wR3;            // R3.
-    wire            wRstn;          // system reset.
-    wire    [ 2:0]  wSel;           // common data-in selector.
-    wire    [ 7:0]  wShadow0;       // R0 shadow register.
-    wire    [ 7:0]  wShadow1;       // R1 shadow register.
-    wire    [ 7:0]  wShadow2;       // R2 shadow register.
-    wire    [ 7:0]  wShadow3;       // R3 shadow register.
-    wire    [15:0]  wShadowIR;      // instruction register shadow.
-    wire    [ 7:0]  wShadowPC;      // program counter shadow.
-    wire            wSIR;           // instruction register shadow shift-up.
-    wire            wSPC;           // program counter shadow shift-up.
-    wire            wSR0;           // R0 shadow shift-up.
-    wire            wSR1;           // R1 shadow shift-up.
-    wire            wSR2;           // R2 shadow shift-up.
-    wire            wSR3;           // R3 shadow shift-up.
-    wire            wWE;            // write-enable pulse.
-    wire    [ 7:0]  wImmediate;     // immediate data.
-    wire    [ 7:0]  wSpiControl;        // from spi control register.
-    wire            wSquelch;       // from spi control register.
-    wire            wBypassIR;      // from spi control register.
-    wire            wLoadShadows;       // shadow registers parallel load.
+        wire            wCEPC;                  // program counter count-enable.
+        wire    [15:0]  wIR;                    // instruction register.
+        wire            wLEIR;                  // instruction register load-enable.
+        wire            wLEPC;                  // program counter load-enable.
+        wire            wLER0;                  // R0 load-enable.
+        wire            wLER1;                  // R1 load-enable.
+        wire            wLER2;                  // R2 load-enable.
+        wire            wLER3;                  // R3 load-enable.
+        wire    [15:0]  wMMD;                   // main-memory data-out.
+        wire    [15:0]  wMMI;                   // main-memory instruction-out.
+        wire    [ 7:0]  wPC;                    // program-counter.
+        wire    [ 7:0]  wR0;                    // R0.
+        wire    [ 7:0]  wR1;                    // R1.
+        wire    [ 7:0]  wR2;                    // R2.
+        wire    [ 7:0]  wR3;                    // R3.
+        wire            wRstn;                  // system reset.
+        wire    [ 2:0]  wSel;                   // common data-in selector.
+        wire    [ 7:0]  wShadow0;               // R0 shadow register.
+        wire    [ 7:0]  wShadow1;               // R1 shadow register.
+        wire    [ 7:0]  wShadow2;               // R2 shadow register.
+        wire    [ 7:0]  wShadow3;               // R3 shadow register.
+        wire    [15:0]  wShadowIR;              // instruction register shadow.
+        wire    [ 7:0]  wShadowPC;              // program counter shadow.
+        wire            wSIR;                   // instruction register shadow shift-up.
+        wire            wSPC;                   // program counter shadow shift-up.
+        wire            wSR0;                   // R0 shadow shift-up.
+        wire            wSR1;                   // R1 shadow shift-up.
+        wire            wSR2;                   // R2 shadow shift-up.
+        wire            wSR3;                   // R3 shadow shift-up.
+        wire            wWE;                    // write-enable pulse.
+        wire    [ 7:0]  wImmediate;             // immediate data.
+        wire    [ 7:0]  wSpiControl;            // from spi control register.
+        wire            wSquelch;               // from spi control register.
+        wire            wBypassIR;              // from spi control register.
+        wire            wLoadShadows;           // shadow registers parallel load.
 
-                        // not currently used.
-    wire    [ 7:0]  wGreenLEDBus7;      // green LED bus.
-    wire    [ 7:0]  wGreenLEDBus6;      // green LED bus.
-    wire    [ 7:0]  wGreenLEDBus5;      // green LED bus.
-    wire    [ 7:0]  wGreenLEDBus4;      // green LED bus.
-    wire    [ 7:0]  wGreenLEDBus3;      // green LED bus.
-    wire    [ 7:0]  wGreenLEDBus2;      // green LED bus.
-    wire    [ 7:0]  wGreenLEDBus1;      // green LED bus.
-    wire    [ 7:0]  wGreenLEDBus0;      // green LED bus.
-    wire            oDummyLoad;     // anti-optimization.
-    wire    [ 3:0]  wTrigger;       // trigger control.
+                                                // not currently used.
+        wire    [ 7:0]  wGreenLEDBus7;          // green LED bus.
+        wire    [ 7:0]  wGreenLEDBus6;          // green LED bus.
+        wire    [ 7:0]  wGreenLEDBus5;          // green LED bus.
+        wire    [ 7:0]  wGreenLEDBus4;          // green LED bus.
+        wire    [ 7:0]  wGreenLEDBus3;          // green LED bus.
+        wire    [ 7:0]  wGreenLEDBus2;          // green LED bus.
+        wire    [ 7:0]  wGreenLEDBus1;          // green LED bus.
+        wire    [ 7:0]  wGreenLEDBus0;          // green LED bus.
+        wire            oDummyLoad;             // anti-optimization.
+        wire    [ 3:0]  wTrigger;               // trigger control.
 /*---------------------------------registers----//----------------------------*/
 /*---------------------------------variables----//----------------------------*/
 /*---------------------------------parameters---//----------------------------*/
@@ -173,29 +173,29 @@
 //---   begin regular CPU section.
 
 
-    reg_08 U00_R0               // CPU R0.      
+        reg_08 U00_R0                           // CPU R0.              
         (
          .oParallel   (wR0),
          .iParallel7  (wShadow0),
-         .iParallel6  (wR1 + wR2),      // adder.
+         .iParallel6  (wR1 + wR2),              // adder.
          .iParallel5  (wImmediate),
          .iParallel4  (wR0),
          .iParallel3  (wR3),
          .iParallel2  (wR2),
          .iParallel1  (wR1),
-         .iParallel0  (wR0),            // needed for zero vector no-op.
-     .iSel        (wSel),
-     .oSerial     (),
-     .iSerial     (1'b0),
-     .iLoadEnable (wLER0),
-     .iShiftEnable(1'b0),
-     .iResetN     (wRstn),
-     .iClk        (iCPUclk)
+         .iParallel0  (wR0),                    // needed for zero vector no-op.
+         .iSel        (wSel),
+         .oSerial     (),
+         .iSerial     (1'b0),
+         .iLoadEnable (wLER0),
+         .iShiftEnable(1'b0),
+         .iResetN     (wRstn),
+         .iClk        (iCPUclk)
         );
 
 
 
-    reg_08 U01_R1               // CPU R1.      
+        reg_08 U01_R1                           // CPU R1.              
         (
          .oParallel   (wR1),
          .iParallel7  (wShadow1),
@@ -206,18 +206,18 @@
          .iParallel2  (wR2),
          .iParallel1  (wR1),
          .iParallel0  (wR0),
-     .iSel        (wSel),
-     .oSerial     (),
-     .iSerial     (1'b0),
-     .iLoadEnable (wLER1),
-     .iShiftEnable(1'b0),
-     .iResetN     (wRstn),
-     .iClk        (iCPUclk)
+         .iSel        (wSel),
+         .oSerial     (),
+         .iSerial     (1'b0),
+         .iLoadEnable (wLER1),
+         .iShiftEnable(1'b0),
+         .iResetN     (wRstn),
+         .iClk        (iCPUclk)
         );
 
 
 
-    reg_08 U02_R2               // CPU R2.      
+        reg_08 U02_R2                           // CPU R2.              
         (
          .oParallel   (wR2),
          .iParallel7  (wShadow2),
@@ -228,17 +228,17 @@
          .iParallel2  (wR2),
          .iParallel1  (wR1),
          .iParallel0  (wR0),
-     .iSel        (wSel),
-     .oSerial     (),
-     .iSerial     (1'b0),
-     .iLoadEnable (wLER2),
-     .iShiftEnable(1'b0),
-     .iResetN     (wRstn),
-     .iClk        (iCPUclk)
+         .iSel        (wSel),
+         .oSerial     (),
+         .iSerial     (1'b0),
+         .iLoadEnable (wLER2),
+         .iShiftEnable(1'b0),
+         .iResetN     (wRstn),
+         .iClk        (iCPUclk)
         );
 
 
-    reg_08 U03_R3               // CPU R3.      
+        reg_08 U03_R3                           // CPU R3.              
         (
          .oParallel   (wR3),
          .iParallel7  (wShadow3),
@@ -249,18 +249,18 @@
          .iParallel2  (wR2),
          .iParallel1  (wR1),
          .iParallel0  (wR0),
-     .iSel        (wSel),
-     .oSerial     (),
-     .iSerial     (1'b0),
-     .iLoadEnable (wLER3),
-     .iShiftEnable(1'b0),
-     .iResetN     (wRstn),
-     .iClk        (iCPUclk)
+         .iSel        (wSel),
+         .oSerial     (),
+         .iSerial     (1'b0),
+         .iLoadEnable (wLER3),
+         .iShiftEnable(1'b0),
+         .iResetN     (wRstn),
+         .iClk        (iCPUclk)
         );
 
 
 
-    counter_08 U04_PC           // CPU program counter.
+        counter_08 U04_PC                       // CPU program counter.
         (
          .oCount      (wPC),
          .iParallel7  (wShadowPC),
@@ -271,174 +271,174 @@
          .iParallel2  (wR2),
          .iParallel1  (wR1),
          .iParallel0  (wR0),
-     .iSel        (wSel),
-     .oSerial     (),
-     .iSerial     (1'b0),
-     .iLoadEnable (wLEPC),
-     .iShiftEnable(1'b0),
-     .iCountEnable(wCEPC),
-     .iResetN     (wRstn),
-     .iClk        (iCPUclk)
+         .iSel        (wSel),
+         .oSerial     (),
+         .iSerial     (1'b0),
+         .iLoadEnable (wLEPC),
+         .iShiftEnable(1'b0),
+         .iCountEnable(wCEPC),
+         .iResetN     (wRstn),
+         .iClk        (iCPUclk)
         );
 
 
-    reg_16 U05_IR               // CPU instruction register.
+        reg_16 U05_IR                           // CPU instruction register.
         (
-         .oParallel   (wIR),            // IR state.
-         .iParallel1  (wShadowIR),      // IR shadow state.
-         .iParallel0  (wMMI),           // MM output.
-     .iSel        (wSpiControl[2]),     // special control.
-     .oSerial     (),
-     .iSerial     (1'b0),
-     .iLoadEnable (wLEIR),
-     .iShiftEnable(1'b0),
-     .iResetN     (wRstn),
-     .iClk        (iCPUclk)
+         .oParallel   (wIR),                    // IR state.
+         .iParallel1  (wShadowIR),              // IR shadow state.
+         .iParallel0  (wMMI),                   // MM output.
+         .iSel        (wSpiControl[2]),         // special control.
+         .oSerial     (),
+         .iSerial     (1'b0),
+         .iLoadEnable (wLEIR),
+         .iShiftEnable(1'b0),
+         .iResetN     (wRstn),
+         .iClk        (iCPUclk)
         );
 
 
-    instruction_decoder U06_ID      // instruction decoder.
+        instruction_decoder U06_ID              // instruction decoder.
         (
-     .iSquelch  (wSquelch),         // squelch when writing to IR.
-     .iIR       (wIR),          // instruction register.
-     .iBypass   (wShadowIR),        // IR bypass from SPI.
-     .iBypassIR (wBypassIR),        // bypass the IR.
-     .oSel      (wSel),         // common data-in selector.
-     .oLER0     (wLER0),            // R0 load-enable.
-     .oLER1     (wLER1),            // R1 load-enable.
-     .oLER2     (wLER2),            // R2 load-enable.
-     .oLER3     (wLER3),            // R3 load-enable.
-     .oLEPC     (wLEPC),            // PC load-enable.
-     .oWE       (wWE),          // write-enable pulse.
-     .oCEPC     (wCEPC),            // PC count-enable.
-     .oImmediate(wImmediate)        // immediate data.
+         .iSquelch  (wSquelch),                 // squelch when writing to IR.
+         .iIR       (wIR),                      // instruction register.
+         .iBypass   (wShadowIR),                // IR bypass from SPI.
+         .iBypassIR (wBypassIR),                // bypass the IR.
+         .oSel      (wSel),                     // common data-in selector.
+         .oLER0     (wLER0),                    // R0 load-enable.
+         .oLER1     (wLER1),                    // R1 load-enable.
+         .oLER2     (wLER2),                    // R2 load-enable.
+         .oLER3     (wLER3),                    // R3 load-enable.
+         .oLEPC     (wLEPC),                    // PC load-enable.
+         .oWE       (wWE),                      // write-enable pulse.
+         .oCEPC     (wCEPC),                    // PC count-enable.
+         .oImmediate(wImmediate)                // immediate data.
         );
 
 
 
-                        // main memory:
-                        // the program counter reads from read-port-0.
-                        // the R2:R1 port reads from read-port-1.
-                        // the R2:R1 port writes to the write port.
-                        // the R2:R1 port reads/writes using address from R3.
+                                                // main memory:
+                                                // the program counter reads from read-port-0.
+                                                // the R2:R1 port reads from read-port-1.
+                                                // the R2:R1 port writes to the write port.
+                                                // the R2:R1 port reads/writes using address from R3.
 
 
-    main_memory U07_MM          // main-memory.
+        main_memory U07_MM                      // main-memory.
         (
-     .iReadAddress1(wR3),           // from R3.
-     .iReadAddress0(wPC),           // from PC
-     .iWriteAddress(wR3),           // from R3
-     .oReadData1   (wMMD),          // to <R2:R1>
-     .oReadData0   (wMMI),          // to IR.
-     .iWriteData   ({wR2,wR1}),     // from <R2:R1>.
-     .iWE          (wWE),           // from the instruction decoder.
-     .iCPUclk      (iCPUclk)
+         .iReadAddress1(wR3),                   // from R3.
+         .iReadAddress0(wPC),                   // from PC
+         .iWriteAddress(wR3),                   // from R3
+         .oReadData1   (wMMD),                  // to <R2:R1>
+         .oReadData0   (wMMI),                  // to IR.
+         .iWriteData   ({wR2,wR1}),             // from <R2:R1>.
+         .iWE          (wWE),                   // from the instruction decoder.
+         .iCPUclk      (iCPUclk)
         );
 
 
-                        // load shadow-registers upon rising
-                        // edge of first SPI clock following
-                        // the falling edge of a CPU clock.
-    shadow_load_control U08_shadow_load // shadow-register load control.
+                                                // load shadow-registers upon rising
+                                                // edge of first SPI clock following
+                                                // the falling edge of a CPU clock.
+        shadow_load_control U08_shadow_load     // shadow-register load control.
         (
-     .iCPUclk(iCPUclk),
-     .iSPIclk(iSPIclk),
-     .iRstn(wRstn), 
-     .oLoadEnable(wLoadShadows)
+         .iCPUclk(iCPUclk),
+         .iSPIclk(iSPIclk),
+         .iRstn(wRstn), 
+         .oLoadEnable(wLoadShadows)
         );
 
 
 //---   begin SPI shadow-scan section.
 
 
-                        // the SPI scan registers are generally
-                        // given the term 'shadow registers'.
+                                                // the SPI scan registers are generally
+                                                // given the term 'shadow registers'.
 
 
-    scan_08 U19_spi_control         // top of SPI scan chain, used for control.
+        scan_08 U19_spi_control                 // top of SPI scan chain, used for control.
         (
-         .oParallel   (wSpiControl),        // green LED select 7.
-         .iParallel   (wSpiControl),        // self-refresh.
-     .oSerial     (oMISO),
-     .iSerial     (wSR0),
-     .iLoadEnable (wLoadShadows),
-     .iShiftEnable(1'b1),
-     .iResetN     (wRstn),
-     .iClk        (iSPIclk)
+         .oParallel   (wSpiControl),            // green LED select 7.
+         .iParallel   (wSpiControl),            // self-refresh.
+         .oSerial     (oMISO),
+         .iSerial     (wSR0),
+         .iLoadEnable (wLoadShadows),
+         .iShiftEnable(1'b1),
+         .iResetN     (wRstn),
+         .iClk        (iSPIclk)
         );
 
 
 
-    scan_08 U20_shadowR0            // R0 shadow register.
+        scan_08 U20_shadowR0                    // R0 shadow register.
         (
-         .oParallel   (wShadow0),       // green LED select 6.
+         .oParallel   (wShadow0),               // green LED select 6.
          .iParallel   (wR0),
-     .oSerial     (wSR0),
-     .iSerial     (wSR1),
-     .iLoadEnable (wLoadShadows),
-     .iShiftEnable(1'b1),
-     .iResetN     (wRstn),
-     .iClk        (iSPIclk)
+         .oSerial     (wSR0),
+         .iSerial     (wSR1),
+         .iLoadEnable (wLoadShadows),
+         .iShiftEnable(1'b1),
+         .iResetN     (wRstn),
+         .iClk        (iSPIclk)
         );
 
-    scan_08 U21_shadowR1            // R1 shadow register.
+        scan_08 U21_shadowR1                    // R1 shadow register.
         (
-         .oParallel   (wShadow1),       // green LED select 5.
+         .oParallel   (wShadow1),               // green LED select 5.
          .iParallel   (wR1),
-     .oSerial     (wSR1),
-     .iSerial     (wSR2),
-     .iLoadEnable (wLoadShadows),
-     .iShiftEnable(1'b1),
-     .iResetN     (wRstn),
-     .iClk        (iSPIclk)
+         .oSerial     (wSR1),
+         .iSerial     (wSR2),
+         .iLoadEnable (wLoadShadows),
+         .iShiftEnable(1'b1),
+         .iResetN     (wRstn),
+         .iClk        (iSPIclk)
         );
 
-    scan_08 U22_shadowR2            // R2 shadow register.
+        scan_08 U22_shadowR2                    // R2 shadow register.
         (
-         .oParallel   (wShadow2),       // green LED select 4.
+         .oParallel   (wShadow2),               // green LED select 4.
          .iParallel   (wR2),
-     .oSerial     (wSR2),
-     .iSerial     (wSR3),
-     .iLoadEnable (wLoadShadows),
-     .iShiftEnable(1'b1),
-     .iResetN     (wRstn),
-     .iClk        (iSPIclk)
+         .oSerial     (wSR2),
+         .iSerial     (wSR3),
+         .iLoadEnable (wLoadShadows),
+         .iShiftEnable(1'b1),
+         .iResetN     (wRstn),
+         .iClk        (iSPIclk)
         );
 
-    scan_08 U23_shadowR3            // R3 shadow register.
+        scan_08 U23_shadowR3                    // R3 shadow register.
         (
-         .oParallel   (wShadow3),       // green LED select 3.
+         .oParallel   (wShadow3),               // green LED select 3.
          .iParallel   (wR3),
-     .oSerial     (wSR3),
-     .iSerial     (wSPC),
-     .iLoadEnable (wLoadShadows),
-     .iShiftEnable(1'b1),
-     .iResetN     (wRstn),
-     .iClk        (iSPIclk)
+         .oSerial     (wSR3),
+         .iSerial     (wSPC),
+         .iLoadEnable (wLoadShadows),
+         .iShiftEnable(1'b1),
+         .iResetN     (wRstn),
+         .iClk        (iSPIclk)
         );
 
-    scan_08 U24_shadowPC            // program-counter shadow register.
+        scan_08 U24_shadowPC                    // program-counter shadow register.
         (
-         .oParallel   (wShadowPC),      // green LED select 2.
+         .oParallel   (wShadowPC),              // green LED select 2.
          .iParallel   (wPC),
-     .oSerial     (wSPC),
-     .iSerial     (wSIR),
-     .iLoadEnable (wLoadShadows),
-     .iShiftEnable(1'b1),
-     .iResetN     (wRstn),
-     .iClk        (iSPIclk)
+         .oSerial     (wSPC),
+         .iSerial     (wSIR),
+         .iLoadEnable (wLoadShadows),
+         .iShiftEnable(1'b1),
+         .iResetN     (wRstn),
+         .iClk        (iSPIclk)
         );
 
-    scan_16 U25_shadowIR            // instruction-register shadow register.
+        scan_16 U25_shadowIR                    // instruction-register shadow register.
         (
-         .oParallel   (wShadowIR),      // green LED select 1,0.
+         .oParallel   (wShadowIR),              // green LED select 1,0.
          .iParallel   (wIR),
-     .oSerial     (wSIR),
-     .iSerial     (iMOSI),
-     .iLoadEnable (wLoadShadows),
-     .iShiftEnable(1'b1),
-     .iResetN     (wRstn),
-     .iClk        (iSPIclk)
+         .oSerial     (wSIR),
+         .iSerial     (iMOSI),
+         .iLoadEnable (wLoadShadows),
+         .iShiftEnable(1'b1),
+         .iResetN     (wRstn),
+         .iClk        (iSPIclk)
         );
 
 
@@ -447,54 +447,54 @@
 
 
 
-    mux8x16 U30_green_led_mux       // green LED diagnostic mux.
+        mux8x16 U30_green_led_mux               // green LED diagnostic mux.
         (
-     .iDin15({wLER0,wLER1,wLER2,wLER3,wLEPC,wLEIR,wWE,wCEPC}),
-     .iDin14(wIR[15:8]),            // IR-H.
-     .iDin13(wIR[7:0]),         // IR-L.
-     .iDin12(wPC),              // PC.
-     .iDin11(wR3),              // R3.
-     .iDin10(wR2),              // R2.
-     .iDin9 (wR1),              // R1.
-     .iDin8 (wR0),              // R0.
-     .iDin7 (wSpiControl),          // SPI control.
-     .iDin6 (wShadowIR[15:8]),      // IR-H shadow.
-     .iDin5 (wShadowIR[7:0]),       // IR-L shadow.
-     .iDin4 (wShadowPC),            // PC   shadow.
-     .iDin3 (wShadow3),         // R3   shadow.
-     .iDin2 (wShadow2),         // R2   shadow.
-     .iDin1 (wShadow1),         // R1   shadow.
-     .iDin0 (wShadow0),         // R0   shadow.
-     .iSel  (iSW[3:0]),         // mux-select.
-     .oDout (oLEDG)             // to green LED bank.
+         .iDin15({wLER0,wLER1,wLER2,wLER3,wLEPC,wLEIR,wWE,wCEPC}),
+         .iDin14(wIR[15:8]),                    // IR-H.
+         .iDin13(wIR[7:0]),                     // IR-L.
+         .iDin12(wPC),                          // PC.
+         .iDin11(wR3),                          // R3.
+         .iDin10(wR2),                          // R2.
+         .iDin9 (wR1),                          // R1.
+         .iDin8 (wR0),                          // R0.
+         .iDin7 (wSpiControl),                  // SPI control.
+         .iDin6 (wShadowIR[15:8]),              // IR-H shadow.
+         .iDin5 (wShadowIR[7:0]),               // IR-L shadow.
+         .iDin4 (wShadowPC),                    // PC   shadow.
+         .iDin3 (wShadow3),                     // R3   shadow.
+         .iDin2 (wShadow2),                     // R2   shadow.
+         .iDin1 (wShadow1),                     // R1   shadow.
+         .iDin0 (wShadow0),                     // R0   shadow.
+         .iSel  (iSW[3:0]),                     // mux-select.
+         .oDout (oLEDG)                         // to green LED bank.
         );
 /*-----------------------------------logic------//----------------------------*/
-    assign wRstn     = iKEY[0];     // pushbutton system reset.
-    assign wSquelch  = wSpiControl[2];  // for python squelching ins. decode.
-    assign wBypassIR = wSpiControl[1];  // for python controlling CPU.
-    assign wTrigger  = wSpiControl[7:4];    // for signaltap triggering, not used.
+        assign wRstn     = iKEY[0];             // pushbutton system reset.
+        assign wSquelch  = wSpiControl[2];      // for python squelching ins. decode.
+        assign wBypassIR = wSpiControl[1];      // for python controlling CPU.
+        assign wTrigger  = wSpiControl[7:4];    // for signaltap triggering, not used.
 
-                        // load instruction register
-                        // if neither or both shadow
-                        // control signals asserted.
-    assign wLEIR     = !(wSquelch ^ wBypassIR);
+                                                // load instruction register
+                                                // if neither or both shadow
+                                                // control signals asserted.
+        assign wLEIR     = !(wSquelch ^ wBypassIR);
 
 
-    assign oLEDR[9]  = 1'b0;        // red LED hookup.
-    assign oLEDR[8]  = 1'b0;
-    assign oLEDR[7]  = wSel[2];
-    assign oLEDR[6]  = wSel[1];
-    assign oLEDR[5]  = wSel[0];
-    assign oLEDR[4]  = wRstn;
-    assign oLEDR[3]  = iCPUclk;
-    assign oLEDR[2]  = oMISO;
-    assign oLEDR[1]  = iMOSI;
-    assign oLEDR[0]  = iSPIclk;
+        assign oLEDR[9]  = 1'b0;                // red LED hookup.
+        assign oLEDR[8]  = 1'b0;
+        assign oLEDR[7]  = wSel[2];
+        assign oLEDR[6]  = wSel[1];
+        assign oLEDR[5]  = wSel[0];
+        assign oLEDR[4]  = wRstn;
+        assign oLEDR[3]  = iCPUclk;
+        assign oLEDR[2]  = oMISO;
+        assign oLEDR[1]  = iMOSI;
+        assign oLEDR[0]  = iSPIclk;
 
 
-                        // signals not to be optimized
-                        // out, place here.
-    assign oDummyLoad = (|wShadowIR) | wSIR | (|wSpiControl) | (|wTrigger);
+                                                // signals not to be optimized
+                                                // out, place here.
+        assign oDummyLoad = (|wShadowIR) | wSIR | (|wSpiControl) | (|wTrigger);
 /*-------------------------------*/endmodule/*--------------------------------*/
 
 
@@ -512,3 +512,20 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+