Advertisement
Guest User

Untitled

a guest
Feb 16th, 2020
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. // arith_machine: execute a series of arithmetic instructions from an instruction cache
  2. //
  3. // except (output) - set to 1 when an unrecognized instruction is to be executed.
  4. // clock (input) - the clock signal
  5. // reset (input) - set to 1 to set all registers to zero, set to 0 for normal execution.
  6.  
  7. module arith_machine(except, clock, reset);
  8. output except;
  9. input clock, reset;
  10.  
  11. wire [31:0] inst;
  12. wire [31:0] PC;
  13. //comments following prairie learn hw convention
  14. wire [31:0] nextPC, rsData, rtData, B, imm_32, zero_32, rdData;
  15. wire [4:0] rDest;
  16. wire [2:0] alu_op;
  17. wire [1:0] alu_src2;
  18. wire write_enable, rd_src, overflow, zero, negative;
  19.  
  20. // DO NOT comment out or rename this module
  21. // or the test bench will break
  22. register #(32) PC_reg(PC, nextPC, clock, 1'b1, reset);
  23.  
  24. alu32 alu_1(nextPC, , , , PC, 32'h4, `ALU_ADD);
  25.  
  26. // DO NOT comment out or rename this module
  27. // or the test bench will break
  28. instruction_memory im(inst[31:0], PC[31:2]);
  29.  
  30. mux2v #(5) mux_1(rDest, inst[15:11], inst[20:16], rd_src);
  31.  
  32. // DO NOT comment out or rename this module
  33. // or the test bench will break
  34. regfile rf (rsData, rtData, inst[25:21], inst[20:16], rDest, rdData, write_enable, clock, reset);
  35.  
  36. /* add other modules */
  37.  
  38. sign_extender sign(imm_32, inst[15:0]);
  39. zero_extender zeroExtend(zero_32, inst[15:0]);
  40.  
  41. mips_decode decoder(rd_src, write_enable, alu_src2, alu_op, except, inst[31:26], inst[5:0]);
  42.  
  43. mux3v mux_2(B, rtData, imm_32, zero_32, alu_src2);
  44. alu32 alu_2(rdData, overflow, zero, negative, rsData, B, alu_op);
  45. endmodule // arith_machine
  46.  
  47. module sign_extender(imm, inst);
  48. input [15:0] inst;
  49. output [31:0] imm;
  50.  
  51. assign imm[15:0] = inst[15:0];
  52. assign imm[31:16] = inst[15];
  53. /*
  54. assign imm[16] = inst[15];
  55. assign imm[17] = inst[15];
  56. assign imm[18] = inst[15];
  57. assign imm[19] = inst[15];
  58. assign imm[20] = inst[15];
  59. assign imm[21] = inst[15];
  60. assign imm[22] = inst[15];
  61. assign imm[23] = inst[15];
  62. assign imm[24] = inst[15];
  63. assign imm[25] = inst[15];
  64. assign imm[26] = inst[15];
  65. assign imm[27] = inst[15];
  66. assign imm[28] = inst[15];
  67. assign imm[29] = inst[15];
  68. assign imm[30] = inst[15];
  69. assign imm[31] = inst[15];
  70. */
  71. endmodule // sign_extender
  72.  
  73. module zero_extender(zero, inst);
  74. input [15:0] inst;
  75. output [31:0] zero;
  76.  
  77. assign zero[15:0] = inst[15:0];
  78. assign zero[31:16] = 0;
  79.  
  80. /*assign zero[17] = 0;
  81. assign zero[18] = 0;
  82. assign zero[19] = 0;
  83. assign zero[20] = 0;
  84. assign zero[21] = 0;
  85. assign zero[22] = 0;
  86. assign zero[23] = 0;
  87. assign zero[24] = 0;
  88. assign zero[25] = 0;
  89. assign zero[26] = 0;
  90. assign zero[27] = 0;
  91. assign zero[28] = 0;
  92. assign zero[29] = 0;
  93. assign zero[30] = 0;
  94. assign zero[31] = 0;
  95. */
  96. endmodule // zero_extender
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement