`timescale 1 ns / 100 ps
//  ********************************************************************/
//  Copyright 2008 Actel Corporation.  All rights reserved.
//  IP Engineering
//
//  ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN
//  ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED
//  IN ADVANCE IN WRITING.
//
//  File:  instructions.vhd
//
//  Description: Simple APB Bus Controller
//               Top Level
//
// Rev: 2.4   24Jan08 IPB  : Production Release
//
// SVN Revision Information:
// SVN $Revision: 11064 $
// SVN $Date: 2009-11-17 09:11:16 -0800 (Tue, 17 Nov 2009) $
//
//  Notes:
//    TESTMODE is used to set what tests are used for verification tests
//    based on the core configuration.
//
//  *********************************************************************/
module SF_Zi1_COREABC_0_INSTRUCTIONS (ADDRESS, INSTRUCTION);
    parameter  AWIDTH   = 0;
    parameter  DWIDTH   = 0;
    parameter  SWIDTH   = 0;
    parameter  ICWIDTH  = 0;
    parameter  IIWIDTH  = 0;
    parameter  IFWIDTH  = 0;
    parameter  IWWIDTH  = 0;
    parameter  EN_MULT  = 0;
    parameter  EN_INC   = 0;
    parameter  TESTMODE = 0;
    `include "support.v"
    input[ICWIDTH - 1:0] ADDRESS;
    output[IWWIDTH - 1:0] INSTRUCTION;
    reg[IWWIDTH - 1:0] INSTRUCTION;
    localparam AW = AWIDTH;
    localparam DW = DWIDTH;
    localparam SW = max(SWIDTH,1);
    localparam IW = ICWIDTH;
    localparam FW = 4 + IIWIDTH;
    reg[IWWIDTH - 1:0] INS;
    // These allow the passing of IFWIDTH to the support package
    localparam iJUMP   = iJUMPB   + IFWIDTH;
    localparam iCALL   = iCALLB   + IFWIDTH;
    localparam iRETURN = iRETURNB + IFWIDTH;
    localparam iRETISR = iRETISRB + IFWIDTH;
    localparam iWAIT   = iWAITB   + IFWIDTH;
    localparam iHALT   = iHALTB   + IFWIDTH;
    localparam iINC    = iINCB    + 2*EN_MULT + 1 - EN_INC;
    // These constants used internally for CoreAI
    localparam iACM_CTRLSTAT      = 8'h00;
    localparam iACM_ADDR_ADDR     = 8'h04;
    localparam iACM_DATA_ADDR     = 8'h08;
    localparam iADC_CTRL2_HI_ADDR = 8'h10;
    localparam iADC_STAT_HI_ADDR  = 8'h20;
    // CCDirective Insert constants
