line32.v 9.3 KB

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