ellipse_fill32.v 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  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_ellipse_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 signed [31:0] _t_xx;
  51. reg signed [31:0] _t_yy;
  52. reg signed [63:0] _t_xh;
  53. reg [31:0] _d_yaddr;
  54. reg [31:0] _q_yaddr;
  55. reg signed [15:0] _d_x;
  56. reg signed [15:0] _q_x;
  57. reg signed [15:0] _d_y;
  58. reg signed [15:0] _q_y;
  59. reg signed [15:0] _d_rw;
  60. reg signed [15:0] _q_rw;
  61. reg signed [15:0] _d_rh;
  62. reg signed [15:0] _q_rh;
  63. reg signed [31:0] _d_ww;
  64. reg signed [31:0] _q_ww;
  65. reg signed [31:0] _d_hh;
  66. reg signed [31:0] _q_hh;
  67. reg signed [63:0] _d_yw;
  68. reg signed [63:0] _q_yw;
  69. reg signed [63:0] _d_wh;
  70. reg signed [63:0] _q_wh;
  71. reg [0:0] _d_bus_cyc;
  72. reg [0:0] _q_bus_cyc;
  73. reg [0:0] _d_bus_stb;
  74. reg [0:0] _q_bus_stb;
  75. reg [31:0] _d_bus_adr;
  76. reg [31:0] _q_bus_adr;
  77. reg [0:0] _d_bus_we;
  78. reg [0:0] _q_bus_we;
  79. reg [31:0] _d_bus_dat_w;
  80. reg [31:0] _q_bus_dat_w;
  81. reg [15:0] _d_bus_sel;
  82. reg [15:0] _q_bus_sel;
  83. reg [2:0] _d__idx_fsm0,_q__idx_fsm0;
  84. assign out_bus_cyc = _q_bus_cyc;
  85. assign out_bus_stb = _q_bus_stb;
  86. assign out_bus_adr = _q_bus_adr;
  87. assign out_bus_we = _q_bus_we;
  88. assign out_bus_dat_w = _q_bus_dat_w;
  89. assign out_bus_sel = _q_bus_sel;
  90. assign out_done = (_q__idx_fsm0 == 0)
  91. ;
  92. `ifdef FORMAL
  93. initial begin
  94. assume(reset);
  95. end
  96. assume property($initstate || (in_run || out_done));
  97. `endif
  98. always @* begin
  99. _d_yaddr = _q_yaddr;
  100. _d_x = _q_x;
  101. _d_y = _q_y;
  102. _d_rw = _q_rw;
  103. _d_rh = _q_rh;
  104. _d_ww = _q_ww;
  105. _d_hh = _q_hh;
  106. _d_yw = _q_yw;
  107. _d_wh = _q_wh;
  108. _d_bus_cyc = _q_bus_cyc;
  109. _d_bus_stb = _q_bus_stb;
  110. _d_bus_adr = _q_bus_adr;
  111. _d_bus_we = _q_bus_we;
  112. _d_bus_dat_w = _q_bus_dat_w;
  113. _d_bus_sel = _q_bus_sel;
  114. _d__idx_fsm0 = _q__idx_fsm0;
  115. _t_xx = 0;
  116. _t_yy = 0;
  117. _t_xh = 0;
  118. // _always_pre
  119. (* full_case *)
  120. case (_q__idx_fsm0)
  121. 1: begin
  122. // _top
  123. // __block_1
  124. _d_bus_cyc = 0;
  125. _d_bus_stb = 0;
  126. _d_bus_sel = 65535;
  127. // __block_2
  128. _d_rh = (in_y1-in_y0)>>1;
  129. _d_rw = (in_x1-in_x0)>>1;
  130. _d_ww = _d_rw*_d_rw;
  131. _d_hh = _d_rh*_d_rh;
  132. _d_wh = (_d_ww)*(_d_hh);
  133. _d_yaddr = in_base;
  134. _d_y = -_d_rh;
  135. _d__idx_fsm0 = 2;
  136. end
  137. 2: begin
  138. // __while__block_3
  139. if (_q_y<_q_rh) begin
  140. // __block_4
  141. // __block_6
  142. _d_bus_adr = (_q_yaddr);
  143. _t_yy = _q_y*_q_y;
  144. _d_yw = (_t_yy)*(_q_ww);
  145. _d_x = -_q_rw;
  146. _d__idx_fsm0 = 4;
  147. end else begin
  148. _d__idx_fsm0 = 0;
  149. end
  150. end
  151. 4: begin
  152. // __while__block_7
  153. if (_q_x<_q_rw) begin
  154. // __block_8
  155. // __block_10
  156. _t_xx = _q_x*_q_x;
  157. _t_xh = (_t_xx)*(_q_hh);
  158. if (_t_xh+_q_yw<_q_wh) begin
  159. // __block_11
  160. // __block_13
  161. // __block_14
  162. _d_bus_dat_w = in_rgba;
  163. _d_bus_we = 1;
  164. _d_bus_stb = 1;
  165. _d_bus_cyc = 1;
  166. // __block_15
  167. if (!((_d_bus_stb&&_d_bus_we)&&!(_d_bus_stb&&in_bus_ack&&_d_bus_we))) begin
  168. // __block_16
  169. // __block_18
  170. _d_bus_stb = 0;
  171. _d_bus_adr = (_q_bus_adr+(in_xstride));
  172. _d_x = _q_x+1;
  173. // __block_19
  174. end else begin
  175. // __block_17
  176. end
  177. // __block_20
  178. // __block_21
  179. end else begin
  180. // __block_12
  181. // __block_22
  182. _d_bus_adr = (_q_bus_adr+(in_xstride));
  183. _d_x = _q_x+1;
  184. // __block_23
  185. end
  186. // __block_24
  187. // __block_25
  188. _d__idx_fsm0 = 4;
  189. end else begin
  190. _d__idx_fsm0 = 5;
  191. end
  192. end
  193. 3: begin
  194. // __block_5
  195. _d__idx_fsm0 = 0;
  196. end
  197. 5: begin
  198. // __while__block_26
  199. if (((_q_bus_stb&&_q_bus_we)&&!(_q_bus_stb&&in_bus_ack&&_q_bus_we))) begin
  200. // __block_27
  201. // __block_29
  202. // __block_30
  203. _d__idx_fsm0 = 5;
  204. end else begin
  205. _d__idx_fsm0 = 6;
  206. end
  207. end
  208. 6: begin
  209. // __block_28
  210. // __block_31
  211. _d_bus_cyc = 0;
  212. _d_bus_stb = 0;
  213. // __block_32
  214. _d_yaddr = _q_yaddr+in_ystride;
  215. _d_y = _q_y+1;
  216. // __block_33
  217. _d__idx_fsm0 = 2;
  218. end
  219. 0: begin
  220. end
  221. default: begin
  222. _d__idx_fsm0 = {3{1'bx}};
  223. `ifdef FORMAL
  224. assume(0);
  225. `endif
  226. end
  227. endcase
  228. // _always_post
  229. // pipeline stage triggers
  230. end
  231. always @(posedge clock) begin
  232. _q_yaddr <= _d_yaddr;
  233. _q_x <= _d_x;
  234. _q_y <= _d_y;
  235. _q_rw <= _d_rw;
  236. _q_rh <= _d_rh;
  237. _q_ww <= _d_ww;
  238. _q_hh <= _d_hh;
  239. _q_yw <= _d_yw;
  240. _q_wh <= _d_wh;
  241. _q_bus_cyc <= _d_bus_cyc;
  242. _q_bus_stb <= _d_bus_stb;
  243. _q_bus_adr <= _d_bus_adr;
  244. _q_bus_we <= _d_bus_we;
  245. _q_bus_dat_w <= _d_bus_dat_w;
  246. _q_bus_sel <= _d_bus_sel;
  247. _q__idx_fsm0 <= reset ? 0 : ( ~in_run ? 1 : _d__idx_fsm0);
  248. end
  249. endmodule