aidanozo

Untitled

Dec 7th, 2025
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    20:14:45 11/26/2011
  7. // Design Name:
  8. // Module Name:    uc
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module uc(
  22.         clk,
  23.         rst,
  24.         ri,
  25.         ind,
  26.         regs_addr,
  27.         regs_oe,
  28.         regs_we,
  29.         alu_oe,
  30.         alu_carry,
  31.         alu_opcode,
  32.         ram_oe,
  33.         ram_we,
  34.         io_oe,
  35.         io_we,
  36.         cp_oe,
  37.         cp_we,
  38.         ind_sel,
  39.         ind_oe,
  40.         ind_we,
  41.         am_oe,
  42.         am_we,
  43.         aie_oe,
  44.         aie_we,
  45.         t1_oe,
  46.         t1_we,
  47.         t2_oe,
  48.         t2_we,
  49.         ri_oe,
  50.         ri_we,
  51.         disp_state
  52.     );
  53.  
  54. parameter word_width =          16;
  55. parameter state_width =         16;
  56.  
  57. `define ADC                     0
  58. `define SBB1                    1
  59. `define SBB2                    2
  60. `define NOT                     3
  61. `define AND                     4
  62. `define OR                      5
  63. `define XOR                     6
  64. `define SHL                     7
  65. `define SHR                     8
  66. `define SAR                     9
  67.  
  68. `define RA                      0
  69. `define RB                      1
  70. `define RC                      2
  71. `define IS                      3
  72. `define XA                      4
  73. `define XB                      5
  74. `define BA                      6
  75. `define BB                      7
  76.  
  77. input                           clk;
  78. input                           rst;
  79. input [word_width-1 : 0]        ri;
  80. input [word_width-1 : 0]        ind;
  81. output reg                      alu_oe;
  82. output reg                      alu_carry;
  83. output reg[3 : 0]               alu_opcode;
  84. output reg                      ram_oe;
  85. output reg                      ram_we;
  86. output reg                      io_oe;
  87. output reg                      io_we;
  88. output reg[2 : 0]               regs_addr;
  89. output reg                      regs_oe;
  90. output reg                      regs_we;
  91. output reg                      cp_oe;
  92. output reg                      cp_we;
  93. output reg                      ind_sel;        // controls IND register input (0 = bus, 1 = alu flags)
  94. output reg                      ind_oe;
  95. output reg                      ind_we;
  96. output reg                      am_oe;
  97. output reg                      am_we;
  98. output reg                      aie_oe;
  99. output reg                      aie_we;
  100. output reg                      t1_oe;
  101. output reg                      t1_we;
  102. output reg                      t2_oe;
  103. output reg                      t2_we;
  104. output reg                      ri_oe;          // controls RI register output which generates the offset for Jcond instructions
  105. output reg                      ri_we;
  106. output[state_width-1 : 0]       disp_state;
  107.  
  108. wire [0:6]                      cop;
  109. wire                            d;
  110. wire [0:1]                      mod;
  111. wire [0:2]                      rg;
  112. wire [0:2]                      rm;
  113.  
  114. assign cop  = {ri[0], ri[1], ri[2], ri[3], ri[4], ri[5], ri[6]};
  115. assign d    = {ri[7]};
  116. assign mod  = {ri[8], ri[9]};
  117. assign rg   = {ri[10], ri[11], ri[12]};
  118. assign rm   = {ri[13], ri[14], ri[15]};
  119.  
  120. `define reset                   'h00            // reset state
  121. `define fetch                   'h10            // load instruction to instruction register
  122. `define inc_cp                  'h20            // increment program counter
  123.  
  124. reg [state_width-1 : 0] state = `reset, state_next;
  125.  
  126. // FSM - sequential part
  127. always @(posedge clk) begin
  128.     state <= `reset;
  129.  
  130.     if(!rst)
  131.         state <= state_next;
  132. end
  133.  
  134. // FSM - combinational part
  135. always @(*) begin
  136.     state_next = `reset;
  137.     alu_oe = 0;
  138.     alu_carry = 0;
  139.     alu_opcode = 0;
  140.     ram_oe = 0;
  141.     ram_we = 0;
  142.     io_oe = 0;
  143.     io_we = 0;
  144.     regs_addr = 0;
  145.     regs_oe = 0;
  146.     regs_we = 0;
  147.     cp_oe = 0;
  148.     cp_we = 0;
  149.     ind_sel = 0;
  150.     ind_oe = 0;
  151.     ind_we = 0;
  152.     am_oe = 0;
  153.     am_we = 0;
  154.     aie_oe = 0;
  155.     aie_we = 0;
  156.     t1_oe = 0;
  157.     t1_we = 0;
  158.     t2_oe = 0;
  159.     t2_we = 0;
  160.     ri_oe = 0;
  161.     ri_we = 0;
  162.  
  163.     case(state)
  164.         `reset: begin
  165.             state_next = `fetch;
  166.         end
  167.  
  168.         `fetch: begin
  169.             cp_oe = 1;
  170.             am_we = 1;
  171.  
  172.             state_next = `fetch + 1;
  173.         end
  174.  
  175.         `fetch + 'd1: begin
  176.             am_oe = 1;
  177.  
  178.             state_next = `fetch + 2;
  179.         end
  180.  
  181.         `fetch + 'd2: begin
  182.             ram_oe = 1;
  183.             ri_we = 1;
  184.  
  185.             state_next = `inc_cp;
  186.         end
  187.  
  188.         `inc_cp: begin
  189.             cp_oe = 1;
  190.             t1_we = 1;
  191.  
  192.             state_next = `inc_cp + 1;
  193.         end
  194.  
  195.         `inc_cp + 'd1: begin
  196.             t1_oe = 1;
  197.             cp_we = 1;
  198.             alu_oe = 1;
  199.             alu_carry = 1;
  200.             alu_opcode = `ADC;
  201.  
  202.             state_next = `fetch;
  203.         end
  204.  
  205.         default: ;
  206.     endcase
  207. end
  208.  
  209. assign disp_state = state;
  210.  
  211. endmodule
  212.  
Advertisement
Add Comment
Please, Sign In to add comment