Advertisement
Guest User

Untitled

a guest
Mar 17th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. module Shifter_tb;
  2. reg signed [15:0] stim, fails;
  3. reg [3:0] shift;
  4. reg [1:0] Op;
  5. wire [15:0] sra, ror0, ror1, ror2, ror, expected, actual;
  6.  
  7. Shifter DUT(.Shift_Out(actual), .Shift_In(stim), .imm(shift), .Op(Op));
  8.  
  9. assign ror0 = shift[0] ? {stim[0], stim[15:1]} : stim;
  10. assign ror1 = shift[1] ? {ror0[1:0], ror0[15:2]} : ror0;
  11. assign ror2 = shift[2] ? {ror1[3:0], ror1[15:4]} : ror1;
  12. assign ror = shift[3] ? {ror2[7:0], ror2[15:8]} : ror2;
  13.  
  14. assign sra = $signed(stim) >>> shift;
  15.  
  16. assign expected = (Op == 2'b00) ? $signed(stim) << (shift) : ((Op == 2'b01) ? sra : ror);
  17.  
  18. initial begin
  19. stim = 0;
  20. fails = 0;
  21. shift = 0;
  22. Op = 0;
  23. repeat(1000) begin
  24. stim = $random;
  25. shift[1] = $random;
  26. Op = $random;
  27. if (Op == 3) Op = 2;
  28. #20
  29. if (actual != expected) begin
  30. fails = fails + 1;
  31. $display("Input: %b, Expected: %b, Actual: %b, Shift: %b, Op: %b", stim, expected, actual, shift, Op);
  32. end
  33. end
  34. $display("Failures: %d", fails);
  35. #10;
  36. end
  37.  
  38. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement