OpenCores
URL https://opencores.org/ocsvn/sub86/sub86/trunk

Subversion Repositories sub86

[/] [sub86/] [trunk/] [sub86.v] - Diff between revs 8 and 9

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 8 Rev 9
Line 63... Line 63...
`define sdv4  6'b101011
`define sdv4  6'b101011
`define div1  6'b101100
`define div1  6'b101100
`define leas  6'b101101
`define leas  6'b101101
`define calla 6'b101110
`define calla 6'b101110
`define calla2 6'b101111
`define calla2 6'b101111
 
`define shft3 6'b110000
`define init  6'b000000
`define init  6'b000000
 
 
 always @(posedge CLK)
 always @(posedge CLK)
   if ((CE ==1'b1) || (RSTN ==1'b0))
   if ((CE ==1'b1) || (RSTN ==1'b0))
     begin
     begin
Line 120... Line 121...
      endcase
      endcase
      case(state)  // EDX control
      case(state)  // EDX control
        `init       : EDX <= 32'b0;
        `init       : EDX <= 32'b0;
        `sdv1       : EDX <= smlEAX;
        `sdv1       : EDX <= smlEAX;
        `div1       : EDX <=    EAX;
        `div1       : EDX <=    EAX;
        `sdv3       : if (nlF==1'b0) EDX <= EDX - ECX; else EDX <= EDX;
        `sdv3       : if (nbF==1'b0) EDX <= EDX - ECX; else EDX <= EDX;
        `sdv4       : if (EBX[31] == 1'b1) EDX <= ((~EDX) + 1); else EDX<=EDX;
        `sdv4       : if (EBX[31] == 1'b1) EDX <= ((~EDX) + 1); else EDX<=EDX;
        default     : if (dest==3'b010) EDX <= alu_out; else EDX<=EDX;
        default     : if (dest==3'b010) EDX <= alu_out; else EDX<=EDX;
      endcase
      endcase
      case(state)  // ESP control
      case(state)  // ESP control
        `init       : ESP <= 32'h01ff00;
        `init       : ESP <= 32'h01f1fc;
        `call,`calla: ESP <= ESP - 4'b0100;
        `call,`calla: ESP <= ESP - 4'b0100;
        `ret2       : ESP <= ESP + 4'b0100;
        `ret2       : ESP <= ESP + 4'b0100;
       default: if (dest==3'b100) ESP <= alu_out; else ESP<=ESP;
       default: if (dest==3'b100) ESP <= alu_out; else ESP<=ESP;
      endcase
      endcase
      if (dest==3'b101) EBP <= alu_out; else EBP<=EBP;  // EBP control 
      if (dest==3'b101) EBP <= alu_out; else EBP<=EBP;  // EBP control 
Line 282... Line 283...
   else if (state==`call)  nstate = `call2; else if (state==`call2) nstate = `fetch;
   else if (state==`call)  nstate = `call2; else if (state==`call2) nstate = `fetch;
   else if (state==`calla) nstate = `calla2;else if (state==`calla2)nstate = `fetch;
   else if (state==`calla) nstate = `calla2;else if (state==`calla2)nstate = `fetch;
   else if (state==`ret)   nstate = `ret2;  else if (state==`ret2)  nstate = `fetch;
   else if (state==`ret)   nstate = `ret2;  else if (state==`ret2)  nstate = `fetch;
   else if((state==`shift)&&!(EBX_shtr==5'b0)) nstate=`shift;
   else if((state==`shift)&&!(EBX_shtr==5'b0)) nstate=`shift;
   else if((state==`shift)&& (EBX_shtr==5'b0)) nstate=`shft2;
   else if((state==`shift)&& (EBX_shtr==5'b0)) nstate=`shft2;
 
   else if (state==`shft2) nstate = `shft3;
   else                    nstate = `fetch;
   else                    nstate = `fetch;
   end
   end
 end
 end
assign ssregsrc = regsrc;
assign ssregsrc = regsrc;
assign ssregdest= regdest;
assign ssregdest= regdest;
Line 298... Line 300...
                  (state == `calla2)?  1'b0         : 1'b1     ;
                  (state == `calla2)?  1'b0         : 1'b1     ;
assign  Sregsrc =       ID[8]       ? { {16{regsrc[15]}} , regsrc[15:0] } :
assign  Sregsrc =       ID[8]       ? { {16{regsrc[15]}} , regsrc[15:0] } :
                                      { {24{regsrc[7] }} , regsrc[7:0]  } ;
                                      { {24{regsrc[7] }} , regsrc[7:0]  } ;
assign  Zregsrc =       ID[8]       ? {  16'b0           , regsrc[15:0] } :
assign  Zregsrc =       ID[8]       ? {  16'b0           , regsrc[15:0] } :
                                      {  24'b0           , regsrc[7:0]  } ;
                                      {  24'b0           , regsrc[7:0]  } ;
assign      BEN = (state == `call2 )  ? 1'b1 : { prefx   , ID[8]        } ;
assign      BEN =((state == `call2)|(state == `calla2)) ? 1'b1 : { prefx   , ID[8]        } ;
assign     neqF = (regsrc == regdest) ? 1'b1 : 1'b0;
assign     neqF = (regsrc == regdest) ? 1'b1 : 1'b0;
assign      nbF = (regsrc  > regdest) ? 1'b1 : 1'b0;
assign      nbF = (regsrc  > regdest) ? 1'b1 : 1'b0;
assign      naF = ~(nlF | neqF );// (regsrc  < regdest) ? 1'b1 : 1'b0;
assign      naF = ~(nlF | neqF );// (regsrc  < regdest) ? 1'b1 : 1'b0;
assign      nlF = (ssregsrc  > ssregdest) ? 1'b1 : 1'b0;
assign      nlF = (ssregsrc  > ssregdest) ? 1'b1 : 1'b0;
assign      ngF = ~(nbF | neqF );// (regsrc  < regdest) ? 1'b1 : 1'b0;
assign      ngF = ~(nbF | neqF );// (regsrc  < regdest) ? 1'b1 : 1'b0;
Line 326... Line 328...
assign   sub_out= regdest - regsrc - nncry;
assign   sub_out= regdest - regsrc - nncry;
assign    nncry = (ID[12] ? cry : 1'b0);
assign    nncry = (ID[12] ? cry : 1'b0);
assign EBX_shtr = EBX[4:0] - 1'b1;
assign EBX_shtr = EBX[4:0] - 1'b1;
assign   smlEAX = EAX[31] ? ((~EAX) + 1) : EAX;
assign   smlEAX = EAX[31] ? ((~EAX) + 1) : EAX;
assign   smlECX = ECX[31] ? ((~ECX) + 1) : ECX;
assign   smlECX = ECX[31] ? ((~ECX) + 1) : ECX;
assign    divF1 = ({ECX[30:0],1'b0}  > EDX) ? 1'b1 : 1'b0;
assign    divF1 = ({ECX[31:0],1'b0}  > {1'b0,EDX}) ? 1'b1 : 1'b0;
assign    divF2 = (EBX_shtr == 5'b00000) ? 1'b1 : 1'b0;
assign    divF2 = (EBX_shtr == 5'b00000) ? 1'b1 : 1'b0;
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.