Advertisement
aidanozo

Untitled

Dec 4th, 2024
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VeriLog 18.78 KB | None | 0 0
  1. module control_unit #(
  2.     parameter p_data_width = 16,
  3.     parameter p_opcode_width = 4,
  4.     parameter p_opcode_ADC = 4'd0,
  5.     parameter p_opcode_SBB1 = 4'd1,
  6.     parameter p_opcode_SBB2 = 4'd2,
  7.     parameter p_opcode_NOT = 4'd3,
  8.     parameter p_opcode_AND = 4'd4,
  9.     parameter p_opcode_OR = 4'd5,
  10.     parameter p_opcode_XOR = 4'd6,
  11.     parameter p_opcode_SHL = 4'd7,
  12.     parameter p_opcode_SHR = 4'd8,
  13.     parameter p_opcode_SAR = 4'd9,
  14.     parameter p_regs_address_width = 3,
  15.     parameter p_RA_address = 3'd0,
  16.     parameter p_RB_address = 3'd1,
  17.     parameter p_RC_address = 3'd2,
  18.     parameter p_SP_address = 3'd3,
  19.     parameter p_XA_address = 3'd4,
  20.     parameter p_XB_address = 3'd5,
  21.     parameter p_BA_address = 3'd6,
  22.     parameter p_BB_address = 3'd7
  23. ) (
  24.     `ifdef DEBUG
  25.     output wire [(p_data_width - 1) : 0]       o_w_state_disp_out,
  26.     `endif
  27.     output reg                                 o_r_alu_oe,
  28.     output reg                                 o_r_alu_carry,
  29.     output reg [(p_opcode_width-1) : 0]        o_r_alu_opcode,
  30.     output reg                                 o_r_ram_oe,
  31.     output reg                                 o_r_ram_we,
  32.     output reg                                 o_r_io_oe,
  33.     output reg                                 o_r_io_we,
  34.     output reg [(p_regs_address_width-1) : 0]  o_r_regs_addr,
  35.     output reg                                 o_r_regs_oe,
  36.     output reg                                 o_r_regs_we,
  37.     output reg                                 o_r_pc_oe,
  38.     output reg                                 o_r_pc_we,
  39.     output reg                                 o_r_flags_sel,        // controls FR register input (0 = bus, 1 = alu flags)
  40.     output reg                                 o_r_flags_oe,
  41.     output reg                                 o_r_flags_we,
  42.     output reg                                 o_r_ma_oe,
  43.     output reg                                 o_r_ma_we,
  44.     output reg                                 o_r_ioa_oe,
  45.     output reg                                 o_r_ioa_we,
  46.     output reg                                 o_r_t1_oe,
  47.     output reg                                 o_r_t1_we,
  48.     output reg                                 o_r_t2_oe,
  49.     output reg                                 o_r_t2_we,
  50.     output reg                                 o_r_ir_oe,          // controls IR register output which generates the offset for Jcond instructions
  51.     output reg                                 o_r_ir_we,
  52.     input wire                                 i_w_clk,
  53.     input wire                                 i_w_reset,
  54.     input wire [(p_data_width - 1) : 0]        i_w_ir,
  55.     input wire [(p_data_width - 1) : 0]        i_w_flags
  56. );
  57.  
  58. localparam l_p_state_width = 16;
  59.  
  60.  
  61. wire [0:6]                      l_w_cop;
  62. wire                            l_w_d;
  63. wire [0:1]                      l_w_mod;
  64. wire [0:2]                      l_w_rg;
  65. wire [0:2]                      l_w_rm;
  66.  
  67. // l_p_state_DECODE instruction
  68. // oeration code
  69. assign l_w_cop  = {i_w_ir[0], i_w_ir[1], i_w_ir[2], i_w_ir[3], i_w_ir[4], i_w_ir[5], i_w_ir[6]};
  70. // direction bit
  71. assign l_w_d    = {i_w_ir[7]};
  72. // addressing mode
  73. assign l_w_mod  = {i_w_ir[8], i_w_ir[9]};
  74. // register
  75. assign l_w_rg   = {i_w_ir[10], i_w_ir[11], i_w_ir[12]};
  76. // register/memory
  77. assign l_w_rm   = {i_w_ir[13], i_w_ir[14], i_w_ir[15]};
  78.  
  79. localparam l_p_state_RESET            = 16'h00;            // l_p_state_RESET state
  80. localparam l_p_state_FETCH            = 16'h10;            // load instruction to instruction register
  81. localparam l_p_state_DECODE           = 16'h20;            // analyze loaded instruction
  82. localparam l_p_state_ADDR_SUM         = 16'h30;            // computes address of the form [By+Xz] with y,z in {A, B}
  83. localparam l_p_state_ADDR_REG         = 16'h34;            // computes address of the form [yz] with y in {X, B} and z in {A, B}
  84. localparam l_p_state_ADDR_IO          = 16'h3c;            // computes address of IO port
  85. localparam l_p_state_LOAD_SRC_REG     = 16'h40;            // load source operand from register
  86. localparam l_p_state_LOAD_SRC_MEM     = 16'h44;            // load source operand from memory
  87. localparam l_p_state_LOAD_SRC_IO      = 16'h4c;            // load source operand from IO port
  88. localparam l_p_state_LOAD_DST_REG     = 16'h50;            // load destination operand from register
  89. localparam l_p_state_LOAD_DST_MEM     = 16'h54;            // load destination operand from memory
  90. localparam l_p_state_NO_LOAD_DST_REG   = 16'h60;            // like l_p_state_LOAD_DST_REG but without the loading; equals a nop
  91. localparam l_p_state_NO_LOAD_DST_IO    = 16'h6c;            // like load_dst_io but without the loading; equals loading of aie
  92. localparam l_p_state_EXEC_ONE_OP         = 16'h70;            // execute 1 operand instructions
  93. localparam l_p_state_EXEC_TWO_OP         = 16'h74;            // execute 2 operand instructions
  94. localparam l_p_state_EXEC_TRANSFER      = 16'h78;            // execute transfer instructions
  95. localparam l_p_state_STORE_REG        = 16'h80;            // store result to register
  96. localparam l_p_state_STORE_MEM        = 16'h84;            // store result to memory
  97. localparam l_p_state_STORE_IO         = 16'h8c;            // store result to IO port
  98. localparam l_p_state_INC_PC           = 16'h90;            // increment program counter
  99.  
  100. reg [(l_p_state_width - 1) : 0] l_r_state = l_p_state_RESET, l_r_state_next;
  101. reg [(l_p_state_width - 1) : 0] l_r_decoded_src, l_r_decoded_src_next;      // stores decoded source operand load state
  102. reg [(l_p_state_width - 1) : 0] l_r_decoded_dst, l_r_decoded_dst_next;      // stores decoded destination operand load state
  103. reg [(l_p_state_width - 1) : 0] l_r_decoded_exec, l_r_decoded_exec_next;    // stores decoded execute state
  104. reg [(l_p_state_width - 1) : 0] l_r_decoded_store, l_r_decoded_store_next;  // stores decoded store state
  105. reg l_r_decoded_d, l_r_decoded_d_next;                              // stores decoded direction bit
  106. reg [0:2] l_r_decoded_rg, l_r_decoded_rg_next;                      // stores decoded REG operand
  107.  
  108. // FSM - sequential part
  109. always @(posedge i_w_clk or negedge i_w_reset) begin
  110.     if (!i_w_reset) begin
  111.         l_r_state <= l_p_state_RESET;
  112.     end else begin
  113.         l_r_state <= l_r_state_next;
  114.         if(l_r_state == l_p_state_DECODE) begin
  115.             l_r_decoded_src <= l_r_decoded_src_next;
  116.             l_r_decoded_dst <= l_r_decoded_dst_next;
  117.             l_r_decoded_exec <= l_r_decoded_exec_next;
  118.             l_r_decoded_store <= l_r_decoded_store_next;
  119.             l_r_decoded_d <= l_r_decoded_d_next;
  120.             l_r_decoded_rg <= l_r_decoded_rg_next;
  121.         end
  122.     end
  123. end
  124.  
  125. // FSM - combinational part
  126. always @(*) begin
  127.     l_r_state_next = l_p_state_RESET;
  128.     l_r_decoded_src_next = l_p_state_RESET;
  129.     l_r_decoded_dst_next = l_p_state_RESET;
  130.     l_r_decoded_exec_next = l_p_state_RESET;
  131.     l_r_decoded_store_next = l_p_state_RESET;
  132.     l_r_decoded_d_next = 0;
  133.     l_r_decoded_rg_next = 0;
  134.     o_r_alu_oe = 0;
  135.     o_r_alu_carry = 0;
  136.     o_r_alu_opcode = 0;
  137.     o_r_ram_oe = 0;
  138.     o_r_ram_we = 0;
  139.     o_r_io_oe = 0;
  140.     o_r_io_we = 0;
  141.     o_r_regs_addr = 0;
  142.     o_r_regs_oe = 0;
  143.     o_r_regs_we = 0;
  144.     o_r_pc_oe = 0;
  145.     o_r_pc_we = 0;
  146.     o_r_flags_sel = 0;
  147.     o_r_flags_oe = 0;
  148.     o_r_flags_we = 0;
  149.     o_r_ma_oe = 0;
  150.     o_r_ma_we = 0;
  151.     o_r_ioa_oe = 0;
  152.     o_r_ioa_we = 0;
  153.     o_r_t1_oe = 0;
  154.     o_r_t1_we = 0;
  155.     o_r_t2_oe = 0;
  156.     o_r_t2_we = 0;
  157.     o_r_ir_oe = 0;
  158.     o_r_ir_we = 0;
  159.  
  160.     case(l_r_state)
  161.         l_p_state_RESET: begin
  162.             l_r_state_next = l_p_state_FETCH;
  163.         end
  164.  
  165.         l_p_state_FETCH: begin
  166.             o_r_pc_oe = 1;
  167.             o_r_ma_we = 1;
  168.  
  169.             l_r_state_next = l_p_state_FETCH + 1;
  170.         end
  171.  
  172.         l_p_state_FETCH + 'd1: begin
  173.             o_r_ma_oe = 1;
  174.  
  175.             l_r_state_next = l_p_state_FETCH + 2;
  176.         end
  177.  
  178.         // TODO: Test if this is correct
  179.         // different cycles the memory address is l_p_state_RESET to 0
  180.         l_p_state_FETCH + 'd2: begin
  181.             o_r_ram_oe = 1;
  182.             o_r_ir_we = 1;
  183.  
  184.             l_r_state_next = l_p_state_DECODE;
  185.         end
  186.  
  187.         l_p_state_DECODE: begin
  188.             // l_p_state_DECODE location of operands and operation
  189.             if(l_w_cop[0:3] == 4'b0001) begin           // one operand instructions
  190.                 l_r_decoded_d_next      = 0;
  191.                 l_r_decoded_rg_next     = l_w_rg;
  192.                 l_r_decoded_dst_next    = l_w_mod == 2'b11 ? l_p_state_LOAD_DST_REG : l_p_state_LOAD_DST_MEM;
  193.                 l_r_decoded_src_next    = l_r_decoded_dst_next;
  194.                 l_r_decoded_exec_next   = l_p_state_EXEC_ONE_OP;
  195.                 l_r_decoded_store_next  = l_w_mod == 2'b11 ? l_p_state_STORE_REG : l_p_state_STORE_MEM;
  196.             end
  197.             else if(l_w_cop[0:2] == 3'b010) begin       // two operand instructions
  198.                 l_r_decoded_d_next      = l_w_d;
  199.                 l_r_decoded_rg_next     = l_w_rg;
  200.                 l_r_decoded_dst_next    = (l_w_mod == 2'b11) || (l_w_d == 1) ? l_p_state_LOAD_DST_REG : l_p_state_LOAD_DST_MEM;
  201.                 l_r_decoded_src_next    = (l_w_mod == 2'b11) || (l_w_d == 0) ? l_p_state_LOAD_SRC_REG : l_p_state_LOAD_SRC_MEM;
  202.                 l_r_decoded_exec_next   = l_p_state_EXEC_TWO_OP;
  203.                 l_r_decoded_store_next  = !l_w_cop[3] ? l_p_state_INC_PC : ((l_w_mod == 2'b11) || (l_w_d == 1) ? l_p_state_STORE_REG : l_p_state_STORE_MEM);
  204.             end
  205.             else if(l_w_cop[0:5] == 6'b100000) begin    // IO instructions
  206.                 l_r_decoded_d_next      = !l_w_cop[6] ? 1 : 0;
  207.                 l_r_decoded_rg_next     = p_RA_address;
  208.                 l_r_decoded_dst_next    = !l_w_cop[6] ? l_p_state_NO_LOAD_DST_REG : l_p_state_NO_LOAD_DST_IO;
  209.                 l_r_decoded_src_next    = !l_w_cop[6] ? l_p_state_LOAD_SRC_IO : l_p_state_LOAD_SRC_REG;
  210.                 l_r_decoded_exec_next   = l_p_state_EXEC_TRANSFER;
  211.                 l_r_decoded_store_next  = !l_w_cop[6] ? l_p_state_STORE_REG : l_p_state_STORE_IO;
  212.             end
  213.            
  214.             // l_p_state_DECODE address calculation mode
  215.             if(l_w_cop[0] == 0) begin
  216.                 case(l_w_mod)
  217.                     2'b00: begin
  218.                         l_r_state_next = l_w_rm[0] ? l_p_state_ADDR_REG : l_p_state_ADDR_SUM;
  219.                     end
  220.                    
  221.                     2'b11: begin
  222.                         l_r_state_next = l_r_decoded_src_next;
  223.                     end
  224.                 endcase
  225.             end
  226.             else begin
  227.                 if(l_w_cop[0:5] == 6'b100000) begin     // IO instructions
  228.                     l_r_state_next = l_p_state_ADDR_IO;
  229.                 end
  230.             end
  231.         end
  232.        
  233.         l_p_state_ADDR_SUM: begin
  234.             o_r_regs_addr = l_w_rm[1] ? p_BB_address : p_BA_address;
  235.             o_r_regs_oe = 1;
  236.             o_r_t1_we = 1;
  237.  
  238.             l_r_state_next = l_p_state_ADDR_SUM + 1;
  239.         end
  240.  
  241.         l_p_state_ADDR_SUM + 'd1: begin
  242.             o_r_regs_addr = l_w_rm[2] ? p_XB_address : p_XA_address;
  243.             o_r_regs_oe = 1;
  244.             o_r_t2_we = 1;
  245.  
  246.             l_r_state_next = l_p_state_ADDR_SUM + 2;
  247.         end
  248.  
  249.         l_p_state_ADDR_SUM + 'd2: begin
  250.             o_r_t1_oe = 1;
  251.             o_r_t2_oe = 1;
  252.             o_r_alu_carry = 0;
  253.             o_r_alu_opcode = p_opcode_ADC;
  254.             o_r_alu_oe = 1;
  255.             if(l_r_decoded_d)
  256.                 o_r_t2_we = 1;
  257.             else
  258.                 o_r_t1_we = 1;
  259.  
  260.             l_r_state_next = l_r_decoded_src;
  261.         end
  262.        
  263.         l_p_state_ADDR_REG: begin
  264.             o_r_regs_addr = l_w_rm;
  265.             o_r_regs_oe = 1;
  266.             if(l_r_decoded_d)
  267.                 o_r_t2_we = 1;
  268.             else
  269.                 o_r_t1_we = 1;
  270.  
  271.             l_r_state_next = l_r_decoded_src;
  272.         end
  273.        
  274.         l_p_state_ADDR_IO: begin
  275.             o_r_ir_oe = 1;
  276.             if(l_r_decoded_d)
  277.                 o_r_t2_we = 1;
  278.             else
  279.                 o_r_t1_we = 1;
  280.  
  281.             l_r_state_next = l_r_decoded_src;
  282.         end
  283.        
  284.         l_p_state_LOAD_SRC_REG: begin
  285.             o_r_regs_addr = l_r_decoded_d ? l_w_rm : l_r_decoded_rg;
  286.             o_r_regs_oe = 1;
  287.             o_r_t2_we = 1;
  288.  
  289.             l_r_state_next = l_r_decoded_dst;
  290.         end
  291.        
  292.         l_p_state_LOAD_SRC_MEM: begin
  293.             o_r_t1_oe = 0;
  294.             o_r_t2_oe = 1;
  295.             o_r_alu_opcode = p_opcode_OR;
  296.             o_r_alu_oe = 1;
  297.             o_r_ma_we = 1;
  298.  
  299.             l_r_state_next = l_p_state_LOAD_SRC_MEM + 1;
  300.         end
  301.  
  302.         l_p_state_LOAD_SRC_MEM + 'd1: begin
  303.             o_r_ma_oe = 1;
  304.  
  305.             l_r_state_next = l_p_state_LOAD_SRC_MEM + 2;
  306.         end
  307.  
  308.         l_p_state_LOAD_SRC_MEM + 'd2: begin
  309.             o_r_ram_oe = 1;
  310.             o_r_t2_we = 1;
  311.  
  312.             l_r_state_next = l_r_decoded_dst;
  313.         end
  314.  
  315.         l_p_state_LOAD_SRC_IO: begin
  316.             o_r_t1_oe = 0;
  317.             o_r_t2_oe = 1;
  318.             o_r_alu_opcode = p_opcode_OR;
  319.             o_r_alu_oe = 1;
  320.             o_r_ioa_we = 1;
  321.  
  322.             l_r_state_next = l_p_state_LOAD_SRC_IO + 1;
  323.         end
  324.  
  325.         l_p_state_LOAD_SRC_IO + 'd1: begin
  326.             o_r_ioa_oe = 1;
  327.             o_r_io_oe = 1;
  328.             o_r_t2_we = 1;
  329.  
  330.             l_r_state_next = l_r_decoded_dst;
  331.         end
  332.        
  333.         l_p_state_LOAD_DST_REG: begin
  334.             o_r_regs_addr = l_r_decoded_d ? l_r_decoded_rg : l_w_rm;
  335.             o_r_regs_oe = 1;
  336.             o_r_t1_we = 1;
  337.  
  338.             l_r_state_next = l_r_decoded_exec;
  339.         end
  340.        
  341.         l_p_state_LOAD_DST_MEM: begin
  342.             o_r_t1_oe = 1;
  343.             o_r_t2_oe = 0;
  344.             o_r_alu_opcode = p_opcode_OR;
  345.             o_r_alu_oe = 1;
  346.             o_r_ma_we = 1;
  347.  
  348.             l_r_state_next = l_p_state_LOAD_DST_MEM + 1;
  349.         end
  350.  
  351.         l_p_state_LOAD_DST_MEM + 'd1: begin
  352.             o_r_ma_oe = 1;
  353.  
  354.             l_r_state_next = l_p_state_LOAD_DST_MEM + 2;
  355.         end
  356.  
  357.         l_p_state_LOAD_DST_MEM + 'd2: begin
  358.             o_r_ram_oe = 1;
  359.             o_r_t1_we = 1;
  360.  
  361.             l_r_state_next = l_r_decoded_exec;
  362.         end
  363.  
  364.         l_p_state_NO_LOAD_DST_REG: begin
  365.             l_r_state_next = l_r_decoded_exec;
  366.         end
  367.  
  368.         l_p_state_NO_LOAD_DST_IO: begin
  369.             o_r_t1_oe = 1;
  370.             o_r_t2_oe = 0;
  371.             o_r_alu_opcode = p_opcode_OR;
  372.             o_r_alu_oe = 1;
  373.             o_r_ioa_we = 1;
  374.  
  375.             l_r_state_next = l_r_decoded_exec;
  376.         end
  377.  
  378.         l_p_state_EXEC_ONE_OP: begin
  379.             o_r_t1_oe = 1;
  380.             case(l_w_cop[4:6])
  381.                 3'b000: begin                               // INC
  382.                     o_r_alu_carry = 1;
  383.                     o_r_alu_opcode = p_opcode_ADC;
  384.                 end
  385.                 3'b001: begin                               // DEC
  386.                     o_r_alu_carry = 1;
  387.                     o_r_alu_opcode = p_opcode_SBB1;
  388.                 end
  389.                 3'b010: begin                               // NEG
  390.                     o_r_alu_carry = 0;
  391.                     o_r_alu_opcode = p_opcode_SBB2;
  392.                 end
  393.                 3'b011: begin                               // NOT
  394.                     o_r_alu_opcode = p_opcode_NOT;
  395.                 end
  396.                 3'b100: o_r_alu_opcode = p_opcode_SHL;                  // SHL/SAL
  397.                 3'b101: o_r_alu_opcode = p_opcode_SHR;                  // SHR
  398.                 3'b110: o_r_alu_opcode = p_opcode_SAR;                  // SAR
  399.             endcase
  400.             o_r_alu_oe = 1;
  401.             o_r_t1_we = 1;
  402.             o_r_flags_sel = 1;
  403.             o_r_flags_we = 1;
  404.  
  405.             l_r_state_next = l_r_decoded_store;
  406.         end
  407.        
  408.         l_p_state_EXEC_TWO_OP: begin
  409.             o_r_t1_oe = 1;
  410.             o_r_t2_oe = 1;
  411.             case(l_w_cop[4:6])
  412.                 3'b000: begin                               // ADD
  413.                     o_r_alu_carry = 0;
  414.                     o_r_alu_opcode = p_opcode_ADC;
  415.                 end
  416.                 3'b001: begin                               // ADC
  417.                     o_r_alu_carry = i_w_flags[0];
  418.                     o_r_alu_opcode = p_opcode_ADC;
  419.                 end
  420.                 3'b010: begin                               // SUB/CMP
  421.                     o_r_alu_carry = 0;
  422.                     o_r_alu_opcode = p_opcode_SBB1;
  423.                 end
  424.                 3'b011: begin                               // SBB
  425.                     o_r_alu_carry = i_w_flags[0];
  426.                     o_r_alu_opcode = p_opcode_SBB1;
  427.                 end
  428.                 3'b100: o_r_alu_opcode = p_opcode_AND;         // AND/TEST
  429.                 3'b101: o_r_alu_opcode = p_opcode_OR;          // OR
  430.                 3'b110: o_r_alu_opcode = p_opcode_XOR;         // XOR
  431.             endcase
  432.             o_r_alu_oe = 1;
  433.             o_r_t1_we = 1;
  434.             o_r_flags_sel = 1;
  435.             o_r_flags_we = 1;
  436.  
  437.             l_r_state_next = l_r_decoded_store;
  438.         end
  439.  
  440.         l_p_state_EXEC_TRANSFER: begin
  441.             o_r_t1_oe = 0;
  442.             o_r_t2_oe = 1;
  443.             o_r_alu_opcode = p_opcode_OR;
  444.             o_r_alu_oe = 1;
  445.             o_r_t1_we = 1;
  446.  
  447.             l_r_state_next = l_r_decoded_store;
  448.         end
  449.        
  450.         l_p_state_STORE_REG: begin
  451.             o_r_t1_oe = 1;
  452.             o_r_t2_oe = 0;
  453.             o_r_alu_opcode = p_opcode_OR;
  454.             o_r_alu_oe = 1;
  455.             o_r_regs_addr = l_r_decoded_d ? l_r_decoded_rg : l_w_rm;
  456.             o_r_regs_we = 1;
  457.  
  458.             l_r_state_next = l_p_state_INC_PC;
  459.         end
  460.        
  461.         l_p_state_STORE_MEM: begin
  462.             o_r_t1_oe = 1;
  463.             o_r_t2_oe = 0;
  464.             o_r_alu_opcode = p_opcode_OR;
  465.             o_r_alu_oe = 1;
  466.             o_r_ma_oe = 1;
  467.             o_r_ram_we = 1;
  468.  
  469.             l_r_state_next = l_p_state_STORE_MEM + 1;
  470.         end
  471.  
  472.         l_p_state_STORE_MEM + 'd1: begin
  473.             l_r_state_next = l_p_state_INC_PC;
  474.         end
  475.  
  476.         l_p_state_STORE_IO: begin
  477.             o_r_t1_oe = 1;
  478.             o_r_t2_oe = 0;
  479.             o_r_alu_opcode = p_opcode_OR;
  480.             o_r_alu_oe = 1;
  481.             o_r_ioa_oe = 1;
  482.             o_r_io_we = 1;
  483.  
  484.             l_r_state_next = l_p_state_INC_PC;
  485.         end
  486.  
  487.         l_p_state_INC_PC: begin
  488.             o_r_pc_oe = 1;
  489.             o_r_t1_we = 1;
  490.  
  491.             l_r_state_next = l_p_state_INC_PC + 1;
  492.         end
  493.  
  494.         l_p_state_INC_PC + 'd1: begin
  495.             o_r_t1_oe = 1;
  496.             o_r_pc_we = 1;
  497.             o_r_alu_oe = 1;
  498.             o_r_alu_carry = 1;
  499.             o_r_alu_opcode = p_opcode_ADC;
  500.  
  501.             l_r_state_next = l_p_state_FETCH;
  502.         end
  503.  
  504.         default: l_r_state_next = l_p_state_RESET;
  505.     endcase
  506. end
  507.  
  508. assign o_w_state_disp_out = l_r_state;
  509.  
  510. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement