Advertisement
Guest User

Untitled

a guest
Jul 10th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VeriLog 10.88 KB | None | 0 0
  1. module main_0002_mmul_fsm (
  2.     input wire bus2ip_clk_i,
  3.     input wire bus2ip_reset_i,
  4.     output reg [17:0] ip2fsm_dma_addr_o,
  5.     output reg [71:0] ip2fsm_data_o,
  6.     output reg [1:0] ip2fsm_write_req_o,
  7.     input wire fsm2ip_dma_wr_ack_i,
  8.     input wire [71:0] fsm2ip_data_i,
  9.     output reg [1:0] ip2fsm_read_req_o,
  10.     input wire fsm2ip_dma_rd_ack_i,
  11.     input wire start_i,
  12.     output reg ready_o,
  13.     output reg running_o,
  14.     input wire [17:0] m1_13_i,
  15.     input wire [17:0] m2_18_i,
  16.     input wire [17:0] res_26_i,
  17.     output reg signed [17:0] exit_bb_idx_o
  18. );
  19.  
  20. localparam [17:0] BITS_PER_WORD = 18;
  21.  
  22.  
  23. /* begin parameter */
  24. parameter [4:0] IDLE = 0;
  25. parameter [4:0] ST_1 = 1;
  26. parameter [4:0] ST_2 = 2;
  27. parameter [4:0] ST_3 = 3;
  28. parameter [4:0] ST_4 = 4;
  29. parameter [4:0] ST_5 = 5;
  30. parameter [4:0] ST_6 = 6;
  31. parameter [4:0] ST_7 = 7;
  32. parameter [4:0] ST_8 = 8;
  33. parameter [4:0] ST_9 = 9;
  34. parameter [4:0] ST_10 = 10;
  35. parameter [4:0] ST_11 = 11;
  36. parameter [4:0] ST_12 = 12;
  37. parameter [4:0] ST_13 = 13;
  38. parameter [4:0] ST_14 = 14;
  39. parameter [4:0] ST_15 = 15;
  40. parameter [4:0] ST_16 = 16;
  41. parameter [4:0] ST_17 = 17;
  42. parameter [4:0] ST_18 = 18;
  43. parameter [4:0] ST_19 = 19;
  44. parameter [4:0] ST_20 = 20;
  45. parameter [4:0] ST_21 = 21;
  46. parameter [4:0] ST_22 = 22;
  47. parameter [4:0] ST_23 = 23;
  48. /* end parameter */
  49.  
  50. /* begin registers */
  51. reg  [4:0] current_state;
  52. reg  [4:0] next_state;
  53. reg   next_running;
  54. reg start_ff1;
  55. reg start_rising_edge;
  56. reg  [17:0] next_exit_bb_idx_o;
  57. reg  [17:0] next_ip2fsm_dma_addr;
  58. reg  [17:0] global_reg_1;
  59. reg  [17:0] next_global_reg_1;
  60. reg  [17:0] global_reg_2;
  61. reg  [17:0] next_global_reg_2;
  62. reg  [17:0] global_reg_3;
  63. reg  [17:0] next_global_reg_3;
  64. reg  [17:0] global_reg_4;
  65. reg  [17:0] next_global_reg_4;
  66. reg  [17:0] global_reg_5;
  67. reg  [17:0] next_global_reg_5;
  68. reg  [17:0] global_reg_6;
  69. reg  [17:0] next_global_reg_6;
  70. reg signed [17:0] global_reg_7;
  71. reg signed [17:0] next_global_reg_7;
  72. reg  [17:0] global_reg_8;
  73. reg  [17:0] next_global_reg_8;
  74. reg  [17:0] global_reg_9;
  75. reg  [17:0] next_global_reg_9;
  76. reg  [17:0] global_reg_10;
  77. reg  [17:0] next_global_reg_10;
  78. reg  [17:0] global_reg_11;
  79. reg  [17:0] next_global_reg_11;
  80. reg signed [17:0] global_reg_12;
  81. reg signed [17:0] next_global_reg_12;
  82. reg signed [17:0] global_reg_13;
  83. reg signed [17:0] next_global_reg_13;
  84. reg  [17:0] global_reg_14;
  85. reg  [17:0] next_global_reg_14;
  86. reg  [17:0] global_reg_15;
  87. reg  [17:0] next_global_reg_15;
  88. reg  [17:0] global_reg_16;
  89. reg  [17:0] next_global_reg_16;
  90. reg  [17:0] global_reg_17;
  91. reg  [17:0] next_global_reg_17;
  92. reg  [17:0] global_reg_18;
  93. reg  [17:0] next_global_reg_18;
  94. reg signed [17:0] global_reg_19;
  95. reg signed [17:0] next_global_reg_19;
  96. reg signed [17:0] global_reg_20;
  97. reg signed [17:0] next_global_reg_20;
  98. reg signed [17:0] global_reg_21;
  99. reg signed [17:0] next_global_reg_21;
  100. reg  [17:0] global_reg_22;
  101. reg  [17:0] next_global_reg_22;
  102. reg  [17:0] global_reg_23;
  103. reg  [17:0] next_global_reg_23;
  104. reg  [17:0] global_reg_24;
  105. reg  [17:0] next_global_reg_24;
  106. reg  [17:0] global_reg_25;
  107. reg  [17:0] next_global_reg_25;
  108. reg  [17:0] global_reg_26;
  109. reg  [17:0] next_global_reg_26;
  110. reg  [17:0] global_reg_27;
  111. reg  [17:0] next_global_reg_27;
  112. reg  [17:0] global_reg_28;
  113. reg  [17:0] next_global_reg_28;
  114. reg  [17:0] global_reg_29;
  115. reg  [17:0] next_global_reg_29;
  116. reg  [17:0] global_reg_30;
  117. reg  [17:0] next_global_reg_30;
  118. reg  [17:0] global_reg_31;
  119. reg  [17:0] next_global_reg_31;
  120. /* end registers */
  121.  
  122. /* begin submodule registers */
  123. /* end submodule registers */
  124.  
  125. /* begin submodules */
  126. /* end submodules */
  127.  
  128. /* begin FSM control logic */
  129. always @(posedge bus2ip_clk_i or posedge bus2ip_reset_i)
  130. begin:FSM_CTRL
  131.     if(bus2ip_reset_i)
  132.         begin
  133.             current_state <= IDLE;
  134.             start_ff1 <= 0;
  135.             start_rising_edge <= 0;
  136.             exit_bb_idx_o <= 0;
  137.             running_o <= 0;
  138.         end
  139.     else
  140.         begin
  141.             current_state <= next_state;
  142.             running_o <= next_running;
  143.             start_ff1 <= start_i;
  144.             start_rising_edge <= start_i & ~start_ff1;
  145.             global_reg_1 <= next_global_reg_1;
  146.             global_reg_2 <= next_global_reg_2;
  147.             global_reg_3 <= next_global_reg_3;
  148.             global_reg_4 <= next_global_reg_4;
  149.             global_reg_5 <= next_global_reg_5;
  150.             global_reg_6 <= next_global_reg_6;
  151.             global_reg_7 <= next_global_reg_7;
  152.             global_reg_8 <= next_global_reg_8;
  153.             global_reg_9 <= next_global_reg_9;
  154.             global_reg_10 <= next_global_reg_10;
  155.             global_reg_11 <= next_global_reg_11;
  156.             global_reg_12 <= next_global_reg_12;
  157.             global_reg_13 <= next_global_reg_13;
  158.             global_reg_14 <= next_global_reg_14;
  159.             global_reg_15 <= next_global_reg_15;
  160.             global_reg_16 <= next_global_reg_16;
  161.             global_reg_17 <= next_global_reg_17;
  162.             global_reg_18 <= next_global_reg_18;
  163.             global_reg_19 <= next_global_reg_19;
  164.             global_reg_20 <= next_global_reg_20;
  165.             global_reg_21 <= next_global_reg_21;
  166.             global_reg_22 <= next_global_reg_22;
  167.             global_reg_23 <= next_global_reg_23;
  168.             global_reg_24 <= next_global_reg_24;
  169.             global_reg_25 <= next_global_reg_25;
  170.             global_reg_26 <= next_global_reg_26;
  171.             global_reg_27 <= next_global_reg_27;
  172.             global_reg_28 <= next_global_reg_28;
  173.             global_reg_29 <= next_global_reg_29;
  174.             global_reg_30 <= next_global_reg_30;
  175.             global_reg_31 <= next_global_reg_31;
  176.             next_ip2fsm_dma_addr <= ip2fsm_dma_addr_o;
  177.             exit_bb_idx_o <= next_exit_bb_idx_o;
  178.  
  179.         end
  180. end
  181. /* end FSM control logic */
  182.  
  183. /* begin FSM out logic */
  184. always@(*)
  185.  
  186. begin:OUT_LOGIC
  187.     ip2fsm_data_o <= 0;
  188.     ip2fsm_write_req_o <= 0;
  189.     ip2fsm_read_req_o <= 0;
  190.     next_state <= current_state;
  191.     next_running <= running_o;
  192.     ready_o <= 0;
  193.     next_global_reg_1 <= global_reg_1;
  194.     next_global_reg_2 <= global_reg_2;
  195.     next_global_reg_3 <= global_reg_3;
  196.     next_global_reg_4 <= global_reg_4;
  197.     next_global_reg_5 <= global_reg_5;
  198.     next_global_reg_6 <= global_reg_6;
  199.     next_global_reg_7 <= global_reg_7;
  200.     next_global_reg_8 <= global_reg_8;
  201.     next_global_reg_9 <= global_reg_9;
  202.     next_global_reg_10 <= global_reg_10;
  203.     next_global_reg_11 <= global_reg_11;
  204.     next_global_reg_12 <= global_reg_12;
  205.     next_global_reg_13 <= global_reg_13;
  206.     next_global_reg_14 <= global_reg_14;
  207.     next_global_reg_15 <= global_reg_15;
  208.     next_global_reg_16 <= global_reg_16;
  209.     next_global_reg_17 <= global_reg_17;
  210.     next_global_reg_18 <= global_reg_18;
  211.     next_global_reg_19 <= global_reg_19;
  212.     next_global_reg_20 <= global_reg_20;
  213.     next_global_reg_21 <= global_reg_21;
  214.     next_global_reg_22 <= global_reg_22;
  215.     next_global_reg_23 <= global_reg_23;
  216.     next_global_reg_24 <= global_reg_24;
  217.     next_global_reg_25 <= global_reg_25;
  218.     next_global_reg_26 <= global_reg_26;
  219.     next_global_reg_27 <= global_reg_27;
  220.     next_global_reg_28 <= global_reg_28;
  221.     next_global_reg_29 <= global_reg_29;
  222.     next_global_reg_30 <= global_reg_30;
  223.     next_global_reg_31 <= global_reg_31;
  224.     ip2fsm_dma_addr_o <= next_ip2fsm_dma_addr;
  225.     next_exit_bb_idx_o <= exit_bb_idx_o;
  226.     case(current_state)
  227.         IDLE:begin
  228.             ready_o <= 1;
  229.              next_running <= 0;
  230.             ip2fsm_dma_addr_o <= 0;
  231.             if(start_rising_edge)
  232.             begin
  233.                 ready_o <= 0;
  234.                 next_running <= 1;
  235.                 next_state <= ST_1;
  236.                 next_global_reg_2 <= m2_18_i;
  237.                 next_global_reg_3 <= res_26_i;
  238.                 next_global_reg_16 <= 18'd0;
  239.                 next_global_reg_1 <= m1_13_i;
  240.             end
  241.             end
  242.         ST_1:begin //(null)
  243.             next_global_reg_27 <= global_reg_1;
  244.             next_global_reg_26 <= global_reg_3;
  245.             next_global_reg_4 <= 18'd0;
  246.             next_state <= ST_2;
  247.             end
  248.         ST_2:begin //(null)
  249.             next_global_reg_29 <= global_reg_27 + global_reg_16;
  250.             next_global_reg_28 <= global_reg_16 + global_reg_26;
  251.             next_state <= ST_3;
  252.             end
  253.         ST_3:begin //(null)
  254.             next_global_reg_31 <= global_reg_29;
  255.             next_global_reg_30 <= global_reg_28;
  256.             next_state <= ST_4;
  257.             end
  258.         ST_4:begin //(null)
  259.             next_global_reg_5 <= global_reg_31;
  260.             next_global_reg_6 <= global_reg_30;
  261.             next_state <= ST_5;
  262.             next_state <= ST_5;
  263.             end
  264.         ST_5:begin //(null)
  265.             next_global_reg_23 <= global_reg_2;
  266.             next_global_reg_7 <= 18'd0;
  267.             next_global_reg_8 <= 18'd0;
  268.             next_state <= ST_6;
  269.             end
  270.         ST_6:begin //(null)
  271.             next_global_reg_24 <= global_reg_23 + global_reg_4;
  272.             next_state <= ST_7;
  273.             end
  274.         ST_7:begin //(null)
  275.             next_global_reg_25 <= global_reg_24;
  276.             next_state <= ST_8;
  277.             end
  278.         ST_8:begin //(null)
  279.             next_global_reg_9 <= global_reg_25;
  280.             next_state <= ST_9;
  281.             next_state <= ST_9;
  282.             end
  283.         ST_9:begin //(null)
  284.             next_global_reg_17 <= global_reg_5 + global_reg_8;
  285.             next_global_reg_18 <= global_reg_9;
  286.             next_global_reg_11 <= global_reg_8 + 18'd2;
  287.             next_global_reg_10 <= global_reg_9 + 18'd16;
  288.             next_state <= ST_10;
  289.             end
  290.         ST_10:begin //(null)
  291.             ip2fsm_dma_addr_o <= (global_reg_17 );
  292.             next_state <= ST_11;
  293.             end
  294.         ST_11:begin //(null)
  295.             ip2fsm_read_req_o <= 5'd2;
  296.             next_global_reg_19 <= fsm2ip_data_i;
  297.             ip2fsm_dma_addr_o <= (global_reg_18 );
  298.             if (!fsm2ip_dma_rd_ack_i)
  299.             begin
  300.                 ip2fsm_dma_addr_o <= (global_reg_17 );
  301.                 next_state <= ST_11;
  302.             end
  303.             else
  304.             begin
  305.                 next_state <= ST_12;
  306.             end
  307.             end
  308.         ST_12:begin //(null)
  309.             ip2fsm_read_req_o <= 5'd2;
  310.             next_global_reg_20 <= fsm2ip_data_i;
  311.             if (!fsm2ip_dma_rd_ack_i)
  312.             begin
  313.                 ip2fsm_dma_addr_o <= (global_reg_18 );
  314.                 next_state <= ST_12;
  315.             end
  316.             else
  317.             begin
  318.                 next_state <= ST_13;
  319.             end
  320.             end
  321.         ST_13:begin //(null)
  322.             next_global_reg_21 <= global_reg_19 * global_reg_20;
  323.             next_state <= ST_14;
  324.             end
  325.         ST_14:begin //(null)
  326.             next_global_reg_12 <= global_reg_21 + global_reg_7;
  327.             next_state <= ST_15;
  328.             end
  329.         ST_15:begin //(null)
  330.             next_global_reg_13 <= global_reg_12;
  331.             if (global_reg_11 != 16)
  332.             begin
  333.                 next_state <= ST_16;
  334.             end
  335.             else if (global_reg_11 == 16)
  336.             begin
  337.                 next_state <= ST_17;
  338.             end
  339.             end
  340.         ST_16:begin //(null)
  341.             next_global_reg_7 <= global_reg_12;
  342.             next_global_reg_8 <= global_reg_11;
  343.             next_global_reg_9 <= global_reg_10;
  344.             next_state <= ST_9;
  345.             end
  346.         ST_17:begin //(null)
  347.             next_global_reg_22 <= global_reg_6 + global_reg_4;
  348.             next_global_reg_14 <= global_reg_4 + 18'd2;
  349.             next_state <= ST_18;
  350.             end
  351.         ST_18:begin //(null)
  352.             ip2fsm_dma_addr_o <= (global_reg_22 );
  353.             ip2fsm_write_req_o <= 5'd2;
  354.             ip2fsm_data_o <= global_reg_13;
  355.             if (fsm2ip_dma_wr_ack_i == 1'b0)
  356.             begin
  357.                 next_state <= ST_18;
  358.             end
  359.             else if (global_reg_14 != 16)
  360.             begin
  361.                 next_state <= ST_19;
  362.             end
  363.             else if (global_reg_14 == 16)
  364.             begin
  365.                 next_state <= ST_20;
  366.             end
  367.             end
  368.         ST_19:begin //(null)
  369.             next_global_reg_4 <= global_reg_14;
  370.             next_state <= ST_5;
  371.             end
  372.         ST_20:begin //(null)
  373.             next_global_reg_15 <= global_reg_16 + 18'd16;
  374.             next_state <= ST_21;
  375.             end
  376.         ST_21:begin //(null)
  377.             if (global_reg_15 != 128)
  378.             begin
  379.                 next_state <= ST_23;
  380.             end
  381.             else if (global_reg_15 == 128)
  382.             begin
  383.                 next_state <= ST_22;
  384.             end
  385.             end
  386.         ST_22:begin //(null)
  387.             next_state <= IDLE;
  388.             next_exit_bb_idx_o <= 8;
  389.             end
  390.         ST_23:begin //(null)
  391.             next_global_reg_16 <= global_reg_15;
  392.             next_state <= ST_1;
  393.             end
  394.  
  395.     endcase
  396. end
  397. /* end FSM out logic */
  398.  
  399. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement