rectangle_fill32.v 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. // Copyright (C) 2023 Victor Suarez Rovere <suarezvictor@gmail.com>
  2. // SPDX-License-Identifier: AGPL-3.0-only
  3. //
  4. // ** Autogenerated file **
  5. module M_accel_rectangle_fill32 (
  6. in_bus_ack,
  7. in_bus_dat_r,
  8. in_x0,
  9. in_x1,
  10. in_y0,
  11. in_y1,
  12. in_rgba,
  13. in_base,
  14. in_xstride,
  15. in_ystride,
  16. out_bus_cyc,
  17. out_bus_stb,
  18. out_bus_adr,
  19. out_bus_we,
  20. out_bus_dat_w,
  21. out_bus_sel,
  22. in_run,
  23. out_done,
  24. reset,
  25. out_clock,
  26. clock
  27. );
  28. input [0:0] in_bus_ack;
  29. input [31:0] in_bus_dat_r;
  30. input [15:0] in_x0;
  31. input [15:0] in_x1;
  32. input [15:0] in_y0;
  33. input [15:0] in_y1;
  34. input [31:0] in_rgba;
  35. input [31:0] in_base;
  36. input signed [15:0] in_xstride;
  37. input signed [15:0] in_ystride;
  38. output [0:0] out_bus_cyc;
  39. output [0:0] out_bus_stb;
  40. output [31:0] out_bus_adr;
  41. output [0:0] out_bus_we;
  42. output [31:0] out_bus_dat_w;
  43. output [15:0] out_bus_sel;
  44. input in_run;
  45. output out_done;
  46. input reset;
  47. output out_clock;
  48. input clock;
  49. assign out_clock = clock;
  50. reg [31:0] _d_yaddr;
  51. reg [31:0] _q_yaddr;
  52. reg [15:0] _d_x;
  53. reg [15:0] _q_x;
  54. reg [15:0] _d_y;
  55. reg [15:0] _q_y;
  56. reg [0:0] _d_bus_cyc;
  57. reg [0:0] _q_bus_cyc;
  58. reg [0:0] _d_bus_stb;
  59. reg [0:0] _q_bus_stb;
  60. reg [31:0] _d_bus_adr;
  61. reg [31:0] _q_bus_adr;
  62. reg [0:0] _d_bus_we;
  63. reg [0:0] _q_bus_we;
  64. reg [31:0] _d_bus_dat_w;
  65. reg [31:0] _q_bus_dat_w;
  66. reg [15:0] _d_bus_sel;
  67. reg [15:0] _q_bus_sel;
  68. reg [2:0] _d__idx_fsm0,_q__idx_fsm0;
  69. assign out_bus_cyc = _q_bus_cyc;
  70. assign out_bus_stb = _q_bus_stb;
  71. assign out_bus_adr = _q_bus_adr;
  72. assign out_bus_we = _q_bus_we;
  73. assign out_bus_dat_w = _q_bus_dat_w;
  74. assign out_bus_sel = _q_bus_sel;
  75. assign out_done = (_q__idx_fsm0 == 0)
  76. ;
  77. `ifdef FORMAL
  78. initial begin
  79. assume(reset);
  80. end
  81. assume property($initstate || (in_run || out_done));
  82. `endif
  83. always @* begin
  84. _d_yaddr = _q_yaddr;
  85. _d_x = _q_x;
  86. _d_y = _q_y;
  87. _d_bus_cyc = _q_bus_cyc;
  88. _d_bus_stb = _q_bus_stb;
  89. _d_bus_adr = _q_bus_adr;
  90. _d_bus_we = _q_bus_we;
  91. _d_bus_dat_w = _q_bus_dat_w;
  92. _d_bus_sel = _q_bus_sel;
  93. _d__idx_fsm0 = _q__idx_fsm0;
  94. // _always_pre
  95. (* full_case *)
  96. case (_q__idx_fsm0)
  97. 1: begin
  98. // _top
  99. // __block_1
  100. _d_bus_cyc = 0;
  101. _d_bus_stb = 0;
  102. _d_bus_sel = 65535;
  103. // __block_2
  104. _d_yaddr = in_base;
  105. _d_y = in_y0;
  106. _d__idx_fsm0 = 2;
  107. end
  108. 2: begin
  109. // __while__block_3
  110. if (_q_y<in_y1) begin
  111. // __block_4
  112. // __block_6
  113. // __block_7
  114. _d_bus_adr = (_q_yaddr);
  115. _d_x = in_x0;
  116. _d__idx_fsm0 = 4;
  117. end else begin
  118. _d__idx_fsm0 = 0;
  119. end
  120. end
  121. 4: begin
  122. // __while__block_8
  123. if (_q_x<in_x1) begin
  124. // __block_9
  125. // __block_11
  126. // __block_12
  127. _d_bus_dat_w = in_rgba;
  128. _d_bus_we = 1;
  129. _d_bus_stb = 1;
  130. _d_bus_cyc = 1;
  131. // __block_13
  132. if (!((_d_bus_stb&&_d_bus_we)&&!(_d_bus_stb&&in_bus_ack&&_d_bus_we))) begin
  133. // __block_14
  134. // __block_16
  135. _d_bus_stb = 0;
  136. _d_bus_adr = (_q_bus_adr+(in_xstride));
  137. _d_x = _q_x+1;
  138. // __block_17
  139. end else begin
  140. // __block_15
  141. end
  142. // __block_18
  143. // __block_19
  144. _d__idx_fsm0 = 4;
  145. end else begin
  146. _d__idx_fsm0 = 5;
  147. end
  148. end
  149. 3: begin
  150. // __block_5
  151. _d__idx_fsm0 = 0;
  152. end
  153. 5: begin
  154. // __while__block_20
  155. if (((_q_bus_stb&&_q_bus_we)&&!(_q_bus_stb&&in_bus_ack&&_q_bus_we))) begin
  156. // __block_21
  157. // __block_23
  158. // __block_24
  159. _d__idx_fsm0 = 5;
  160. end else begin
  161. _d__idx_fsm0 = 6;
  162. end
  163. end
  164. 6: begin
  165. // __block_22
  166. // __block_25
  167. _d_bus_cyc = 0;
  168. _d_bus_stb = 0;
  169. // __block_26
  170. _d_yaddr = _q_yaddr+in_ystride;
  171. // __block_27
  172. _d_y = _q_y+1;
  173. // __block_28
  174. _d__idx_fsm0 = 2;
  175. end
  176. 0: begin
  177. end
  178. default: begin
  179. _d__idx_fsm0 = {3{1'bx}};
  180. `ifdef FORMAL
  181. assume(0);
  182. `endif
  183. end
  184. endcase
  185. // _always_post
  186. // pipeline stage triggers
  187. end
  188. always @(posedge clock) begin
  189. _q_yaddr <= _d_yaddr;
  190. _q_x <= _d_x;
  191. _q_y <= _d_y;
  192. _q_bus_cyc <= _d_bus_cyc;
  193. _q_bus_stb <= _d_bus_stb;
  194. _q_bus_adr <= _d_bus_adr;
  195. _q_bus_we <= _d_bus_we;
  196. _q_bus_dat_w <= _d_bus_dat_w;
  197. _q_bus_sel <= _d_bus_sel;
  198. _q__idx_fsm0 <= reset ? 0 : ( ~in_run ? 1 : _d__idx_fsm0);
  199. end
  200. endmodule