Advertisement
cr88192

prototype BJX1 instruction decoder. 2

Jan 18th, 2018
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VeriLog 37.46 KB | None | 0 0
  1. /*
  2. Instruction Word
  3.  15: 0, First Word
  4.  31:16, Second Word
  5.  */
  6.  
  7. `include "CoreDefs.v"
  8.  
  9. module DecOp3(
  10.     /* verilator lint_off UNUSED */
  11.     clk,
  12.     istrWord,
  13.     regCsFl,
  14.     idRegN,
  15.     idRegS,
  16.     idRegT,
  17.     idImm,
  18.     idStepPc,
  19.     idStepPc2,
  20.     idUCmd
  21.     );
  22.  
  23. parameter       decEnable64 = 0;        //Enable BJX1-64 ISA
  24. parameter       decEnable64A = 0;       //Enable BJX1-64A ISA
  25. parameter       decEnableBJX1 = 1;      //Enable BJX1 extensions
  26.  
  27. input           clk;        //clock
  28. input[47:0]     istrWord;   //source instruction word
  29. input[15:0]     regCsFl;    //current SR/FPSCR
  30.  
  31. output[6:0]     idRegN;
  32. output[6:0]     idRegS;
  33. output[6:0]     idRegT;
  34. output[31:0]    idImm;
  35. output[3:0]     idStepPc;
  36. output[3:0]     idStepPc2;
  37.  
  38. output[7:0]     idUCmd;
  39.  
  40.  
  41. reg         isOp32;     //opcode is 32-bit
  42. reg         isOp8E;     //8Ezz_zzzz
  43. reg         isOpCE;     //CEzz_zzzz
  44. reg         isOpXE;     //8Ezz_zzzz || CEzz_zzzz
  45.  
  46. reg         isOpCC0;    //CC0e_zzzz
  47. reg         isOpCC3;    //CC3e_zzzz
  48. reg[3:0]    opCCe;
  49. reg         opPsDQ;
  50. reg         opPwDQ;
  51. reg         opPlDQ;
  52. reg         opJQ;
  53. // reg      opMovFpr;
  54. reg         opUseBase16;    //op uses basic 16-bit decoder
  55.  
  56. reg[7:0] opPfxImm;
  57. reg[15:0] opCmdWord;
  58.  
  59. reg[6:0]        opRegN;
  60. reg[6:0]        opRegS;
  61. reg[6:0]        opRegT; //Index for mem ops
  62. reg[31:0]       opImm;  //Disp for mem ops
  63. reg[7:0]        opUCmd;
  64. reg[3:0]        opStepPc;
  65. reg[3:0]        opStepPc2;
  66.  
  67. assign  idRegN = opRegN;
  68. assign  idRegS = opRegS;
  69. assign  idRegT = opRegT;
  70. assign  idImm = opImm;
  71. assign  idUCmd = opUCmd;
  72. assign  idStepPc = opStepPc;
  73. assign  idStepPc2 = opStepPc2;
  74.  
  75.  
  76. // reg[6:0] tOpRegDflN;
  77. // reg[6:0] tOpRegDflM;
  78.  
  79. // reg          tOpDflRns;
  80. // reg          tOpDflRnst;
  81.  
  82. reg[4:0]    tOpDecXfrm;
  83. reg[3:0]    tOpDecXfrmZx;
  84.  
  85. reg[7:0]    tOpW2;
  86.  
  87.  
  88. reg[6:0]    opRegN_Dfl;
  89. reg[6:0]    opRegM_Dfl;
  90. reg[6:0]    opRegO_Dfl;
  91. reg[6:0]    opRegS_8E;
  92. reg[6:0]    opRegT_8E;
  93. reg[6:0]    opRegN_CEf;
  94. reg[6:0]    opRegM_CEf;
  95.  
  96. reg[6:0]    opRegN_CEe;
  97. reg[6:0]    opRegM_CEe;
  98. reg[6:0]    opRegO_CEe;
  99. reg[6:0]    opRegT_CEe;
  100.  
  101. reg[6:0]    opRegM_CR;
  102. reg[6:0]    opRegM_SR;
  103.  
  104. reg[6:0]    opRegN_FR;
  105. reg[6:0]    opRegM_FR;
  106. reg[6:0]    opRegO_FR;
  107. reg[6:0]    opRegS_FR;
  108. reg[6:0]    opRegT_FR;
  109.  
  110. reg[6:0]    opRegN_N3;
  111. reg[6:0]    opRegM_N3;
  112.  
  113. reg[31:0]   opImm_Zx4;
  114. reg[31:0]   opImm_Zx4_8E;
  115. reg[31:0]   opImm_Zx8;
  116. reg[31:0]   opImm_Sx8;
  117. reg[31:0]   opImm_Sx12;
  118. reg[31:0]   opImm_Sx8E;
  119. reg[31:0]   opImm_Zx8E;
  120. reg[31:0]   opImm_Nx8E;
  121. reg[31:0]   opImm_Sx16_8E;
  122. reg[31:0]   opImm_Sx20_8E;
  123. reg[31:0]   opImmM_Sx12_8E;
  124. reg[31:0]   opImmO_Sx12_8E;
  125.  
  126. reg[31:0]   opImm6_SxCE;
  127. reg[31:0]   opImm6_ZxCE;
  128. reg[31:0]   opImm6_NxCE;
  129.  
  130. reg         opIsRegN_FR;
  131. reg         opIsRegM_FR;
  132. reg         opIsRegS_FR;
  133. reg         opIsRegT_FR;
  134.  
  135. reg         opIsRegM_CR;
  136. reg         opIsRegM_SR;
  137.  
  138.  
  139. always @*
  140. begin
  141.  
  142.     opStepPc = 2;
  143.    
  144. //  opPfxImm=0;
  145. //  opCmdWord=0;
  146.  
  147.     opPfxImm=8'hXX;
  148.     opCmdWord=0;
  149.  
  150. //  opRegN=0;
  151. //  opRegS=0;
  152. //  opRegT=0;
  153.     opUCmd=UCMD_UDBRK;
  154.     opImm=0;
  155.  
  156.  
  157.     isOp32=0;
  158.     isOp8E=0;   isOpCE=0;   isOpXE=0;
  159.     isOpCC0=0;  isOpCC3=0;  opCCe=0;
  160. //  opMovFpr=0;
  161.     opUseBase16=1;
  162.  
  163.  
  164.     opRegN=UREG_ZZR;
  165.     opRegS=UREG_ZZR;
  166.     opRegT=UREG_ZZR;
  167.  
  168.     opIsRegN_FR=0;  opIsRegM_FR=0;
  169.     opIsRegS_FR=0;  opIsRegT_FR=0;
  170.     opIsRegM_CR=0;  opIsRegM_SR=0;
  171.  
  172.     tOpDecXfrm=UXFORM_CST;
  173.     tOpDecXfrmZx=UXFORMZX_SX;
  174.  
  175.     if(decEnable64 && regCsFl[5])
  176.     begin
  177.         opJQ=1;         opPsDQ=regCsFl[6];
  178.         opPwDQ=opPsDQ;  opPlDQ=0;
  179.     end else begin
  180.         opJQ=0;         opPsDQ=0;
  181.         opPwDQ=0;       opPlDQ=0;
  182.     end
  183.  
  184.     opCmdWord=istrWord[15:0];
  185.     tOpW2=istrWord[31:24];
  186.  
  187.     if(decEnableBJX1)
  188.     begin
  189.         case(istrWord[15:8])
  190.             8'h8A: begin
  191.                 isOp32=1;
  192.                 opCmdWord=istrWord[15:0];
  193.                 tOpW2=istrWord[47:40];
  194.                
  195.                 opImm[31:24]=istrWord[7]?8'hFF:8'h00;
  196.                 opImm[23:16]=istrWord[7:0];
  197.                 opImm[15: 0]=istrWord[31:16];
  198.  
  199.                 opRegN=UREG_R0;
  200.                 opUCmd=UCMD_MOV_RI;
  201.                 tOpDecXfrm=UXFORM_CST;
  202.                 opUseBase16=0;
  203.             end
  204.  
  205.             8'h8E: begin
  206.                 isOp32=1;
  207.                 isOp8E=1;
  208.                 isOpXE=1;
  209.                 opPfxImm=istrWord[7:0];
  210.                 opCmdWord=istrWord[31:16];
  211.                 tOpW2=istrWord[47:40];
  212.             end
  213.  
  214.             8'hCC: begin
  215.                 if(decEnable64A && opJQ)
  216.                 begin
  217.                     isOp32=1;
  218.                     isOpCE=0;
  219.                     isOpXE=0;
  220.                     isOpCC0 = (istrWord[7:4]==4'h0);
  221.                     isOpCC3 = (istrWord[7:4]==4'h3);
  222.                     opCCe=istrWord[3:0];
  223.                     opPsDQ=istrWord[3];
  224.                     opPwDQ=0;
  225.                     opPlDQ=opPsDQ;
  226.                     opPfxImm=0;
  227.                     opCmdWord=istrWord[31:16];
  228.                     tOpW2=istrWord[47:40];
  229.                 end
  230.             end
  231.  
  232.             8'hCE: begin
  233.                 if(decEnable64A && opJQ)
  234.                 begin
  235.                     isOp32=1;
  236.                     isOpCE=1;
  237.                     isOpXE=1;
  238.                     opPfxImm=istrWord[7:0];
  239.                     opCmdWord=istrWord[31:16];
  240.                     tOpW2=istrWord[47:40];
  241.                     opPsDQ=istrWord[7];
  242.                     opPwDQ=0;
  243.                     opPlDQ=0;
  244.                 end
  245.             end
  246.  
  247.             default: begin
  248.             end
  249.         endcase
  250.  
  251.         if(isOp32)
  252.             opStepPc = 4;
  253.     end
  254.  
  255.     opStepPc2 = 2;
  256.     if(decEnableBJX1)
  257.     begin
  258.         case(tOpW2)
  259.             8'h8A:      opStepPc2 = 4;
  260.             8'h8C:      opStepPc2 = 4;
  261.             8'h8E:      opStepPc2 = 4;
  262.  
  263.             8'hCC:      opStepPc2 = (opJQ && decEnable64A) ? 4 : 2;
  264.             8'hCE:      opStepPc2 = (opJQ && decEnable64A) ? 4 : 2;
  265.  
  266.             default:    opStepPc2 = 2;
  267.         endcase
  268.     end
  269.  
  270.     if(decEnable64A)
  271.     begin
  272.         if(isOpCC3)     /* BJX1-64A */
  273.         begin
  274.             opUseBase16=0;
  275.             casez(opCmdWord[15:12])
  276.                 4'h0: opUCmd=UCMD_ALU_ADD;
  277.                 4'h1: opUCmd=UCMD_ALU_SUB;
  278.                 4'h2: opUCmd=UCMD_ALU_MUL;
  279.                 4'h3: opUCmd=UCMD_ALU_AND;
  280.                 4'h4: opUCmd=UCMD_ALU_OR;
  281.                 4'h5: opUCmd=UCMD_ALU_XOR;
  282.  
  283.                 4'h6: opUCmd=opCCe[3] ? UCMD_ALU_SHLDQ  : UCMD_ALU_SHLD;
  284.                 4'h7: opUCmd=opCCe[3] ? UCMD_ALU_SHLDRQ : UCMD_ALU_SHLDR;
  285.                 4'h8: opUCmd=opCCe[3] ? UCMD_ALU_SHADQ  : UCMD_ALU_SHAD;
  286.                 4'h9: opUCmd=opCCe[3] ? UCMD_ALU_SHADRQ : UCMD_ALU_SHADR;
  287.  
  288.                 4'hC: opUCmd=UCMD_FPU_ADD;
  289.                 4'hD: opUCmd=UCMD_FPU_SUB;
  290.                 4'hE: opUCmd=UCMD_FPU_MUL;
  291.                
  292.                 default: begin end
  293.             endcase
  294.  
  295.             if(opCmdWord[15:14]==2'h3)
  296.             begin
  297.                 opRegN={2'h2, opCCe[2], opCmdWord[11:8]};
  298.                 opRegS={2'h2, opCCe[1], opCmdWord[ 7:4]};
  299.                 opRegT={2'h2, opCCe[0], opCmdWord[ 3:0]};
  300.             end
  301.             else
  302.             begin
  303.                 opRegN={2'h0, opCCe[2], opCmdWord[11:8]};
  304.                 opRegS={2'h0, opCCe[1], opCmdWord[ 7:4]};
  305.                 opRegT={2'h0, opCCe[0], opCmdWord[ 3:0]};
  306.             end
  307.             tOpDecXfrm=UXFORM_CST;
  308.         end
  309.     end
  310.  
  311.     if(opUseBase16)
  312.         casez(opCmdWord[15:0])
  313.  
  314.         16'h0zz0: begin
  315.             /* Unimplemented, 2A */
  316.         end
  317.  
  318.         16'h0zz1: begin
  319.             /* Unimplemented, 2A */
  320.         end
  321.            
  322.         16'h0zz2: begin     //0xx2, STC
  323.             opUCmd=UCMD_MOV_RR;     tOpDecXfrm=UXFORM_ARI_NS;
  324.             tOpDecXfrmZx=UXFORMZX_CR;
  325.         end
  326.  
  327.         16'h0zz4: begin     //0xx4
  328.             opUCmd=UCMD_MOVB_RM;    tOpDecXfrm=UXFORM_MOV_NSO;
  329.         end
  330.  
  331.         16'h0zz5: begin     //0xx5
  332.             opUCmd = opPwDQ ? UCMD_MOVQ_RM : UCMD_MOVW_RM;
  333.             tOpDecXfrm=UXFORM_MOV_NSO;
  334.         end
  335.  
  336.         16'h0zz6: begin     //0xx6
  337.             opUCmd = opPlDQ ? UCMD_MOVQ_RM : UCMD_MOVL_RM;
  338.             tOpDecXfrm=UXFORM_MOV_NSO;
  339.         end
  340.  
  341.         16'h0zz7: begin     //0xx7
  342.             if(isOpXE)
  343.             begin
  344.                 opUCmd=UCMD_MOVQ_RM;    tOpDecXfrm=UXFORM_MOV_NSO;
  345.             end
  346.             else
  347.             begin
  348.                 opUCmd=UCMD_ALU_DMULS;  tOpDecXfrm=UXFORM_ARI_ST;
  349.             end
  350.         end
  351.  
  352.         /* 0xx8 */
  353.             16'h0z08: begin     //0x08
  354.                 opUCmd=UCMD_ALU_SPOP;
  355.                 opImm[7:0]=UCMDP_ALU_CLRT;
  356.                 tOpDecXfrm=UXFORM_CST;
  357.             end
  358.             16'h0z18: begin     //0x18
  359.                 opUCmd=UCMD_ALU_SPOP;
  360.                 opImm[7:0]=UCMDP_ALU_SETT;
  361.                 tOpDecXfrm=UXFORM_CST;
  362.             end
  363.             16'h0z28: begin     //0x28
  364.                 opUCmd=UCMD_ALU_SPOP;
  365.                 opImm[7:0]=UCMDP_ALU_CLRMAC;
  366.                 tOpDecXfrm=UXFORM_CST;
  367.             end
  368.             16'h0z38: begin     //0x38
  369.                 opUCmd=UCMD_ALU_SPOP;
  370.                 opImm[7:0]=UCMDP_ALU_LDTLB;
  371.                 tOpDecXfrm=UXFORM_CST;
  372.             end
  373.             16'h0z48: begin     //0x48
  374.                 opUCmd=UCMD_ALU_SPOP;
  375.                 opImm[7:0]=UCMDP_ALU_CLRS;
  376.                 tOpDecXfrm=UXFORM_CST;
  377.             end
  378.             16'h0z58: begin     //0x58
  379.                 opUCmd=UCMD_ALU_SPOP;
  380.                 opImm[7:0]=UCMDP_ALU_SETS;
  381.                 tOpDecXfrm=UXFORM_CST;
  382.             end
  383.             16'h0z68: begin     //0x68
  384.                 opUCmd=UCMD_ALU_SPOP;
  385.                 opImm[7:0]=UCMDP_ALU_NOTT;
  386.                 tOpDecXfrm=UXFORM_CST;
  387.             end
  388.  
  389.         /* 0xx9 */
  390.             16'h0z09: begin     //0x09
  391.                 opUCmd=UCMD_NONE;       tOpDecXfrm=UXFORM_Z;
  392.             end
  393.             16'h0z19: begin     //0x19
  394.                 opUCmd=UCMD_ALU_SPOP;
  395.                 opImm[7:0]=UCMDP_ALU_DIV0U;
  396.                 tOpDecXfrm=UXFORM_CST;
  397.             end
  398.             16'h0z29: begin     //0x29
  399.                 opUCmd=UCMD_ALU_MOVT;   tOpDecXfrm=UXFORM_N;
  400.             end
  401.             16'h0z39: begin     //0x39
  402.                 opUCmd=UCMD_ALU_MOVRT;  tOpDecXfrm=UXFORM_N;
  403.             end
  404.  
  405.         16'h0zzA: begin     //0xxA
  406.             opUCmd=UCMD_MOV_RR;     tOpDecXfrm=UXFORM_ARI_NS;
  407.             tOpDecXfrmZx=UXFORMZX_SR;
  408.         end
  409.  
  410.         /* 0xxB */
  411.             16'h0z0B: begin     //0z0B
  412.                 opUCmd=UCMD_RTS;        tOpDecXfrm=UXFORM_Z;
  413.             end
  414.  
  415.             16'h0z1B: begin     //0x1B
  416.                 opUCmd=UCMD_ALU_SPOP;
  417.                 opImm[7:0]=UCMDP_ALU_SLEEP;
  418.                 tOpDecXfrm=UXFORM_CST;
  419.             end
  420.  
  421.             16'h0z2B: begin     //0z2B
  422.                 opUCmd=UCMD_RTE;        tOpDecXfrm=UXFORM_Z;
  423.             end
  424.  
  425.             16'h0z3B: begin     //0z3B
  426.                 opUCmd=UCMD_UDBRK;      tOpDecXfrm=UXFORM_Z;
  427.                 opImm=1;
  428.                 if(opCmdWord[11:8]==4'hF)
  429.                 begin
  430.                     opUCmd=UCMD_NONE;
  431.                     opStepPc=0;
  432.                 end
  433.             end
  434.  
  435.             16'h0z6B: begin     //0z6B
  436.                 opUCmd=UCMD_RTSN;       tOpDecXfrm=UXFORM_Z;
  437.             end
  438.  
  439.         16'h0zzC: begin     //0xxC
  440.             opUCmd=UCMD_MOVB_MR;    tOpDecXfrm=UXFORM_MOV_NSO;
  441.         end
  442.  
  443.         16'h0zzD: begin     //0xxD
  444.             opUCmd = opPwDQ ? UCMD_MOVQ_MR : UCMD_MOVW_MR;
  445.             tOpDecXfrm=UXFORM_MOV_NSO;
  446.         end
  447.  
  448.         16'h0zzE: begin     //0xxE
  449.             opUCmd = opPlDQ ? UCMD_MOVQ_MR : UCMD_MOVL_MR;
  450.             tOpDecXfrm=UXFORM_MOV_NSO;
  451.         end
  452.  
  453.         16'h0zzF: begin     //0xxF
  454.             //MAC.L
  455.         end
  456.  
  457.         16'h1zzz: begin     //1nmd, MOV.L Rm, @(Rn, disp4)
  458.             opUCmd =  opPlDQ ? UCMD_MOVQ_RM : UCMD_MOVL_RM;
  459.             tOpDecXfrm=UXFORM_MOV_NSJ;
  460.         end
  461.  
  462.         16'h2zz0: begin     //2xx0, MOV.B Rm, @Rn
  463.             opUCmd=UCMD_MOVB_RM;    tOpDecXfrm=UXFORM_MOV_NS;
  464.         end
  465.         16'h2zz1: begin     //2xx1, MOV.W Rm, @Rn
  466.             opUCmd = opPwDQ ? UCMD_MOVQ_RM : UCMD_MOVW_RM;
  467.             tOpDecXfrm=UXFORM_MOV_NS;
  468.         end
  469.         16'h2zz2: begin     //2xx2, MOV.L Rm, @Rn
  470.             opUCmd = opPlDQ ? UCMD_MOVQ_RM : UCMD_MOVL_RM;
  471.             tOpDecXfrm=UXFORM_MOV_NS;
  472.         end
  473.         16'h2zz3: begin     //2xx3, CAS.L Rm, Rn, @R0
  474.             opUCmd=UCMD_CASL;       tOpDecXfrm=UXFORM_MOV_NSO;
  475.         end
  476.         16'h2zz4: begin     //2xx4, MOV.B @Rm, Rn
  477.             opUCmd=UCMD_MOVB_RM;    tOpDecXfrm=UXFORM_MOV_NSDEC;
  478.             tOpDecXfrmZx=UXFORMZX_PDEC;
  479.         end
  480.         16'h2zz5: begin     //2xx5, MOV.W @Rm, Rn
  481.             opUCmd = opPwDQ ? UCMD_MOVQ_RM : UCMD_MOVW_RM;
  482.             tOpDecXfrm=UXFORM_MOV_NSDEC;
  483.             tOpDecXfrmZx=UXFORMZX_PDEC;
  484.         end
  485.         16'h2zz6: begin     //2xx6, MOV.L @Rm, Rn
  486.             opUCmd = opPlDQ ? UCMD_MOVQ_RM : UCMD_MOVL_RM;
  487.             tOpDecXfrm=UXFORM_MOV_NSDEC;
  488.             tOpDecXfrmZx=UXFORMZX_PDEC;
  489.         end
  490.         16'h2zz7: begin     //2xx7, DIV0S Rm, Rn
  491.             opUCmd=UCMD_ALU_DIV0S;  tOpDecXfrm=UXFORM_ARI_ST;
  492.         end
  493.         16'h2zz8: begin     //2xx8, TST Rm, Rn
  494.             opUCmd=UCMD_CMP_TST;    tOpDecXfrm=UXFORM_CMP_ST;
  495.             tOpDecXfrmZx=UXFORMZX_ZX;
  496.         end
  497.         16'h2zz9: begin     //2xx9, AND Rm, Rn
  498.             opUCmd=UCMD_ALU_AND;    tOpDecXfrm=UXFORM_ARI_NST;
  499.             tOpDecXfrmZx=UXFORMZX_ZX;
  500.         end
  501.         16'h2zzA: begin     //2xxA, XOR Rm, Rn
  502.             opUCmd=UCMD_ALU_XOR;    tOpDecXfrm=UXFORM_ARI_NST;
  503.             tOpDecXfrmZx=UXFORMZX_ZX;
  504.         end
  505.         16'h2zzB: begin     //2xxB, OR Rm, Rn
  506.             opUCmd=UCMD_ALU_OR;     tOpDecXfrm=UXFORM_ARI_NST;
  507.             tOpDecXfrmZx=UXFORMZX_ZX;
  508.         end
  509.         16'h2zzC: begin     //2xxC, CMPSTR Rm, Rn
  510.             opUCmd=UCMD_ALU_CMPSTR; tOpDecXfrm=UXFORM_ARI_NST;
  511.         end
  512.         16'h2zzD: begin     //2xxD, XTRCT Rm, Rn
  513.             opUCmd=UCMD_ALU_XTRCT;  tOpDecXfrm=UXFORM_ARI_NST;
  514.         end
  515.         16'h2zzE: begin     //2xxE, MULU.W Rm, Rn
  516.             opUCmd=UCMD_ALU_MULUW;  tOpDecXfrm=UXFORM_ARI_ST;
  517.         end
  518.         16'h2zzF: begin     //2xxF, MULS.W Rm, Rn
  519.             opUCmd=UCMD_ALU_MULSW;  tOpDecXfrm=UXFORM_ARI_ST;
  520.         end
  521.  
  522.         16'h3zz0: begin     //3xx0, CMP/EQ Rm, Rn
  523.             opUCmd=opPsDQ ? UCMD_CMPQ_EQ : UCMD_CMP_EQ;
  524.             tOpDecXfrm=UXFORM_CMP_ST;
  525.         end
  526.         16'h3zz1: begin     //3xx1
  527.         end
  528.         16'h3zz2: begin     //3xx2, CMP/HS Rm, Rn
  529.             opUCmd=opPsDQ ? UCMD_CMPQ_HS : UCMD_CMP_HS;
  530.             tOpDecXfrm=UXFORM_CMP_ST;
  531.         end
  532.         16'h3zz3: begin     //3xx3, CMP/GE Rm, Rn
  533.             opUCmd=opPsDQ ? UCMD_CMPQ_GE : UCMD_CMP_GE;
  534.             tOpDecXfrm=UXFORM_CMP_ST;
  535.         end
  536.         16'h3zz4: begin     //3xx4, DIV1 Rm, Rn
  537.             opUCmd=UCMD_ALU_DIV1;       tOpDecXfrm=UXFORM_ARI_NST;
  538.         end
  539.         16'h3zz5: begin     //3xx5, DMULU.L Rm, Rn
  540.             opUCmd=UCMD_ALU_DMULU;  tOpDecXfrm=UXFORM_ARI_ST;
  541.         end
  542.         16'h3zz6: begin     //3xx6, CMP/HI Rm, Rn
  543.             opUCmd=opPsDQ ? UCMD_CMPQ_HI : UCMD_CMP_HI;
  544.             tOpDecXfrm=UXFORM_CMP_ST;
  545.         end
  546.         16'h3zz7: begin     //3xx7, CMP/GT Rm, Rn
  547.             opUCmd=opPsDQ ? UCMD_CMPQ_GT : UCMD_CMP_GT;
  548.             tOpDecXfrm=UXFORM_CMP_ST;
  549.         end
  550.         16'h3zz8: begin     //3xx8, SUB Rm, Rn
  551.             opUCmd=UCMD_ALU_SUB;    tOpDecXfrm=UXFORM_ARI_NST;
  552.             tOpDecXfrmZx=UXFORMZX_ZX;
  553.         end
  554.         16'h3zz9: begin     //3xx9
  555.         end
  556.         16'h3zzA: begin     //3xxA, SUBC Rm, Rn
  557.             opUCmd=UCMD_ALU_SUBC;   tOpDecXfrm=UXFORM_ARI_NST;
  558.             tOpDecXfrmZx=UXFORMZX_ZX;
  559.         end
  560.         16'h3zzB: begin     //3xxB, SUBV Rm, Rn
  561.             opUCmd=UCMD_ALU_SUBV;   tOpDecXfrm=UXFORM_ARI_NST;
  562.             tOpDecXfrmZx=UXFORMZX_ZX;
  563.         end
  564.         16'h3zzC: begin     //3xxC, ADD Rm, Rn
  565.             opUCmd=UCMD_ALU_ADD;    tOpDecXfrm=UXFORM_ARI_NST;
  566.             tOpDecXfrmZx=UXFORMZX_ZX;
  567.         end
  568.         16'h3zzD: begin     //3xxD, DMULS.L Rm, Rn
  569.             opUCmd=UCMD_ALU_DMULS;  tOpDecXfrm=UXFORM_ARI_ST;
  570.         end
  571.         16'h3zzE: begin     //3xxE, ADDC Rm, Rn
  572.             opUCmd=UCMD_ALU_ADDC;   tOpDecXfrm=UXFORM_ARI_NST;
  573.         end
  574.         16'h3zzF: begin     //3xxF, ADDV Rm, Rn
  575.             opUCmd=UCMD_ALU_ADDV;   tOpDecXfrm=UXFORM_ARI_NST;
  576.         end
  577.  
  578.         /* 4xx0 */
  579.             16'h4z00: begin     //4x00
  580.                 opUCmd=UCMD_ALU_SHLL;   tOpDecXfrm=UXFORM_N;
  581.             end
  582.             16'h4z10: begin     //4x10
  583.                 opUCmd=UCMD_ALU_DT;     tOpDecXfrm=UXFORM_N;
  584.             end
  585.             16'h4z20: begin     //4x20
  586.                 opUCmd=UCMD_ALU_SHAL;   tOpDecXfrm=UXFORM_N;
  587.             end
  588.  
  589.         /* 4xx1 */
  590.             16'h4z01: begin     //4x01
  591.                 opUCmd=UCMD_ALU_SHLR;   tOpDecXfrm=UXFORM_N;
  592.             end
  593.             16'h4z11: begin     //4x11
  594.                 opUCmd=opPsDQ ? UCMD_CMPQ_GE : UCMD_CMP_GE;
  595.                 tOpDecXfrm=UXFORM_M;
  596.             end
  597.             16'h4z21: begin     //4x21
  598.                 opUCmd=UCMD_ALU_SHAR;   tOpDecXfrm=UXFORM_N;
  599.             end
  600.  
  601.         16'h4zz2: begin     //4xx2
  602.             opUCmd = opJQ ? UCMD_MOVQ_RM : UCMD_MOVL_RM;
  603.             tOpDecXfrm=UXFORM_MOV_NSDEC;
  604.             tOpDecXfrmZx=UXFORMZX_SR;
  605.         end
  606.         16'h4zz3: begin     //4xx3
  607.             if(isOpXE)  begin
  608.                 case(opCmdWord[7:4])
  609.                 4'h0: begin
  610.                     opUCmd=UCMD_ALU_ADD;    tOpDecXfrm=UXFORM_NST_8E;
  611.                 end
  612.                 4'h1: begin
  613.                     opUCmd=UCMD_ALU_SUB;    tOpDecXfrm=UXFORM_NST_8E;
  614.                 end
  615.                 4'h2: begin
  616.                     opUCmd=UCMD_ALU_MUL;    tOpDecXfrm=UXFORM_NST_8E;
  617.                 end
  618.                 4'h3: begin
  619.                     opUCmd=UCMD_ALU_AND;    tOpDecXfrm=UXFORM_NST_8E;
  620.                 end
  621.                 4'h4: begin
  622.                     opUCmd=UCMD_ALU_OR;     tOpDecXfrm=UXFORM_NST_8E;
  623.                 end
  624.                 4'h5: begin
  625.                     opUCmd=UCMD_ALU_XOR;    tOpDecXfrm=UXFORM_NST_8E;
  626.                 end
  627.                 4'h6: begin
  628.                     opUCmd=UCMD_ALU_SHLD;   tOpDecXfrm=UXFORM_NST_8E;
  629.                 end
  630.                 4'h7: begin
  631.                     opUCmd=UCMD_ALU_SHLDR;  tOpDecXfrm=UXFORM_NST_8E;
  632.                 end
  633.                 4'h8: begin
  634.                     opUCmd=UCMD_ALU_SHAD;   tOpDecXfrm=UXFORM_NST_8E;
  635.                 end
  636.                 4'h9: begin
  637.                     opUCmd=UCMD_ALU_SHADR;  tOpDecXfrm=UXFORM_NST_8E;
  638.                 end
  639.  
  640.                 4'hC: begin
  641.                     opUCmd=UCMD_FPU_ADD;    tOpDecXfrm=UXFORM_NST_8E;
  642. //                  opIsRegN_FR=1;  opIsRegS_FR=1;  opIsRegT_FR=1;
  643.                     tOpDecXfrmZx=UXFORMZX_FF;
  644.                 end
  645.                 4'hD: begin
  646.                     opUCmd=UCMD_FPU_SUB;    tOpDecXfrm=UXFORM_NST_8E;
  647. //                  opIsRegN_FR=1;  opIsRegS_FR=1;  opIsRegT_FR=1;
  648.                     tOpDecXfrmZx=UXFORMZX_FF;
  649.                 end
  650.                 4'hE: begin
  651.                     opUCmd=UCMD_FPU_MUL;    tOpDecXfrm=UXFORM_NST_8E;
  652. //                  opIsRegN_FR=1;  opIsRegS_FR=1;  opIsRegT_FR=1;
  653.                     tOpDecXfrmZx=UXFORMZX_FF;
  654.                 end
  655.  
  656.                 default: begin end
  657.  
  658.                 endcase
  659.             end
  660.             else
  661.             begin
  662.                 opUCmd = opJQ ? UCMD_MOVQ_RM : UCMD_MOVL_RM;
  663.                 tOpDecXfrm=UXFORM_MOV_NSDEC;
  664.                 tOpDecXfrmZx=UXFORMZX_CR;
  665.             end
  666.         end
  667.  
  668.         /* 4xx4 */
  669.             16'h4z04: begin     //4x00
  670.                 opUCmd=UCMD_ALU_ROTL;   tOpDecXfrm=UXFORM_N;
  671.             end
  672.             16'h4z14: begin     //4x10
  673. //              opUCmd=UCMD_ALU_DT;     tOpDecXfrm=UXFORM_N;
  674.             end
  675.             16'h4z24: begin     //4x20
  676.                 opUCmd=UCMD_ALU_ROTCL;  tOpDecXfrm=UXFORM_N;
  677.             end
  678.  
  679.         /* 4xx5 */
  680.             16'h4z05: begin     //4x01
  681.                 opUCmd=UCMD_ALU_ROTR;   tOpDecXfrm=UXFORM_N;
  682.             end
  683.             16'h4z15: begin     //4x11
  684.                 opUCmd=opPsDQ ? UCMD_CMPQ_GT : UCMD_CMP_GT;
  685.                 tOpDecXfrm=UXFORM_M;
  686.             end
  687.             16'h4z25: begin     //4x21
  688.                 opUCmd=UCMD_ALU_ROTCR;  tOpDecXfrm=UXFORM_N;
  689.             end
  690.  
  691.         16'h4zz6: begin     //4xx6
  692.             opUCmd = opJQ ? UCMD_MOVQ_MR : UCMD_MOVL_MR;
  693.             tOpDecXfrm=UXFORM_MOV_NSDEC;
  694.             tOpDecXfrmZx=UXFORMZX_RS;
  695.         end
  696.         16'h4zz7: begin     //4xx7
  697.             opUCmd = opJQ ? UCMD_MOVQ_RM : UCMD_MOVL_MR;
  698.             tOpDecXfrm=UXFORM_MOV_NSDEC;
  699.             tOpDecXfrmZx=UXFORMZX_RC;
  700.         end
  701.  
  702.         /* 4xx8 */
  703.             16'h4z08: begin     //4x08
  704.                 opUCmd=UCMD_ALU_SHLD;   tOpDecXfrm=UXFORM_N_C;
  705.                 opImm=2;
  706.             end
  707.             16'h4z18: begin     //4x18
  708.                 opUCmd=UCMD_ALU_SHLD;   tOpDecXfrm=UXFORM_N_C;
  709.                 opImm=8;
  710.             end
  711.             16'h4z28: begin     //4x28
  712.                 opUCmd=UCMD_ALU_SHLD;   tOpDecXfrm=UXFORM_N_C;
  713.                 opImm=16;
  714.             end
  715.  
  716.         /* 4xx9 */
  717.             16'h4z09: begin     //4x09
  718.                 opUCmd=UCMD_ALU_SHLD;   tOpDecXfrm=UXFORM_N_C;
  719.                 opImm=-2;
  720.             end
  721.             16'h4z19: begin     //4x19
  722.                 opUCmd=UCMD_ALU_SHLD;   tOpDecXfrm=UXFORM_N_C;
  723.                 opImm=-8;
  724.             end
  725.             16'h4z29: begin     //4x29
  726.                 opUCmd=UCMD_ALU_SHLD;   tOpDecXfrm=UXFORM_N_C;
  727.                 opImm=-16;
  728.             end
  729.  
  730.         16'h4zzA: begin     //4xxA, LDS
  731.             opUCmd=UCMD_MOV_RR;     tOpDecXfrm=UXFORM_ARI_NS;
  732.             tOpDecXfrmZx=UXFORMZX_RS;
  733.         end
  734.  
  735.         /* 4xxB */
  736.             16'h4z0B: begin
  737.                 opUCmd=UCMD_JSR;    tOpDecXfrm=UXFORM_M;
  738.             end
  739.  
  740.             16'h4z2B: begin
  741.                 opUCmd=UCMD_JMP;    tOpDecXfrm=UXFORM_M;
  742.             end
  743.             16'h4z3B: begin
  744.             end
  745.             16'h4z4B: begin
  746.                 opUCmd=UCMD_JSRN;   tOpDecXfrm=UXFORM_M;
  747.             end
  748.  
  749.         16'h4zzC: begin     //4xxC
  750.             opUCmd=opPsDQ ? UCMD_ALU_SHADQ : UCMD_ALU_SHAD;
  751.             tOpDecXfrm=UXFORM_ARI_NST;
  752.             tOpDecXfrmZx=UXFORMZX_SX;
  753.         end
  754.         16'h4zzD: begin     //4xxD
  755.             opUCmd=opPsDQ ? UCMD_ALU_SHLDQ : UCMD_ALU_SHLD;
  756.             tOpDecXfrm=UXFORM_ARI_NST;
  757.             tOpDecXfrmZx=UXFORMZX_SX;
  758.         end
  759.         16'h4zzE: begin     //4xxE, LDC
  760.             if(isOpXE)  begin
  761.                 case(opCmdWord[7:4])
  762.                 4'h0: begin
  763.                     opUCmd=UCMD_MOVUB_MR;   tOpDecXfrm=UXFORM_NST_8E;
  764.                 end
  765.                 4'h1: begin
  766.                     opUCmd=UCMD_MOVUW_MR;   tOpDecXfrm=UXFORM_NST_8E;
  767.                 end
  768.  
  769.                 default: begin end
  770.                 endcase
  771.             end
  772.             else
  773.             begin
  774.                 opUCmd=UCMD_MOV_RR;     tOpDecXfrm=UXFORM_ARI_NS;
  775.                 tOpDecXfrmZx=UXFORMZX_RC;
  776.             end
  777.         end
  778.  
  779.         16'h5zzz: begin     //5xxx
  780.             opUCmd = opPlDQ ? UCMD_MOVQ_MR : UCMD_MOVL_MR;
  781.             tOpDecXfrm=UXFORM_MOV_NSJ;
  782.         end
  783.  
  784.         16'h6zz0: begin     //6xx0
  785.             opUCmd=UCMD_MOVB_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  786.         end
  787.         16'h6zz1: begin     //6xx1
  788.             opUCmd = opPwDQ ? UCMD_MOVQ_MR : UCMD_MOVW_MR;
  789.             tOpDecXfrm=UXFORM_MOV_NS;
  790.         end
  791.         16'h6zz2: begin     //6xx2
  792.             opUCmd = opPlDQ ? UCMD_MOVQ_MR : UCMD_MOVL_MR;
  793.             tOpDecXfrm=UXFORM_MOV_NS;
  794.         end
  795.         16'h6zz3: begin     //6xx3
  796.             if(isOpXE)  begin
  797.                 opUCmd=UCMD_MOVQ_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  798.             end else begin
  799.                 opUCmd=UCMD_MOV_RR;     tOpDecXfrm=UXFORM_ARI_NS;
  800.             end
  801.         end
  802.         16'h6zz4: begin     //6xx4
  803.             if(isOpXE) begin
  804.                 opUCmd=UCMD_LEAB_MR;    tOpDecXfrm=UXFORM_MOV_NSO;
  805.             end else begin
  806.                 opUCmd=UCMD_MOVB_MR;    tOpDecXfrm=UXFORM_MOV_NSDEC;
  807.                 tOpDecXfrmZx=UXFORMZX_PINC;
  808.             end
  809.         end
  810.         16'h6zz5: begin     //6xx5
  811.             if(isOpXE)  begin
  812.                 opUCmd=UCMD_LEAW_MR;    tOpDecXfrm=UXFORM_MOV_NSO;
  813.             end else begin
  814.                 opUCmd = opPwDQ ? UCMD_MOVQ_MR : UCMD_MOVW_MR;
  815.                 tOpDecXfrm=UXFORM_MOV_NSDEC;
  816.                 tOpDecXfrmZx=UXFORMZX_PINC;
  817.             end
  818.         end
  819.         16'h6zz6: begin     //6xx6
  820.             if(isOpXE)  begin
  821.                 opUCmd=UCMD_LEAL_MR;    tOpDecXfrm=UXFORM_MOV_NSO;
  822.             end else begin
  823.                 opUCmd =  opPlDQ ? UCMD_MOVQ_MR : UCMD_MOVL_MR;
  824.                 tOpDecXfrm=UXFORM_MOV_NSDEC;
  825.                 tOpDecXfrmZx=UXFORMZX_PINC;
  826.             end
  827.         end
  828.         16'h6zz7: begin
  829.             if(isOpXE)  begin
  830.                 opUCmd=UCMD_LEAQ_MR;    tOpDecXfrm=UXFORM_MOV_NSO;
  831.             end else begin
  832.                 opUCmd=UCMD_ALU_NOT;    tOpDecXfrm=UXFORM_ARI_NS;
  833.             end
  834.         end
  835.         16'h6zz8: begin
  836.             if(isOpXE)  begin
  837.                 opUCmd=UCMD_LEAB_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  838.             end else begin
  839.                 opUCmd=UCMD_ALU_SWAPB;  tOpDecXfrm=UXFORM_ARI_NS;
  840.             end
  841.         end
  842.         16'h6zz9: begin
  843.             if(isOpXE)  begin
  844.                 opUCmd=UCMD_LEAW_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  845.             end else begin
  846.                 opUCmd=UCMD_ALU_SWAPW;  tOpDecXfrm=UXFORM_ARI_NS;
  847.             end
  848.         end
  849.         16'h6zzA: begin
  850.             if(isOpXE)  begin
  851.                 opUCmd=UCMD_LEAL_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  852.             end else begin
  853.                 opUCmd=UCMD_ALU_NEGC;   tOpDecXfrm=UXFORM_ARI_NS;
  854.             end
  855.         end
  856.         16'h6zzB: begin
  857.             if(isOpXE)  begin
  858.                 opUCmd=UCMD_LEAQ_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  859.             end else begin
  860.                 opUCmd=UCMD_ALU_NEG;    tOpDecXfrm=UXFORM_ARI_NS;
  861.             end
  862.         end
  863.         16'h6zzC: begin
  864.             if(isOpXE)  begin
  865.                 opUCmd=UCMD_MOVUB_MR;   tOpDecXfrm=UXFORM_MOV_NS;
  866.             end else begin
  867.                 opUCmd=UCMD_ALU_EXTUB;  tOpDecXfrm=UXFORM_ARI_NS;
  868.             end
  869.         end
  870.         16'h6zzD: begin
  871.             if(isOpXE)  begin
  872.                 opUCmd=UCMD_MOVUW_MR;   tOpDecXfrm=UXFORM_MOV_NS;
  873.             end else begin
  874.                 opUCmd=UCMD_ALU_EXTUW;  tOpDecXfrm=UXFORM_ARI_NS;
  875.             end
  876.         end
  877.         16'h6zzE: begin
  878.             if(isOpXE)  begin
  879.                 opUCmd=UCMD_MOVUL_MR;   tOpDecXfrm=UXFORM_MOV_NS;
  880.             end else begin
  881.                 opUCmd=UCMD_ALU_EXTSB;  tOpDecXfrm=UXFORM_ARI_NS;
  882.             end
  883.         end
  884.         16'h6zzF: begin
  885.             if(isOpXE)  begin
  886.                 opUCmd=UCMD_MOVQ_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  887.             end else begin
  888.                 opUCmd=UCMD_ALU_EXTSW;  tOpDecXfrm=UXFORM_ARI_NS;
  889.             end
  890.         end
  891.  
  892.         16'h7zzz: begin     //7xxx
  893.             opUCmd=UCMD_ALU_ADD;    tOpDecXfrm=UXFORM_ARI_NNI;
  894.         end
  895.  
  896.         16'h80zz: begin     //80xx
  897.             opUCmd=UCMD_MOVB_RM;
  898.             tOpDecXfrm=UXFORM_MOV_SP4RN;
  899.             tOpDecXfrmZx=UXFORMZX_RM0;
  900.         end
  901.         16'h81zz: begin     //81xx
  902.             opUCmd=UCMD_MOVW_RM;
  903.             tOpDecXfrm=UXFORM_MOV_SP4RN;
  904.             tOpDecXfrmZx=UXFORMZX_RM0;
  905.         end
  906.  
  907.         16'h82zz: begin     //82xx
  908.             opUCmd=UCMD_BRAN;       tOpDecXfrm=UXFORM_BR_D8;
  909.         end
  910.         16'h83zz: begin     //83xx
  911.             if(isOpXE)  begin
  912.                 opUCmd=UCMD_BSRN;   tOpDecXfrm=UXFORM_BR_D8;
  913.             end else begin
  914.                 tOpDecXfrm=UXFORM_MOV_SP4RN;
  915.                 if(opCmdWord[7])
  916.                 begin
  917.                     opUCmd=UCMD_MOVL_MR;
  918.                     tOpDecXfrmZx=UXFORMZX_MR3;
  919.                 end else begin
  920.                     opUCmd=UCMD_MOVL_RM;
  921.                     tOpDecXfrmZx=UXFORMZX_RM3;
  922.                 end
  923.             end
  924.         end
  925.  
  926.         16'h84zz: begin     //84xx
  927.             opUCmd=UCMD_MOVB_MR;
  928.             tOpDecXfrm=UXFORM_MOV_SP4RN;
  929.             tOpDecXfrmZx=UXFORMZX_MR0;
  930.         end
  931.         16'h85zz: begin     //85xx
  932.             opUCmd=UCMD_MOVW_MR;
  933.             tOpDecXfrm=UXFORM_MOV_SP4RN;
  934.             tOpDecXfrmZx=UXFORMZX_MR0;
  935.         end
  936.  
  937.         16'h86zz: begin     //86xx
  938.             if(isOpXE)  begin
  939. //              opUCmd=UCMD_BSRN;   tOpDecXfrm=UXFORM_BR_D8;
  940.             end else begin
  941.                 tOpDecXfrm=UXFORM_MOV_SP4RN;
  942.                 if(opCmdWord[7])
  943.                 begin
  944.                     opUCmd=UCMD_MOVL_MR;
  945.                     tOpDecXfrmZx=UXFORMZX_MF3;
  946.                 end else begin
  947.                     opUCmd=UCMD_MOVL_RM;
  948.                     tOpDecXfrmZx=UXFORMZX_FM3;
  949.                 end
  950.             end
  951.         end
  952.  
  953.         16'h87zz: begin     //87xx
  954.         end
  955.  
  956.         16'h88zz: begin     //88xx
  957.             opUCmd=UCMD_CMP_EQ;
  958.             tOpDecXfrm=UXFORM_ARI_I8R0;
  959.         end
  960.         16'h89zz: begin     //89xx
  961.             opUCmd=UCMD_BT;     tOpDecXfrm=UXFORM_BR_D8;
  962.         end
  963.         16'h8Azz: begin     //8Axx-xxxx
  964.             if(isOpXE)  begin
  965.     //          opUCmd=UCMD_BSRN;   tOpDecXfrm=UXFORM_BR_D8;
  966.             end else begin
  967.                 opRegN=UREG_R0;
  968.                 opUCmd=UCMD_MOV_RI;
  969.                 tOpDecXfrm=UXFORM_CST;
  970.             end
  971.         end
  972.         16'h8Bzz: begin     //8Bxx, BF disp
  973.             opUCmd=UCMD_BF;     tOpDecXfrm=UXFORM_BR_D8;
  974.         end
  975.         16'h8Czz: begin     //8Cxx
  976.             /* Escape */
  977.         end
  978.         16'h8Dzz: begin     //8Dxx, BTS disp
  979.             opUCmd=UCMD_BTS;        tOpDecXfrm=UXFORM_BR_D8;
  980.         end
  981.         16'h8Ezz: begin     //8Exx
  982.             /* Escape */
  983.         end
  984.         16'h8Fzz: begin     //8Fxx, BFS disp
  985.             opUCmd=UCMD_BFS;        tOpDecXfrm=UXFORM_BR_D8;
  986.         end
  987.  
  988.         16'h9zzz: begin     //9xxx
  989.             if(isOpXE)
  990.             begin           //LDSH16 #imm, Rn
  991.                 opUCmd=UCMD_ALU_LDSH16;
  992.                 tOpDecXfrm=UXFORM_ARI_NNI;
  993.             end else begin  //MOV.W @(PC, disp), Rn
  994.                 opRegN[3:0]=opCmdWord[11:8];
  995.                 opRegS=UREG_PCW;
  996.                 opRegT=UREG_ZZR;
  997.                 opImm[7:0]=opCmdWord[ 7:0];
  998.                 opUCmd=UCMD_MOVW_MR;
  999.                 tOpDecXfrm=UXFORM_CST;
  1000.             end
  1001.         end
  1002.  
  1003.         16'hAzzz: begin     //Axxx
  1004.             opUCmd=UCMD_BRA;        tOpDecXfrm=UXFORM_BR_D12;
  1005.         end
  1006.  
  1007.         16'hBzzz: begin     //Bxxx
  1008.             opUCmd=UCMD_BSR;        tOpDecXfrm=UXFORM_BR_D12;
  1009.         end
  1010.  
  1011.         16'hC0zz: begin
  1012.             if(opJQ)
  1013.             begin
  1014.                 opUCmd=UCMD_MOVQ_RM;
  1015.                 tOpDecXfrm=UXFORM_MOV_SP4RN;
  1016.                 tOpDecXfrmZx=UXFORMZX_RM;
  1017.             end else begin
  1018.                 opUCmd=UCMD_MOVB_RM;
  1019.                 tOpDecXfrm=UXFORM_MOV_GD8R0;
  1020.                 tOpDecXfrmZx=UXFORMZX_RM;
  1021.             end
  1022.         end
  1023.  
  1024.         16'hC1zz: begin
  1025.             if(opJQ)
  1026.             begin
  1027.             end else begin
  1028.                 opUCmd=UCMD_MOVW_RM;
  1029.                 tOpDecXfrm=UXFORM_MOV_GD8R0;
  1030.                 tOpDecXfrmZx=UXFORMZX_RM;
  1031.             end
  1032.         end
  1033.  
  1034.         16'hC2zz: begin
  1035.             if(opJQ)
  1036.             begin
  1037.             end else begin
  1038.                 opUCmd=UCMD_MOVL_RM;
  1039.                 tOpDecXfrm=UXFORM_MOV_GD8R0;
  1040.                 tOpDecXfrmZx=UXFORMZX_RM;
  1041.             end
  1042.         end
  1043.  
  1044.         16'hC4zz: begin
  1045.             if(opJQ)
  1046.             begin
  1047.                 opUCmd=UCMD_MOVQ_MR;
  1048.                 tOpDecXfrm=UXFORM_MOV_SP4RN;
  1049.                 tOpDecXfrmZx=UXFORMZX_MR;
  1050.             end else begin
  1051.                 opUCmd=UCMD_MOVB_MR;
  1052.                 tOpDecXfrm=UXFORM_MOV_GD8R0;
  1053.                 tOpDecXfrmZx=UXFORMZX_MR;
  1054.             end
  1055.         end
  1056.  
  1057.         16'hC5zz: begin
  1058.             if(opJQ)
  1059.             begin
  1060.             end else begin
  1061.                 opUCmd=UCMD_MOVW_MR;
  1062.                 tOpDecXfrm=UXFORM_MOV_GD8R0;
  1063.                 tOpDecXfrmZx=UXFORMZX_MR;
  1064.             end
  1065.         end
  1066.  
  1067.         16'hC6zz: begin
  1068.             if(opJQ)
  1069.             begin
  1070.             end else begin
  1071.                 opUCmd=UCMD_MOVL_MR;
  1072.                 tOpDecXfrm=UXFORM_MOV_GD8R0;
  1073.                 tOpDecXfrmZx=UXFORMZX_MR;
  1074.             end
  1075.         end
  1076.  
  1077.         16'hC8zz: begin     //CMP/EQ #imm, R0
  1078.             opUCmd=opPsDQ ? UCMD_CMPQ_TST : UCMD_CMP_TST;
  1079.             tOpDecXfrm=UXFORM_CMP_I8R0;
  1080.         end
  1081.         16'hC9zz: begin     //AND #imm, R0
  1082.             opUCmd=UCMD_ALU_AND;    tOpDecXfrm=UXFORM_ARI_I8R0;
  1083.         end
  1084.         16'hCAzz: begin     //XOR #imm, R0
  1085.             opUCmd=UCMD_ALU_XOR;    tOpDecXfrm=UXFORM_ARI_I8R0;
  1086.         end
  1087.         16'hCBzz: begin     //OR #imm, R0
  1088.             opUCmd=UCMD_ALU_OR;     tOpDecXfrm=UXFORM_ARI_I8R0;
  1089.         end
  1090.  
  1091.         16'hDzzz: begin     //Dxxx, MOV @(PC,disp), Rn
  1092.             opRegN[3:0]=opCmdWord[11:8];
  1093.             opRegS=UREG_PCL;
  1094.             opRegT=UREG_ZZR;
  1095.             opImm[7:0]=opCmdWord[ 7:0];
  1096.             opUCmd=UCMD_MOVL_MR;
  1097.             tOpDecXfrm=UXFORM_CST;
  1098.         end
  1099.  
  1100.         16'hEzzz: begin     //Exxx, MOV #imm, Rn
  1101.             opUCmd=UCMD_MOV_RI;
  1102.             tOpDecXfrm=UXFORM_ARI_NNI;
  1103.         end
  1104.  
  1105.         16'hFzz0: begin
  1106.             opUCmd=UCMD_FPU_ADD;
  1107.             tOpDecXfrm=UXFORM_FPARI_NS;
  1108. //          tOpDecXfrmZx=UXFORMZX_FF;
  1109.         end
  1110.         16'hFzz1: begin
  1111.             opUCmd=UCMD_FPU_SUB;
  1112.             tOpDecXfrm=UXFORM_FPARI_NS;
  1113. //          tOpDecXfrmZx=UXFORMZX_FF;
  1114.         end
  1115.         16'hFzz2: begin
  1116.             opUCmd=UCMD_FPU_MUL;
  1117.             tOpDecXfrm=UXFORM_FPARI_NS;
  1118. //          tOpDecXfrmZx=UXFORMZX_FF;
  1119.         end
  1120.  
  1121.         16'hFzz4: begin
  1122.             opUCmd=UCMD_FPU_CMPEQ;
  1123.             tOpDecXfrm=UXFORM_FPARI_NS;
  1124. //          tOpDecXfrmZx=UXFORMZX_FF;
  1125.         end
  1126.         16'hFzz5: begin
  1127.             opUCmd=UCMD_FPU_CMPGT;
  1128.             tOpDecXfrm=UXFORM_FPARI_NS;
  1129. //          tOpDecXfrmZx=UXFORMZX_FF;
  1130.         end
  1131.  
  1132.         16'hFzz6: begin
  1133.             opUCmd=UCMD_MOVL_MR;    tOpDecXfrm=UXFORM_MOV_NSO;
  1134.             tOpDecXfrmZx=UXFORMZX_RF;
  1135.         end
  1136.         16'hFzz7: begin
  1137.             opUCmd=UCMD_MOVL_RM;    tOpDecXfrm=UXFORM_MOV_NSO;
  1138.             tOpDecXfrmZx=UXFORMZX_FR;
  1139.         end
  1140.  
  1141.         16'hFzz8: begin
  1142.             opUCmd=UCMD_MOVL_MR;    tOpDecXfrm=UXFORM_MOV_NS;
  1143. //          opIsRegN_FR=1;
  1144.             tOpDecXfrmZx=UXFORMZX_RF;
  1145.         end
  1146.         16'hFzz9: begin
  1147.             opUCmd=UCMD_MOVL_MR;    tOpDecXfrm=UXFORM_MOV_NSDEC;
  1148. //          opIsRegN_FR=1;
  1149.             tOpDecXfrmZx=UXFORMZX_RFI;
  1150.         end
  1151.  
  1152.         16'hFzzA: begin
  1153.             opUCmd=UCMD_MOVL_RM;    tOpDecXfrm=UXFORM_MOV_NS;
  1154. //          opIsRegM_FR=1;
  1155.             tOpDecXfrmZx=UXFORMZX_FR;
  1156.         end
  1157.         16'hFzzB: begin
  1158. //          opUCmd=UCMD_MOVL_RM;    tOpDecXfrm=UXFORM_MOV_NSDEC;
  1159.             opIsRegM_FR=1;
  1160.             tOpDecXfrmZx=UXFORMZX_FRD;
  1161.         end
  1162.  
  1163.         default: begin end
  1164.  
  1165.     endcase
  1166.  
  1167. //  opIsRegN_FR=0;
  1168. //  opIsRegM_FR=0;
  1169. //  opIsRegS_FR=0;
  1170. //  opIsRegT_FR=0;
  1171. //  opIsRegM_CR=0;
  1172. //  opIsRegM_SR=0;
  1173.  
  1174.  
  1175.     if(decEnable64A)
  1176.     begin
  1177. /*
  1178.         opRegN_Dfl  = {opIsRegN_FR?2'b10:2'b00, opCCe[2],    opCmdWord[11:8]};
  1179.         opRegN_CEf  = {opIsRegN_FR?2'b10:2'b00, opPfxImm[7], opCmdWord[11:8]};
  1180.         opRegN_CEe  = {opIsRegN_FR?2'b10:2'b00, opPfxImm[6], opCmdWord[11:8]};
  1181.  
  1182.         opRegM_Dfl  = {opIsRegM_FR?2'b10:2'b00, opCCe[1],    opCmdWord[ 7:4]};
  1183.         opRegM_CEf  = {opIsRegM_FR?2'b10:2'b00, opPfxImm[6], opCmdWord[ 7:4]};
  1184.         opRegS_CEe  = {opIsRegM_FR?2'b10:2'b00, opPfxImm[5], opCmdWord[ 7:4]};
  1185.  
  1186.         opRegT_CEe  = {opIsRegT_FR?2'b10:2'b00, opPfxImm[4], opPfxImm [ 3:0]};
  1187. */
  1188.  
  1189.         opRegN_Dfl  = {2'b00, opCCe[2],    opCmdWord[11:8]};
  1190.         opRegN_CEf  = {2'b00, opPfxImm[7], opCmdWord[11:8]};
  1191.         opRegN_CEe  = {2'b00, opPfxImm[6], opCmdWord[11:8]};
  1192.  
  1193.         opRegM_Dfl  = {2'b00, opCCe[1],    opCmdWord[ 7:4]};
  1194.         opRegM_CEf  = {2'b00, opPfxImm[6], opCmdWord[ 7:4]};
  1195.         opRegM_CEe  = {2'b00, opPfxImm[5], opCmdWord[ 7:4]};
  1196.  
  1197.         opRegO_CEe  = {2'b00, opPfxImm[4], opCmdWord[ 3:0]};
  1198.  
  1199.         opRegT_CEe  = {2'b00, opPfxImm[4], opPfxImm [ 3:0]};
  1200.  
  1201.         opRegO_Dfl  = {2'b00, opCCe[0],    opCmdWord[ 3:0]};
  1202.  
  1203.         opImm6_SxCE = {opPfxImm[5] ? 26'h3FFFFFF : 26'h0, opPfxImm [ 5:0]};
  1204.         opImm6_ZxCE = {26'h000000, opPfxImm [ 5:0]};
  1205.         opImm6_NxCE = {26'hFFFFFF, opPfxImm [ 5:0]};
  1206.  
  1207.     end
  1208.     else
  1209.     begin
  1210. //      opRegN_Dfl  = {opIsRegN_FR?3'b100:3'b000, opCmdWord[11:8]};
  1211. //      opRegM_Dfl  = {opIsRegM_FR?3'b100:3'b000, opCmdWord[ 7:4]};
  1212.  
  1213.         opRegN_Dfl  = {3'b000, opCmdWord[11:8]};
  1214.         opRegM_Dfl  = {3'b000, opCmdWord[ 7:4]};
  1215.         opRegO_Dfl  = {3'b000, opCmdWord[ 3:0]};
  1216.  
  1217. //      opRegN_CEf  = 7'hXX;
  1218. //      opRegM_CEf  = 7'hXX;
  1219.         opRegN_CEf  = opRegN_Dfl;
  1220.         opRegM_CEf  = opRegM_Dfl;
  1221.  
  1222.         opRegN_CEe  = 7'hXX;
  1223.         opRegM_CEe  = 7'hXX;
  1224.         opRegO_CEe  = 7'hXX;
  1225.         opRegT_CEe  = 7'hXX;
  1226.     end
  1227.  
  1228. /*
  1229.     if(opIsRegM_CR)
  1230.     begin
  1231.         if(opCmdWord[11])   //RmB
  1232.             opRegM_Dfl={3'h2, 1'b0, opCmdWord[6:4]};
  1233.         else
  1234.             opRegM_Dfl={3'h7, opCmdWord[7:4]};
  1235.     end else if(opIsRegM_SR)
  1236.     begin
  1237.         opRegM_Dfl={3'h6, opCmdWord[7:4]};
  1238.     end
  1239. */
  1240.  
  1241. // /*
  1242.     if(opCmdWord[11])   //RmB
  1243.         opRegM_CR={3'h2, 1'b0, opCmdWord[6:4]};
  1244.     else
  1245.         opRegM_CR={3'h7, opCmdWord[7:4]};
  1246.  
  1247.     opRegM_SR={3'h6, opCmdWord[7:4]};
  1248. // */
  1249.  
  1250.     opRegN_FR   = {3'h4, opCmdWord[11:8]};
  1251.     opRegM_FR   = {3'h4, opCmdWord[ 7:4]};
  1252.     opRegO_FR   = {3'h4, opCmdWord[ 3:0]};
  1253.  
  1254.     if(decEnableBJX1)
  1255.     begin
  1256. //      opRegS_8E       = {opIsRegS_FR?3'b100:3'b000, opPfxImm [ 7:4]};
  1257. //      opRegT_8E       = {opIsRegT_FR?3'b100:3'b000, opPfxImm [ 3:0]};
  1258.         opRegS_8E       = {3'b000, opPfxImm [ 7:4]};
  1259.         opRegT_8E       = {3'b000, opPfxImm [ 3:0]};
  1260.  
  1261.         opRegS_FR   = {3'h4, opPfxImm [ 7:4]};
  1262.         opRegT_FR   = {3'h4, opPfxImm [ 3:0]};
  1263.  
  1264.         opImm_Zx4_8E    = {28'h0, opPfxImm [ 3:0]};
  1265.  
  1266.         opImm_Sx8E  = {opPfxImm[7] ? 24'hFFFFFF : 24'h0, opPfxImm [ 7:0]};
  1267.         opImm_Zx8E  = {24'h000000, opPfxImm [ 7:0]};
  1268.         opImm_Nx8E  = {24'hFFFFFF, opPfxImm [ 7:0]};
  1269.  
  1270.         opImmM_Sx12_8E  = {opPfxImm[7] ? 20'hFFFFF : 20'h0,
  1271.             opPfxImm [ 7:0], opCmdWord [ 7:4]};
  1272.         opImmO_Sx12_8E  = {opPfxImm[7] ? 20'hFFFFF : 20'h0,
  1273.             opPfxImm [ 7:0], opCmdWord [ 3:0]};
  1274.  
  1275.         opImm_Sx16_8E   = {opPfxImm[7] ? 16'hFFFF : 16'h0000,
  1276.             opPfxImm [ 7:0], opCmdWord [ 7:0]};
  1277.         opImm_Sx20_8E   = {opPfxImm[7] ? 12'hFFF : 12'h000,
  1278.             opPfxImm [ 7:0], opCmdWord [11:0]};
  1279.  
  1280.         opRegN_N3 = (opCmdWord[6:4]==3'b111) ? UREG_R0 :
  1281.             {3'h0, 1'b1, opCmdWord[6:4]};
  1282.         opRegM_N3 = (opCmdWord[2:0]==3'b111) ? UREG_R0 :
  1283.             {3'h0, 1'b1, opCmdWord[2:0]};
  1284.     end
  1285.     else
  1286.     begin
  1287.         opRegS_8E       = 7'hXX;            opRegT_8E       = 7'hXX;
  1288.         opRegS_FR       = 7'hXX;            opRegT_FR       = 7'hXX;
  1289.         opImm_Zx4_8E    = 32'hXXXXXXXX;     opImm_Sx8E      = 32'hXXXXXXXX;
  1290.         opImm_Zx8E      = 32'hXXXXXXXX;     opImm_Nx8E      = 32'hXXXXXXXX;
  1291.         opImm_Sx16_8E   = 32'hXXXXXXXX;     opImm_Sx20_8E   = 32'hXXXXXXXX;
  1292.         opImmM_Sx12_8E  = 32'hXXXXXXXX;     opImmO_Sx12_8E  = 32'hXXXXXXXX;
  1293.  
  1294.         opRegN_N3=UREG_XX;      opRegM_N3=UREG_XX;
  1295.     end
  1296.  
  1297.     opImm_Zx4   = {28'h0, opCmdWord[ 3:0]};
  1298.     opImm_Zx8   = {24'h0, opCmdWord[ 7:0]};
  1299.     opImm_Sx8   = {opCmdWord[ 7] ? 24'hFFFFFF : 24'h000000, opCmdWord [ 7:0]};
  1300.     opImm_Sx12  = {opCmdWord[11] ? 20'hFFFFF  : 20'h00000 , opCmdWord [11:0]};
  1301.  
  1302.     case(tOpDecXfrm)
  1303.  
  1304.         UXFORM_CST: begin
  1305.         end
  1306.  
  1307.         UXFORM_N: begin
  1308.             opRegN=opRegN_Dfl;
  1309.             opRegS=opRegN;
  1310.         end
  1311.  
  1312.         UXFORM_MOV_NS: begin
  1313.             if(isOpCE)
  1314.             begin
  1315.                 opRegN = opRegN_CEf;    opRegS = opRegM_CEf;
  1316.                 opImm  = opImm6_ZxCE;
  1317.             end else if(isOp8E)
  1318.             begin
  1319.                 opRegN  = opRegN_Dfl;   opRegS  = opRegM_Dfl;
  1320.                 opImm   = opImm_Sx8E;
  1321.             end else begin
  1322.                 opRegN=opRegN_Dfl;      opRegS=opRegM_Dfl;
  1323.             end
  1324. //          if(tOpDecXfrmZx==UXFORMZX_RF)   opRegN[6:5]=2'b10;
  1325. //          if(tOpDecXfrmZx==UXFORMZX_FR)   opRegS[6:5]=2'b10;
  1326.         end
  1327.  
  1328.         UXFORM_MOV_NSO: begin
  1329.             if(isOpCE)
  1330.             begin
  1331.                 opRegN=opRegN_CEe;  opRegS=opRegM_CEe;
  1332.                 opRegT=opRegT_CEe;  opImm=0;
  1333.             end else if(isOp8E)
  1334.             begin
  1335.                 opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1336.                 opRegT=opRegS_8E;   opImm=opImm_Zx4_8E;
  1337.             end else begin
  1338.                 opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1339.                 opRegT=UREG_R0;     opImm=0;
  1340.             end
  1341. //          if(tOpDecXfrmZx==UXFORMZX_RF)   opRegN[6:5]=2'b10;
  1342. //          if(tOpDecXfrmZx==UXFORMZX_FR)   opRegS[6:5]=2'b10;
  1343.         end
  1344.  
  1345.         UXFORM_MOV_NSJ: begin
  1346.             if(isOpCE)
  1347.             begin
  1348.                 opRegN = opRegN_CEe;
  1349.                 opRegS = opRegM_CEe;
  1350.                 opRegT = opRegO_CEe;
  1351.                 opImm  = opImm_Zx4_8E;
  1352.             end else if(isOp8E)
  1353.             begin
  1354.                 opRegN = opRegN_Dfl;    opRegS = opRegM_Dfl;
  1355.                 opRegT = opRegO_Dfl;    opImm  = opImm_Sx8E;
  1356.             end else begin
  1357.                 opRegN=opRegN_Dfl;      opRegS=opRegM_Dfl;
  1358.                 opImm  = opImm_Zx4;
  1359.             end
  1360. //          if(tOpDecXfrmZx==UXFORMZX_RF)   opRegN[6:5]=2'b10;
  1361. //          if(tOpDecXfrmZx==UXFORMZX_FR)   opRegS[6:5]=2'b10;
  1362.         end
  1363.  
  1364.         UXFORM_MOV_NSDEC: begin
  1365.             case(tOpDecXfrmZx)
  1366.                 UXFORMZX_PDEC: begin
  1367.                     opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1368.                     opRegT=UREG_MR_MEMDEC;
  1369.                 end
  1370.  
  1371.                 UXFORMZX_PINC: begin
  1372.                     opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1373.                     opRegT=UREG_MR_MEMINC;
  1374.                 end
  1375.  
  1376. // /*
  1377.                 UXFORMZX_FRD: begin
  1378.                     opRegN=opRegN_Dfl;  opRegS=opRegM_FR;
  1379.                     opRegT=UREG_MR_MEMDEC;
  1380.                 end
  1381.                 UXFORMZX_RFI: begin
  1382.                     opRegN=opRegN_FR;   opRegS=opRegM_Dfl;
  1383.                     opRegT=UREG_MR_MEMINC;
  1384.                 end
  1385.  
  1386.                 UXFORMZX_RS: begin
  1387.                     opRegN=opRegM_SR;   opRegS=opRegN_Dfl;
  1388.                     opRegT=UREG_MR_MEMINC;
  1389.                 end
  1390.                 UXFORMZX_RC: begin
  1391.                     opRegN=opRegM_CR;   opRegS=opRegN_Dfl;
  1392.                     opRegT=UREG_MR_MEMINC;
  1393.                 end
  1394.  
  1395.                 UXFORMZX_SR: begin
  1396.                     opRegN=opRegN_Dfl;  opRegS=opRegM_SR;
  1397.                     opRegT=UREG_MR_MEMDEC;
  1398.                 end
  1399.                 UXFORMZX_CR: begin
  1400.                     opRegN=opRegN_Dfl;  opRegS=opRegM_CR;
  1401.                     opRegT=UREG_MR_MEMDEC;
  1402.                 end
  1403. // */
  1404.  
  1405.                 default: begin
  1406.                     opRegN=UREG_XX;     opRegS=UREG_XX;
  1407.                     opRegT=UREG_XX;     opImm=32'hXXXXXXXX;
  1408.                 end
  1409.  
  1410.             endcase
  1411.  
  1412.         end
  1413.  
  1414.         UXFORM_FPARI_NS: begin
  1415.             opRegN=opRegN_FR;
  1416.             opRegS=opRegM_FR;
  1417.         end
  1418.  
  1419.         UXFORM_ARI_NS: begin
  1420. //          opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1421.  
  1422. //          /*
  1423.             case(tOpDecXfrmZx)
  1424.                 UXFORMZX_RR: begin
  1425.                     opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1426.                 end
  1427.                
  1428.                 UXFORMZX_FF: begin
  1429.                     opRegN=opRegN_FR;   opRegS=opRegM_FR;
  1430.                 end
  1431.  
  1432.                 UXFORMZX_RS: begin
  1433.                     opRegN=opRegM_SR;   opRegS=opRegN_Dfl;
  1434.                 end
  1435.                 UXFORMZX_RC: begin
  1436.                     opRegN=opRegM_CR;   opRegS=opRegN_Dfl;
  1437.                 end
  1438.  
  1439.                 UXFORMZX_SR: begin
  1440.                     opRegN=opRegN_Dfl;  opRegS=opRegM_SR;
  1441.                 end
  1442.                 UXFORMZX_CR: begin
  1443.                     opRegN=opRegN_Dfl;  opRegS=opRegM_CR;
  1444.                 end
  1445.  
  1446.                 default: begin
  1447.                     opRegN=UREG_XX;     opRegS=UREG_XX;
  1448.                     opRegT=UREG_XX;     opImm=32'hXXXXXXXX;
  1449.                 end
  1450.  
  1451.             endcase
  1452. //          */
  1453.         end
  1454.  
  1455.         UXFORM_ARI_NST: begin
  1456.             if(isOpCE)
  1457.             begin
  1458.                 opRegN=opRegN_CEf;  opRegS=opRegM_CEf;
  1459.                 opRegT=UREG_MR_IMM;
  1460.                 case(tOpDecXfrmZx)
  1461.                     UXFORMZX_SX: opImm=opImm6_SxCE;
  1462.                     UXFORMZX_ZX: opImm=opImm6_ZxCE;
  1463.                     UXFORMZX_NX: opImm=opImm6_NxCE;
  1464.                     default: begin end
  1465.                 endcase
  1466.  
  1467.             end else if(isOp8E)
  1468.             begin
  1469.                 opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1470.                 opRegT=UREG_MR_IMM;
  1471.                 case(tOpDecXfrmZx)
  1472.                     UXFORMZX_SX: opImm=opImm_Sx8E;
  1473.                     UXFORMZX_ZX: opImm=opImm_Zx8E;
  1474.                     UXFORMZX_NX: opImm=opImm_Nx8E;
  1475.                     default: begin end
  1476.                 endcase
  1477.             end else begin
  1478.                 opRegN=opRegN_Dfl;  opRegS=opRegN_Dfl;  opRegT=opRegM_Dfl;
  1479.             end
  1480.         end
  1481.  
  1482.         UXFORM_CMP_ST: begin
  1483.             if(isOp8E)
  1484.             begin
  1485.                 opRegS=opRegN_Dfl;  opRegT=UREG_MR_IMM;
  1486.                 opImm=opImmM_Sx12_8E;
  1487.             end else begin
  1488.                 opRegS=opRegN_Dfl;  opRegT=opRegM_Dfl;
  1489.             end
  1490.         end
  1491.  
  1492.         UXFORM_ARI_ST: begin
  1493.             opRegN=opRegN_Dfl;  opRegS=opRegM_Dfl;
  1494.         end
  1495.  
  1496.         UXFORM_ARI_NNI: begin
  1497.             if(isOpXE)
  1498.             begin
  1499.                 opRegN={2'h0, isOpCE, opCmdWord[11:8]};
  1500.                 opRegS=opRegN;
  1501.                 opRegT=UREG_MR_IMM; opImm=opImm_Sx16_8E;
  1502.             end else begin
  1503.                 opRegN=opRegN_Dfl;  opRegS=opRegN_Dfl;
  1504.                 opRegT=UREG_MR_IMM; opImm=opImm_Sx8;
  1505.             end
  1506.         end
  1507.        
  1508.         UXFORM_BR_D8: begin
  1509.             opImm = isOpXE ? opImm_Sx16_8E : opImm_Sx8;
  1510.         end
  1511.         UXFORM_BR_D12: begin
  1512.             opImm = isOpXE ? opImm_Sx20_8E : opImm_Sx12;
  1513.         end
  1514.  
  1515.         UXFORM_ARI_I8R0: begin
  1516.             if(isOpXE)
  1517.             begin
  1518.                 opRegN=opRegM_Dfl;  opRegS=opRegN;
  1519.                 opRegT=UREG_MR_IMM; opImm=opImmO_Sx12_8E;
  1520.             end else begin
  1521.                 opRegN=UREG_R0;     opRegS=UREG_R0;
  1522.                 opRegT=UREG_MR_IMM; opImm=opImm_Zx8;
  1523.             end
  1524.         end
  1525.  
  1526.         UXFORM_N_C: begin
  1527.             opRegN=opRegN_Dfl;  opRegS=opRegN_Dfl;
  1528.             opRegT=UREG_MR_IMM;
  1529.         end
  1530.        
  1531.         UXFORM_MOV_GD8R0: begin
  1532.             case(tOpDecXfrmZx)
  1533.                 UXFORMZX_RM: begin
  1534.                     opRegN=UREG_GBR;    opRegS=UREG_R0;
  1535.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx8;
  1536.                 end
  1537.                 UXFORMZX_MR: begin
  1538.                     opRegN=UREG_R0;     opRegS=UREG_GBR;
  1539.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx8;
  1540.                 end
  1541.  
  1542.                 default: begin
  1543.                     opRegN=UREG_XX;     opRegS=UREG_XX;
  1544.                     opRegT=UREG_XX;     opImm=32'hXXXXXXXX;
  1545.                 end
  1546.             endcase
  1547.         end
  1548.  
  1549.         UXFORM_MOV_SP4RN: begin
  1550.             case(tOpDecXfrmZx)
  1551.                 UXFORMZX_RM: begin
  1552.                     opRegN=UREG_R15;    opRegS=opRegM_Dfl;
  1553.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx4;
  1554.                 end
  1555.                 UXFORMZX_MR: begin
  1556.                     opRegN=opRegM_Dfl;  opRegS=UREG_R15;
  1557.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx4;
  1558.                 end
  1559.  
  1560. // /*
  1561.                 UXFORMZX_RM3: begin
  1562.                     opRegN=UREG_R15;    opRegS=opRegN_N3;
  1563.                     opRegT=UREG_MR_IMM;
  1564.                     opImm[3:0]=opCmdWord[3:0];
  1565.                     opImm[31:4]=1;                 
  1566.                 end
  1567.                 UXFORMZX_MR3: begin
  1568.                     opRegN=opRegN_N3;   opRegS=UREG_R15;
  1569.                     opRegT=UREG_MR_IMM;
  1570.                     opImm[3:0]=opCmdWord[3:0];
  1571.                     opImm[31:4]=1;                 
  1572.                 end
  1573.  
  1574.                 UXFORMZX_FM3: begin
  1575.                     opRegN=UREG_R15;
  1576.                     opRegS={3'h4, 1'b1, opCmdWord[6:4]};
  1577.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx4;
  1578.                 end
  1579.                 UXFORMZX_MF3: begin
  1580.                     opRegN={3'h4, 1'b1, opCmdWord[6:4]};
  1581.                     opRegS=UREG_R15;
  1582.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx4;
  1583.                 end
  1584. // */
  1585.  
  1586.                 UXFORMZX_RM0: begin
  1587.                     opRegN=opRegM_Dfl;  opRegS=UREG_R0;
  1588.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx4;
  1589.                 end
  1590.                 UXFORMZX_MR0: begin
  1591.                     opRegN=UREG_R0;     opRegS=opRegM_Dfl;
  1592.                     opRegT=UREG_MR_IMM; opImm=opImm_Zx4;
  1593.                 end
  1594.  
  1595.                 default: begin
  1596.                     opRegN=UREG_XX;     opRegS=UREG_XX;
  1597.                     opRegT=UREG_XX;     opImm=32'hXXXXXXXX;
  1598.                 end
  1599.             endcase
  1600.         end
  1601.        
  1602.         UXFORM_NST_8E: begin
  1603. //          opRegN=opRegN_Dfl;
  1604. //          opRegS=opRegS_8E;
  1605. //          opRegT=opRegT_8E;
  1606.  
  1607. // /*
  1608.             case(tOpDecXfrmZx)
  1609.                 UXFORMZX_RR: begin
  1610.                     opRegN=opRegN_Dfl;
  1611.                     opRegS=opRegS_8E;
  1612.                     opRegT=opRegT_8E;
  1613.                 end
  1614.                
  1615.                 UXFORMZX_FF: begin
  1616.                     opRegN=opRegN_FR;
  1617.                     opRegS=opRegS_FR;
  1618.                     opRegT=opRegT_FR;
  1619.                 end
  1620.  
  1621.                 default: begin
  1622.                     opRegN=UREG_XX;     opRegS=UREG_XX;
  1623.                     opRegT=UREG_XX;     opImm=32'hXXXXXXXX;
  1624.                 end
  1625.             endcase
  1626. // */
  1627.         end
  1628.  
  1629.         default: begin
  1630.             opRegN=UREG_XX;     opRegS=UREG_XX;
  1631.             opRegT=UREG_XX;     opImm=32'hXXXXXXXX;
  1632.         end
  1633.     endcase
  1634.  
  1635. //  if(opIsRegN_FR)
  1636. //      opRegN[6:5]=2'b10;
  1637. //  if(opIsRegM_FR || opIsRegS_FR)
  1638. //      opRegS[6:5]=2'b10;
  1639. //  if(opIsRegT_FR)
  1640. //      opRegT[6:5]=2'b10;
  1641.  
  1642. end
  1643.  
  1644. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement