kekellner

Lab08 - Ej04 - ALU & Testbench

Oct 15th, 2021
1,116
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module alu (input [3:0] A, B, input [2:0] F, output [3:0] Y);
  2.  
  3.     reg [3:0] rY;
  4.  
  5.     always @ (A or B or F) begin
  6.         case (F)
  7.             3'b000: rY = A & B;
  8.             3'b001: rY = A | B;
  9.             3'b010: rY = A + B;
  10.             3'b100: rY = A & ~B;
  11.             3'b101: rY = A | ~B;
  12.             3'b110: rY = A - B;
  13.             3'b111: begin
  14.                 if (A >= B)
  15.                     rY = 4'b0000;
  16.                 else
  17.                     rY = 4'b0001;
  18.             end
  19.             default: rY = 4'b0000;
  20.         endcase
  21.     end
  22.  
  23.     assign Y = rY;
  24.  
  25. endmodule
  26.  
  27. module testbench();
  28.  
  29.     reg [3:0] A, B;
  30.     reg [2:0] F;
  31.  
  32.     wire [3:0] Y;
  33.  
  34.     alu U1(A, B, F, Y);
  35.  
  36.     initial begin
  37.         $display("F\tA\tB\tY");
  38.         $monitor("%b\t%b\t%b\t%b", F, A, B, Y);
  39.         F = 3'b000; A = 4'b0110; B = 4'b0010;
  40.         #1
  41.         F = 3'b001; A = 4'b1100; B = 4'b0001;
  42.         #1
  43.         F = 3'b010; A = 4'b0111; B = 4'b0001;
  44.         #1
  45.         F = 3'b011; A = 4'b1010; B = 4'b0101;
  46.         #1
  47.         F = 3'b100; A = 4'b0101; B = 4'b1010;
  48.         #1
  49.         F = 3'b101; A = 4'b1100; B = 4'b0011;
  50.         #1
  51.         F = 3'b110; A = 4'b0111; B = 4'b0001;
  52.         #1
  53.         F = 3'b111; A = 4'b0011; B = 4'b0001;
  54.         #1
  55.         A = 4'b0010; B = 4'b1000;
  56.     end
  57. endmodule
  58.  
RAW Paste Data