R0 = {R0[6:0], 1'b0}; 2'b01 :
R1 = {R1[6:0], 1'b0}; 2'b10 :
R2 = {R2[6:0], 1'b0}; default :
R3 = {R3[6:0], 1'b0}; endcase endcase
addp, subp, meth1, mulp, logp, comp, swap : case (IR[9:8]) 2'b00 : A = R0; 2'b01 : A = R1; 2'b10 : A = R2; default : A = R3; endcase default : ; endcase end 2 :
case (IR[15:12]) addp :
case (IR[11:10]) 2'b00 : begin
temp = ({R0[7], R0[7:0]}) + ({A[7], A[7:0]}); R0 = temp[7:0];
overflow <= temp[8] ^ temp[7]; end 2'b01 : begin
temp = ({R1[7], R1[7:0]}) + ({A[7], A[7:0]}); R1 = temp[7:0];
overflow <= temp[8] ^ temp[7]; end 2'b10 : begin
temp = ({R2[7], R2[7:0]}) + ({A[7], A[7:0]}); R2 = temp[7:0];
11 <0>
overflow <= temp[8] ^ temp[7]; end default : begin
temp = ({R3[7], R3[7:0]}) + ({A[7], A[7:0]}); R3 = temp[7:0];
overflow <= temp[8] ^ temp[7]; end endcase subp :
case (IR[11:10]) 2'b00 : begin
temp = ({R0[7], R0[7:0]}) + (~({A[7], A[7:0]})) + 1'b1; R0 = temp[7:0];
overflow <= temp[8] ^ temp[7]; end 2'b01 : begin
temp = ({R1[7], R1[7:0]}) + (~({A[7], A[7:0]})) + 1'b1; R1 = temp[7:0];
overflow <= temp[8] ^ temp[7]; end 2'b10 : begin
temp = ({R2[7], R2[7:0]}) + (~({A[7], A[7:0]})) + 1'b1; R2 = temp[7:0];
overflow <= temp[8] ^ temp[7]; end default : begin
temp = ({R3[7], R3[7:0]}) + (~({A[7], A[7:0]})) + 1'b1; R3 = temp[7:0];
overflow <= temp[8] ^ temp[7]; end endcase meth1 :
case (IR[11:10]) 2'b00 :
case (IR[9:8]) 2'b00 :
R0 = R0 + 1'b1; 2'b01 :
R1 = R1 + 1'b1;
12 <0>
2'b10 :
R2 = R2 + 1'b1; default :
R3 = R3 + 1'b1; endcase 2'b01 :
case (IR[9:8]) 2'b00 :
R0 = R0 - 1'b1; 2'b01 :
R1 = R1 - 1'b1; 2'b10 :
R2 = R2 - 1'b1; default :
R3 = R3 - 1'b1; endcase 2'b10 :
case (IR[9:8]) 2'b00 :
R0 = R0 + 2'b10; 2'b01 :
R1 = R1 + 2'b10; 2'b10 :
R2 = R2 + 2'b10; default :
R3 = R3 + 2'b10; endcase default :
case (IR[9:8]) 2'b00 :
R0 = R0 - 2'b10; 2'b01 :
R1 = R1 - 2'b10; 2'b10 :
R2 = R2 - 2'b10; default :
R3 = R3 - 2'b10; endcase endcase mulp :
case (IR[11:10]) 2'b00 : begin
temp2 = R0 * A;
13 <0>
R0 = temp2[7:0]; R1 = temp2[15:8]; end 2'b01 : begin
temp2 = R1 * A; R0 = temp2[7:0]; R1 = temp2[15:8]; end 2'b10 : begin
temp2 = R2 * A; R2 = temp2[7:0]; R3 = temp2[15:8]; end default : begin
temp2 = R3 * A; R2 = temp2[7:0]; R3 = temp2[15:8]; end endcase logp :
case (IR[11:10]) 2'b00 :
case (IR[9:8]) 2'b00 :
R0 = R0 & A; 2'b01 :
R0 = R0 & A; 2'b10 :
R1 = R1 & R0; 2'b11 :
R1 = R1 & R1; endcase 2'b01 :
case (IR[9:8]) 2'b00 :
R0 = R0 | A; 2'b01 :
R0 = R0 | A; 2'b10 :
R1 = R1 | R0; 2'b11 :
14 <0>
R1 = R1 | R1; endcase 2'b10 :
case (IR[9:8]) 2'b00 :
R0 = R0 ^ A; 2'b01 :
R0 = R0 ^ A; 2'b10 :
R1 = R1 ^ R0; 2'b11 :
R1 = R1 ^ R1; endcase default :
case (IR[9:8]) 2'b00 :
R0 = (~A); 2'b01 :
R0 = (~A); 2'b10 :
R1 = (~R0); 2'b11 :
R1 = (~R1); endcase endcase comp :
case (IR[11:10]) 2'b00 :
if (R0 > A)
R0 = 8'b00000001; else if (R0 < A)
R0 = 8'b10000001; else
R0 = 8'b00000000; 2'b01 :
if (R1 > A)
R1 = 8'b00000001; else if (R1 < A)
R1 = 8'b10000001; else
R1 = 8'b00000000; 2'b10 :
if (R2 > A)
R2 = 8'b00000001;
15 <0>