Advertisement
aidanozohor1810

Untitled

Dec 6th, 2023
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. module uc(
  3.         clk,
  4.         rst,
  5.         ri,
  6.         ind,
  7.         regs_addr,
  8.         regs_oe,
  9.         regs_we,
  10.         alu_oe,
  11.         alu_carry,
  12.         alu_opcode,
  13.         ram_oe,
  14.         ram_we,
  15.         io_oe,
  16.         io_we,
  17.         cp_oe,
  18.         cp_we,
  19.         ind_sel,
  20.         ind_oe,
  21.         ind_we,
  22.         am_oe,
  23.         am_we,
  24.         aie_oe,
  25.         aie_we,
  26.         t1_oe,
  27.         t1_we,
  28.         t2_oe,
  29.         t2_we,
  30.         ri_oe,
  31.         ri_we,
  32.         disp_state
  33.     );
  34.  
  35. parameter word_width =          16;
  36. parameter state_width =         16;
  37.  
  38. input                           clk;
  39. input                           rst;
  40. input [word_width-1 : 0]        ri;
  41. input [word_width-1 : 0]        ind;
  42. output reg                      alu_oe;
  43. output reg                      alu_carry;
  44. output reg[3 : 0]               alu_opcode;
  45. output reg                      ram_oe;
  46. output reg                      ram_we;
  47. output reg                      io_oe;
  48. output reg                      io_we;
  49. output reg[2 : 0]               regs_addr;
  50. output reg                      regs_oe;
  51. output reg                      regs_we;
  52. output reg                      cp_oe;
  53. output reg                      cp_we;
  54. output reg                      ind_sel;        // controls IND register input (0 = bus, 1 = alu flags)
  55. output reg                      ind_oe;
  56. output reg                      ind_we;
  57. output reg                      am_oe;
  58. output reg                      am_we;
  59. output reg                      aie_oe;
  60. output reg                      aie_we;
  61. output reg                      t1_oe;
  62. output reg                      t1_we;
  63. output reg                      t2_oe;
  64. output reg                      t2_we;
  65. output reg                      ri_oe;          // controls RI register output which generates the offset for Jcond instructions
  66. output reg                      ri_we;
  67. output[state_width-1 : 0]       disp_state;
  68.  
  69. `define reset                   'h00            // reset state
  70. `define fetch                   'h10            // load instruction to instruction register
  71.  
  72. reg [state_width-1 : 0] state = `reset, state_next;
  73.  
  74. // FSM - sequential part
  75. always @(posedge clk) begin
  76.     state <= `reset;
  77.  
  78.     if(!rst)
  79.         state <= state_next;
  80. end
  81.  
  82. // FSM - combinational part
  83. always @(*) begin
  84.     state_next = `reset;
  85.     alu_oe = 0;
  86.     alu_carry = 0;
  87.     alu_opcode = 0;
  88.     ram_oe = 0;
  89.     ram_we = 0;
  90.     io_oe = 0;
  91.     io_we = 0;
  92.     regs_addr = 0;
  93.     regs_oe = 0;
  94.     regs_we = 0;
  95.     cp_oe = 0;
  96.     cp_we = 0;
  97.     ind_sel = 0;
  98.     ind_oe = 0;
  99.     ind_we = 0;
  100.     am_oe = 0;
  101.     am_we = 0;
  102.     aie_oe = 0;
  103.     aie_we = 0;
  104.     t1_oe = 0;
  105.     t1_we = 0;
  106.     t2_oe = 0;
  107.     t2_we = 0;
  108.     ri_oe = 0;
  109.     ri_we = 0;
  110.  
  111.     case(state)
  112.         `reset: begin
  113.             state_next = `fetch;
  114.         end
  115.  
  116.         `fetch: begin
  117.             cp_oe = 1;
  118.             am_we = 1;
  119.  
  120.             state_next = `fetch + 1;
  121.         end
  122.  
  123.         `fetch + 'd1: begin
  124.             am_oe = 1;
  125.  
  126.             state_next = `fetch + 2;
  127.         end
  128.  
  129.         `fetch + 'd2: begin
  130.             ram_oe = 1;
  131.             ri_we = 1;
  132.  
  133.             state_next = `reset;
  134.         end
  135.  
  136.         default: ;
  137.     endcase
  138. end
  139.  
  140. assign disp_state = state;
  141.  
  142. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement