5. デコーダ

デコーダは、RAMモジュールのインストラクションレジスタ(64ビット)と、ステートを入力とする巨大な組み合わせ回路になります。サブセット仕様と言えど、アドレシングモードも含むとマイクロコードは、300位あります。あまりに命令が多いので書いていて厭になります。
(16ビットから32ビットへの拡張を担当した人に同情します。)

BCD演算とLONGの24ビット相対アドレシングは、サブセット仕様ということで省いています。


この巨大なデコードと実行を1ステートでやってしまうというのが、当初のプランです。遅延対策は後で考えることにしてとりあえず進みましょう。

アーキテクチャでもExcelは書いたのですが、今回は、実際にVerilog上で記述するために、Verilog形式のフォーマットに直す必要があります。慣れないExcelでこの作業をやってみました。なお、Excelでマイクロコードを書く方法は、米国で仕事をした際、エンジニアがやっていた方法を真似たものです。言わばマイクロコードアセンブラです。
(余談ですが、Matlabや、Mathmatica,Verilog,Design Compiler等、先進的なソフトは全て米国人によるものですね。)

ほぼデバッグが終わったEXCELコードです。

下記はVerilogに直したデコーダになります。筆者が今まで書いたデコーダのなかで一番でかいです。考えてみるとH8300Hは、(演算ビット幅で考える)と32ビットマイコンです。H8の下位機種は、16ビットなので、そんなに複雑なことはないのですが、BYTE,WORD,LONGがあるために命令数が多くなりデコーダにしわ寄せが来てしまいました。16ビットCPUの方がデコーダは簡易なので速度的に上げやすいと思います。
(余談ですが、昔32ビットスーパミニコンなんてのがありました。当時は、16ビットのCPUでラック入りのミニコンを作っていたのですが、レジスタ間演算が300ns(300psではありません。)で堂々とカタログスペックに載っていました。)

繰り返しますがデコーダは組み合わせ回路です。下で、bus_stateは、RESET,割り込み、実行状態等の大局的ステート、irwordは、64ビットインストラクションレジスタ、STは実行ステートです。これを入力として一意に制御信号(マイクロコード52ビット)は決まります。デコーダモジュールからのoutput信号は、各モジュールに行き状態を制御することになります。マイクロコードをそのままマシンコードにすればVLIW
CPU?になります。
割り込みを含む全ての実行ステート数は最大でも5ステートで、メモリReadを含まない命令は2ステート(Fetch,Decode/Excute)で実行します。オリジナルでは、最大で12ステート(同じ命令で比較)かかる命令もあります。FPGAの任意バス幅が効いています。
なお、割り込みは、固定Vectorです。

コーディングではtaskを使って書いてみました。Quartasでは問題なく論理合成できました。少しでも、デコーダの負担を軽くするために、8ステート1ホットコード(ST)にしてみました。(乗除算命令を載せた時を考えて少し多めにしておきました。)case文では、?(ドントケア)は使えません。casezもしくはcasexを使います。これで論理合成器に ”ここは、簡単にデコードできるよ” と教えてあげましょう。

`include "define.h"
//Jun.2.2004 add stop_state
module decoder(clock,sync_reset, ram_write,ram_access_mode,data_address_latch,
                 ram_data_in_sel,irword, ea_left_sel, ea_right_sel,next_pc_offset,
                 alu_left_sel,alu_right_sel,ope,alu_access_mode,imm_sel,v_clear,h_latch,n_latch,z_latch,v_latch,c_latch,
                 ccr_all_write,bus_state,ccr_input_sel,paddress_sel,
                 left_address_sel, right_address_sel,write_address_sel,reg_file_access_mode,
               reg_write, insel,int_req2,int_req2_ack,i_bit,stop_state,ST);

                input clock,sync_reset;
                input [63:0] irword;

//ram_module
                output  ram_write;
                output [1:0] ram_access_mode;
                output [1:0] paddress_sel;
                output data_address_latch;
                output ram_data_in_sel;

//ea_unit
                output  [3:0] ea_left_sel;
                output  [2:0] ea_right_sel;
                output  [2:0] next_pc_offset;
                
//alu
                output [1:0] alu_left_sel;
                output [3:0] alu_right_sel;
                output [4:0] ope;
                output imm_sel;
              output v_clear,h_latch,n_latch,z_latch,v_latch,c_latch, ccr_all_write;
                output [1:0] ccr_input_sel;
                output [1:0] bus_state;
                output [1:0] alu_access_mode;
//reg_file
                output [1:0] left_address_sel, right_address_sel;
                output [2:0] write_address_sel;
                output [1:0] reg_file_access_mode;
              output reg_write;
              output insel;
              input int_req2;
                output  int_req2_ack;
                input i_bit;
                input stop_state;
                output [7:0] ST;
//registers
        reg [7:0] ST;//state
        reg [1:0] bus_state;
        reg int_latch;
        reg int_req2_ack;



//combinational logics
  //alu
                reg [1:0] alu_left_sel;
                reg [3:0] alu_right_sel;
                reg [4:0] ope;
                reg imm_sel;
                reg [1:0] alu_access_mode;
              reg v_clear,h_latch,n_latch,z_latch,v_latch,c_latch, ccr_all_write;
                reg [1:0] ccr_input_sel;

 //reg_file
                reg [1:0] left_address_sel, right_address_sel;
                reg [2:0] write_address_sel;
                reg [1:0] reg_file_access_mode;
              reg reg_write;
              reg insel;
            
  //ea_unit
                reg  [3:0] ea_left_sel;
                reg  [2:0] ea_right_sel;
                reg  [2:0] next_pc_offset;
  
 //ram_module           
              reg  ram_write;
                reg [1:0] ram_access_mode;
                reg [1:0] paddress_sel;
                reg data_address_latch;
                reg ram_data_in_sel;

        


//state control
                reg end_state;

                task c_vect;
                input [51:0] vector;
                    {
                           end_state,           // 1
                                 //alu
                               alu_left_sel,          //2
                                   alu_right_sel,        //4
                                   ope,                     //5
                                   alu_access_mode, //2 
                                   imm_sel,              //1
                           v_clear,h_latch,n_latch,z_latch,v_latch,c_latch, ccr_all_write,//7
                                   ccr_input_sel,       //2

                                 //reg_file
                                 insel,                    //1
                                 left_address_sel, right_address_sel,//4
                                 write_address_sel, //3
                                 reg_write,               //1
                                 reg_file_access_mode,//2

                                //ram_module    
                                  ram_data_in_sel ,       //1   
                          ram_write,                    //1
                                  ram_access_mode,    //2
                                  paddress_sel,         //2
                                  data_address_latch,   //1

                                //ea_unit
                                 ea_left_sel,                   //4
                                 ea_right_sel,                  //3
                                 next_pc_offset,                //3
                
                            } = vector ; // 
         endtask

always @(bus_state or irword or ST  ) begin
                                 //e le righ ope   m  i vhnzvcw ci i le ri wad w m  i  w m pa l left rig off 
 if (bus_state==2'b00)  c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);// ar=ar,pc=pc
  else if (bus_state==2'b01)  // reset sequence
        casex (ST)                                 //e le  righ    ope   m  i  vhnzvcw ci  i  le  ri  wad w m  i  w m  pa l   left   rig   off 
            8'b0000_0000: // c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); // 
        c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                  
 

        
            8'b????_???1:  // c_vect(52'b1_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_10_10_0_0000_000_000); // 
                        c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_10_1_0000_000_000);
     
        //    8'b????_??1?:  c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);  
        //    8'b????_?1??:  c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);  
            default:   ;
        endcase
    else if (bus_state==2'b10) // Int Cycle #of cycles may be less than H8
        casex(ST)
               8'b0000000000:c_vect( 52'b_0_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_0000_000_001);
               8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_1110_000_000);
               8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_1_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
               8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1010_000_000);

                    
              default: $stop;
          endcase
     else if (ST==8'h00)      // Fetch Cycle
               c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
    else begin
       casex(irword[63:60])
          4'b1111: casex(ST) // MOV.B. #x:8,Rd
                    8'b????_???1: c_vect( 52'b_1_01_0000_00001_00_0_1_0_1_1_0_0_0_00_0_00_00_001_1_00_0_0_00_00_0_0000_000_001);
                    default: $stop;
                   endcase // ST
          4'b0110:
                  casex(irword[59:56])   
                   4'b0100: // OR.W Rs,Rd
                     casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00111_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                     endcase // ST
                   4'b0101: // XOR.W Rs,Rd
                     casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_01000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                     endcase // ST
                   4'b0110: // AND.W Rs,Rd
                     casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00110_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                     endcase // ST
                   4'b1000: // MOV.B. @Rs,Rd
                     casex (irword[55])
                        1'b0 :  //    6 8 0rsrd
                              casex(ST)
                                8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_000_000);
                                8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                8'b????_?1??: c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                                default: $stop;
                              endcase // ST
                        1'b1: // MOV.B Rs,@Rd  6 8 1rdrs
                              casex(ST)
                                8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_000_001);
                                default: $stop;
                              endcase // ST
                     endcase // IR[7]

                  4'b1001: // MOV.W. @Rs,Rd
                     casex (irword[55])
                        1'b0 :  //    6 9 0rsrd
                              casex(ST)
                                8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_000_000);
                                8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                8'b????_?1??: c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_001);
                                default: $stop;
                              endcase // ST
                        1'b1: // MOV.W Rs,@Rd 
                              casex(ST)
                                  8'b????_???1:  c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_000_001);
                                  default: $stop;
                              endcase // ST
                     endcase // IR[7]
                 4'b1010:   
                     casex (irword[55:52])
                      4'b0000:// MOV.B. @aa:16,Rd
                        casex(ST)
                          8'b????_???1:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0010_000_000);
                          8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                          8'b????_?1??:   c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_010);
                        default:$stop;
                       endcase // ST
                      4'b0010:// MOV.B. @aa:24,Rd
                        casex(ST)
                          8'b????_???1:  c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0100_000_000);
                          8'b????_??1?:  c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                          8'b????_?1??:  c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_011);
                        default:$stop;
                       endcase // ST


                      4'b1000: // MOV.B. Rs,@aa:16 
                        casex(ST)
                         8'b????_???1:   c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0010_000_010);
                         default:$stop;
                       endcase // ST
                      4'b1010: // MOV.B. Rs,@aa:24 
                        casex(ST)
                         8'b????_???1:   c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0100_000_011);
                         default:$stop;
                       endcase // ST
                      default: $stop;
                        
                     endcase // IR_BYTE[7]

                  4'b1011: 
                     casex (irword[55:52])
                      4'b0000:// MOV.W. @aa:16 ,Rd
                       casex(ST)
                        8'b????_???1:  c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_01_00_0_0010_000_000);
                        8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                        8'b????_?1??: c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_010);
                        default: $stop;
                       endcase // ST
                      4'b0010: // MOV.W. @aa:24,Rd
                       casex(ST)
                        8'b????_???1:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_01_00_0_0100_000_000);
                        8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                        8'b????_?1??:   c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_011);
                        default:$stop;
                       endcase // ST
                      4'b1000:// MOV.W. Rs,@aa:16 
                       casex(ST)
                        8'b????_???1:  c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_0_01_0_1_01_00_0_0010_000_010);
                        default: $stop;
                       endcase // ST
                      4'b1010: // MOV.W. Rs,@aa:24
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_0_01_0_1_01_00_0_0100_000_011);
                        default:$stop;
                       endcase // ST    
                      default: $stop;   
                   endcase // IR_BYTE[7]
                 4'b1100:                
                     casex (irword[55])
                      1'b0:  //  MOV.B @Ers+,Rd
                         casex(ST)
                           8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_000_000);
                           8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                           8'b????_?1??: c_vect( 52'b_0_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_000);
                           8'b????_1???: c_vect( 52'b_1_00_0010_00010_10_0_0_0_0_0_0_0_0_00_0_01_00_101_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                         endcase // ST  
                      1'b1:  // MOV.B  Rs,@-ERd
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_1_0_1_1_0_0_0_00_1_01_00_101_1_10_0_0_00_00_0_0110_110_000);
                        8'b????_??1?: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_000_001);
                        default: $stop;
                       endcase // ST
                     endcase // IR_BYTE[7]

                 4'b1101:                
                     casex (irword[55])
                      1'b0:  // MOV.W  @Rs++,Rd 
                         casex(ST)
                           8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_000_000);
                           8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                           8'b????_?1??: c_vect( 52'b_0_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_000);
                           8'b????_1???: c_vect( 52'b_1_00_0011_00010_10_0_0_0_0_0_0_0_0_00_0_01_00_101_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                         endcase // ST  
                      1'b1:  // MOV.W. Rs,--@ERd                          6 D  1rd rs
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_0_00_0000_00000_01_0_1_0_1_1_0_0_0_00_1_01_00_101_1_10_0_0_01_00_0_0110_101_000);
                        8'b????_??1?: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_000_001);
                        default: $stop;
                       endcase // ST
                     endcase // IR_BYTE[7]
                4'b1110:
                     casex (irword[55])
                      1'b0:  //MOV.B  @(d:16,Ers),Rd
                         casex(ST)
                           8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_010_000);
                           8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                           8'b????_?1??: c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_010);
                           default: $stop;
                         endcase // ST  
                      1'b1:  // MOV.B  Rs,@(d;16:ERd)
                       casex(ST)
                        8'b????_???1:  c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_010_010);
                        default: $stop;
                       endcase // ST
                     endcase // IR_BYTE[7]

                4'b1111: 
                     casex (irword[55])
                      1'b0:       //  MOV.W. @(d:16,ERs),Rd        
                       casex(ST)          
                        8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_010_000);
                        8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                        8'b????_?1??: c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_010);
                        default: $stop;
                       endcase // ST
                      1'b1:  // Mov.W. Rs,@(d:16,ERd) 
                        casex(ST)
                         8'b????_???1: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_010_010);
                         default: $stop;
                        endcase // ST
                     endcase // IR_BYTE[7]
                default: $stop;      
               endcase // IR[11:8]

        4'b0111: casex(irword[59:56])               
                4'b0000: // BITSET.B #xx:3 Rd   
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_10100_00_1_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                4'b0001: // BITNOT.B #xx:3 Rd   
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_10101_00_1_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                4'b0010: // BITCLR.B #xx:3 Rd   
                      casex(ST)
                        8'b????_???1:  c_vect( 52'b_1_00_0000_10011_00_1_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST

                4'b0011: // BTST.B #xx:3 Rd     
                      casex(ST)
                        8'b????_???1:  c_vect( 52'b_1_00_0000_10110_00_1_0_0_0_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                      endcase // ST
                4'b1000: 
                  casex(irword[47:36])
                        12'h6A2:
                                casex(ST)
                                        8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_111_000);
                                        8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                        8'b????_?1??:c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_100);
                                endcase//
                        12'h6aa:
                                casex(ST)
                                        8'b????_???1:c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_111_100);
                                endcase//
                        12'h6b2:
                                casex(ST)
                                        8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_111_000);
                                        8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                        8'b????_?1??:c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_100);
                                endcase//
                        12'h6ba:
                                casex(ST)
                                        8'b????_???1:c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_111_100);
                                endcase//
                  endcase //ST
                4'b1001: 
                  casex(irword[55:52])
                    4'b0000:// MOV.W. #xx:16,Rd
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_10_0000_00001_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010);
                     endcase // ST
                    4'b0001:// ADD.W.#xx:16,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_10_0000_00010_01_0_0_1_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010);
                     endcase // ST
                    4'b0010:// CMP.W #xx:16,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_10_0000_00011_01_0_0_1_1_1_1_1_0_00_0_00_00_000_0_01_0_0_00_00_0_0000_000_010);
                     endcase // ST
                    4'b0011:// SUB.W.#xx:16,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_10_0000_00011_01_0_0_1_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010);
                     endcase // ST
                    4'b0100://OR.W.#xx:16,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_10_0000_00111_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010);
                      endcase
                    4'b0101://XOR.W.#xx:16,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_10_0000_01000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010);
                      endcase


                    4'b0110://AND.W.#xx:16,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_10_0000_00110_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010);
                      endcase
        //          default:$stop;
                  endcase
                4'b1010:  
                   casex(irword[55:52])
                     4'b0000:   //MOV.L ##x:32,Rd
                      casex(ST)        
                        8'b????_???1: c_vect( 52'b_1_11_0000_00001_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011);
                      endcase
                     4'b0001:   //ADD.L ##x:32,Rd
                      casex(ST)        
                        8'b????_???1: c_vect( 52'b_1_11_0000_00010_10_0_0_1_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011);
                      endcase
                     4'b0010:   //CMP.L ##x:32,Rd
                      casex(ST)        
                        8'b????_???1:c_vect( 52'b_1_11_0000_00011_10_0_0_1_1_1_1_1_0_00_0_00_00_000_0_10_0_0_00_00_0_0000_000_011);
                      endcase
                     4'b0011:   //SUB.L ##x:32,Rd
                      casex(ST)        
                        8'b????_???1: c_vect( 52'b_1_11_0000_00011_10_0_0_1_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011);
                      endcase
                     4'b0100:  //OR.L #xx:32,ERd
                      casex(ST) 
                        8'b????_???1: c_vect( 52'b_1_11_0000_00111_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011);
                      endcase   
                     4'b0101:  //XOR.L #xx:32,ERd
                      casex(ST) 
                        8'b????_???1: c_vect( 52'b_1_11_0000_01000_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011);
                      endcase   
                     4'b0110:  //AND.L #xx:32,ERd
                      casex(ST) 
                        8'b????_???1: c_vect( 52'b_1_11_0000_00110_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011);
                      endcase                   
                     default: $stop;
                   endcase      

                4'b1100:  
                    casex(irword[47:40])
                      
                      
                      
                      8'h73://   BTST #xx:3, @Rd         
                        casex(ST)   //      
                            8'b????_???1:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_1_0110_000_000);
                            8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??:   c_vect( 52'b_1_00_1000_10110_00_0_0_0_0_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010);
                            default: $stop;
                        endcase
                      default:$stop;
                    endcase     
                4'b1101:
                     casex(irword[47:40])
                      8'h70://   BSET #xx:3, @Rd         
                        casex(ST)   //      
                            8'b????_???1:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0110_000_000);
                            8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??:   c_vect( 52'b_1_00_1000_10100_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010);
                            default: $stop;
                        endcase 
                      8'h71://   BNOT #xx:3, @Rd         
                        casex(ST)   //      
                            8'b????_???1:  c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0110_000_000);
                            8'b????_??1?:  c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??:  c_vect( 52'b_1_00_1000_10101_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010);
                            default: $stop;
                        endcase 
                      8'h72://   BCLR #xx:3, @Rd         
                        casex(ST)   //      
                            8'b????_???1:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0110_000_000);
                            8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??:   c_vect( 52'b_1_00_1000_10011_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010);
                            default: $stop;
                        endcase

                      default:$stop;
                     endcase
                4'b1101:
                     casex(irword[47:40])
                       8'h73://   BTST #xx:3,@aa:8
                        casex(ST)   //      
                            8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000);
                            8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??: c_vect( 52'b_1_00_1000_10110_00_0_0_0_0_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010);
                            default: $stop;
                        endcase
                       default: $stop;
                     endcase            
                4'b1111:
                     casex(irword[47:40])
                      8'h70://   BSET #xx:3, @aa:8       
                        casex(ST)   //      
                            8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000);
                            8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??: c_vect( 52'b_1_00_1000_10100_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0001_000_010);
                            default: $stop;
                        endcase 
                      8'h71://   BNOT #xx:3, @aa:8       
                        casex(ST)   //      
                            8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000);
                            8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??:  c_vect( 52'b_1_00_1000_10101_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0001_000_010);
                            default: $stop;
                        endcase 
                      8'h72://   BCLR #xx:3, @aa:8       
                        casex(ST)   //      
                            8'b????_???1:  c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000);
                            8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                            8'b????_?1??:  c_vect( 52'b_1_00_1000_10011_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0001_000_010);
                            default: $stop;
                        endcase
                      default:$stop;
                     endcase            
                default:$stop;
             endcase // IR[11:8]
       4'b1000: // ADD.B #xx:8,Rd
         casex(ST)  //           
                8'b????_???1:  c_vect( 52'b_1_01_0000_00010_00_0_0_1_1_1_1_1_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001);
         endcase // ST
       4'b1001: // ADDX.B #xx:8,Rd
         casex(ST)  //           
                8'b????_???1:  c_vect( 52'b_1_01_0000_00100_00_0_0_1_1_1_1_1_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001);
                default: $stop;
         endcase // ST
       4'b1010:  // CMP.B ##xx:8,Rd
         casex(ST) 
                8'b????_???1:  c_vect( 52'b_1_01_0000_00011_00_0_0_1_1_1_1_1_0_00_0_00_01_000_0_00_0_0_00_00_0_0000_000_001);
                default: $stop;
         endcase // ST
       4'b1011:  //SUBX #xx:8,Rd
         casex(ST) 
                8'b????_???1: c_vect( 52'b_1_01_0000_00101_00_0_0_1_1_1_1_1_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001);
                default: $stop;
         endcase // ST
       4'b1101: // XOR   #xx:8, Rd
         casex(ST)  //         
          8'b????_???1: c_vect( 52'b_1_01_0000_01000_00_0_1_0_1_1_0_0_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001);
          default: $stop;
         endcase // ST
       4'b1100: // OR   #xx:8, Rd  
         casex(ST)       
          8'b????_???1:  c_vect( 52'b_1_01_0000_00111_00_0_1_0_1_1_0_0_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001);
          default: $stop;
         endcase // ST
       4'b1110: // AND   #xx:8, Rd  
         casex(ST)  //
          8'b????_???1: c_vect( 52'b_1_01_0000_00110_00_0_1_0_1_1_0_0_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001);
          default: $stop;
         endcase // ST

       4'b0000: casex(irword[59:56])  
                  4'b0000: 
                     casex(irword[55:48])
                      8'h00:// NOP      
                        casex(ST)
                          8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001);
                          default: $stop;
                        endcase // ST
        //            default:$stop;
                     endcase
                  4'b0001:
                       casex(irword[55:48])
                        8'h00:// 
                                casex(irword[47:40])
                                  8'h69:
                                        if(!irword[39])//// MOV.L @ERs,ERd
                                          casex(ST)
                                           8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_0_10_00_0_0111_000_000);
                                           8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                           8'b????_?1??: c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_010);
                                          endcase // ST
                                        else//MOV.L  Rs,@(ERd)
                                          casex(ST) 
                                           8'b????_???1: c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_10_10_000_0_10_0_1_10_00_0_0111_000_010);
                                          endcase // ST
                                  8'h6B:                
                                        case (irword[39:36])
                                          4'b0000://MOV.L @aa16,ERd
                                           casex(ST)
                                            8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_0011_000_000);
                                            8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                            8'b????_?1??:c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_011);
                                           endcase // ST
                                          4'b0010://MOV.L @aa24,ERd
                                           casex(ST)//
                                            8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_0101_000_000);
                                            8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                            8'b????_?1??:c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_100);
                                           endcase // ST
                                          4'b1000://MOV.L  ERs,@aa:16
                                            casex(ST)//
                                             8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_00_10_000_0_10_0_1_10_00_0_0011_000_011);
                                            endcase // ST        
                                          4'b1010:
                                            casex(ST)//MOV.L  ERs,@aa:24
                                             8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_00_10_000_0_10_0_1_10_00_0_0101_000_100);
                                            endcase // ST
                                          default: $stop;       
                                        endcase




                                  8'h6D:
                                        if(!irword[39])//MOV.L @Ers+,Rd
                                          casex(ST)
                                           8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_0_10_00_0_0111_000_000);
                                           8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                           8'b????_?1??:c_vect( 52'b_0_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_000);
                                           8'b????_1???:c_vect( 52'b_1_00_0100_00010_10_0_0_0_0_0_0_0_0_00_0_10_00_011_1_10_0_0_00_00_0_0000_000_010);
                                          endcase // ST
                                        else//
                                          casex(ST)//MOV.L  Rs,@-ERd
                                           8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_1_10_10_011_1_10_0_1_10_00_0_0111_100_010);
                                          endcase // ST
                                  8'h6F:
                                        if(!irword[39])//// MOV.L @(d:16,ERs),ERd
                                          casex(ST)
                                           8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_0_10_00_0_0111_011_000);
                                           8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                           8'b????_?1??: c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_011);
                                          endcase
                                        else
                                          casex(ST)  //MOV.L  Rs,@(d;16:ERd)
                                           8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_10_10_000_0_10_0_1_10_00_0_0111_011_011);
                                          endcase // ST

                        //        default: $stop;
                                endcase
                        8'hc0: 
                                casex(irword[47:40])
                                  8'h50:////MULXS.B Rs,Erd
                                        casex(ST)
                                           8'b????_???1:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_00_0_0_00_00_0_0001_000_000);
                                           8'b????_??1?:c_vect( 52'b_1_00_1010_00000_01_0_0_0_1_1_0_0_0_00_0_10_10_010_1_01_0_0_00_00_0_0000_000_010);
                                        endcase // ST

                                  8'h52://MULXS.W Rs,Erd
                                        casex(ST)
                                           8'b????_???1:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0001_000_000);
                                           8'b????_??1?:c_vect( 52'b_1_00_1010_00000_10_0_0_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010);
                                        endcase // ST
                            

        //                        default: $stop;
                                endcase
                        8'hd0: //DIVXS.B Rs,Erd
                                casex(irword[47:40])
                                  8'h51://DIVXS.B Rs,Erd
                                        casex(ST)

                                        8'b????_???1:c_vect( 52'b_0_00_0000_00001_00_0_0_0_0_1_0_0_0_00_0_10_10_010_0_00_0_0_00_00_0_0001_000_000);
                                        8'b????_??1?:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_00_0_0_00_00_0_0001_000_000);
                                        8'b????_?1??:c_vect( 52'b_0_00_1010_00001_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0000_000_000);
                                        8'b????_1???:c_vect( 52'b_1_00_1010_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_1_01_0_0_00_00_0_0000_000_010);





                                     endcase // ST

                                  8'h53://DIVXS.W Rs,Erd
                                        casex(ST)
                                        8'b????_???1:c_vect( 52'b_0_00_0000_00001_01_0_0_0_0_1_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0001_000_000);
                                        8'b????_??1?:c_vect( 52'b_0_00_0000_00000_10_0_0_0_0_0_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0001_000_000);
                                        8'b????_?1??:c_vect( 52'b_0_00_1010_00001_10_0_0_0_0_0_0_0_0_00_0_10_10_010_0_10_0_0_00_00_0_0000_000_000);
                                        8'b????_1???:c_vect( 52'b_1_00_1010_00000_10_0_0_0_0_0_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010);



                                           endcase // ST
                            

        //                        default: $stop;
                                endcase

                        8'hf0:// 
                                casex(irword[47:40])
                                  8'h64:// OR.L ERs,ERd
                                        casex(ST)
                                           8'b????_???1:c_vect( 52'b_1_00_0000_00111_10_0_1_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010);
                                        endcase // ST

                                  8'h65:// XOR.L ERs,ERd
                                        casex(ST)
                                           8'b????_???1:c_vect( 52'b_1_00_0000_01000_10_0_1_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010);
                                        endcase // ST
                            
                                  8'h66:// AND.L ERs,ERd
                                        casex(ST)
                                           8'b????_???1: c_vect( 52'b_1_00_0000_00110_10_0_1_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010);
                                        endcase // ST



        //                        default: $stop;
                                endcase
                        8'h40:// 
                                casex(irword[47:40])
                                  8'h69:
                                        if (!irword[39])// LDC @ERs,CCR
                                          casex(ST)
                                           8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_000_000);
                                           8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                           8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_010);
                                          endcase // ST
                                        else
                                          casex(ST)//STC CCR,@ERd
                                           8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_1_00_00_0_0111_000_010);
                                          endcase // ST
                                   8'h6B:
                                        case (irword[39:36])
                                          4'b0000://LDC @aa:16,CCR
                                            casex(ST)
                                              8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0011_000_000);
                                              8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                              8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_011);
                                            endcase // ST
                                          4'b0010://LDC @aa:24,CCR
                                            casex(ST)//STC
                                              8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0101_000_000);
                                              8'b????_??1?:   c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                              8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_100);
                                            endcase // ST
                                          4'b1000://STC CCR,@(aa:16)
                                            casex(ST)//STC
                                              8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0011_000_011);
                                            endcase // ST
                                          4'b1010://STC CCR,@(aa:24)
                                            casex(ST)//STC
                                              8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0101_000_100);
                                            endcase // ST
                                        endcase
                                   8'h6F:
                                        if (!irword[39])//// LDC @(d:16,ERs),CCR
                                          casex(ST)
                                           8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_011_000);
                                           8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                                           8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_011);
                                          endcase // ST
                                        else//STC CCR,@(d:16,ERd)
                                          casex(ST)                                       
                                           8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_1_00_00_0_0111_011_011);
                                          endcase // ST
                                  default: $stop;
                                endcase
        //              default: $stop;
                       endcase
                  4'b0010: //STC CCR,Rd
                      casex(ST) //
                        8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST


                  4'b0011: // LDC Rs,CCR
                      casex(ST) //
                        8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST

                  4'b0100: // ORC #xx:8,CCR
                      casex(ST) //
                        8'b????_???1:c_vect( 52'b_1_01_1001_00111_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b0101: // XORC #xx:8,CCR
                      casex(ST) //
                        8'b????_???1:c_vect( 52'b_1_01_1001_01000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b0110: // ANDC #xx:8,CCR
                      casex(ST) //
                        8'b????_???1:c_vect( 52'b_1_01_1001_00110_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b0111: // LDC #xx:8,CCR
                      casex(ST) //
                        8'b????_???1:c_vect( 52'b_1_01_0000_00001_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1000: //ADD.B Rs,Rd
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00010_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1001: // ADD.W Rs,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0000_00010_01_0_0_1_1_1_1_1_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1010: 
                     casex(irword[55])
                      1'b0://INC.B.Rd
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0010_00010_00_0_0_0_1_1_1_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
                      1'b1:// ADD.L Ers,ERd
                        casex(ST)
                         8'b????_???1: c_vect( 52'b_1_00_0000_00010_10_0_0_1_1_1_1_1_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001);
                         default: $stop;
                        endcase // ST
                      default $stop;    
                     endcase
                  4'b1011: 
                     casex(irword[55:52])
                      4'b0000 :// ADDS.L #1,ERd
                       casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0010_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
                      4'b0101://INC.W #1,Rd
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0010_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
                      4'b0111://INC.L #1,ERd
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0010_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
                      4'b1101://INC.W #2,Rd
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0011_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
                      4'b1111://INC.L #2,ERd
                       casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0011_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST      
                      4'b1000://ADDS.L #2,ERd
                       casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0011_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
                      4'b1001://ADDS.L #4,ERd
                        casex(ST)
                         8'b????_???1:c_vect( 52'b_1_00_0100_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                         default: $stop;
                        endcase // STcase 
                   //   default:$stop;  
                     endcase    
                  4'b1101: // MOV.W. Rs,Rd
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00001_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1100: // MOV.B. Rs,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0000_00001_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1110: // ADDX.B. Rs,Rd
                      casex(ST) // 
                        8'b????_???1:  c_vect( 52'b_1_00_0000_00100_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1111: //MOV.L  Ers,ERd
                      casex(ST) //      
                        8'b????_???1:c_vect( 52'b_1_00_0000_00001_10_0_1_0_1_1_0_0_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001);
                      endcase // ST
                  default: begin $display("[11:8] undefined command error"); $stop; end

            endcase // IR[11:8]
          4'b0001: casex(irword[59:56])
                   4'b0000:    
                     casex(irword[55:52])
                      4'b1000://SHAL.B, Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_01111_00_0_0_0_1_1_1_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1001://SHAL.W,Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_01111_01_0_0_0_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1011://ShAL.L,ERd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_01111_10_0_0_0_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b0000://SHLL.B, Rd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_10001_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST   
                      4'b0001://SHLL.W,Rd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_10001_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b0011://SHLL.L,ERd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_10001_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      
                      default: $stop;
                     endcase // 
                   4'b0001:    
                     casex(irword[55:52])
                      4'b1000://SHAR.B, Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_10000_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1001://SHAR.W,Rd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_10000_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1011://ShAR.L,ERd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_10000_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                
                      4'b0000://SHLR.B, Rd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_10010_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST   
                      4'b0001://SHLR.W,Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_10010_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b0011://SHLR.L,ERd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_10010_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      default: $stop;
                     endcase // 
                  4'b0010: 
                     casex(irword[55:52])
                      4'b1000://ROTL.B.Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_01011_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1001://ROTL.W.Rd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_01011_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1011://ROTL.L,ERd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_01011_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b0000://ROTXL.B.Rd
                        casex(ST)
                           8'b????_???1:c_vect( 52'b_1_00_0000_01101_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST   
                      4'b0001://ROTXL.W.Rd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_01101_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b0011://ROTX.L,ERd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_01101_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      default: $stop;
                     endcase // 
                   4'b0011: 
                     casex(irword[55:52])
                      4'b1000://ROTR.B.Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_01100_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1001://ROTR.W.Rd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_01100_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b1011://ROTR.L,ERd
                        casex(ST)
                           8'b????_???1:  c_vect( 52'b_1_00_0000_01100_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b0000://ROTXR.B.Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_01110_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST   
                      4'b0001://ROTXR.W.Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_01110_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      4'b0011://ROTXR.L,ERd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_01110_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                      default: $stop;
                     endcase // 
                  4'b0100: // OR.B. Rs,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0000_00111_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST     
                  4'b0101: // XOR.B. Rs,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0000_01000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b0110: // AND.B. Rs,Rd
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00110_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST

                  4'b0111:   
                      casex (irword[55:52])
                        4'b0000://NOT.B Rd
                          casex(ST)
                                8'b????_???1: c_vect( 52'b_1_00_0000_11000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                                default: $stop;
                          endcase // ST
                        4'b0001:  //NOT.W Rd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_11000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                                default: $stop;
                             endcase // ST
                        4'b0011:  //NOT.L Rd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_11000_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                                default: $stop;
                             endcase // ST
                        4'b1000:  //NEG.B Rd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_10111_00_0_0_1_1_1_1_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                                default: $stop;
                             endcase // ST
                        4'b1001:  //NEG.W Rd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_10111_01_0_0_1_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                                default: $stop;
                             endcase // ST
                        4'b1011:  //NEG.L Rd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_10111_10_0_0_1_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                                default: $stop;
                             endcase // ST
                        4'b1101: //EXTS.W.Rd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_01001_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                             endcase // ST
                        4'b1111: //EXTS.L ERd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_01001_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                             endcase // ST
                        4'b0101: //EXTU.W Rd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_01010_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                             endcase // ST
                        4'b0111: //EXTU.L Erd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0000_01010_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                             endcase // ST
                        default: begin $display("[11:8] undefined command error"); $stop; end
                      endcase  // 
                  4'b1000: // SUB.B. Rs,Rd
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00011_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1001: // SUB.W. Rs,Rd
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0000_00011_01_0_0_1_1_1_1_1_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);
                        default: $stop;
                      endcase // ST
                  4'b1010: 
                    casex (irword[55])
                     1'b0://  DEC.B.Rd
                       casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0101_00010_00_0_0_0_1_1_1_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
 
                     1'b1:// SUB.L Ers,ERd
                       casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0000_00011_10_0_0_1_1_1_1_1_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001);
                        default: $stop;
                       endcase // ST
                     
                    endcase
                  4'b1011:   // 
                      casex (irword[55:52])
                        4'b0000://SUBS.L #1,ERd
                          casex(ST)
                                8'b????_???1: c_vect( 52'b_1_00_0101_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                                default: $stop;
                          endcase // ST
                        4'b0101://DEC.W #1,Rd
                          casex(ST)
                             8'b????_???1:  c_vect( 52'b_1_00_0101_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                             default: $stop;
                          endcase // ST
                        4'b1101://DEC.W #2,Rd
                          casex(ST)
                             8'b????_???1:  c_vect( 52'b_1_00_0110_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001);
                             default: $stop;
                          endcase // ST
                        4'b0111://DEC.L #1,ERd
                          casex(ST)
                             8'b????_???1: c_vect( 52'b_1_00_0101_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                             default: $stop;
                          endcase // ST
                        4'b1111://DEC.L #2,ERd
                          casex(ST)
                             8'b????_???1: c_vect( 52'b_1_00_0110_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                             default: $stop;
                          endcase // ST

                        4'b1000:  //SUBS.L #2,ERd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0110_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                                default: $stop;
                             endcase // ST
                        4'b1001:  //SUBS.L #4,ERd
                             casex(ST)
                                8'b????_???1:c_vect( 52'b_1_00_0111_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001);
                                default: $stop;
                             endcase // ST
                        default: $stop;
                     endcase


                  4'b1100:   // CMP.B Rs,Rd
                     casex(ST)   //                          
                               8'b????_???1:c_vect( 52'b_1_00_0000_00011_00_0_0_1_1_1_1_1_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_001);
                               default: $stop;
                     endcase 
                  4'b1101:   // CMP.W Rs,Rd
                     casex(ST)   //                          
                               8'b????_???1: c_vect( 52'b_1_00_0000_00011_01_0_0_1_1_1_1_1_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_001);
                               default: $stop;
                     endcase  
                  4'b1110://SUBX Rs,Rd
                        casex(ST)
                           8'b????_???1: c_vect( 52'b_1_00_0000_00101_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001);
                           default: $stop;
                        endcase // ST
                  4'b1111:   // CMP.L Ers,ERd
                     casex(ST)   //                          
                               8'b????_???1: c_vect( 52'b_1_00_0000_00011_10_0_0_1_1_1_1_1_0_00_0_10_10_000_0_10_0_0_00_00_0_0000_000_001);
                               default: $stop;
                     endcase


                     
                  default: begin $display("[11:8] undefined command error"); $stop;  end

            endcase // IR[11:8]
          4'b0010: //  MOV.B @aa:8,Rd  
              casex(ST)   //                  
                        8'b????_???1:  c_vect( 52'b_0_00_0000_00000_10_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000);
                        8'b????_??1?:  c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                        8'b????_?1??:  c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_001_1_00_0_0_00_00_0_0000_000_001);
                        default: $stop;
              endcase
          4'b0011: //  MOV.B Rs,@aa:8  
              casex(ST)   //             
                        8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_00_01_000_0_00_0_1_00_00_0_0001_000_001);
                        default: $stop;
              endcase
          4'b0100: //  BCC  disp8
                   casex(ST)
                        8'b????_???1:   
                                c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_11_0_1100_001_001);
                         default: $stop;
                   endcase // ST
        
          default: begin $display("[11:8] undefined command error"); $stop; end

           // endcase // IR[11:8]
   4'b0101: casex(irword[59:56])
                4'b0000: //  MULXU.B Rs,Erd
                      casex(ST)
                          8'b????_???1: c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_000);
                          8'b????_??1?: c_vect( 52'b_1_00_1010_00000_01_0_0_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);
                         default: $stop;
                      endcase // ST
                4'b0010: //  MULXU.W Rs,Erd
                      casex(ST)
                          8'b????_???1: c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000);
                          8'b????_??1?: c_vect( 52'b_1_00_1010_00000_10_0_0_0_1_1_0_0_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001);
                         default: $stop;
                      endcase // ST
                4'b0001: //DIVXU.B Rs,Erd
                      casex(ST)


                        8'b????_???1:c_vect( 52'b_0_00_0000_00001_00_0_0_0_0_1_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_000);
                        8'b????_??1?:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_000);
                        8'b????_?1??:c_vect( 52'b_0_00_1010_00001_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000);
                        8'b????_1???:c_vect( 52'b_1_00_1010_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001);





                        default: $stop;
                      endcase // ST
                4'b0011: //  DIVXU.W Rs,Erd
                      casex(ST)

                        8'b????_???1:c_vect( 52'b_0_00_0000_00001_00_0_0_0_0_1_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000);
                        8'b????_??1?:c_vect( 52'b_0_00_0000_00000_10_0_0_0_0_0_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000);
                        8'b????_?1??:c_vect( 52'b_0_00_1010_00001_10_0_0_0_0_0_0_0_0_00_0_01_00_000_0_10_0_0_00_00_0_0000_000_000);
                        8'b????_1???:c_vect( 52'b_1_00_1010_00000_10_0_0_0_0_0_0_0_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001);


         
                      endcase // ST

                4'b0100: //  RTS   
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_0_00_0000_00001_10_0_0_0_0_0_0_0_0_00_0_11_00_000_0_10_0_0_00_00_0_1001_000_000);
                        8'b????_??1?: c_vect( 52'b_0_00_0100_00010_00_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_0_0_00_00_0_0000_000_000);
                        8'b????_?1??: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_10_0_1010_000_000);
                        default: $stop;
                     endcase    // ST
                4'b0101: //  BSR d:8
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_1100_001_001);
                       default: $stop;
                      endcase // ST
                4'b0110: //  RTE  
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_0_00_0000_00001_10_0_0_0_0_0_0_0_0_00_0_11_00_000_0_10_0_0_00_00_0_1001_000_000);
                        8'b????_??1?:  c_vect( 52'b_0_00_0100_00010_00_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_0_0_00_00_0_0000_000_000);
                        8'b????_?1??: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_01_0_00_00_000_0_00_0_0_10_10_0_1010_000_000);
                        default: $stop;
                     endcase    // ST
                4'b1000: //  BCC  disp16
                      casex(ST)
                        8'b????_???1:   c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_11_0_1100_010_010);
                        default: $stop;
                      endcase // S
                4'b1001: //  JMP @Rn 
                      casex(ST)
                        8'b????_???1:  c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_0110_000_000);
                        default: $stop;
                      endcase // ST
                4'b1010: //  JMP @aa:24
                      casex(ST)
                        8'b????_???1:  c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1011_000_000);
                        default: $stop;
                      endcase // ST
                4'b1011: // JMP @@aa:8
                      casex(ST)
                         8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_1000_000_000);
                         8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                         8'b????_?1??: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1010_000_000);
                         default: $stop;
                       endcase // ST
                4'b1100://BSR   d:16
                      casex(ST)                       
                        8'b????_???1:c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_1100_010_010);
                        default: $stop;
                      endcase // ST
                4'b1101: //  JSR @Ern
                      casex(ST)
                        8'b????_???1:c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_0110_000_001);
                        default: $stop;
                      endcase // ST
                4'b1110: //JSR @aa:24
                      casex(ST)
                        8'b????_???1: c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_1011_000_010);
                        default: $stop;
                      endcase // ST
                4'b1111://JSR @aa:8
                      casex(ST)         
                        8'b????_???1: c_vect( 52'b_0_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_0000_000_001);
                        8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_1000_000_000);
                        8'b????_?1??: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);
                        8'b????_1???: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1010_000_000);
                        default: $stop;
                      endcase // ST
                default: begin $display("[11:8] undefined command error"); $stop;  end
              endcase // IR[11:8]


     endcase // inst

    end
end
// State Counter
        always @ (posedge clock) begin
                if (sync_reset ==1'b1)   ST<=8'h00;
                else if (end_state== 1'b1)    ST<=8'h00;
                else   begin
                                if (stop_state) ST<=ST;
                                else casex(ST)
                                                8'b0000_0000: ST<=8'b0000_0001;
                                                8'b????_???1: ST<=8'b0000_0010;
                                                8'b????_??1?: ST<=8'b0000_0100;
                                                8'b????_?1??: ST<=8'b0000_1000;
                                                8'b????_1???: ST<=8'b0001_0000;
                                                8'b???1_????: ST<=8'b0010_0000;
                                                8'b??1?_????: ST<=8'b0100_0000;
                                                8'b?1??_????: ST<=8'b1000_0000;
                                                8'b1???_????: ST<=8'b0000_0000;
                                        endcase
                    end                       
        end


// Bus State Control
        always @ (posedge clock) begin
                if (sync_reset) bus_state <=2'b00;
                else begin
                        case (bus_state)
                                2'b00: if (!sync_reset) bus_state<=2'b01;
                                2'b01: if (end_state)   bus_state<=2'b11;
                                2'b11: if (int_latch && end_state) bus_state<=2'b10;
                                2'b10: if (end_state)   bus_state<=2'b11;
                        endcase
                end
        end
// interrupt controller ; interim, timing is different from original.
        always @(posedge clock) begin
                if (sync_reset)    int_latch<=1'b0;
                else if (i_bit)    int_latch<=1'b0;
                else if (int_req2) int_latch<=1'b1;
//              else if (int_icb)  int_latch<=1'b1;                                
        end

        always @(posedge clock) begin
                if (sync_reset)    int_req2_ack<=1'b0;
                else if (int_latch && int_req2 && !int_req2_ack) int_req2_ack<=1'b1;
                else if (int_req2_ack && bus_state==2'b10 && ST==8'b0000_0100) int_req2_ack<=1'b0;
        end







endmodule