parameter Sym_IAP_IR = 0;
parameter Sym_IAP_DR2 = 4;
parameter Sym_IAP_DR5 = 12;
parameter Sym_IAP_DR16 = 20;
parameter Sym_IAP_DR26 = 16;
parameter Sym_IAP_DR = 24;
parameter Sym_IAP_DR_LENGTH = 28;
parameter Sym_IAP_TAP_NEW_STATE = 32;
parameter Sym_ISC_ENABLE = 128;
parameter Sym_ISC_PROGRAM = 131;
parameter Sym_ISC_NOOP = 132;
parameter Sym_ISC_ERASE = 133;
parameter Sym_ISC_INCREMENT = 135;
parameter Sym_ISC_DATA_SHIFT = 137;
parameter Sym_ISC_VERIFY0 = 141;
parameter Sym_ISC_VERIFY1 = 142;
parameter Sym_numberofsdtiles = 6;
parameter Sym_numberofmaprows = 3444;
parameter Sym_usec38 = 127;
parameter Sym_usec138 = 460;
parameter Sym_usec165 = 550;
parameter Sym_usec256 = 853;
parameter Sym_usec1500 = 4995;
parameter Sym_sec1p5h = 76;
parameter Sym_sec1p5l = 14264;
parameter Sym_usec20 = 44;
parameter Sym_usec100 = 222;
parameter Sym_usec200 = 444;
parameter Sym_usec264 = 586;
parameter Label_initialize = 25;
parameter Label_do_idly1 = 34;
parameter Label_busyok = 45;
parameter Label_enableok = 56;
parameter Label_do_idly2 = 58;
parameter Label_do_bulk_program = 61;
parameter Label_bulk_prog = 136;
parameter Label_do_bfor1 = 147;
parameter Label_do_bdly1 = 151;
parameter Label_progwaitok = 160;
parameter Label_bulk_prog_fail = 164;
parameter Label_do_program_rlock = 168;
parameter Label_do_prl1 = 169;
parameter Label_do_prl2 = 171;
parameter Label_rlock_ok = 188;
parameter Label_do_erase_disturb = 189;
parameter Label_do_eddly1 = 196;
parameter Label_do_eddone = 202;
parameter Label_do_enc_program_from = 204;
parameter Label_init_aes = 405;
parameter Label_iaes_dly = 417;
parameter Label_epf_dly = 420;
parameter Label_epf_dly1 = 422;
parameter Label_epf_error = 425;
parameter Label_poll_program = 429;
parameter Label_poll_pl1 = 430;
parameter Label_poll_pdly1 = 434;
parameter Label_poll_pdone = 444;
parameter Label_do_exit = 445;
parameter Label_do_exjmp = 453;
parameter Label_do_exdly1 = 454;
parameter Label_do_exdly2 = 459;
parameter Label_do_array_verify_0_pass = 463;
parameter Label_do_av0p_loop = 468;
parameter Label_do_av0p_fail = 479;
parameter Label_do_array_verify_0_fail = 483;
parameter Label_do_av0f_loop = 488;
parameter Label_do_av0f_fail = 499;
parameter Label_exe_verify = 503;
parameter Label_ev_dly = 508;
parameter Label_readverstatus = 514;
parameter Label_exe_verify_done = 520;
    // These are the procedure calls to create the instruction sequence
    always @(ADDRESS)
    begin : UROM
        integer ADDRINT;
        ADDRINT = ADDRESS;
        case (TESTMODE)
            0 :
                        begin
                            ////////////////////////////////////////////////////////////////////////////////////////////-
                            case (ADDRINT)
                                // The USER INSTRUCTION SEQUENCE SHOULD BE INSERTED HERE
                                0  : INS <= doins2(iJUMP, 0) ;
                                default  : INS <= {58{1'bx}} ; // default is dont cares, reduces tile counts
                            endcase
                            // CCDirective Insert code
    case (ADDRINT)
      //   JTAG instructions
      //  Device Specific constants
      //  Device specific constants here and in
      //  do_bulk_program procedure
      //  Target device is AFS600
      //  Time delay constants (time div  tck freq)
      //  Change these based on your tck frequency
      //  For 20MHz clock
      //   These loops are effectively 3.33MHz (clk/6)
      //  These loops are 2.22MHz eff (clk/9)
      //  -------------------------------------
      //  ACTION BULK PROGRAM
      //  -------------------------------------
      //   WAIT RESET, 5 CYCLES
       0 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005F);
       1 : INS <= doins3( iIOWRT, iDAT8, 32'h00000001);
       2 : INS <= doins2( iCALL, Label_initialize);
       3 : INS <= doins3( iIOWRT, iDAT8, 32'h00000002);
       4 : INS <= doins2( iCALL, Label_do_enc_program_from);
       5 : INS <= doins3( iIOWRT, iDAT8, 32'h00000004);
       6 : INS <= doins2( iCALL, Label_do_bulk_program);
       7 : INS <= doins3( iIOWRT, iDAT8, 32'h00000005);
       8 : INS <= doins2( iCALL, Label_do_erase_disturb);
       9 : INS <= doins3( iIOWRT, iDAT8, 32'h00000006);
      10 : INS <= doins2( iCALL, Label_initialize);
      11 : INS <= doins3( iIOWRT, iDAT8, 32'h00000007);
      12 : INS <= doins2( iCALL, Label_do_bulk_program);
      13 : INS <= doins3( iIOWRT, iDAT8, 32'h00000008);
      14 : INS <= doins2( iCALL, Label_do_enc_program_from);
      15 : INS <= doins3( iIOWRT, iDAT8, 32'h0000000A);
      16 : INS <= doins2( iCALL, Label_do_erase_disturb);
      17 : INS <= doins3( iIOWRT, iDAT8, 32'h0000000B);
      18 : INS <= doins2( iCALL, Label_initialize);
      19 : INS <= doins3( iIOWRT, iDAT8, 32'h0000000C);
      20 : INS <= doins2( iCALL, Label_do_bulk_program);
      21 : INS <= doins3( iIOWRT, iDAT8, 32'h0000000D);
      22 : INS <= doins2( iCALL, Label_do_enc_program_from);
      23 : INS <= doins3( iIOWRT, iDAT8, 32'h0000000F);
      24 : INS <= doins2( iJUMP, Label_do_exit);
      //  -------------------------------------
      //  do_initialize procedure
      //  -------------------------------------
      // $initialize
      25 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000B1);
      26 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 12);
      27 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      28 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000080);
      29 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 18);
      30 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      31 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000000);
      32 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  wait 1500 USEC
      33 : INS <= doins3( iLOADZ, iDAT16, Sym_usec1500);
      // $do_idly1
      34 : INS <= doins1( iDECZ);
      35 : INS <= doins4( iJUMP, iIFNOT, iZZERO, Label_do_idly1);
      36 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000080);
      37 : INS <= doins3( iAPBREAD, 1, Sym_IAP_DR5);
      38 : INS <= doins3( iAND, iDAT, 32'h00002300);
      39 : INS <= doins3( iCMP, iDAT, 32'h00000100);
      40 : INS <= doins4( iJUMP, iIF, iZERO, Label_busyok);
      //  light error LED for Debug
      41 : INS <= doins1( iIOREAD);
      42 : INS <= doins3( iOR, iDAT8, 32'h00000080);
      43 : INS <= doins2( iIOWRT, iACC);
      44 : INS <= doins2( iJUMP, Label_do_exit);
      // $busyok
      45 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 18);
      46 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      47 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000000);
      48 : INS <= doins3( iAPBREAD, 1, Sym_IAP_DR5);
      49 : INS <= doins3( iAND, iDAT, 32'h0000C000);
      50 : INS <= doins3( iCMP, iDAT, 32'h0000C000);
      51 : INS <= doins4( iJUMP, iIF, iZERO, Label_enableok);
      //  light error LED for Debug
      52 : INS <= doins1( iIOREAD);
      53 : INS <= doins3( iOR, iDAT8, 32'h00000080);
      54 : INS <= doins2( iIOWRT, iACC);
      55 : INS <= doins2( iJUMP, Label_do_exit);
      // $enableok
      56 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  wait 1500 USEC
      57 : INS <= doins3( iLOADZ, iDAT16, Sym_usec1500);
      // $do_idly2
      58 : INS <= doins1( iDECZ);
      59 : INS <= doins4( iJUMP, iIFNOT, iZZERO, Label_do_idly2);
      60 : INS <= doins1( iRETURN);
      //  -------------------------------------
      //  do_bulk_program procedure
      //  -------------------------------------
      // $do_bulk_program
      //  Device specific data Selects Tiles and Rows
      //  tsreg values for AFS600  
      //  This does 'drscan tiles tseg[]' STAPL line
      //  ITS 
      61 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //  AFS600 SEG 0 LSdata then MSdata
      62 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      63 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      64 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      65 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      66 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      67 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      68 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000003);
      69 : INS <= doins2( iCALL, Label_bulk_prog);
      //  ITS
      70 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //    AFS600 SEG 1 LSdata then MSdata
      71 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      72 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      73 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      74 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      75 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      76 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00003FFC);
      77 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      78 : INS <= doins2( iCALL, Label_bulk_prog);
      //  ITS
      79 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //    AFS600 SEG 2 LSdata then MSdata
      80 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      81 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      82 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      83 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      84 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000FFC0);
      85 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      86 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      87 : INS <= doins2( iCALL, Label_bulk_prog);
      //  ITS
      88 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //    AFS600 SEG 3 LSdata then MSdata
      89 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      90 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      91 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      92 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000FC00);
      93 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000003F);
      94 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      95 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      96 : INS <= doins2( iCALL, Label_bulk_prog);
      //  ITS
      97 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //    AFS600 SEG 4 LSdata then MSdata
      98 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      99 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      100 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000F000);
      101 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h000003FF);
      102 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      103 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      104 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      105 : INS <= doins2( iCALL, Label_bulk_prog);
      //  ITS
      106 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //    AFS600 SEG 5 LSdata then MSdata
      107 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      108 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      109 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000FFF);
      110 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      111 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      112 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      113 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      114 : INS <= doins2( iCALL, Label_bulk_prog);
      //  ITS
      115 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //    AFS600 SEG 6 LSdata then MSdata
      116 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      117 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000FFF0);
      118 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      119 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      120 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      121 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      122 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      123 : INS <= doins2( iCALL, Label_bulk_prog);
      //  ITS
      124 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C2);
      //    AFS600 SEG 7 LSdata then MSdata
      125 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 82);
      126 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000000F);
      127 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      128 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      129 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      130 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      131 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      132 : INS <= doins2( iCALL, Label_bulk_prog);
      //  Bulk_prog procedure done so return to main
      //  ISC_NOOP
      133 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000084);
      134 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000000C);
      135 : INS <= doins1( iRETURN);
      // $bulk_prog
      //  Finish selecting tiles and rows 
      //  IRM
      136 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000C3);
      137 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 60);
      138 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000FFFF);
      139 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000FFFF);
      140 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000FFFF);
      141 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000FFFF);
      //  Invoke Program
      //  ISC_PROGRAM
      142 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000083);
      //  Program Exec
      143 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      144 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000084);
      //  Program Poll    
      145 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000084);
      //  for loop of 1200
      146 : INS <= doins3( iLOADZ, iDAT16, 32'h00001201);
      // $do_bfor1
      147 : INS <= doins1( iDECZ);
      148 : INS <= doins4( iJUMP, iIF, iZZERO, Label_bulk_prog_fail);
      //  TAP=IDLE State
      149 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000000C);
      //  100usec delay   
      150 : INS <= doins3( iLOAD, iDAT16, 32'h00000000);
      // $do_bdly1
      151 : INS <= doins1( iINC);
      152 : INS <= doins3( iCMP, iDAT, Sym_usec100);
      153 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_bdly1);
      154 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 5);
      155 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000000);
      156 : INS <= doins3( iAPBREAD, 1, Sym_IAP_DR5);
      157 : INS <= doins3( iAND, iDAT, 32'h00001800);
      158 : INS <= doins3( iCMP, iDAT, 32'h00000000);
      159 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_bfor1);
      // $progwaitok
      160 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000000C);
      161 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 5);
      162 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000000);
      //  do next tsreg
      163 : INS <= doins1( iRETURN);
      // $bulk_prog_fail
      //  light error LED for Debug
      164 : INS <= doins1( iIOREAD);
      165 : INS <= doins3( iOR, iDAT8, 32'h00000080);
      166 : INS <= doins2( iIOWRT, iACC);
      167 : INS <= doins2( iJUMP, Label_do_exit);
      //  -------------------------------------
      //  do_program_rlock procedure
      //  -------------------------------------
      // $do_program_rlock
      168 : INS <= doins3( iLOADZ, iDAT8, Sym_numberofsdtiles);
      // $do_prl1
      169 : INS <= doins1( iDECZ);
      170 : INS <= doins3( iLOAD, iDAT8, 32'h00000001);
      // $do_prl2
      171 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000089);
      172 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 26);
      173 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      174 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      175 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      176 : INS <= doins1( iINC);
      177 : INS <= doins3( iCMP, iDAT, 32'h00000009);
      178 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_prl2);
      179 : INS <= doins4( iJUMP, iIFNOT, iZZERO, Label_do_prl1);
      //  ISC_PROGRAM_RDLCK
      180 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h0000008C);
      181 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      182 : INS <= doins2( iCALL, Label_poll_program);
      183 : INS <= doins4( iJUMP, iIF, iZERO, Label_rlock_ok);
      //  light error LED for Debug
      184 : INS <= doins1( iIOREAD);
      185 : INS <= doins3( iOR, iDAT8, 32'h00000080);
      186 : INS <= doins2( iIOWRT, iACC);
      187 : INS <= doins2( iJUMP, Label_do_exit);
      // $rlock_ok
      188 : INS <= doins1( iRETURN);
      //  -------------------------------------
      //  do_erase_disturb procedure
      //  -------------------------------------
      // $do_erase_disturb
      //  ISC_ERASE
      189 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000085);
      190 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 23);
      //  Use these if no UFROM
      //      APBWRT DAT16 1 IAP_DR 0x4001
      //      APBWRT DAT8  1 IAP_DR 0x00
      //  Use these if UFROM and to NOT clear UROW
      //      APBWRT DAT16 1 IAP_DR 0x8001
      //      APBWRT DAT8  1 IAP_DR 0x7F
      //  Use these if UFROM and clear UROW
      191 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h0000C001);
      192 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h0000007F);
      193 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      194 : INS <= doins3( iLOADZ, iDAT16, Sym_sec1p5h);
      195 : INS <= doins3( iLOAD, iDAT16, Sym_sec1p5l);
      //  Delay 1.5 seconds
      // $do_eddly1
      196 : INS <= doins3( iSUB, iDAT, 32'h00000001);
      197 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_eddly1);
      198 : INS <= doins4( iJUMP, iIF, iZZERO, Label_do_eddone);
      199 : INS <= doins1( iDECZ);
      200 : INS <= doins3( iLOAD, iDAT16, 32'h0000FFFF);
      201 : INS <= doins2( iJUMP, Label_do_eddly1);
      // $do_eddone
      202 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005F);
      203 : INS <= doins1( iRETURN);
      //  -------------------------------------
      //  do_enc_program_from procedure
      //  -------------------------------------
      // $do_enc_program_from
      //  FROM ROW1
      204 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[127..0]
      205 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      206 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      207 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      208 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      209 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      210 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      211 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      212 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      213 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      214 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      215 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[255..128]
      216 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      217 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      218 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      219 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      220 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      221 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      222 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      223 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      224 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      225 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      226 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      227 : INS <= doins2( iCALL, Label_poll_program);
      228 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      //  FROM ROW 2
      229 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[383..256]
      230 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      231 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      232 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      233 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      234 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      235 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      236 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      237 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      238 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      239 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      240 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[511..384]
      241 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      242 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      243 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      244 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      245 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      246 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      247 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      248 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      249 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      250 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      251 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      252 : INS <= doins2( iCALL, Label_poll_program);
      253 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      //  FROM ROW 3
      254 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[639..512]
      255 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      256 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      257 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      258 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      259 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      260 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      261 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      262 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      263 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      264 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      265 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[767..640]
      266 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      267 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      268 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      269 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      270 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      271 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      272 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      273 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      274 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      275 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      276 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      277 : INS <= doins2( iCALL, Label_poll_program);
      278 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      //  FROM ROW 4
      279 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[895..768]
      280 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      281 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      282 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      283 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      284 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      285 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      286 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      287 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      288 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      289 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      290 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[1023..896]
      291 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      292 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      293 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      294 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      295 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      296 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      297 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      298 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      299 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      300 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      301 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      302 : INS <= doins2( iCALL, Label_poll_program);
      303 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      //  FROM ROW 5
      304 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[1151..1024]
      305 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      306 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      307 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      308 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      309 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      310 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      311 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      312 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      313 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      314 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      315 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[1279..1152]
      316 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      317 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      318 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      319 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      320 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      321 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      322 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      323 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      324 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      325 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      326 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      327 : INS <= doins2( iCALL, Label_poll_program);
      328 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      //  FROM ROW 6
      329 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[1407..1280]
      330 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      331 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      332 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      333 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      334 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      335 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      336 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      337 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      338 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      339 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      340 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[1535..1408]
      341 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      342 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      343 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      344 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      345 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      346 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      347 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      348 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      349 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      350 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      351 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      352 : INS <= doins2( iCALL, Label_poll_program);
      353 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      //  FROM ROW 7
      354 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[1663..1536]
      355 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      356 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      357 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      358 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      359 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      360 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      361 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      362 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      363 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      364 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      365 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[1791..1664]
      366 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      367 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      368 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      369 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      370 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      371 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      372 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      373 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      374 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      375 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      376 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      377 : INS <= doins2( iCALL, Label_poll_program);
      378 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      //  FROM ROW 8
      379 : INS <= doins2( iCALL, Label_init_aes);
      //  Shift in FROM data[1919..1792]
      380 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A5);
      381 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      382 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      383 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      384 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      385 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      386 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      387 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      388 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      389 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      390 : INS <= doins2( iCALL, Label_epf_dly);
      //  Shift in FROM data[2047..1920]
      391 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000A6);
      392 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      393 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      394 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      395 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      396 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      397 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      398 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      399 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      400 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      401 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000005C);
      402 : INS <= doins2( iCALL, Label_poll_program);
      403 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_epf_error);
      404 : INS <= doins1( iRETURN);
      //   init_aes
      // $init_aes
      405 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000DD);
      406 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 128);
      407 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      408 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      409 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      410 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      411 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      412 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      413 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      414 : INS <= doins5( iAPBWRT, iDAT16, 1, Sym_IAP_DR, 32'h00000000);
      415 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  Delay 165uSec
      416 : INS <= doins3( iLOADZ, iDAT16, Sym_usec165);
      // $iaes_dly
      417 : INS <= doins1( iDECZ);
      418 : INS <= doins4( iJUMP, iIFNOT, iZZERO, Label_iaes_dly);
      419 : INS <= doins1( iRETURN);
      //  epf_dly
      // $epf_dly
      420 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  Delay 38uSec
      421 : INS <= doins3( iLOADZ, iDAT16, Sym_usec38);
      // $epf_dly1
      422 : INS <= doins1( iDECZ);
      423 : INS <= doins4( iJUMP, iIFNOT, iZZERO, Label_epf_dly1);
      424 : INS <= doins1( iRETURN);
      //  On Error Exit Procedure 
      //  Light Error LED for debug
      // $epf_error
      425 : INS <= doins1( iIOREAD);
      426 : INS <= doins3( iOR, iDAT8, 32'h00000080);
      427 : INS <= doins2( iIOWRT, iACC);
      428 : INS <= doins1( iRETURN);
      //  -------------------------------------
      //  poll_program subroutine
      //  -------------------------------------
      // $poll_program
      429 : INS <= doins3( iLOADZ, iDAT16, 16381);
      //  Test increase poll time
      //      LOADZ DAT16 65000
      // $poll_pl1
      430 : INS <= doins1( iDECZ);
      431 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000084);
      432 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000001C);
      433 : INS <= doins3( iLOAD, iDAT16, 32'h00000000);
      // $poll_pdly1
      434 : INS <= doins1( iINC);
      435 : INS <= doins3( iCMP, iDAT, Sym_usec100);
      436 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_poll_pdly1);
      437 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 5);
      438 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000000);
      439 : INS <= doins3( iAPBREAD, 1, Sym_IAP_DR5);
      440 : INS <= doins3( iAND, iDAT, 32'h00005800);
      441 : INS <= doins3( iCMP, iDAT, 32'h00000000);
      442 : INS <= doins4( iJUMP, iIF, iZERO, Label_poll_pdone);
      443 : INS <= doins4( iJUMP, iIFNOT, iZZERO, Label_poll_pl1);
      // $poll_pdone
      //  The calling function should 
      //  check  ZERO flag for pass
      444 : INS <= doins1( iRETURN);
      //  -------------------------------------
      //  do_exit subroutine
      //  -------------------------------------
      // $do_exit
      445 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h000000FF);
      446 : INS <= doins3( iAPBREAD, 1, Sym_IAP_DR5);
      447 : INS <= doins3( iAND, iDAT, 32'h00000400);
      448 : INS <= doins3( iCMP, iDAT, 32'h00000400);
      449 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000081);
      //  Push TAP to IDLE
      450 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000000C);
      451 : INS <= doins4( iJUMP, iIF, iZERO, Label_do_exjmp);
      452 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000007);
      // $do_exjmp
      //  delay 20usec
      453 : INS <= doins3( iLOAD, iDAT16, 32'h00000000);
      // $do_exdly1
      454 : INS <= doins1( iINC);
      455 : INS <= doins3( iCMP, iDAT, Sym_usec20);
      456 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_exdly1);
      //  Set TAP=RESET state    
      457 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000000F);
      //  Delay 200usec    
      458 : INS <= doins3( iLOAD, iDAT16, 32'h00000000);
      // $do_exdly2
      459 : INS <= doins1( iINC);
      460 : INS <= doins3( iCMP, iDAT, Sym_usec200);
      461 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_exdly2);
      462 : INS <= doins1( iHALT);
      //  -------------------------------------
      //  Array erase verification support procedures
      //  -------------------------------------
      //  -------------------------------------
      //  do_array_verify_0_pass subroutine
      //  -------------------------------------
      // $do_array_verify_0_pass
      463 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000087);
      464 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 2);
      465 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000002);
      466 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  Load ACC with numberofmaprows
      467 : INS <= doins3( iLOAD, iDAT16, Sym_numberofmaprows);
      // $do_av0p_loop
      //  Push ACC because exe_verify and poll_program use ACC
      468 : INS <= doins2( iPUSH, iACC);
      469 : INS <= doins2( iCALL, Label_exe_verify);
      470 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000087);
      471 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 2);
      472 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000003);
      473 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  Check result of $exe_verify
      474 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_av0p_fail);
      475 : INS <= doins1( iPOP);
      476 : INS <= doins3( iSUB, iDAT, 1);
      477 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_av0p_loop);
      478 : INS <= doins1( iRETURN);
      // $do_av0p_fail
      //  LIGHT ERROR LED
      479 : INS <= doins1( iIOREAD);
      480 : INS <= doins3( iOR, iDAT8, 32'h00000080);
      481 : INS <= doins2( iIOWRT, iACC);
      482 : INS <= doins2( iJUMP, Label_do_exit);
      //  -------------------------------------
      //  do_array_verify_0_fail subroutine
      //  -------------------------------------
      // $do_array_verify_0_fail
      483 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000087);
      484 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 2);
      485 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000002);
      486 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  Load ACC with numberofmaprows
      487 : INS <= doins3( iLOAD, iDAT16, Sym_numberofmaprows);
      // $do_av0f_loop
      //  Push ACC because exe_verify and poll_program use ACC
      488 : INS <= doins2( iPUSH, iACC);
      489 : INS <= doins2( iCALL, Label_exe_verify);
      490 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h00000087);
      491 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 2);
      492 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000003);
      493 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  Check result of $exe_verify
      //  This is the line that differs from pass
      494 : INS <= doins4( iJUMP, iIF, iZERO, Label_do_av0f_fail);
      495 : INS <= doins1( iPOP);
      496 : INS <= doins3( iSUB, iDAT, 1);
      497 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_do_av0f_loop);
      498 : INS <= doins1( iRETURN);
      // $do_av0f_fail
      //  LIGHT ERROR LED
      499 : INS <= doins1( iIOREAD);
      500 : INS <= doins3( iOR, iDAT8, 32'h00000080);
      501 : INS <= doins2( iIOWRT, iACC);
      502 : INS <= doins2( iJUMP, Label_do_exit);
      //  -------------------------------------
      //  exe_verify subroutine
      //  -------------------------------------
      // $exe_verify
      503 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h0000008D);
      504 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 2);
      505 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000000);
      506 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_TAP_NEW_STATE, 32'h0000003C);
      //  264usec delay
      507 : INS <= doins3( iLOAD, iDAT16, 32'h00000000);
      // $ev_dly
      508 : INS <= doins1( iINC);
      509 : INS <= doins3( iCMP, iDAT, Sym_usec264);
      510 : INS <= doins4( iJUMP, iIFNOT, iZERO, Label_ev_dly);
      511 : INS <= doins2( iCALL, Label_poll_program);
      512 : INS <= doins4( iJUMP, iIF, iZERO, Label_readverstatus);
      513 : INS <= doins2( iJUMP, Label_exe_verify_done);
      // $readverstatus
      514 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_IR, 32'h0000008D);
      515 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR_LENGTH, 2);
      516 : INS <= doins5( iAPBWRT, iDAT8, 1, Sym_IAP_DR, 32'h00000000);
      517 : INS <= doins3( iAPBREAD, 1, Sym_IAP_DR2);
      518 : INS <= doins3( iAND, iDAT, 32'h0000C000);
      519 : INS <= doins3( iCMP, iDAT, 32'h00000000);
      //  This subroutine will return ZERO flag to 
      //  indicate pass or fail    
      // $exe_verify_done
      520 : INS <= doins1( iRETURN);
      default  : INS <= doins1(iNOP) ;
   endcase
                        end
            1 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 8'h55) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 8-Bit operation simple core
                                2  : INS <= doins2(iAND, 8'h0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 8'h05) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // APB Bus Cycles, immediate data
                                5  : INS <= doins2(iLOAD, 8'h12) ;
                                6  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 8'h12) ;
                                7  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                8  : INS <= doins2(iCMP, 8'h12) ;
                                9  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Accumalator writes
                                10  : INS <= doins2(iLOAD, 8'h23) ;
                                11  : INS <= doins4(iAPBWRT, iACC, 0, 8'h20) ;
                                12  : INS <= doins3(iAPBREAD, 0, 8'h20) ;
                                13  : INS <= doins2(iCMP, 8'h23) ;
                                14  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Flag Conditions
                                15  : INS <= doins2(iLOAD, 255) ; // set zero flag
                                16  : INS <= doins2(iADD, 1) ;
                                17  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                18  : INS <= doins2(iADD, 1) ; // not set
                                19  : INS <= doins4(iCALL, iIF, ZERO, 30) ;
                                20  : INS <= doins4(iCALL, iIF, NEGATIVE, 30) ; // number is positive
                                21  : INS <= doins2(iADD, 8'hF6) ; // will go negative
                                22  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 30) ; // number is positive
                                // Big negative value
	                         	23  : INS <= doins2( iLOAD,0);                              // Try loading big negative values
                                24  : INS <= doins2( iXOR, -1);
                                25  : INS <= doins2( iADD, 1);                              // not set
                                26  : INS <= doins4( iJUMP,iNOTIF,ZERO,30);
                                // Done tests, jump to signal all done
                                27  : INS <= doins2(iJUMP, 28) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                28  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                29  : INS <= doins2(iJUMP, 29) ;
                                // Error Condition
                                30  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                31  : INS <= doins2(iJUMP, 31) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            2 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 16'h1255) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 16-Bit operation simple core
                                2  : INS <= doins2(iAND, 16'h0F0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 16'h0205) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // APB Bus Cycles, immediate data
                                5  : INS <= doins2(iLOAD, 16'h1111) ;
                                6  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 16'h1234) ;
                                7  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                8  : INS <= doins2(iCMP, 16'h1234) ;
                                9  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Accumalator writes
                                10  : INS <= doins2(iLOAD, 16'h2312) ;
                                11  : INS <= doins4(iAPBWRT, iACC, 0, 8'h20) ;
                                12  : INS <= doins3(iAPBREAD, 0, 8'h20) ;
                                13  : INS <= doins2(iCMP, 16'h2312) ;
                                14  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Flag Conditions
                                15  : INS <= doins2(iLOAD, 16'hFFFF) ; // set zero flag
                                16  : INS <= doins2(iADD, 1) ;
                                17  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                18  : INS <= doins2(iADD, 1) ; // not set
                                19  : INS <= doins4(iCALL, iIF, ZERO, 30) ;
                                20  : INS <= doins4(iCALL, iIF, NEGATIVE, 30) ; // number is positive
                                21  : INS <= doins2(iADD, 16'hFFF6) ; // will go negative
                                22  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 30) ; // number is positive
                                // Big negative value
	                         	23  : INS <= doins2( iLOAD,0);                              // Try loading big negative values
                                24  : INS <= doins2( iXOR, 16'hFFFF);
                                25  : INS <= doins2( iADD, 1);                              // not set
                                26  : INS <= doins4( iJUMP,iNOTIF,ZERO,30);
                                // Done tests, jump to signal all done
                                27  : INS <= doins2(iJUMP, 28) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                28  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                29  : INS <= doins2(iJUMP, 29) ;
                                // Error Condition
                                30  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                31  : INS <= doins2(iJUMP, 31) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            3 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 32'h12552345) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 32-Bit operation simple core
                                2  : INS <= doins2(iAND, 32'hFF0F0F0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 32'h12050305) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // APB Bus Cycles, immediate data
                                5  : INS <= doins2(iLOAD, 16'h1111) ;
                                6  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 32'h12345678) ;
                                7  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                8  : INS <= doins2(iCMP, 32'h12345678) ;
                                9  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Accumalator writes
                                10  : INS <= doins2(iLOAD, 32'h23121234) ;
                                11  : INS <= doins4(iAPBWRT, iACC, 0, 8'h20) ;
                                12  : INS <= doins3(iAPBREAD, 0, 8'h20) ;
                                13  : INS <= doins2(iCMP, 32'h23121234) ;
                                14  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Flag Conditions
                                15  : INS <= doins2(iLOAD, -1) ; // set zero flag
                                16  : INS <= doins2(iADD, 1) ;
                                17  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                18  : INS <= doins2(iADD, 1) ; // not set
                                19  : INS <= doins4(iCALL, iIF, ZERO, 30) ;
                                20  : INS <= doins4(iCALL, iIF, NEGATIVE, 30) ; // number is positive
                                21  : INS <= doins2(iADD, -8) ; // will go negative
                                22  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 30) ; // number is positive
                                // Big negative value
	                         	23  : INS <= doins2( iLOAD,0);                              // Try loading big negative values
                                24  : INS <= doins2( iXOR, -1);
                                25  : INS <= doins2( iADD, 1);                              // not set
                                26  : INS <= doins4( iJUMP,iNOTIF,ZERO,30);
                                // Done tests, jump to signal all done
                                27  : INS <= doins2(iJUMP, 28) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                28  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                29  : INS <= doins2(iJUMP, 29) ;
                                // Error Condition
                                30  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                31  : INS <= doins2(iJUMP, 31) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            4 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 8'h55) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 8-Bit operation simple core with RAM
                                2  : INS <= doins2(iAND, 8'h0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 8'h05) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // APB Bus Cycles, immediate data
                                5  : INS <= doins2(iLOAD, 8'h12) ;
                                6  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 8'h12) ;
                                7  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                8  : INS <= doins2(iCMP, 8'h12) ;
                                9  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Loop Instruction
                                10  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                11  : INS <= doins3(iLOADZ, iDAT, 5) ;
                                12  : INS <= doins1(iINC) ;
                                13  : INS <= doins1(iDECZ) ;
                                14  : INS <= doins4(iJUMP, iNOTIF, ZZERO, 12) ;
                                15  : INS <= doins2(iCMP, 8'h05) ; // Should loop 5 times
                                16  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Memory Block read and write
                                17  : INS <= doins2(iLOAD, 8'h12) ;
                                18  : INS <= doins3(iRAMWRT, 0, iACC) ; // write and then readback to verify
                                19  : INS <= doins1(iINC) ;
                                20  : INS <= doins3(iRAMWRT, 10, iACC) ;
                                21  : INS <= doins2(iRAMREAD, 0) ;
                                22  : INS <= doins2(iCMP, 8'h12) ;
                                23  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                24  : INS <= doins2(iRAMREAD, 10) ;
                                25  : INS <= doins2(iCMP, 8'h13) ;
                                26  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Done tests, jump to signal all done
                                27  : INS <= doins2(iJUMP, 28) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                28  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                29  : INS <= doins2(iJUMP, 29) ;
                                // Error Condition
                                30  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                31  : INS <= doins2(iJUMP, 31) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            5 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 16'h5544) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 16-Bit operation simple core with RAM
                                2  : INS <= doins2(iAND, 16'h0F0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 16'h0504) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // APB Bus Cycles, immediate data
                                5  : INS <= doins2(iLOAD, 16'h1111) ;
                                6  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 16'h1234) ;
                                7  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                8  : INS <= doins2(iCMP, 16'h1234) ;
                                9  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Loop Instruction
                                10  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                11  : INS <= doins3(iLOADZ, iDAT, 5) ;
                                12  : INS <= doins1(iINC) ;
                                13  : INS <= doins1(iDECZ) ;
                                14  : INS <= doins4(iJUMP, iNOTIF, ZZERO, 12) ;
                                15  : INS <= doins2(iCMP, 8'h05) ; // Should loop 5 times
                                16  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Memory Block read and write
                                17  : INS <= doins2(iLOAD, 16'h1234) ;
                                18  : INS <= doins3(iRAMWRT, 0, iACC) ; // write and then readback to verify
                                19  : INS <= doins1(iINC) ;
                                20  : INS <= doins3(iRAMWRT, 10, iACC) ;
                                21  : INS <= doins2(iRAMREAD, 0) ;
                                22  : INS <= doins2(iCMP, 16'h1234) ;
                                23  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                24  : INS <= doins2(iRAMREAD, 10) ;
                                25  : INS <= doins2(iCMP, 16'h1235) ;
                                26  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Done tests, jump to signal all done
                                27  : INS <= doins2(iJUMP, 28) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                28  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                29  : INS <= doins2(iJUMP, 29) ;
                                // Error Condition
                                30  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                31  : INS <= doins2(iJUMP, 31) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            6 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 32'h55443322) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 32-Bit operation simple core with RAM
                                2  : INS <= doins2(iAND, 32'h0F0F0F0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 32'h05040302) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // APB Bus Cycles, immediate data
                                5  : INS <= doins2(iLOAD, 16'h1111) ;
                                6  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 32'h12345678) ;
                                7  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                8  : INS <= doins2(iCMP, 32'h12345678) ;
                                9  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Loop Instruction
                                10  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                11  : INS <= doins3(iLOADZ, iDAT, 5) ;
                                12  : INS <= doins1(iINC) ;
                                13  : INS <= doins1(iDECZ) ;
                                14  : INS <= doins4(iJUMP, iNOTIF, ZZERO, 12) ;
                                15  : INS <= doins2(iCMP, 8'h05) ; // Should loop 5 times
                                16  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Memory Block read and write
                                17  : INS <= doins2(iLOAD, 32'h12345678) ;
                                18  : INS <= doins3(iRAMWRT, 0, iACC) ; // write and then readback to verify
                                19  : INS <= doins1(iINC) ;
                                20  : INS <= doins3(iRAMWRT, 10, iACC) ;
                                21  : INS <= doins2(iRAMREAD, 0) ;
                                22  : INS <= doins2(iCMP, 32'h12345678) ;
                                23  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                24  : INS <= doins2(iRAMREAD, 10) ;
                                25  : INS <= doins2(iCMP, 32'h12345679) ;
                                26  : INS <= doins4(iJUMP, iNOTIF, ZERO, 30) ;
                                // Done tests, jump to signal all done
                                27  : INS <= doins2(iJUMP, 28) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                28  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                29  : INS <= doins2(iJUMP, 29) ;
                                // Error Condition
                                30  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                31  : INS <= doins2(iJUMP, 31) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            11 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 8'h55) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // Fully Configured 8 bit Operation with 256 instructions
                                 2  : INS <= doins2(iAND, 8'h0F) ; // Do some maths and jump to error if one occurs
                                 3  : INS <= doins2(iCMP, 8'h05) ;
                                 4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                 5  : INS <= doins2(iOR, 8'hA2) ;
                                 6  : INS <= doins2(iCMP, 8'hA7) ;
                                 7  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                 8  : INS <= doins1(iINC) ;
                                 9  : INS <= doins2(iCMP, 8'hA8) ;
                                10  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                11  : INS <= doins2(iXOR, 8'h0F) ;
                                12  : INS <= doins2(iCMP, 8'hA7) ;
                                13  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                14  : INS <= doins2(iADD, 8'h12) ;
                                15  : INS <= doins2(iCMP, 8'hB9) ;
                                16  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                17  : INS <= doins1(iSHL0) ;
                                18  : INS <= doins2(iCMP, 8'h72) ;
                                19  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                20  : INS <= doins1(iSHL1) ;
                                21  : INS <= doins2(iCMP, 8'hE5) ;
                                22  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                23  : INS <= doins1(iSHR0) ;
                                24  : INS <= doins2(iCMP, 8'h72) ;
                                25  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                26  : INS <= doins1(iSHR1) ;
                                27  : INS <= doins2(iCMP, 8'hB9) ;
                                28  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // APB Bus Cycles, immediate data
                                30  : INS <= doins2(iLOAD, 8'h12) ;
                                31  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 8'h12) ;
                                32  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h11, 8'h13) ;
                                33  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h10, 8'h14) ;
                                34  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h11, 8'h15) ;
                                35  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h10, 8'h16) ;
                                36  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h11, 8'h17) ;
                                37  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h10, 8'h18) ;
                                38  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h11, "Z" ) ;
                                39  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                40  : INS <= doins2(iCMP, 8'h12) ;
                                41  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                42  : INS <= doins3(iAPBREAD, 0, 8'h11) ;
                                43  : INS <= doins2(iCMP, 8'h13) ;
                                44  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                45  : INS <= doins3(iAPBREAD, 1, 8'h10) ;
                                46  : INS <= doins2(iCMP, 8'h14) ;
                                47  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                48  : INS <= doins3(iAPBREAD, 1, 8'h11) ;
                                49  : INS <= doins2(iCMP, 8'h15) ;
                                50  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                51  : INS <= doins3(iAPBREAD, 2, 8'h10) ;
                                52  : INS <= doins2(iCMP, 8'h16) ;
                                53  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                54  : INS <= doins3(iAPBREAD, 2, 8'h11) ;
                                55  : INS <= doins2(iCMP, 8'h17) ;
                                56  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                57  : INS <= doins3(iAPBREAD, 3, 8'h10) ;
                                58  : INS <= doins2(iCMP, 8'h18) ;
                                59  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                60  : INS <= doins3(iAPBREAD, 3, 8'h11) ;
                                61  : INS <= doins2(iCMP, "Z") ;
                                62  : INS <= doins4(iJUMP, iIFNOT, ZERO, 254) ;    // check other NOT
                                63  : INS <= doins2(iCMP, "Y") ;
                                64  : INS <= doins4(iJUMP, iIF, ZERO, 254) ;
                                // Accumalator writes
                                65  : INS <= doins2(iLOAD, 8'h23) ;
                                66  : INS <= doins4(iAPBWRT, iACC, 0, 8'h20) ;
                                67  : INS <= doins1(iINC) ;
                                68  : INS <= doins4(iAPBWRT, iACC, 0, 8'h21) ;
                                69  : INS <= doins1(iINC) ;
                                70  : INS <= doins4(iAPBWRT, iACC, 1, 8'h22) ;
                                71  : INS <= doins3(iAPBREAD, 0, 8'h20) ;
                                72  : INS <= doins2(iCMP, 8'h23) ;
                                73  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                74  : INS <= doins3(iAPBREAD, 0, 8'h21) ;
                                75  : INS <= doins2(iCMP, 8'h24) ;
                                76  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                77  : INS <= doins3(iAPBREAD, 1, 8'h22) ;
                                78  : INS <= doins2(iCMP, 8'h25) ;
                                79  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // ACM writes
                                81  : INS <= doins5(iAPBWRT, iDAT, 0, 0, 8'h54) ; // initialise APB RAM
                                82  : INS <= doins5(iAPBWRT, iDAT, 0, 1, 8'h55) ; // initialise APB RAM
                                83  : INS <= doins5(iAPBWRT, iDAT, 0, 2, 8'h56) ; // initialise APB RAM
                                84  : INS <= doins2(iLOAD, 99) ; // Now the ACM writes
                                85  : INS <= doins4(iAPBWRT, iACM, 0, 0) ; // location 99 lookup
                                86  : INS <= doins1(iINC) ;
                                87  : INS <= doins4(iAPBWRT, iACM, 0, 1) ; // location 100 lookup
                                88  : INS <= doins1(iINC) ;
                                89  : INS <= doins4(iAPBWRT, iACM, 0, 2) ; // location 101 lookup
                                90  : INS <= doins3(iAPBREAD, 0, 0) ;
                                91  : INS <= doins2(iCMP, 156) ; // 99=63/=9c=156
                                92  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                93  : INS <= doins3(iAPBREAD, 0, 1) ;
                                94  : INS <= doins2(iCMP, 8'h55) ; // 100 is not written
                                95  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                96  : INS <= doins3(iAPBREAD, 0, 2) ;
                                97  : INS <= doins2(iCMP, 154) ; // 101=65/=9a=154
                                98  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Flag Conditions
                                99  : INS <= doins2(iLOAD, 255) ; // set zero flag
                                100  : INS <= doins1(iINC) ;
                                101  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                102  : INS <= doins1(iINC) ; // not set
                                103  : INS <= doins4(iJUMP, iIF, ZERO, 254) ;
                                104  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ; // number is positive
                                105  : INS <= doins2(iADD, 8'hF6) ; // will go negative
                                106  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ; // number is positive
                                // Call and Return
                                107  : INS <= doins2(iLOAD, 255) ; // set zero flag
                                108  : INS <= doins1(iINC) ;
                                109  : INS <= doins4(iCALL, iIF, ZERO, 243) ; // should call
                                110  : INS <= doins4(iCALL, iNOTIF, ZERO, 242) ; // should not call
                                111  : INS <= doins2(iCALL, 244) ; // check return, will return
                                112  : INS <= doins1(iINC) ; // Clear zero
                                113  : INS <= doins4(iCALL, iNOTIF, ZERO, 243) ; // should call
                                114  : INS <= doins4(iCALL, iIF, ZERO, 242) ; // should not call
                                115  : INS <= doins2(iCALL, 246) ; // check return, will return
                                // Repeat with Negative flag
                                116  : INS <= doins2(iLOAD, 254) ; // set negative flag
                                117  : INS <= doins1(iINC) ;
                                118  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ;
                                119  : INS <= doins4(iCALL, iIF, NEGATIVE, 243) ; // should call
                                120  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 242) ; // should not call
                                121  : INS <= doins2(iCALL, 248) ; // check return, will return
                                122  : INS <= doins1(iINC) ; // not set
                                123  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ;
                                124  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 243) ; // should call
                                125  : INS <= doins4(iCALL, iIF, NEGATIVE, 242) ; // should not call
                                126  : INS <= doins4(iCALL, iNOTIF, ALWAYS, 251) ; // check return, will return
                                // Check Stack calling
                                130  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                131  : INS <= doins2(iCALL, 232) ;
                                132  : INS <= doins2(iCMP, 1) ; // Should have incremented by 1
                                133  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                134  : INS <= doins2(iCALL, 229) ;
                                135  : INS <= doins2(iCMP, 3) ; // Should have incremented by 2
                                136  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                137  : INS <= doins2(iCALL, 226) ;
                                138  : INS <= doins2(iCMP, 6) ; // Should have incremented by 3
                                139  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                140  : INS <= doins2(iCALL, 223) ;
                                141  : INS <= doins2(iCMP, 10) ; // Should have incremented by 4
                                142  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Loop Instruction
                                145  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                146  : INS <= doins3(iLOADZ, iDAT, 5) ;
                                147  : INS <= doins1(iINC) ;
                                148  : INS <= doins1(iDECZ) ;
                                149  : INS <= doins4(iJUMP, iNOTIF, ZZERO, 147) ;
                                150  : INS <= doins2(iCMP, 05) ; // Should have incremented by 5
                                151  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Memory Block read and write
                                155  : INS <= doins2(iLOAD, 8'h45) ; // Test Data
                                156  : INS <= doins3(iRAMWRT, 0, iACC) ; // write and then readback to verify
                                157  : INS <= doins1(iINC) ;
                                158  : INS <= doins3(iRAMWRT, 10, iACC) ;
                                159  : INS <= doins1(iINC) ;
                                160  : INS <= doins3(iRAMWRT, 100, iACC) ;
                                161  : INS <= doins1(iINC) ;
                                162  : INS <= doins3(iRAMWRT, 250, iACC) ;
                                163  : INS <= doins2(iRAMREAD, 0) ;
                                164  : INS <= doins2(iCMP, 8'h45) ;
                                165  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                166  : INS <= doins2(iRAMREAD, 10) ;
                                167  : INS <= doins2(iCMP, 8'h46) ;
                                168  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                169  : INS <= doins2(iRAMREAD, 100) ;
                                170  : INS <= doins2(iCMP, 8'h47) ;
                                171  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                172  : INS <= doins2(iRAMREAD, 250) ;
                                173  : INS <= doins2(iCMP, 8'h48) ;
                                174  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // test additional shift and rotate instructions
                                // Simple Test of Boolean Operations
                                180  : INS <= doins2(iLOAD, 8'h15) ; // Set Accumalator to 15hex
                                181  : INS <= doins1(iSHL0) ; // SHIFT <= 0
                                182  : INS <= doins2(iCMP, 8'h2A) ;
                                183  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                184  : INS <= doins1(iSHL1) ; // SHIFT <= 1
                                185  : INS <= doins2(iCMP, 8'h55) ;
                                186  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                187  : INS <= doins1(iSHLE) ; // SHIFT <= EXTEND
                                188  : INS <= doins2(iCMP, 8'hAB) ;
                                189  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                191  : INS <= doins1(iROL) ; // SHIFT <= ROTATE
                                192  : INS <= doins2(iCMP, 8'h57) ;
                                193  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                194  : INS <= doins2(iLOAD, 8'h15) ; // Set Accumalator to 15hex
                                195  : INS <= doins1(iSHR0) ; // SHIFT : 0
                                196  : INS <= doins2(iCMP, 8'h0A) ;
                                197  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                198  : INS <= doins1(iSHR1) ; // SHIFT : 1
                                199  : INS <= doins2(iCMP, 8'h85) ;
                                200  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                201  : INS <= doins2(iSHRE, 8'h02) ; // SHIFT : EXTEND
                                202  : INS <= doins2(iCMP, 8'hC2) ;
                                203  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                204  : INS <= doins1(iROR) ; // SHIFT : ROTATE
                                205  : INS <= doins2(iCMP, 8'h61) ;
                                206  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                //////////////////////////////////////////////////////////////////////////////////
                                // WAIT instruction
                                207  : INS <= doins3( iIOWRT, iDAT, 0);                  // IO_IN is connected to IO_OUT
                                208  : INS <= doins3( iWAIT,iIF,INPUT0 );                // wait if flag 0 set its not !
                                209  : INS <= doins3( iIOWRT, iDAT, 1);                        // IO_IN is connected to IO_OUT
                                210  : INS <= doins3( iWAIT,iNOTIF,INPUT0 );             // wait if flag 0 set its set !
                                211  : INS <= doins2( iLOAD, 100);
                                212  : INS <= doins2( iSUB, 1);
                                213  : INS <= doins2( iCMP, 99);
                                214  : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                215  : INS <= doins2( iSUB, 95);
                                216  : INS <= doins2( iCMP, 4);
                                217  : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                // Jump to ISR tests
                                218  : INS <= doins2( iJUMP, 300);
                                // ISR testing
                                300  : INS <= doins2(iLOAD, 8'h12) ; // Put 12 in memory location 1
                                301  : INS <= doins3(iRAMWRT, 1, iACC) ;
                                302  : INS <= doins2(iCMP, 8'h12) ; // set zero flag
                                303  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ; // ZERO flag should still be set before ISR
                                304  : INS <= doins3(iIOWRT, iDAT, 251) ; // Cause interrupt to occur
                                305  : INS <= doins1(iNOP) ;
                                306  : INS <= doins1(iNOP) ;
                                307  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ; // ZERO flag should still be set after ISR
                                308  : INS <= doins2(iRAMREAD, 1) ; // Verify that ISR called once only
                                309  : INS <= doins2(iCMP, 8'h13) ;
                                310  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Done tests, jump to signal all done
                                315  : INS <= doins2(iCALL, 410) ;
                                // The ISR Service Routine
                                400  : INS <= doins1(iPUSH) ; // store the accumalator
                                401  : INS <= doins3(iIOWRT, iDAT, 252) ; // Clear the external interrupt
                                402  : INS <= doins2(iRAMREAD, 1) ; // increment the value at location 1
                                403  : INS <= doins1(iINC) ; //
                                404  : INS <= doins3(iRAMWRT, 1, iACC) ; // write it back, zero flag is not set
                                405  : INS <= doins1(iPOP) ; // Restore the accumlator
                                406  : INS <= doins1(iRETISR) ;
                                //////////////////////////////////////////////////////////////////////////////////
                                // 2.3 Added Instructions Testing
                                410 : INS <= doins3( iLOAD,iDAT,8'h55);           // use new immediate instruction
                                411 : INS <= doins3( iAND, iDAT,8'h0F);
                                412 : INS <= doins3( iCMP, iDAT,8'h05);
                                413 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                414 : INS <= doins3( iOR, iDAT,8'hA2);
                                415 : INS <= doins3( iCMP,iDAT,8'hA7);
                                416 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                417 : INS <= doins1( iINC );
                                418 : INS <= doins3( iCMP,iDAT,8'hA8);
                                419 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                420 : INS <= doins3( iXOR,iDAT,8'h0F);
                                421 : INS <= doins3( iCMP,iDAT,8'hA7);
                                422 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                423 : INS <= doins3( iADD,iDAT,8'h12);
                                424 : INS <= doins3( iCMP,iDAT,8'hB9);
                                425 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                426 : INS <= doins2( iCMP,8'hB9);
                                427 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                430 : INS <= doins4( iRAMWRT,0,iDAT,8'h55);         // put data in RAM
                                432 : INS <= doins4( iRAMWRT,1,iDAT,8'h0F);
                                434 : INS <= doins4( iRAMWRT,2,iDAT,8'h05);
                                436 : INS <= doins4( iRAMWRT,3,iDAT,8'hA2);
                                438 : INS <= doins4( iRAMWRT,4,iDAT,8'hA7);
                                440 : INS <= doins4( iRAMWRT,5,iDAT,8'hA8);
                                442 : INS <= doins4( iRAMWRT,6,iDAT,8'h0F);
                                444 : INS <= doins4( iRAMWRT,7,iDAT,8'h12);
                                446 : INS <= doins4( iRAMWRT,8,iDAT,8'hb9);
                                //RAM based instructions
                                450 : INS <= doins3( iLOAD,iRAM,0);                //iLOAD,iDAT,8'h55);
                                451 : INS <= doins3( iAND, iRAM,1);                //iAND, iDAT,8'h0F);
                                452 : INS <= doins3( iCMP, iRAM,2);                //iCMP, iDAT,8'h05);
                                453 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                454 : INS <= doins3( iOR, iRAM,3);                 //iOR, iDAT,8'hA2);
                                455 : INS <= doins3( iCMP,iRAM,4);                 //iCMP,iDAT,8'hA7);
                                456 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                457 : INS <= doins1( iINC );
                                458 : INS <= doins3( iCMP,iRAM,5);                 //iCMP,iDAT,8'hA8);
                                459 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                460 : INS <= doins3( iXOR,iRAM,6);                 //iXOR,iDAT,8'h0F);
                                461 : INS <= doins3( iCMP,iRAM,4);                 //iCMP,iDAT,8'hA7);
                                462 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                463 : INS <= doins3( iADD,iRAM,7);                 //iADD,iDAT,8'h12);
                                464 : INS <= doins3( iCMP,iRAM,8);                 //iCMP,iDAT,8'hB9);
                                465 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                466 : INS <= doins2( iCMP,8'hB9);
                                467 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                470 : INS <= doins3( iIOWRT, iDAT,8'h32);           // Test New IO Instructions
                                471 : INS <= doins1( iIOREAD);                      // Check old write and read
                                472 : INS <= doins2( iCMP,8'h32);
                                473 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                474 : INS <= doins3( iLOAD,iDAT,8'h47);
                                475 : INS <= doins2( iIOWRT,iACC);                  // New instruction and read
                                476 : INS <= doins3( iLOAD,iDAT,0);
                                477 : INS <= doins1( iIOREAD);
                                478 : INS <= doins2( iCMP,8'h47);
                                479 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                480 : INS <= doins3( iLOAD,iDAT,8'h77);             // PUSH Immediate data
                                481 : INS <= doins2( iPUSH,iACC);
                                482 : INS <= doins3( iPUSH,iDAT,8'h89);
                                483 : INS <= doins1( iPOP);
                                484 : INS <= doins2( iCMP,8'h89);
                                485 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                486 : INS <= doins1( iPOP);
                                487 : INS <= doins2( iCMP,8'h77);
                                488 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                // Loop Instruction
                                490 : INS <= doins2( iLOAD,5);                      // accum=5
                                491 : INS <= doins2( iLOADZ,iACC);
                                492 : INS <= doins1( iINC);
                                493 : INS <= doins1( iDECZ);
                                494 : INS <= doins4( iJUMP,iNOTIF,ZZERO,492);
                                495 : INS <= doins2( iCMP,10);                      // Should have incremented by 5
                                496 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                     // WAIT instruction with switching input
                                498 : INS <= doins3( iIOWRT, iDAT, 249);                  // This will assert input for 20 clocks
                                499 : INS <= doins4( iJUMP,iNOTIF,INPUT1,254);            // Make sure is set
                                500 : INS <= doins3( iWAIT,iIF,INPUT1 );                  // Should sit here for 20 clocks
                                501 : INS <= doins4( iJUMP,iIF,INPUT1,254);               // Make sure is cleared
                                502 : INS <= doins3( iIOWRT, iDAT, 250);                  // route IO_OUT to flag input
                                // Multiply and DEC
                                503 : INS <= doins2( iLOAD,3);
                                504 : INS <= doins3( iMULT,iDAT,3);
                                505 : INS <= doins4( iRAMWRT,15,iDAT,4);
                                506 : INS <= doins3( iMULT,iRAM,15);
                                507 : INS <= doins1( iDEC);
                                508 : INS <= doins2( iCMP,35);
                                509 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                // Multiply Example
                                510 : INS <= doins4( iRAMWRT,0,iDAT,12);       // A
                                511 : INS <= doins4( iRAMWRT,1,iDAT,13);       // B
                                512 : INS <= doins4( iRAMWRT,2,iDAT,0);        // P=Answer
                                513 : INS <= doins3( iLOADZ,iDAT,8);
                                514 : INS <= doins2( iRAMREAD,0);              // Get A
                                515 : INS <= doins2( iBITTST,0);               // See if bit 0 set
                                516 : INS <= doins4( iJUMP,iIF,iZERO,520);
                                517 : INS <= doins2( iRAMREAD,2);              // Get P
                                518 : INS <= doins3( iADD,iRAM,1);             // ADD B
                                519 : INS <= doins3( iRAMWRT,2,iACC);          // Save
                                520 : INS <= doins2( iRAMREAD,1);              // Shift B
                                521 : INS <= doins1( iSHL0);                   //  *2
                                522 : INS <= doins3( iRAMWRT,1,iACC);          //
                                523 : INS <= doins2( iRAMREAD,0);              // Shift A
                                524 : INS <= doins1( iSHR0);                   //
                                525 : INS <= doins3( iRAMWRT,0,iACC);          // Save
                                526 : INS <= doins1( iDECZ);                // Do for all bits
                                527 : INS <= doins4( iJUMP,iIFNOT,iZZERO,514);
                                528 : INS <= doins2( iRAMREAD,2);              // Get P
                                529 : INS <= doins2( iCMP,156);                // 12*13 should be 156
                                530 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                // Loop Increment Instruction
                                531 : INS <= doins2( iLOAD,0);                  // Clear accum
                                532 : INS <= doins3( iLOADZ,iDAT,251);
                                533 : INS <= doins1( iINC);
                                534 : INS <= doins1( iINCZ);
                                535 : INS <= doins4( iJUMP,iNOTIF,ZZERO,533);
                                536 : INS <= doins2( iCMP,32'h05);              // Should loop 5 times
                                537 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                // Indirect Addressing
                                540 : INS <= doins3( iLOADZ,iDAT,10);
                                541 : INS <= doins4( iAPBWRTZ, iDAT, 0,32'h12);  // Write 12 to slot 0  @LOOP=10
                                542 : INS <= doins1( iINCZ);
                                543 : INS <= doins4( iAPBWRTZ, iDAT, 0,32'h15);  // Write 15 to slot 0  @LOOP=11
                                544 : INS <= doins3( iAPBREAD, 0,10);            // Read the location
                                545 : INS <= doins2( iCMP,32'h12);
                                546 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                547 : INS <= doins3( iAPBREAD, 0,11);            // Read the location
                                548 : INS <= doins2( iCMP,32'h15);
                                549 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                550 : INS <= doins1( iINCZ);
                                551 : INS <= doins2( iLOAD,33);                  //
                                552 : INS <= doins3( iAPBWRTZ, iACC, 0);         // Write ACC to slot 0  @LOOP=12
                                553 : INS <= doins3( iAPBREAD, 0,12);            // Read the location
                                554 : INS <= doins2( iCMP,33);
                                555 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                556 : INS <= doins1( iINCZ);
                                557 : INS <= doins2( iLOAD,1);                   // ACM location 1 will be 254
                                558 : INS <= doins3( iAPBWRTZ, iACM, 0);         // Write ACM to slot 0  @LOOP=13
                                559 : INS <= doins3( iAPBREAD, 0,13);            // Read the location
                                560 : INS <= doins2( iCMP,254);
                                561 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                562 : INS <= doins3( iLOADZ,iDAT,10);         // check indirect reads
                                563 : INS <= doins2( iAPBREADZ, 0);              // Read the location
                                564 : INS <= doins2( iCMP,32'h12);
                                565 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                566 : INS <= doins1( iINCZ);
                                567 : INS <= doins2( iAPBREADZ, 0);              // Read the location
                                568 : INS <= doins2( iCMP,32'h15);
                                569 : INS <= doins3( iAPBREAD, 0,11);              // Read the location
                                570 : INS <= doins4( iJUMP,iNOTIF,ZERO,254);
                                // test the ADDZ and DECZ instructions
                                571 : INS <= doins3( iLOADZ,iDAT,10);
                                572 : INS <= doins3( iSUBZ ,iDAT,10);
                                573 : INS <= doins4( iJUMP,iNOTIF,ZZERO,254);
                                574 : INS <= doins3( iLOADZ,iDAT,8'hFE);
                                575 : INS <= doins3( iADDZ ,iDAT,2);
                                576 : INS <= doins4( iJUMP,iNOTIF,ZZERO,254);
                                577 : INS <= doins3( iLOAD,iDAT,3);
                                578 : INS <= doins3( iLOADZ,iDAT,8'hFD);
                                579 : INS <= doins2( iADDZ ,iACC);
                                580 : INS <= doins4( iJUMP,iNOTIF,ZZERO,254);
                                // Done tests, jump to signal all done
                                582 : INS <= doins2( iJUMP,240);
                                //////////////////////////////////////////////////////////////////////////////////
                                // Call testing
                                223  : INS <= doins1(iINC) ;
                                224  : INS <= doins2(iCALL, 226) ;
                                225  : INS <= doins1(iRETURN) ;
                                226  : INS <= doins1(iINC) ;
                                227  : INS <= doins2(iCALL, 229) ;
                                228  : INS <= doins1(iRETURN) ;
                                229  : INS <= doins1(iINC) ;
                                230  : INS <= doins2(iCALL, 232) ;
                                231  : INS <= doins1(iRETURN) ;
                                232  : INS <= doins1(iINC) ;
                                233  : INS <= doins4(iAPBWRT,iACC,1,0);
                                234  : INS <= doins1(iRETURN) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                240  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                241  : INS <= doins2(iJUMP, 241) ;
                                // If called here error
                                242  : INS <= doins2(iJUMP, 254) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // If called here return
                                243  : INS <= doins1(iRETURN) ;
                                // If called here return on zero
                                244  : INS <= doins3(iRETURN, iIF, ZERO) ;
                                245  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT zero
                                246  : INS <= doins3(iRETURN, iNOTIF, ZERO) ;
                                247  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on negative
                                248  : INS <= doins3(iRETURN, iIF, NEGATIVE) ;
                                249  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT negative
                                250  : INS <= doins3(iRETURN, iNOTIF, NEGATIVE) ;
                                251  : INS <= doins2(iJUMP, 254) ;
                                // Error Condition
                                254  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                255  : INS <= doins2(iJUMP, 251) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            12 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 16'h4455) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // Fully Configured 16 bit Operation with 256 instructions
                                2  : INS <= doins2(iAND, 16'h0F0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 16'h0405) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                5  : INS <= doins2(iOR, 16'hC0A2) ;
                                6  : INS <= doins2(iCMP, 16'hC4A7) ;
                                7  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                8  : INS <= doins1(iINC) ;
                                9  : INS <= doins2(iCMP, 16'hC4A8) ;
                                10  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                11  : INS <= doins2(iXOR, 16'h0F0F) ;
                                12  : INS <= doins2(iCMP, 16'hCBA7) ;
                                13  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                14  : INS <= doins2(iADD, 16'h1012) ;
                                15  : INS <= doins2(iCMP, 16'hDBB9) ;
                                16  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                17  : INS <= doins1(iSHL0) ;
                                18  : INS <= doins2(iCMP, 16'hb772) ;
                                19  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                20  : INS <= doins1(iSHL1) ;
                                21  : INS <= doins2(iCMP, 16'h6eE5) ;
                                22  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                23  : INS <= doins1(iSHR0) ;
                                24  : INS <= doins2(iCMP, 16'h3772) ;
                                25  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                26  : INS <= doins1(iSHR1) ;
                                27  : INS <= doins2(iCMP, 16'h9bB9) ;
                                28  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // APB Bus Cycles, immediate data
                                30  : INS <= doins2(iLOAD, 8'h12) ;
                                31  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 16'h2112) ;
                                32  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h11, 16'h3113) ;
                                33  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h12, 16'h4114) ;
                                34  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h13, 16'h5115) ;
                                35  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h14, 16'h6116) ;
                                36  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h15, 16'h7117) ;
                                37  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h10, 16'h8118) ;
                                38  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h11, 16'h9119) ;
                                39  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                40  : INS <= doins2(iCMP, 16'h2112) ;
                                41  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                42  : INS <= doins3(iAPBREAD, 0, 8'h11) ;
                                43  : INS <= doins2(iCMP, 16'h3113) ;
                                44  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                45  : INS <= doins3(iAPBREAD, 1, 8'h12) ;
                                46  : INS <= doins2(iCMP, 16'h4114) ;
                                47  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                48  : INS <= doins3(iAPBREAD, 1, 8'h13) ;
                                49  : INS <= doins2(iCMP, 16'h5115) ;
                                50  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                51  : INS <= doins3(iAPBREAD, 2, 8'h14) ;
                                52  : INS <= doins2(iCMP, 16'h6116) ;
                                53  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                54  : INS <= doins3(iAPBREAD, 2, 8'h15) ;
                                55  : INS <= doins2(iCMP, 16'h7117) ;
                                56  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                57  : INS <= doins3(iAPBREAD, 3, 8'h10) ;
                                58  : INS <= doins2(iCMP, 16'h8118) ;
                                59  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                60  : INS <= doins3(iAPBREAD, 3, 8'h11) ;
                                61  : INS <= doins2(iCMP, 16'h9119) ;
                                62  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Accumalator writes
                                65  : INS <= doins2(iLOAD, 16'h5023) ;
                                66  : INS <= doins4(iAPBWRT, iACC, 0, 8'h20) ;
                                67  : INS <= doins1(iINC) ;
                                68  : INS <= doins4(iAPBWRT, iACC, 0, 8'h21) ;
                                69  : INS <= doins1(iINC) ;
                                70  : INS <= doins4(iAPBWRT, iACC, 1, 8'h22) ;
                                71  : INS <= doins3(iAPBREAD, 0, 8'h20) ;
                                72  : INS <= doins2(iCMP, 16'h5023) ;
                                73  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                74  : INS <= doins3(iAPBREAD, 0, 8'h21) ;
                                75  : INS <= doins2(iCMP, 16'h5024) ;
                                76  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                77  : INS <= doins3(iAPBREAD, 1, 8'h22) ;
                                78  : INS <= doins2(iCMP, 16'h5025) ;
                                79  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // ACM writes
                                81  : INS <= doins5(iAPBWRT, iDAT, 0, 0, 8'h54) ; // initialise APB RAM
                                82  : INS <= doins5(iAPBWRT, iDAT, 0, 1, 8'h55) ; // initialise APB RAM
                                83  : INS <= doins5(iAPBWRT, iDAT, 0, 2, 8'h56) ; // initialise APB RAM
                                84  : INS <= doins2(iLOAD, 99) ; // Now the ACM writes
                                85  : INS <= doins4(iAPBWRT, iACM, 0, 0) ; // location 99 lookup
                                86  : INS <= doins1(iINC) ;
                                87  : INS <= doins4(iAPBWRT, iACM, 0, 1) ; // location 100 lookup
                                88  : INS <= doins1(iINC) ;
                                89  : INS <= doins4(iAPBWRT, iACM, 0, 2) ; // location 101 lookup
                                90  : INS <= doins3(iAPBREAD, 0, 0) ;
                                91  : INS <= doins2(iAND, 16'h00FF) ;
                                92  : INS <= doins2(iCMP, 156) ; // 99=63/=9c=156
                                93  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                94  : INS <= doins3(iAPBREAD, 0, 1) ;
                                95  : INS <= doins2(iAND, 16'h00FF) ;
                                96  : INS <= doins2(iCMP, 8'h55) ; // 100 is not written
                                97  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Flag Conditions
                                99  : INS <= doins2(iLOAD, 16'hFFFF) ; // set zero flag
                                100  : INS <= doins1(iINC) ;
                                101  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                102  : INS <= doins1(iINC) ; // not set
                                103  : INS <= doins4(iJUMP, iIF, ZERO, 254) ;
                                104  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ; // number is positive
                                105  : INS <= doins2(iADD, 16'hFFF6) ; // will go negative
                                106  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ; // number is positive
                                // Call and Return
                                107  : INS <= doins2(iLOAD, 16'hFFFF) ; // set zero flag
                                108  : INS <= doins1(iINC) ;
                                109  : INS <= doins4(iCALL, iIF, ZERO, 243) ; // should call
                                110  : INS <= doins4(iCALL, iNOTIF, ZERO, 242) ; // should not call
                                111  : INS <= doins2(iCALL, 244) ; // check return, will return
                                112  : INS <= doins1(iINC) ; // Clear zero
                                113  : INS <= doins4(iCALL, iNOTIF, ZERO, 243) ; // should call
                                114  : INS <= doins4(iCALL, iIF, ZERO, 242) ; // should not call
                                115  : INS <= doins2(iCALL, 246) ; // check return, will return
                                // Repeat with Negative flag
                                116  : INS <= doins2(iLOAD, 16'hFFFE) ; // set negative flag
                                117  : INS <= doins1(iINC) ;
                                118  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ;
                                119  : INS <= doins4(iCALL, iIF, NEGATIVE, 243) ; // should call
                                120  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 242) ; // should not call
                                121  : INS <= doins2(iCALL, 248) ; // check return, will return
                                122  : INS <= doins1(iINC) ; // not set
                                123  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ;
                                124  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 243) ; // should call
                                125  : INS <= doins4(iCALL, iIF, NEGATIVE, 242) ; // should not call
                                126  : INS <= doins4(iCALL, iNOTIF, ALWAYS, 251) ; // check return, will return
                                // Check Stack calling
                                130  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                131  : INS <= doins2(iCALL, 232) ;
                                132  : INS <= doins2(iCMP, 1) ; // Should have incremented by 1
                                133  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                134  : INS <= doins2(iCALL, 229) ;
                                135  : INS <= doins2(iCMP, 3) ; // Should have incremented by 2
                                136  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                137  : INS <= doins2(iCALL, 226) ;
                                138  : INS <= doins2(iCMP, 6) ; // Should have incremented by 3
                                139  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                140  : INS <= doins2(iCALL, 223) ;
                                141  : INS <= doins2(iCMP, 10) ; // Should have incremented by 4
                                142  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Loop Instruction
                                145  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                146  : INS <= doins3(iLOADZ, iDAT, 5) ;
                                147  : INS <= doins1(iINC) ;
                                148  : INS <= doins1(iDECZ) ;
                                149  : INS <= doins4(iJUMP, iNOTIF, ZZERO, 147) ;
                                150  : INS <= doins2(iCMP, 05) ; // Should have incremented by 5
                                151  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Memory Block read and write
                                155  : INS <= doins2(iLOAD, 16'h1245) ; // Test Data
                                156  : INS <= doins3(iRAMWRT, 0, iACC) ; // write and then readback to verify
                                157  : INS <= doins1(iINC) ;
                                158  : INS <= doins3(iRAMWRT,10, iACC) ;
                                159  : INS <= doins1(iINC) ;
                                160  : INS <= doins3(iRAMWRT,100, iACC) ;
                                161  : INS <= doins1(iINC) ;
                                162  : INS <= doins3(iRAMWRT,250, iACC) ;
                                163  : INS <= doins2(iRAMREAD, 0) ;
                                164  : INS <= doins2(iCMP, 16'h1245) ;
                                165  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                166  : INS <= doins2(iRAMREAD, 10) ;
                                167  : INS <= doins2(iCMP, 16'h1246) ;
                                168  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                169  : INS <= doins2(iRAMREAD, 100) ;
                                170  : INS <= doins2(iCMP, 16'h1247) ;
                                171  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                172  : INS <= doins2(iRAMREAD, 250) ;
                                173  : INS <= doins2(iCMP, 16'h1248) ;
                                174  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Done tests, jump to signal all done
                                180  : INS <= doins2(iCALL, 240) ;
                                //////////////////////////////////////////////////////////////////////////////////
                                // Call testing
                                223  : INS <= doins1(iINC) ;
                                224  : INS <= doins2(iCALL, 226) ;
                                225  : INS <= doins1(iRETURN) ;
                                226  : INS <= doins1(iINC) ;
                                227  : INS <= doins2(iCALL, 229) ;
                                228  : INS <= doins1(iRETURN) ;
                                229  : INS <= doins1(iINC) ;
                                230  : INS <= doins2(iCALL, 232) ;
                                231  : INS <= doins1(iRETURN) ;
                                232  : INS <= doins1(iINC) ;
                                233  : INS <= doins1(iNOP) ;
                                234  : INS <= doins1(iRETURN) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                240  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                241  : INS <= doins2(iJUMP, 241) ;
                                // If called here error
                                242  : INS <= doins2(iJUMP, 254) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // If called here return
                                243  : INS <= doins1(iRETURN) ;
                                // If called here return on zero
                                244  : INS <= doins3(iRETURN, iIF, ZERO) ;
                                245  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT zero
                                246  : INS <= doins3(iRETURN, iNOTIF, ZERO) ;
                                247  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on negative
                                248  : INS <= doins3(iRETURN, iIF, NEGATIVE) ;
                                249  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT negative
                                250  : INS <= doins3(iRETURN, iNOTIF, NEGATIVE) ;
                                251  : INS <= doins2(iJUMP, 254) ;
                                // Error Condition
                                254  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                255  : INS <= doins2(iJUMP, 251) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            13 :
                        begin
                            // 32 bit
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 32'h12344455) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // Fully Configured 32 bit Operation with 256 instructions
                                2   : INS <= doins2(iAND, 32'h0F0F0F0F) ; // Do some maths and jump to error if one occurs
                                3   : INS <= doins2(iCMP, 32'h02040405) ;
                                4   : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                5   : INS <= doins2(iOR, 32'h4000C0A2) ;
                                6   : INS <= doins2(iCMP, 32'h4204C4A7) ;
                                7   : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                8   : INS <= doins1(iINC) ;
                                9   : INS <= doins2(iCMP, 32'h4204C4A8) ;
                                10  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                11  : INS <= doins2(iXOR, 32'h10F00F0F) ;
                                12  : INS <= doins2(iCMP, 32'h52f4CBA7) ;
                                13  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                14  : INS <= doins2(iADD, 32'h03001012) ;
                                15  : INS <= doins2(iCMP, 32'h55F4DBB9) ;
                                16  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                17  : INS <= doins2(iAND, 32'h0FFFFFFF) ; // make sure MSB's are zero
                                18  : INS <= doins1(iSHL0) ;
                                19  : INS <= doins2(iCMP, 32'h0BE9b772) ;
                                20  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                21  : INS <= doins1(iSHL1) ;
                                22  : INS <= doins2(iCMP, 32'h17D36EE5) ;
                                23  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                24  : INS <= doins1(iSHR0) ;
                                25  : INS <= doins2(iCMP, 32'h0BE9B772) ;
                                26  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                27  : INS <= doins1(iSHR1) ;
                                28  : INS <= doins1(iSHR0) ;
                                29  : INS <= doins2(iCMP, 32'h42fa6ddc) ;
                                30  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // APB Bus Cycles, immediate data
                                31  : INS <= doins2(iLOAD, 8'h12) ;
                                32  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 32'h20002112) ;
                                33  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h11, 32'h30003113) ;
                                34  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h12, 32'h40004114) ;
                                35  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h13, 32'h50005115) ;
                                36  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h14, 32'h60006116) ;
                                37  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h15, 32'h70007117) ;
                                38  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h10, 32'h08008118) ;
                                39  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h11, 32'h09009119) ;
                                40  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                41  : INS <= doins2(iCMP, 32'h20002112) ;
                                42  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                43  : INS <= doins3(iAPBREAD, 0, 8'h11) ;
                                44  : INS <= doins2(iCMP, 32'h30003113) ;
                                45  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                46  : INS <= doins3(iAPBREAD, 1, 8'h12) ;
                                47  : INS <= doins2(iCMP, 32'h40004114) ;
                                48  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                49  : INS <= doins3(iAPBREAD, 1, 8'h13) ;
                                50  : INS <= doins2(iCMP, 32'h50005115) ;
                                51  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                52  : INS <= doins3(iAPBREAD, 2, 8'h14) ;
                                53  : INS <= doins2(iCMP, 32'h60006116) ;
                                54  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                55  : INS <= doins3(iAPBREAD, 2, 8'h15) ;
                                56  : INS <= doins2(iCMP, 32'h70007117) ;
                                57  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                58  : INS <= doins3(iAPBREAD, 3, 8'h10) ;
                                59  : INS <= doins2(iCMP, 32'h08008118) ;
                                60  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                61  : INS <= doins3(iAPBREAD, 3, 8'h11) ;
                                62  : INS <= doins2(iCMP, 32'h09009119) ;
                                63  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Accumalator writes
                                65  : INS <= doins2(iLOAD, 32'h12345023) ;
                                66  : INS <= doins4(iAPBWRT, iACC, 0, 8'h20) ;
                                67  : INS <= doins1(iINC) ;
                                68  : INS <= doins4(iAPBWRT, iACC, 0, 8'h21) ;
                                69  : INS <= doins1(iINC) ;
                                70  : INS <= doins4(iAPBWRT, iACC, 1, 8'h22) ;
                                71  : INS <= doins3(iAPBREAD, 0, 8'h20) ;
                                72  : INS <= doins2(iCMP, 32'h12345023) ;
                                73  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                74  : INS <= doins3(iAPBREAD, 0, 8'h21) ;
                                75  : INS <= doins2(iCMP, 32'h12345024) ;
                                76  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                77  : INS <= doins3(iAPBREAD, 1, 8'h22) ;
                                78  : INS <= doins2(iCMP, 32'h12345025) ;
                                79  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // ACM writes
                                81  : INS <= doins5(iAPBWRT, iDAT, 0, 0, 8'h54) ; // initialise APB RAM
                                82  : INS <= doins5(iAPBWRT, iDAT, 0, 1, 8'h55) ; // initialise APB RAM
                                83  : INS <= doins5(iAPBWRT, iDAT, 0, 2, 8'h56) ; // initialise APB RAM
                                84  : INS <= doins2(iLOAD, 99) ; // Now the ACM writes
                                85  : INS <= doins4(iAPBWRT, iACM, 0, 0) ; // location 99 lookup
                                86  : INS <= doins1(iINC) ;
                                87  : INS <= doins4(iAPBWRT, iACM, 0, 1) ; // location 100 lookup
                                88  : INS <= doins1(iINC) ;
                                89  : INS <= doins4(iAPBWRT, iACM, 0, 2) ; // location 101 lookup
                                90  : INS <= doins3(iAPBREAD, 0, 0) ;
                                91  : INS <= doins2(iAND, 32'h000000FF) ;
                                92  : INS <= doins2(iCMP, 156) ; // 99=63/=9c=156
                                93  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                94  : INS <= doins3(iAPBREAD, 0, 1) ;
                                95  : INS <= doins2(iAND, 32'h000000FF) ;
                                96  : INS <= doins2(iCMP, 8'h55) ; // 100 is not written
                                97  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Flag Conditions
                                99  : INS <= doins2(iLOAD, -1) ; // set zero flag
                                100  : INS <= doins1(iINC) ;
                                101  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                102  : INS <= doins1(iINC) ; // not set
                                103  : INS <= doins4(iJUMP, iIF, ZERO, 254) ;
                                104  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ; // number is positive
                                105  : INS <= doins2(iADD, -8) ; // will go negative
                                106  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ; // number is positive
                                // Call and Return
                                107  : INS <= doins2(iLOAD, -1) ; // set zero flag
                                108  : INS <= doins1(iINC) ;
                                109  : INS <= doins4(iCALL, iIF, ZERO, 243) ; // should call
                                110  : INS <= doins4(iCALL, iNOTIF, ZERO, 242) ; // should not call
                                111  : INS <= doins2(iCALL, 244) ; // check return, will return
                                112  : INS <= doins1(iINC) ; // Clear zero
                                113  : INS <= doins4(iCALL, iNOTIF, ZERO, 243) ; // should call
                                114  : INS <= doins4(iCALL, iIF, ZERO, 242) ; // should not call
                                115  : INS <= doins2(iCALL, 246) ; // check return, will return
                                // Repeat with Negative flag
                                116  : INS <= doins2(iLOAD, -2) ; // set negative flag
                                117  : INS <= doins1(iINC) ;
                                118  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ;
                                119  : INS <= doins4(iCALL, iIF, NEGATIVE, 243) ; // should call
                                120  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 242) ; // should not call
                                121  : INS <= doins2(iCALL, 248) ; // check return, will return
                                122  : INS <= doins1(iINC) ; // not set
                                123  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ;
                                124  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 243) ; // should call
                                125  : INS <= doins4(iCALL, iIF, NEGATIVE, 242) ; // should not call
                                126  : INS <= doins4(iCALL, iNOTIF, ALWAYS, 251) ; // check return, will return
                                // Check Stack calling
                                130  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                131  : INS <= doins2(iCALL, 232) ;
                                132  : INS <= doins2(iCMP, 1) ; // Should have incremented by 1
                                133  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                134  : INS <= doins2(iCALL, 229) ;
                                135  : INS <= doins2(iCMP, 3) ; // Should have incremented by 2
                                136  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                137  : INS <= doins2(iCALL, 226) ;
                                138  : INS <= doins2(iCMP, 6) ; // Should have incremented by 3
                                139  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                140  : INS <= doins2(iCALL, 223) ;
                                141  : INS <= doins2(iCMP, 10) ; // Should have incremented by 4
                                142  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Loop Instruction
                                145  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                146  : INS <= doins3(iLOADZ, iDAT, 5) ;
                                147  : INS <= doins1(iINC) ;
                                148  : INS <= doins1(iDECZ) ;
                                149  : INS <= doins4(iJUMP, iNOTIF, ZZERO, 147) ;
                                150  : INS <= doins2(iCMP, 05) ; // Should have incremented by 5
                                151  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Memory Block read and write
                                155  : INS <= doins2(iLOAD, 32'h23456745) ; // Test Data
                                156  : INS <= doins3(iRAMWRT, 0, iACC) ; // write and then readback to verify
                                157  : INS <= doins1(iINC) ;
                                158  : INS <= doins3(iRAMWRT, 10, iACC) ;
                                159  : INS <= doins1(iINC) ;
                                160  : INS <= doins3(iRAMWRT, 100, iACC) ;
                                161  : INS <= doins1(iINC) ;
                                162  : INS <= doins3(iRAMWRT, 250, iACC) ;
                                163  : INS <= doins2(iRAMREAD, 0) ;
                                164  : INS <= doins2(iCMP, 32'h23456745) ;
                                165  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                166  : INS <= doins2(iRAMREAD, 10) ;
                                167  : INS <= doins2(iCMP, 32'h23456746) ;
                                168  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                169  : INS <= doins2(iRAMREAD, 100) ;
                                170  : INS <= doins2(iCMP, 32'h23456747) ;
                                171  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                172  : INS <= doins2(iRAMREAD, 250) ;
                                173  : INS <= doins2(iCMP, 32'h23456748) ;
                                174  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Done tests, jump to signal all done
                                180  : INS <= doins2(iCALL, 240) ;
                                //////////////////////////////////////////////////////////////////////////////////
                                // Call testing
                                223  : INS <= doins1(iINC) ;
                                224  : INS <= doins2(iCALL, 226) ;
                                225  : INS <= doins1(iRETURN) ;
                                226  : INS <= doins1(iINC) ;
                                227  : INS <= doins2(iCALL, 229) ;
                                228  : INS <= doins1(iRETURN) ;
                                229  : INS <= doins1(iINC) ;
                                230  : INS <= doins2(iCALL, 232) ;
                                231  : INS <= doins1(iRETURN) ;
                                232  : INS <= doins1(iINC) ;
                                233  : INS <= doins1(iNOP) ;
                                234  : INS <= doins1(iRETURN) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                240  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                241  : INS <= doins2(iJUMP, 241) ;
                                // If called here error
                                242  : INS <= doins2(iJUMP, 254) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // If called here return
                                243  : INS <= doins1(iRETURN) ;
                                // If called here return on zero
                                244  : INS <= doins3(iRETURN, iIF, ZERO) ;
                                245  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT zero
                                246  : INS <= doins3(iRETURN, iNOTIF, ZERO) ;
                                247  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on negative
                                248  : INS <= doins3(iRETURN, iIF, NEGATIVE) ;
                                249  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT negative
                                250  : INS <= doins3(iRETURN, iNOTIF, NEGATIVE) ;
                                251  : INS <= doins2(iJUMP, 254) ;
                                // Error Condition
                                254  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                255  : INS <= doins2(iJUMP, 251) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            14 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 8'h55) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 8-Bit operation with all insructions enabled
                                2  : INS <= doins2(iAND, 8'h0F) ; // Do some maths and jump to error if one occurs
                                3  : INS <= doins2(iCMP, 8'h05) ;
                                4  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                5  : INS <= doins2(iOR, 8'hA2) ;
                                6  : INS <= doins2(iCMP, 8'hA7) ;
                                7  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                8  : INS <= doins2(iADD, 8'h01) ;
                                9  : INS <= doins2(iCMP, 8'hA8) ;
                                10  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                11  : INS <= doins2(iXOR, 8'h0F) ;
                                12  : INS <= doins2(iCMP, 8'hA7) ;
                                13  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                14  : INS <= doins2(iADD, 8'h12) ;
                                15  : INS <= doins2(iCMP, 8'hB9) ;
                                16  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // APB Bus Cycles, immediate data
                                30  : INS <= doins2(iLOAD, 8'h12) ;
                                31  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h10, 8'h12) ;
                                32  : INS <= doins5(iAPBWRT, iDAT, 0, 8'h11, 8'h13) ;
                                33  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h12, 8'h14) ;
                                34  : INS <= doins5(iAPBWRT, iDAT, 1, 8'h13, 8'h15) ;
                                35  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h14, 8'h16) ;
                                36  : INS <= doins5(iAPBWRT, iDAT, 2, 8'h15, 8'h17) ;
                                37  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h10, 8'h18) ;
                                38  : INS <= doins5(iAPBWRT, iDAT, 3, 8'h11, 8'h19) ;
                                39  : INS <= doins3(iAPBREAD, 0, 8'h10) ;
                                40  : INS <= doins2(iCMP, 8'h12) ;
                                41  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                42  : INS <= doins3(iAPBREAD, 0, 8'h11) ;
                                43  : INS <= doins2(iCMP, 8'h13) ;
                                44  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                45  : INS <= doins3(iAPBREAD, 1, 8'h12) ;
                                46  : INS <= doins2(iCMP, 8'h14) ;
                                47  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                48  : INS <= doins3(iAPBREAD, 1, 8'h13) ;
                                49  : INS <= doins2(iCMP, 8'h15) ;
                                50  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                51  : INS <= doins3(iAPBREAD, 2, 8'h14) ;
                                52  : INS <= doins2(iCMP, 8'h16) ;
                                53  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                54  : INS <= doins3(iAPBREAD, 2, 8'h15) ;
                                55  : INS <= doins2(iCMP, 8'h17) ;
                                56  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                57  : INS <= doins3(iAPBREAD, 3, 8'h10) ;
                                58  : INS <= doins2(iCMP, 8'h18) ;
                                59  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                60  : INS <= doins3(iAPBREAD, 3, 8'h11) ;
                                61  : INS <= doins2(iCMP, 8'h19) ;
                                62  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Flag Conditions
                                99  : INS <= doins2(iLOAD, 255) ; // set zero flag
                                100  : INS <= doins2(iADD, 1) ;
                                101  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                102  : INS <= doins2(iADD, 1) ; // not set
                                103  : INS <= doins4(iJUMP, iIF, ZERO, 254) ;
                                104  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ; // number is positive
                                105  : INS <= doins2(iADD, 8'hF6) ; // will go negative
                                106  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ; // number is positive
                                // Call and Return
                                107  : INS <= doins2(iLOAD, 255) ; // set zero flag
                                108  : INS <= doins2(iADD, 1) ;
                                109  : INS <= doins4(iCALL, iIF, ZERO, 243) ; // should call
                                110  : INS <= doins4(iCALL, iNOTIF, ZERO, 242) ; // should not call
                                111  : INS <= doins2(iCALL, 244) ; // check return, will return
                                112  : INS <= doins2(iADD, 1) ; // Clear zero
                                113  : INS <= doins4(iCALL, iNOTIF, ZERO, 243) ; // should call
                                114  : INS <= doins4(iCALL, iIF, ZERO, 242) ; // should not call
                                115  : INS <= doins2(iCALL, 246) ; // check return, will return
                                // Repeat with Negative flag
                                116  : INS <= doins2(iLOAD, 254) ; // set negative flag
                                117  : INS <= doins2(iADD, 1) ;
                                118  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 254) ;
                                119  : INS <= doins4(iCALL, iIF, NEGATIVE, 243) ; // should call
                                120  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 242) ; // should not call
                                121  : INS <= doins2(iCALL, 248) ; // check return, will return
                                122  : INS <= doins2(iADD, 1) ; // not set
                                123  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ;
                                124  : INS <= doins4(iCALL, iNOTIF, NEGATIVE, 243) ; // should call
                                125  : INS <= doins4(iCALL, iIF, NEGATIVE, 242) ; // should not call
                                126  : INS <= doins4(iCALL, iNOTIF, ALWAYS, 251) ; // check return, will return
                                // Check Stack calling
                                130  : INS <= doins2(iLOAD, 0) ; // Clear accum
                                131  : INS <= doins2(iCALL, 232) ;
                                132  : INS <= doins2(iCMP, 1) ; // Should have incremented by 1
                                // Done tests, jump to signal all done
                                180  : INS <= doins2(iCALL, 240) ;
                                //////////////////////////////////////////////////////////////////////////////////
                                // Call testing
                                223  : INS <= doins2(iADD, 1) ;
                                224  : INS <= doins2(iCALL, 226) ;
                                225  : INS <= doins1(iRETURN) ;
                                226  : INS <= doins2(iADD, 1) ;
                                227  : INS <= doins2(iCALL, 229) ;
                                228  : INS <= doins1(iRETURN) ;
                                229  : INS <= doins2(iADD, 1) ;
                                230  : INS <= doins2(iCALL, 232) ;
                                231  : INS <= doins1(iRETURN) ;
                                232  : INS <= doins2(iADD, 1) ;
                                233  : INS <= doins1(iNOP) ;
                                234  : INS <= doins1(iRETURN) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                240  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                241  : INS <= doins2(iJUMP, 241) ;
                                // If called here error
                                242  : INS <= doins2(iJUMP, 254) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // If called here return
                                243  : INS <= doins1(iRETURN) ;
                                // If called here return on zero
                                244  : INS <= doins3(iRETURN, iIF, ZERO) ;
                                245  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT zero
                                246  : INS <= doins3(iRETURN, iNOTIF, ZERO) ;
                                247  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on negative
                                248  : INS <= doins3(iRETURN, iIF, NEGATIVE) ;
                                249  : INS <= doins2(iJUMP, 254) ;
                                // If called here return on NOT negative
                                250  : INS <= doins3(iRETURN, iNOTIF, NEGATIVE) ;
                                251  : INS <= doins2(iJUMP, 254) ;
                                // Error Condition
                                254  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                255  : INS <= doins2(iJUMP, 251) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            15 :
                        begin
                            case (ADDRINT)
                                // Jump to test start point
                                0  : INS <= doins2(iJUMP, 1) ;
                                // Simple Test of Boolean Operations
                                1  : INS <= doins2(iLOAD, 8'h55) ; // Set Accumalator to 55hex
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // 8-Bit operation with all some instructions enabled  - no stack
                                8  : INS <= doins1(iINC) ;
                                9  : INS <= doins2(iCMP, 8'h56) ;
                                10  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // IO IN and OUT Jump Conditions
                                20  : INS <= doins3(iIOWRT, iDAT, 8'h00) ; // IO_IN is connected to IO_OUT
                                21  : INS <= doins4(iJUMP, iIF, INPUT0, 254) ;
                                22  : INS <= doins4(iJUMP, iIF, INPUT1, 254) ;
                                23  : INS <= doins4(iJUMP, iIF, INPUT2, 254) ;
                                24  : INS <= doins4(iJUMP, iIF, INPUT3, 254) ;
                                25  : INS <= doins3(iIOWRT, iDAT, 8'h01) ; // IO_IN is connected to IO_OUT
                                26  : INS <= doins4(iJUMP, iNOTIF, INPUT0, 254) ;
                                27  : INS <= doins4(iJUMP, iIF, INPUT1, 254) ;
                                28  : INS <= doins4(iJUMP, iIF, INPUT2, 254) ;
                                29  : INS <= doins4(iJUMP, iIF, INPUT3, 254) ;
                                30  : INS <= doins3(iIOWRT, iDAT, 8'h02) ; // IO_IN is connected to IO_OUT
                                31  : INS <= doins4(iJUMP, iIF, INPUT0, 254) ;
                                32  : INS <= doins4(iJUMP, iNOTIF, INPUT1, 254) ;
                                33  : INS <= doins4(iJUMP, iIF, INPUT2, 254) ;
                                34  : INS <= doins4(iJUMP, iIF, INPUT3, 254) ;
                                35  : INS <= doins3(iIOWRT, iDAT, 8'h04) ; // IO_IN is connected to IO_OUT
                                36  : INS <= doins4(iJUMP, iIF, INPUT0, 254) ;
                                37  : INS <= doins4(iJUMP, iIF, INPUT1, 254) ;
                                38  : INS <= doins4(iJUMP, iNOTIF, INPUT2, 254) ;
                                39  : INS <= doins4(iJUMP, iIF, INPUT3, 254) ;
                                40  : INS <= doins3(iIOWRT, iDAT, 8'h08) ; // IO_IN is connected to IO_OUT
                                41  : INS <= doins4(iJUMP, iIF, INPUT0, 254) ;
                                42  : INS <= doins4(iJUMP, iIF, INPUT1, 254) ;
                                43  : INS <= doins4(iJUMP, iIF, INPUT2, 254) ;
                                44  : INS <= doins4(iJUMP, iNOTIF, INPUT3, 254) ;
                                // APB Bus Cycles, immediate data
                                // Accumalator writes
                                65  : INS <= doins2(iLOAD, 8'h23) ;
                                66  : INS <= doins4(iAPBWRT, iACC, 0, 8'h20) ;
                                67  : INS <= doins1(iINC) ;
                                68  : INS <= doins4(iAPBWRT, iACC, 0, 8'h21) ;
                                69  : INS <= doins1(iINC) ;
                                70  : INS <= doins4(iAPBWRT, iACC, 0, 8'h22) ;
                                71  : INS <= doins3(iAPBREAD, 0, 8'h20) ;
                                72  : INS <= doins2(iCMP, 8'h23) ;
                                73  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                74  : INS <= doins3(iAPBREAD, 0, 8'h21) ;
                                75  : INS <= doins2(iCMP, 8'h24) ;
                                76  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                77  : INS <= doins3(iAPBREAD, 0, 8'h22) ;
                                78  : INS <= doins2(iCMP, 8'h25) ;
                                79  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                // Flag Conditions
                                99   : INS <= doins2(iLOAD, 255) ; // set zero flag
                                100  : INS <= doins1(iINC) ;
                                101  : INS <= doins4(iJUMP, iNOTIF, ZERO, 254) ;
                                102  : INS <= doins1(iINC) ; // not set
                                103  : INS <= doins4(iJUMP, iIF, ZERO, 254) ;
                                104  : INS <= doins4(iJUMP, iIF, NEGATIVE, 254) ; // number is positive
                                // Done tests, jump to signal all done
                                180  : INS <= doins2(iCALL, 240) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // All tests complete
                                240  : INS <= doins3(iIOWRT, iDAT, 253) ;
                                241  : INS <= doins2(iJUMP, 241) ;
                                // If called here error
                                242  : INS <= doins2(iJUMP, 254) ;
                                ////////////////////////////////////////////////////////////////////////////////////
                                // Error Condition
                                254  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                255  : INS <= doins2(iJUMP, 251) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
            16 :
                        begin
                            case (ADDRINT)
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // Instruction set to demonstrate CoreAI Operation
                                0  : INS <= doins4(iJUMP, iIF, INPUT0, 0) ; // wait until AB non busy
							    1  : INS <= doins5(iAPBWRT, iDAT8, 0, iACM_CTRLSTAT, 16'h0001) ; // set ACM reset
                                2  : INS <= doins4(iJUMP, iIF, INPUT0, 2) ; // wait until AB non busy
                                // ADC should be calibrating - poll status register
                                3  : INS <= doins3(iAPBREAD, 0, iADC_STAT_HI_ADDR) ; // read status
                                4  : INS <= doins2(iAND, 16'h8000) ; // mask to Calibrate
                                5  : INS <= doins4(iJUMP, iNOTIF, ZERO, 3) ; // if not calibated wait
                                // Now Program the AV AC AT AG Registers
                                6  : INS <= doins2(iLOAD, 16'h0000) ; // ACC=0
                                7  : INS <= doins4(iJUMP, iIF, INPUT0, 7) ; // wait until AB non busy
                                8  : INS <= doins4(iAPBWRT, iACC, 0, iACM_ADDR_ADDR) ; // Write the Accumalator to ACM Address
                                9  : INS <= doins4(iAPBWRT, iACM, 0, iACM_DATA_ADDR) ; // Write ACM Data indexed by accumlator
                                10  : INS <= doins2(iADD, 16'h0001) ; // Increment the address
                                11  : INS <= doins2(iBITTST, 4) ; // See if at the last address
                                12  : INS <= doins4(iJUMP, iIF, ZERO, 7) ; // Repeat if not done
                                // Check ADC is Calibrated
                                13  : INS <= doins4(iJUMP, iIF, INPUT0, 13) ; // wait until AB non busy
                                14  : INS <= doins3(iIOWRT, iDAT, 8'h01) ; // Indicate initialized
                                // Now do a sample off channel 1
                                15  : INS <= doins4(iAPBWRT, 0, iADC_CTRL2_HI_ADDR, 16'h2100) ; // Start Conversion Channel 1
                                16  : INS <= doins4(iJUMP, iIF, INPUT0, 16) ; // wait until AB non busy
                                //Now Compare the value, see if between 4.75 and 5.25v
                                17  : INS <= doins3(iAPBREAD, 0, iADC_STAT_HI_ADDR) ; // Read ADC Value
                                18  : INS <= doins2(iAND, 16'h0FFF) ; // leave ADC data
                                19  : INS <= doins2(iCMPLEQ, 1187) ; // See if < 4.75v Subtract 1187
                                20  : INS <= doins4(iJUMP, 23, iIF, NEGATIVE) ; // jump if negative, less than 4.75
                                21  : INS <= doins2(iCMPLEQ, 1312) ; // See if > 5.25v Subtract 1312
                                22  : INS <= doins4(iJUMP, iNOTIF, NEGATIVE, 25) ; // jump if negative, less then 5.25
                                // simply fall through since >5.25
                                // Decided voltage <4.75 or >5.25 so clear flag
                                23  : INS <= doins3(iIOWRT, iDAT, 8'h01) ; // Turn DETECTED off
                                24  : INS <= doins2(iJUMP, 15) ; // Sample again
                                // Decided voltage between 4.75 and 5.25 so set flag
							    25  : INS <= doins3(iIOWRT, iDAT, 8'h03) ; // Turn DETECTED on
                                26  : INS <= doins2(iJUMP, 15) ; // Sample again
								default  : INS <= {58{1'bx}} ;
                            endcase
                        end
             20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 :
                        begin
                        case (ADDRINT)
                               // Jump to test start point
                                0  : INS <= doins2( iJUMP,1);
                               // Simple Test of Boolean Operations
                                1  : INS <= doins2( iLOAD,32'h55);                // Set Accumalator to 55hex
                                8  : INS <= doins1( iINC);
                                9  : INS <= doins2( iCMP,32'h56);
                                10 : INS <= doins4( iJUMP,iNOTIF,ZERO,120);
                               // IO IN and OUT Jump Conditions
                                20 : INS <= doins3( iIOWRT, iDAT, 32'h00);               // IO_IN is connected to IO_OUT
                                21 : INS <= doins4( iJUMP,iIF,INPUT0, 120);
                                22 : INS <= doins4( iJUMP,iIF,INPUT1, 120);
                                23 : INS <= doins4( iJUMP,iIF,INPUT2, 120);
                                24 : INS <= doins4( iJUMP,iIF,INPUT3, 120);
                                25 : INS <= doins3( iIOWRT, iDAT, 32'h01);               // IO_IN is connected to IO_OUT
                                26 : INS <= doins4( iJUMP,iNOTIF,INPUT0, 120);
                                27 : INS <= doins4( iJUMP,iIF,INPUT1   , 120);
                                28 : INS <= doins4( iJUMP,iIF,INPUT2   , 120);
                                29 : INS <= doins4( iJUMP,iIF,INPUT3   , 120);
                                30 : INS <= doins3( iIOWRT, iDAT, 32'h02);               // IO_IN is connected to IO_OUT
                                31 : INS <= doins4( iJUMP,iIF,INPUT0   , 120);
                                32 : INS <= doins4( iJUMP,iNOTIF,INPUT1, 120);
                                33 : INS <= doins4( iJUMP,iIF,INPUT2   , 120);
                                34 : INS <= doins4( iJUMP,iIF,INPUT3   , 120);
                                35 : INS <= doins3( iIOWRT, iDAT, 32'h04);               // IO_IN is connected to IO_OUT
                                36 : INS <= doins4( iJUMP,iIF,INPUT0   , 120);
                                37 : INS <= doins4( iJUMP,iIF,INPUT1   , 120);
                                38 : INS <= doins4( iJUMP,iNOTIF,INPUT2, 120);
                                39 : INS <= doins4( iJUMP,iIF,INPUT3   , 120);
                                40 : INS <= doins3( iIOWRT, iDAT, 32'h08);               // IO_IN is connected to IO_OUT
                                41 : INS <= doins4( iJUMP,iIF,INPUT0   , 120 );
                                42 : INS <= doins4( iJUMP,iIF,INPUT1   , 120 );
                                43 : INS <= doins4( iJUMP,iIF,INPUT2   , 120 );
                                44 : INS <= doins4( iJUMP,iNOTIF,INPUT3, 120 );
                                45 : INS <= doins2( iJUMP,65);
                               // APB Bus Cycles, immediate data
                                65 :  INS <= doins2( iLOAD,32'h23);
                                66  : INS <= doins4( iAPBWRT, iACC,  0,32'h20);
                                67  : INS <= doins1( iINC);
                                68  : INS <= doins4( iAPBWRT, iACC,  0,32'h21);
                                69  : INS <= doins1( iINC);
                                70  : INS <= doins4( iAPBWRT, iACC,  0,32'h22);
                                71  : INS <= doins3( iAPBREAD, 0,32'h20);
                                72  : INS <= doins2( iCMP,32'h23);
                                73  : INS <= doins4( iJUMP,iNOTIF,ZERO,120);
                                74  : INS <= doins3( iAPBREAD, 0,32'h21);
                                75  : INS <= doins2( iCMP,32'h24);
                                76  : INS <= doins4( iJUMP,iNOTIF,ZERO,120);
                                77  : INS <= doins3( iAPBREAD, 0,32'h22);
                                78  : INS <= doins2( iCMP,32'h25);
                                79  : INS <= doins4( iJUMP,iNOTIF,ZERO,120);
                                80  : INS <= doins2( iJUMP,99);
                               // Flag Conditions
                                99  : INS <= doins2( iLOAD,0);                         // set zero flag
                                100 : INS <= doins2( iAND, 0);
                                101 : INS <= doins4( iJUMP,iNOTIF,ZERO,120);
                                102 : INS <= doins1( iINC);                            // not set
                                103 : INS <= doins4( iJUMP,iIF,ZERO, 120);
                                104 : INS <= doins4( iJUMP,iIF,NEGATIVE,120);          // number is positive
                               ////////////////////////////////////////////////////////////////////////////////////
                               // All tests complete
                                105 : INS <= doins3( iIOWRT, iDAT, 253);
                                106 : INS <= doins1( iHALT);
                               // Error Condition
                                120 : INS <= doins3( iIOWRT, iDAT, 254);                  // Error Condition
                                121 : INS <= doins1( iHALT);
                                default : INS <= doins1( iNOP);
                          endcase
                        end
                  default :
                        begin
                            case (ADDRINT)
                                ////////////////////////////////////////////////////////////////////////////////////////////-
                                // Illegal testmode specified
                                0  : INS <= doins3(iIOWRT, iDAT, 254) ; // Error Condition
                                1  : INS <= doins2(iJUMP, 11) ;
                                default  : INS <= doins1(iNOP) ;
                            endcase
                        end
        endcase
    end
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Force in the dont cares
    always @(INS)
    begin
        INSTRUCTION <= {58{1'bx}} ;
        INSTRUCTION[5:0] <= INS[5:0] ;
        if (SW > 0)
        begin
          //  INSTRUCTION[SW - 1 + 6:6] <= INS[SW - 1 + 6:6] ;
            INSTRUCTION[SW  + 6:6] <= INS[SW  + 6:6] ;
        end
        INSTRUCTION[AW - 1 + 4 + 6:4 + 6] <= INS[AW - 1 + 4 + 6:4 + 6] ;
        INSTRUCTION[DW - 1 + 16 + 4 + 6:16 + 4 + 6] <= INS[DW - 1 + 16 + 4 + 6:16 + 4 + 6] ;
    end
endmodule
