Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. `define STATUS_REGISTER 5'd12
  2. `define CAUSE_REGISTER 5'd13
  3. `define EPC_REGISTER 5'd14
  4.  
  5. module cp0(rd_data, EPC, TakenInterrupt,
  6. wr_data, regnum, next_pc,
  7. MTC0, ERET, TimerInterrupt, clock, reset);
  8. output [31:0] rd_data;
  9. output [29:0] EPC;
  10. output TakenInterrupt;
  11. input [31:0] wr_data;
  12. input [4:0] regnum;
  13. input [29:0] next_pc;
  14. input MTC0, ERET, TimerInterrupt, clock, reset;
  15.  
  16. // your Verilog for coprocessor 0 goes here
  17. wire [31:0] status_reg, cause_reg, user_status, d_out, new_epc;
  18. wire [29:0] m_epc;
  19. wire exception_lev;
  20. assign status_reg[31:16] = 16'b0000000000000000;
  21. assign status_reg[7:2] = 6'b000000;
  22. assign status_reg[15:8] = user_status[15:8];
  23. assign status_reg[0] = user_status[0];
  24. assign status_reg[1] = exception_lev;
  25. assign cause_reg[31:16] = 16'b0000000000000000;
  26. assign cause_reg[14:0] = 15'b000000000000000;
  27. assign cause_reg[15] = TimerInterrupt;
  28. assign new_epc[31:2] = EPC;
  29. assign new_epc[1:0] = 2'b00;
  30.  
  31. mux2v #(30) mux_epc(m_epc, wr_data[31:2], next_pc, TakenInterrupt);
  32.  
  33. decoder32 d_regnum_MTC0(d_out, regnum, MTC0);
  34.  
  35. register #(32) user_stat(user_status, wr_data, clock, d_out[12], reset);
  36. wire epc_reg_enable = (d_out[14] || TakenInterrupt);
  37. register #(30) epc_reg(EPC, m_epc, clock, epc_reg_enable, reset);
  38. wire excep_reset = (reset || ERET);
  39. dffe excep_lev(exception_lev, 1'b1, clock, TakenInterrupt, excep_reset);
  40.  
  41. mux3v #(32) mux_rd_data(rd_data, status_reg, cause_reg, new_epc, regnum[1:0]);
  42.  
  43.  
  44.  
  45. assign TakenInterrupt = ((cause_reg[15] && status_reg[15]) && (~status_reg[1] && status_reg[0]));
  46.  
  47.  
  48.  
  49. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement