Advertisement
Guest User

Untitled

a guest
Jul 1st, 2015
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    11:09:07 06/26/2015
  7. // Design Name:
  8. // Module Name:    p3_team8
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module p3_team8(out,OF,op,A,B);
  22.  
  23. input signed [15:0] A, B;
  24. input [3:0] op;
  25.  
  26. output reg signed [15:0] out;  //signed output
  27. output reg OF = 0;  //overflow
  28.  
  29. reg [31:0] register; // store results to check for overflow
  30. reg MSB;
  31. localparam MAX = 16'sb0111111111111111;
  32. localparam MIN = 16'sb1000000000000001;
  33.  
  34.  
  35. always @(A,B,op,MSB,register) begin
  36.     if ( A > MAX || A < MIN || B > MAX || B < MIN ) begin
  37.         OF = 1;
  38.         out = 16'bX;
  39.     end
  40.     else
  41.     begin
  42.         OF = 0;
  43.         case(op)
  44.             4'b0000: out = 16'bX; //do nothing
  45.             4'b0001: begin
  46.                             register = A+B;
  47.                             if ( A[15] == B[15]) begin
  48.                                 if ( register[15] != A[15] ) begin
  49.                                     OF = 1;
  50.                                     out = 16'bX;
  51.                                 end
  52.                                 else
  53.                                     out = register[15:0];
  54.                             end
  55.                             else
  56.                                 out = register[15:0];
  57.                         end
  58.             4'b0010: {MSB,register} = A-B;  //subtraction
  59.             4'b0011: {MSB,register} = A*4'sb0101;   //multiply A by 5
  60.             4'b0100: {MSB,register} = A/5'sb01010;  //divide A by 10
  61.             4'b0101: {MSB,register} = A&B;  //bitwise AND
  62.             4'b0110: {MSB,register} = A^B;  //bitwise XOR
  63.             4'b0111: {MSB,register} = A|B;  //bitwise OR
  64.             4'b1000: {MSB,register} = ~A+1;     //complement A
  65.             4'b1001: {MSB,register} = A+1;  //increment
  66.             4'b1010: {MSB,register} = A-1;  //decrement
  67.         endcase
  68.     end
  69. end
  70.        
  71.  
  72. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement