FS_manager.v
Upload User: abszbd2002
Upload Date: 2020-10-12
Package Size: 33407k
Code Size: 46k
Development Platform:

VHDL

  1. //Design  :  inter prediction
  2. //Author  :  li haibin
  3. //files   :  FS_manager
  4. //Description : 通过状态机,来管理运动估计的数据载入和数据流动;
  5. //                  产生运动估计阵列256个PE单元的选择信号和数据流动的使能信号;
  6. //------------------------------------------------------------------------------------------------------------
  7. module FS_manager(clk,reset,cbready,swready,ven,sw_rden,cb_rden,
  8. sela,selb0,selb1,selb2,selb3,selb4,selb5,selb6,selb7,selb8,
  9. selb9,selb10,selb11,selb12,selb13,selb14,selb15,selc,
  10. sel0,sel1,sel2,sel3,sel4,sel5,sel6,sel7,sel8,sel9,sel10,
  11. sel11,sel12,sel13,sel14,sel15,en_cb,en_rb,en_new);
  12. input clk;
  13. input reset;
  14. input cbready;//当前宏块数据准备信号,‘1’表示有效;
  15. input swready;//参考宏块数据准备信号,‘1’表示有效;
  16. input ven;
  17. output sw_rden;//当前宏块数据读出使能;
  18. output cb_rden;//参考宏块数据读出使能;
  19. output sela;
  20. output [1:0] selb0,selb1,selb2,selb3,selb4,selb5,selb6,selb7,selb8,selb9,selb10,selb11,selb12,selb13,selb14,selb15;
  21. output [3:0] selc;
  22. output [1:0] sel0,sel1,sel2,sel3,sel4,sel5,sel6,sel7,sel8,sel9,sel10,sel11,sel12,sel13,sel14,sel15;
  23. output en_cb,en_rb,en_new;
  24. reg [7:0] present_state;
  25. reg [7:0] next_state;
  26. reg sela;
  27. reg [1:0] selb0,selb1,selb2,selb3,selb4,selb5,selb6,selb7,selb8,selb9,selb10,selb11,selb12,selb13,selb14,selb15;
  28. reg [3:0] selc,selc_temp,selc_temp1;
  29. reg [1:0] sel0,sel1,sel2,sel3,sel4,sel5,sel6,sel7,sel8,sel9,sel10,sel11,sel12,sel13,sel14,sel15;
  30. reg [9:0] counter1024 ,counter1024_temp;//搜索进行时的计数器,整个运动搜索需要1024个时钟周期,主要用于产生各种选择信号;
  31. reg [10:0] block_num;//一帧图像的宏块数
  32. reg [4:0] count20;//数据载入时的计数器
  33. reg ven_delay;
  34. reg fs_en_temp,fs_en_temp1;
  35. reg en_cb;
  36. reg en_temp0,en_temp1,en_new;
  37. reg cbready_temp,swready_temp;
  38. reg fs_en;
  39. //参数申明
  40. parameter s_powerup = 8'b00000001;
  41. parameter s_frameidle = 8'b00000010;
  42. parameter s_idle = 8'b00000100;
  43. parameter s_cbready = 8'b00001000;
  44. parameter s_loading = 8'b00010000;
  45. parameter s_calculating = 8'b00100000;
  46. parameter s_blockend = 8'b01000000;
  47. parameter s_frameend = 8'b10000000;
  48. always @ (posedge clk or posedge reset)
  49. if (reset==1'b1)
  50. begin
  51. cbready_temp <= 1'b0;
  52. swready_temp <= 1'b0;
  53. end
  54. else
  55. begin
  56. cbready_temp <= cbready;
  57. swready_temp <= swready;
  58. end
  59. always @ (posedge clk or posedge reset)
  60. if (reset==1'b1)
  61. ven_delay <= 1'b0;
  62. else
  63. ven_delay <= ven;
  64. //------------------数据载入时的计数器进行计数
  65. always @ (posedge clk or posedge reset)
  66. if (reset==1'b1)
  67. count20 <= 5'b00000;
  68. else
  69. if (present_state == s_loading)
  70. count20 <= count20+1'b1;
  71. else
  72. count20 <= 5'b00000;
  73. always @ (posedge clk or posedge reset)
  74. if (reset == 1'b1)
  75. en_temp0 <= 1'b0;
  76. else
  77. if (count20 == 5'b00001)
  78. en_temp0 <= 1'b1;
  79. else if (count20 == 5'b10001)
  80. en_temp0 <= 1'b0;
  81. assign cb_rden = en_temp0;
  82. assign sw_rden = en_temp0 || fs_en;
  83. always @ (posedge clk or posedge reset)
  84. if (reset == 1'b1)
  85. begin
  86. en_temp1 <= 1'b0;
  87. en_new <= 1'b0;
  88. end
  89. else
  90. begin
  91. en_temp1 <= en_temp0;
  92. en_new <= en_temp1;
  93. end
  94. //--------------------运动搜索进行时计数器工作
  95. always @ (posedge clk or posedge reset)
  96. if (reset == 1'b1)
  97. fs_en <= 1'b0;
  98. else
  99. if (present_state == s_calculating)
  100. fs_en <= 1'b1;
  101. else
  102. fs_en <= 1'b0;
  103. always @ (posedge clk or posedge reset)
  104. if (reset == 1'b1)
  105. counter1024 <= 10'b0;
  106. else
  107. if (fs_en == 1'b1)
  108. counter1024 <= counter1024 + 1'b1;
  109. else 
  110. counter1024 <= 10'b0;
  111. always @ (posedge clk or posedge reset)
  112. if (reset == 1'b1)
  113. begin
  114. fs_en_temp <= 1'b0;
  115. fs_en_temp1 <= 1'b0;
  116. end
  117. else
  118. begin
  119. fs_en_temp <= fs_en;
  120. fs_en_temp1 <= fs_en_temp;
  121. end
  122. assign en_rb = fs_en_temp1;
  123. always @ (posedge clk or posedge reset)
  124. if (reset == 1'b1)
  125. counter1024_temp <= 10'b0;
  126. else
  127. counter1024_temp <= counter1024;
  128. //----------------------- 当前寄存器数据更新选择信号的产生
  129. always @ (posedge clk or posedge reset)
  130. if (reset == 1'b1)
  131. sela <= 1'b0;
  132. else
  133. if (fs_en_temp == 1'b1 && fs_en_temp1 == 1'b0)
  134. sela <= 1'b1;
  135. else
  136. sela <= 1'b0;
  137. always @ (posedge clk or posedge reset)
  138. if (reset == 1'b1)
  139. en_cb <= 1'b0;
  140. else
  141. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  142. en_cb <= 1'b1;
  143. else
  144. en_cb <= 1'b0;
  145. //--------------------------参考寄存器数据更新选择信号的产生
  146. always @ (posedge clk or posedge reset)
  147. if (reset == 1'b1)
  148. selb0 <= 2'b00;
  149. else
  150. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  151. case (counter1024_temp[9:5])
  152. 5'b00000 : selb0 <= 2'b01;
  153. 5'b00001 : selb0 <= 2'b10;
  154. 5'b00010 : selb0 <= 2'b10;
  155. 5'b00011 : selb0 <= 2'b10;
  156. 5'b00100 : selb0 <= 2'b10;
  157. 5'b00101 : selb0 <= 2'b10;
  158. 5'b00110 : selb0 <= 2'b10;
  159. 5'b00111 : selb0 <= 2'b10;
  160. 5'b01000 : selb0 <= 2'b10;
  161. 5'b01001 : selb0 <= 2'b10;
  162. 5'b01010 : selb0 <= 2'b10;
  163. 5'b01011 : selb0 <= 2'b10;
  164. 5'b01100 : selb0 <= 2'b10;
  165. 5'b01101 : selb0 <= 2'b10;
  166. 5'b01110 : selb0 <= 2'b10;
  167. 5'b01111 : selb0 <= 2'b10;
  168. 5'b10000 : selb0 <= 2'b10;
  169. 5'b10001 : selb0 <= 2'b11;
  170. 5'b10010 : selb0 <= 2'b11;
  171. 5'b10011 : selb0 <= 2'b11;
  172. 5'b10100 : selb0 <= 2'b11;
  173. 5'b10101 : selb0 <= 2'b11;
  174. 5'b10110 : selb0 <= 2'b11;
  175. 5'b10111 : selb0 <= 2'b11;
  176. 5'b11000 : selb0 <= 2'b11;
  177. 5'b11001 : selb0 <= 2'b11;
  178. 5'b11010 : selb0 <= 2'b11;
  179. 5'b11011 : selb0 <= 2'b11;
  180. 5'b11100 : selb0 <= 2'b11;
  181. 5'b11101 : selb0 <= 2'b11;
  182. 5'b11110 : selb0 <= 2'b11;
  183. 5'b11111 : selb0 <= 2'b11;
  184. endcase
  185. else
  186. selb0 <= 2'b00;
  187. always @ (posedge clk or posedge reset)
  188. if (reset == 1'b1)
  189. selb1 <= 2'b00;
  190. else
  191. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  192. case (counter1024_temp[9:5])
  193. 5'b00000 : selb1 <= 2'b01;
  194. 5'b00001 : selb1 <= 2'b01;
  195. 5'b00010 : selb1 <= 2'b10;
  196. 5'b00011 : selb1 <= 2'b10;
  197. 5'b00100 : selb1 <= 2'b10;
  198. 5'b00101 : selb1 <= 2'b10;
  199. 5'b00110 : selb1 <= 2'b10;
  200. 5'b00111 : selb1 <= 2'b10;
  201. 5'b01000 : selb1 <= 2'b10;
  202. 5'b01001 : selb1 <= 2'b10;
  203. 5'b01010 : selb1 <= 2'b10;
  204. 5'b01011 : selb1 <= 2'b10;
  205. 5'b01100 : selb1 <= 2'b10;
  206. 5'b01101 : selb1 <= 2'b10;
  207. 5'b01110 : selb1 <= 2'b10;
  208. 5'b01111 : selb1 <= 2'b10;
  209. 5'b10000 : selb1 <= 2'b10;
  210. 5'b10001 : selb1 <= 2'b10;
  211. 5'b10010 : selb1 <= 2'b11;
  212. 5'b10011 : selb1 <= 2'b11;
  213. 5'b10100 : selb1 <= 2'b11;
  214. 5'b10101 : selb1 <= 2'b11;
  215. 5'b10110 : selb1 <= 2'b11;
  216. 5'b10111 : selb1 <= 2'b11;
  217. 5'b11000 : selb1 <= 2'b11;
  218. 5'b11001 : selb1 <= 2'b11;
  219. 5'b11010 : selb1 <= 2'b11;
  220. 5'b11011 : selb1 <= 2'b11;
  221. 5'b11100 : selb1 <= 2'b11;
  222. 5'b11101 : selb1 <= 2'b11;
  223. 5'b11110 : selb1 <= 2'b11;
  224. 5'b11111 : selb1 <= 2'b11;
  225. endcase
  226. else
  227. selb1 <= 2'b00;
  228. always @ (posedge clk or posedge reset)
  229. if (reset == 1'b1)
  230. selb2 <= 2'b00;
  231. else
  232. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  233. case (counter1024_temp[9:5])
  234. 5'b00000 : selb2 <= 2'b01;
  235. 5'b00001 : selb2 <= 2'b01;
  236. 5'b00010 : selb2 <= 2'b01;
  237. 5'b00011 : selb2 <= 2'b10;
  238. 5'b00100 : selb2 <= 2'b10;
  239. 5'b00101 : selb2 <= 2'b10;
  240. 5'b00110 : selb2 <= 2'b10;
  241. 5'b00111 : selb2 <= 2'b10;
  242. 5'b01000 : selb2 <= 2'b10;
  243. 5'b01001 : selb2 <= 2'b10;
  244. 5'b01010 : selb2 <= 2'b10;
  245. 5'b01011 : selb2 <= 2'b10;
  246. 5'b01100 : selb2 <= 2'b10;
  247. 5'b01101 : selb2 <= 2'b10;
  248. 5'b01110 : selb2 <= 2'b10;
  249. 5'b01111 : selb2 <= 2'b10;
  250. 5'b10000 : selb2 <= 2'b10;
  251. 5'b10001 : selb2 <= 2'b10;
  252. 5'b10010 : selb2 <= 2'b10;
  253. 5'b10011 : selb2 <= 2'b11;
  254. 5'b10100 : selb2 <= 2'b11;
  255. 5'b10101 : selb2 <= 2'b11;
  256. 5'b10110 : selb2 <= 2'b11;
  257. 5'b10111 : selb2 <= 2'b11;
  258. 5'b11000 : selb2 <= 2'b11;
  259. 5'b11001 : selb2 <= 2'b11;
  260. 5'b11010 : selb2 <= 2'b11;
  261. 5'b11011 : selb2 <= 2'b11;
  262. 5'b11100 : selb2 <= 2'b11;
  263. 5'b11101 : selb2 <= 2'b11;
  264. 5'b11110 : selb2 <= 2'b11;
  265. 5'b11111 : selb2 <= 2'b11;
  266. endcase
  267. else
  268. selb2 <= 2'b00;
  269. always @ (posedge clk or posedge reset)
  270. if (reset == 1'b1)
  271. selb3 <= 2'b00;
  272. else
  273. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  274. case (counter1024_temp[9:5])
  275. 5'b00000 : selb3 <= 2'b01;
  276. 5'b00001 : selb3 <= 2'b01;
  277. 5'b00010 : selb3 <= 2'b01;
  278. 5'b00011 : selb3 <= 2'b01;
  279. 5'b00100 : selb3 <= 2'b10;
  280. 5'b00101 : selb3 <= 2'b10;
  281. 5'b00110 : selb3 <= 2'b10;
  282. 5'b00111 : selb3 <= 2'b10;
  283. 5'b01000 : selb3 <= 2'b10;
  284. 5'b01001 : selb3 <= 2'b10;
  285. 5'b01010 : selb3 <= 2'b10;
  286. 5'b01011 : selb3 <= 2'b10;
  287. 5'b01100 : selb3 <= 2'b10;
  288. 5'b01101 : selb3 <= 2'b10;
  289. 5'b01110 : selb3 <= 2'b10;
  290. 5'b01111 : selb3 <= 2'b10;
  291. 5'b10000 : selb3 <= 2'b10;
  292. 5'b10001 : selb3 <= 2'b10;
  293. 5'b10010 : selb3 <= 2'b10;
  294. 5'b10011 : selb3 <= 2'b10;
  295. 5'b10100 : selb3 <= 2'b11;
  296. 5'b10101 : selb3 <= 2'b11;
  297. 5'b10110 : selb3 <= 2'b11;
  298. 5'b10111 : selb3 <= 2'b11;
  299. 5'b11000 : selb3 <= 2'b11;
  300. 5'b11001 : selb3 <= 2'b11;
  301. 5'b11010 : selb3 <= 2'b11;
  302. 5'b11011 : selb3 <= 2'b11;
  303. 5'b11100 : selb3 <= 2'b11;
  304. 5'b11101 : selb3 <= 2'b11;
  305. 5'b11110 : selb3 <= 2'b11;
  306. 5'b11111 : selb3 <= 2'b11;
  307. endcase
  308. else
  309. selb3 <= 2'b00;
  310. always @ (posedge clk or posedge reset)
  311. if (reset == 1'b1)
  312. selb4 <= 2'b00;
  313. else
  314. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  315. case (counter1024_temp[9:5])
  316. 5'b00000 : selb4 <= 2'b01;
  317. 5'b00001 : selb4 <= 2'b01;
  318. 5'b00010 : selb4 <= 2'b01;
  319. 5'b00011 : selb4 <= 2'b01;
  320. 5'b00100 : selb4 <= 2'b01;
  321. 5'b00101 : selb4 <= 2'b10;
  322. 5'b00110 : selb4 <= 2'b10;
  323. 5'b00111 : selb4 <= 2'b10;
  324. 5'b01000 : selb4 <= 2'b10;
  325. 5'b01001 : selb4 <= 2'b10;
  326. 5'b01010 : selb4 <= 2'b10;
  327. 5'b01011 : selb4 <= 2'b10;
  328. 5'b01100 : selb4 <= 2'b10;
  329. 5'b01101 : selb4 <= 2'b10;
  330. 5'b01110 : selb4 <= 2'b10;
  331. 5'b01111 : selb4 <= 2'b10;
  332. 5'b10000 : selb4 <= 2'b10;
  333. 5'b10001 : selb4 <= 2'b10;
  334. 5'b10010 : selb4 <= 2'b10;
  335. 5'b10011 : selb4 <= 2'b10;
  336. 5'b10100 : selb4 <= 2'b10;
  337. 5'b10101 : selb4 <= 2'b11;
  338. 5'b10110 : selb4 <= 2'b11;
  339. 5'b10111 : selb4 <= 2'b11;
  340. 5'b11000 : selb4 <= 2'b11;
  341. 5'b11001 : selb4 <= 2'b11;
  342. 5'b11010 : selb4 <= 2'b11;
  343. 5'b11011 : selb4 <= 2'b11;
  344. 5'b11100 : selb4 <= 2'b11;
  345. 5'b11101 : selb4 <= 2'b11;
  346. 5'b11110 : selb4 <= 2'b11;
  347. 5'b11111 : selb4 <= 2'b11;
  348. endcase
  349. else
  350. selb4 <= 2'b00;
  351. always @ (posedge clk or posedge reset)
  352. if (reset == 1'b1)
  353. selb5 <= 2'b00;
  354. else
  355. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  356. case (counter1024_temp[9:5])
  357. 5'b00000 : selb5 <= 2'b01;
  358. 5'b00001 : selb5 <= 2'b01;
  359. 5'b00010 : selb5 <= 2'b01;
  360. 5'b00011 : selb5 <= 2'b01;
  361. 5'b00100 : selb5 <= 2'b01;
  362. 5'b00101 : selb5 <= 2'b01;
  363. 5'b00110 : selb5 <= 2'b10;
  364. 5'b00111 : selb5 <= 2'b10;
  365. 5'b01000 : selb5 <= 2'b10;
  366. 5'b01001 : selb5 <= 2'b10;
  367. 5'b01010 : selb5 <= 2'b10;
  368. 5'b01011 : selb5 <= 2'b10;
  369. 5'b01100 : selb5 <= 2'b10;
  370. 5'b01101 : selb5 <= 2'b10;
  371. 5'b01110 : selb5 <= 2'b10;
  372. 5'b01111 : selb5 <= 2'b10;
  373. 5'b10000 : selb5 <= 2'b10;
  374. 5'b10001 : selb5 <= 2'b10;
  375. 5'b10010 : selb5 <= 2'b10;
  376. 5'b10011 : selb5 <= 2'b10;
  377. 5'b10100 : selb5 <= 2'b10;
  378. 5'b10101 : selb5 <= 2'b10;
  379. 5'b10110 : selb5 <= 2'b11;
  380. 5'b10111 : selb5 <= 2'b11;
  381. 5'b11000 : selb5 <= 2'b11;
  382. 5'b11001 : selb5 <= 2'b11;
  383. 5'b11010 : selb5 <= 2'b11;
  384. 5'b11011 : selb5 <= 2'b11;
  385. 5'b11100 : selb5 <= 2'b11;
  386. 5'b11101 : selb5 <= 2'b11;
  387. 5'b11110 : selb5 <= 2'b11;
  388. 5'b11111 : selb5 <= 2'b11;
  389. endcase
  390. else
  391. selb5 <= 2'b00;
  392. always @ (posedge clk or posedge reset)
  393. if (reset == 1'b1)
  394. selb6 <= 2'b00;
  395. else
  396. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  397. case (counter1024_temp[9:5])
  398. 5'b00000 : selb6 <= 2'b01;
  399. 5'b00001 : selb6 <= 2'b01;
  400. 5'b00010 : selb6 <= 2'b01;
  401. 5'b00011 : selb6 <= 2'b01;
  402. 5'b00100 : selb6 <= 2'b01;
  403. 5'b00101 : selb6 <= 2'b01;
  404. 5'b00110 : selb6 <= 2'b01;
  405. 5'b00111 : selb6 <= 2'b10;
  406. 5'b01000 : selb6 <= 2'b10;
  407. 5'b01001 : selb6 <= 2'b10;
  408. 5'b01010 : selb6 <= 2'b10;
  409. 5'b01011 : selb6 <= 2'b10;
  410. 5'b01100 : selb6 <= 2'b10;
  411. 5'b01101 : selb6 <= 2'b10;
  412. 5'b01110 : selb6 <= 2'b10;
  413. 5'b01111 : selb6 <= 2'b10;
  414. 5'b10000 : selb6 <= 2'b10;
  415. 5'b10001 : selb6 <= 2'b10;
  416. 5'b10010 : selb6 <= 2'b10;
  417. 5'b10011 : selb6 <= 2'b10;
  418. 5'b10100 : selb6 <= 2'b10;
  419. 5'b10101 : selb6 <= 2'b10;
  420. 5'b10110 : selb6 <= 2'b10;
  421. 5'b10111 : selb6 <= 2'b11;
  422. 5'b11000 : selb6 <= 2'b11;
  423. 5'b11001 : selb6 <= 2'b11;
  424. 5'b11010 : selb6 <= 2'b11;
  425. 5'b11011 : selb6 <= 2'b11;
  426. 5'b11100 : selb6 <= 2'b11;
  427. 5'b11101 : selb6 <= 2'b11;
  428. 5'b11110 : selb6 <= 2'b11;
  429. 5'b11111 : selb6 <= 2'b11;
  430. endcase
  431. else
  432. selb6 <= 2'b00;
  433. always @ (posedge clk or posedge reset)
  434. if (reset == 1'b1)
  435. selb7 <= 2'b00;
  436. else
  437. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  438. case (counter1024_temp[9:5])
  439. 5'b00000 : selb7 <= 2'b01;
  440. 5'b00001 : selb7 <= 2'b01;
  441. 5'b00010 : selb7 <= 2'b01;
  442. 5'b00011 : selb7 <= 2'b01;
  443. 5'b00100 : selb7 <= 2'b01;
  444. 5'b00101 : selb7 <= 2'b01;
  445. 5'b00110 : selb7 <= 2'b01;
  446. 5'b00111 : selb7 <= 2'b01;
  447. 5'b01000 : selb7 <= 2'b10;
  448. 5'b01001 : selb7 <= 2'b10;
  449. 5'b01010 : selb7 <= 2'b10;
  450. 5'b01011 : selb7 <= 2'b10;
  451. 5'b01100 : selb7 <= 2'b10;
  452. 5'b01101 : selb7 <= 2'b10;
  453. 5'b01110 : selb7 <= 2'b10;
  454. 5'b01111 : selb7 <= 2'b10;
  455. 5'b10000 : selb7 <= 2'b10;
  456. 5'b10001 : selb7 <= 2'b10;
  457. 5'b10010 : selb7 <= 2'b10;
  458. 5'b10011 : selb7 <= 2'b10;
  459. 5'b10100 : selb7 <= 2'b10;
  460. 5'b10101 : selb7 <= 2'b10;
  461. 5'b10110 : selb7 <= 2'b10;
  462. 5'b10111 : selb7 <= 2'b10;
  463. 5'b11000 : selb7 <= 2'b11;
  464. 5'b11001 : selb7 <= 2'b11;
  465. 5'b11010 : selb7 <= 2'b11;
  466. 5'b11011 : selb7 <= 2'b11;
  467. 5'b11100 : selb7 <= 2'b11;
  468. 5'b11101 : selb7 <= 2'b11;
  469. 5'b11110 : selb7 <= 2'b11;
  470. 5'b11111 : selb7 <= 2'b11;
  471. endcase
  472. else
  473. selb7 <= 2'b00;
  474. always @ (posedge clk or posedge reset)
  475. if (reset == 1'b1)
  476. selb8 <= 2'b00;
  477. else
  478. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  479. case (counter1024_temp[9:5])
  480. 5'b00000 : selb8 <= 2'b01;
  481. 5'b00001 : selb8 <= 2'b01;
  482. 5'b00010 : selb8 <= 2'b01;
  483. 5'b00011 : selb8 <= 2'b01;
  484. 5'b00100 : selb8 <= 2'b01;
  485. 5'b00101 : selb8 <= 2'b01;
  486. 5'b00110 : selb8 <= 2'b01;
  487. 5'b00111 : selb8 <= 2'b01;
  488. 5'b01000 : selb8 <= 2'b01;
  489. 5'b01001 : selb8 <= 2'b10;
  490. 5'b01010 : selb8 <= 2'b10;
  491. 5'b01011 : selb8 <= 2'b10;
  492. 5'b01100 : selb8 <= 2'b10;
  493. 5'b01101 : selb8 <= 2'b10;
  494. 5'b01110 : selb8 <= 2'b10;
  495. 5'b01111 : selb8 <= 2'b10;
  496. 5'b10000 : selb8 <= 2'b10;
  497. 5'b10001 : selb8 <= 2'b10;
  498. 5'b10010 : selb8 <= 2'b10;
  499. 5'b10011 : selb8 <= 2'b10;
  500. 5'b10100 : selb8 <= 2'b10;
  501. 5'b10101 : selb8 <= 2'b10;
  502. 5'b10110 : selb8 <= 2'b10;
  503. 5'b10111 : selb8 <= 2'b10;
  504. 5'b11000 : selb8 <= 2'b10;
  505. 5'b11001 : selb8 <= 2'b11;
  506. 5'b11010 : selb8 <= 2'b11;
  507. 5'b11011 : selb8 <= 2'b11;
  508. 5'b11100 : selb8 <= 2'b11;
  509. 5'b11101 : selb8 <= 2'b11;
  510. 5'b11110 : selb8 <= 2'b11;
  511. 5'b11111 : selb8 <= 2'b11;
  512. endcase
  513. else
  514. selb8 <= 2'b00;
  515. always @ (posedge clk or posedge reset)
  516. if (reset == 1'b1)
  517. selb9 <= 2'b00;
  518. else
  519. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  520. case (counter1024_temp[9:5])
  521. 5'b00000 : selb9 <= 2'b01;
  522. 5'b00001 : selb9 <= 2'b01;
  523. 5'b00010 : selb9 <= 2'b01;
  524. 5'b00011 : selb9 <= 2'b01;
  525. 5'b00100 : selb9 <= 2'b01;
  526. 5'b00101 : selb9 <= 2'b01;
  527. 5'b00110 : selb9 <= 2'b01;
  528. 5'b00111 : selb9 <= 2'b01;
  529. 5'b01000 : selb9 <= 2'b01;
  530. 5'b01001 : selb9 <= 2'b01;
  531. 5'b01010 : selb9 <= 2'b10;
  532. 5'b01011 : selb9 <= 2'b10;
  533. 5'b01100 : selb9 <= 2'b10;
  534. 5'b01101 : selb9 <= 2'b10;
  535. 5'b01110 : selb9 <= 2'b10;
  536. 5'b01111 : selb9 <= 2'b10;
  537. 5'b10000 : selb9 <= 2'b10;
  538. 5'b10001 : selb9 <= 2'b10;
  539. 5'b10010 : selb9 <= 2'b10;
  540. 5'b10011 : selb9 <= 2'b10;
  541. 5'b10100 : selb9 <= 2'b10;
  542. 5'b10101 : selb9 <= 2'b10;
  543. 5'b10110 : selb9 <= 2'b10;
  544. 5'b10111 : selb9 <= 2'b10;
  545. 5'b11000 : selb9 <= 2'b10;
  546. 5'b11001 : selb9 <= 2'b10;
  547. 5'b11010 : selb9 <= 2'b11;
  548. 5'b11011 : selb9 <= 2'b11;
  549. 5'b11100 : selb9 <= 2'b11;
  550. 5'b11101 : selb9 <= 2'b11;
  551. 5'b11110 : selb9 <= 2'b11;
  552. 5'b11111 : selb9 <= 2'b11;
  553. endcase
  554. else
  555. selb9 <= 2'b00;
  556. always @ (posedge clk or posedge reset)
  557. if (reset == 1'b1)
  558. selb10 <= 2'b00;
  559. else
  560. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  561. case (counter1024_temp[9:5])
  562. 5'b00000 : selb10 <= 2'b01;
  563. 5'b00001 : selb10 <= 2'b01;
  564. 5'b00010 : selb10 <= 2'b01;
  565. 5'b00011 : selb10 <= 2'b01;
  566. 5'b00100 : selb10 <= 2'b01;
  567. 5'b00101 : selb10 <= 2'b01;
  568. 5'b00110 : selb10 <= 2'b01;
  569. 5'b00111 : selb10 <= 2'b01;
  570. 5'b01000 : selb10 <= 2'b01;
  571. 5'b01001 : selb10 <= 2'b01;
  572. 5'b01010 : selb10 <= 2'b01;
  573. 5'b01011 : selb10 <= 2'b10;
  574. 5'b01100 : selb10 <= 2'b10;
  575. 5'b01101 : selb10 <= 2'b10;
  576. 5'b01110 : selb10 <= 2'b10;
  577. 5'b01111 : selb10 <= 2'b10;
  578. 5'b10000 : selb10 <= 2'b10;
  579. 5'b10001 : selb10 <= 2'b10;
  580. 5'b10010 : selb10 <= 2'b10;
  581. 5'b10011 : selb10 <= 2'b10;
  582. 5'b10100 : selb10 <= 2'b10;
  583. 5'b10101 : selb10 <= 2'b10;
  584. 5'b10110 : selb10 <= 2'b10;
  585. 5'b10111 : selb10 <= 2'b10;
  586. 5'b11000 : selb10 <= 2'b10;
  587. 5'b11001 : selb10 <= 2'b10;
  588. 5'b11010 : selb10 <= 2'b10;
  589. 5'b11011 : selb10 <= 2'b11;
  590. 5'b11100 : selb10 <= 2'b11;
  591. 5'b11101 : selb10 <= 2'b11;
  592. 5'b11110 : selb10 <= 2'b11;
  593. 5'b11111 : selb10 <= 2'b11;
  594. endcase
  595. else
  596. selb10 <= 2'b00;
  597. always @ (posedge clk or posedge reset)
  598. if (reset == 1'b1)
  599. selb11 <= 2'b00;
  600. else
  601. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  602. case (counter1024_temp[9:5])
  603. 5'b00000 : selb11 <= 2'b01;
  604. 5'b00001 : selb11 <= 2'b01;
  605. 5'b00010 : selb11 <= 2'b01;
  606. 5'b00011 : selb11 <= 2'b01;
  607. 5'b00100 : selb11 <= 2'b01;
  608. 5'b00101 : selb11 <= 2'b01;
  609. 5'b00110 : selb11 <= 2'b01;
  610. 5'b00111 : selb11 <= 2'b01;
  611. 5'b01000 : selb11 <= 2'b01;
  612. 5'b01001 : selb11 <= 2'b01;
  613. 5'b01010 : selb11 <= 2'b01;
  614. 5'b01011 : selb11 <= 2'b01;
  615. 5'b01100 : selb11 <= 2'b10;
  616. 5'b01101 : selb11 <= 2'b10;
  617. 5'b01110 : selb11 <= 2'b10;
  618. 5'b01111 : selb11 <= 2'b10;
  619. 5'b10000 : selb11 <= 2'b10;
  620. 5'b10001 : selb11 <= 2'b10;
  621. 5'b10010 : selb11 <= 2'b10;
  622. 5'b10011 : selb11 <= 2'b10;
  623. 5'b10100 : selb11 <= 2'b10;
  624. 5'b10101 : selb11 <= 2'b10;
  625. 5'b10110 : selb11 <= 2'b10;
  626. 5'b10111 : selb11 <= 2'b10;
  627. 5'b11000 : selb11 <= 2'b10;
  628. 5'b11001 : selb11 <= 2'b10;
  629. 5'b11010 : selb11 <= 2'b10;
  630. 5'b11011 : selb11 <= 2'b10;
  631. 5'b11100 : selb11 <= 2'b11;
  632. 5'b11101 : selb11 <= 2'b11;
  633. 5'b11110 : selb11 <= 2'b11;
  634. 5'b11111 : selb11 <= 2'b11;
  635. endcase
  636. else
  637. selb11 <= 2'b00;
  638. always @ (posedge clk or posedge reset)
  639. if (reset == 1'b1)
  640. selb12 <= 2'b00;
  641. else
  642. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  643. case (counter1024_temp[9:5])
  644. 5'b00000 : selb12 <= 2'b01;
  645. 5'b00001 : selb12 <= 2'b01;
  646. 5'b00010 : selb12 <= 2'b01;
  647. 5'b00011 : selb12 <= 2'b01;
  648. 5'b00100 : selb12 <= 2'b01;
  649. 5'b00101 : selb12 <= 2'b01;
  650. 5'b00110 : selb12 <= 2'b01;
  651. 5'b00111 : selb12 <= 2'b01;
  652. 5'b01000 : selb12 <= 2'b01;
  653. 5'b01001 : selb12 <= 2'b01;
  654. 5'b01010 : selb12 <= 2'b01;
  655. 5'b01011 : selb12 <= 2'b01;
  656. 5'b01100 : selb12 <= 2'b01;
  657. 5'b01101 : selb12 <= 2'b10;
  658. 5'b01110 : selb12 <= 2'b10;
  659. 5'b01111 : selb12 <= 2'b10;
  660. 5'b10000 : selb12 <= 2'b10;
  661. 5'b10001 : selb12 <= 2'b10;
  662. 5'b10010 : selb12 <= 2'b10;
  663. 5'b10011 : selb12 <= 2'b10;
  664. 5'b10100 : selb12 <= 2'b10;
  665. 5'b10101 : selb12 <= 2'b10;
  666. 5'b10110 : selb12 <= 2'b10;
  667. 5'b10111 : selb12 <= 2'b10;
  668. 5'b11000 : selb12 <= 2'b10;
  669. 5'b11001 : selb12 <= 2'b10;
  670. 5'b11010 : selb12 <= 2'b10;
  671. 5'b11011 : selb12 <= 2'b10;
  672. 5'b11100 : selb12 <= 2'b10;
  673. 5'b11101 : selb12 <= 2'b11;
  674. 5'b11110 : selb12 <= 2'b11;
  675. 5'b11111 : selb12 <= 2'b11;
  676. endcase
  677. else
  678. selb12 <= 2'b00;
  679. always @ (posedge clk or posedge reset)
  680. if (reset == 1'b1)
  681. selb13 <= 2'b00;
  682. else
  683. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  684. case (counter1024_temp[9:5])
  685. 5'b00000 : selb13 <= 2'b01;
  686. 5'b00001 : selb13 <= 2'b01;
  687. 5'b00010 : selb13 <= 2'b01;
  688. 5'b00011 : selb13 <= 2'b01;
  689. 5'b00100 : selb13 <= 2'b01;
  690. 5'b00101 : selb13 <= 2'b01;
  691. 5'b00110 : selb13 <= 2'b01;
  692. 5'b00111 : selb13 <= 2'b01;
  693. 5'b01000 : selb13 <= 2'b01;
  694. 5'b01001 : selb13 <= 2'b01;
  695. 5'b01010 : selb13 <= 2'b01;
  696. 5'b01011 : selb13 <= 2'b01;
  697. 5'b01100 : selb13 <= 2'b01;
  698. 5'b01101 : selb13 <= 2'b01;
  699. 5'b01110 : selb13 <= 2'b10;
  700. 5'b01111 : selb13 <= 2'b10;
  701. 5'b10000 : selb13 <= 2'b10;
  702. 5'b10001 : selb13 <= 2'b10;
  703. 5'b10010 : selb13 <= 2'b10;
  704. 5'b10011 : selb13 <= 2'b10;
  705. 5'b10100 : selb13 <= 2'b10;
  706. 5'b10101 : selb13 <= 2'b10;
  707. 5'b10110 : selb13 <= 2'b10;
  708. 5'b10111 : selb13 <= 2'b10;
  709. 5'b11000 : selb13 <= 2'b10;
  710. 5'b11001 : selb13 <= 2'b10;
  711. 5'b11010 : selb13 <= 2'b10;
  712. 5'b11011 : selb13 <= 2'b10;
  713. 5'b11100 : selb13 <= 2'b10;
  714. 5'b11101 : selb13 <= 2'b10;
  715. 5'b11110 : selb13 <= 2'b11;
  716. 5'b11111 : selb13 <= 2'b11;
  717. endcase
  718. else
  719. selb13 <= 2'b00;
  720. always @ (posedge clk or posedge reset)
  721. if (reset == 1'b1)
  722. selb14 <= 2'b00;
  723. else
  724. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  725. case (counter1024_temp[9:5])
  726. 5'b00000 : selb14 <= 2'b01;
  727. 5'b00001 : selb14 <= 2'b01;
  728. 5'b00010 : selb14 <= 2'b01;
  729. 5'b00011 : selb14 <= 2'b01;
  730. 5'b00100 : selb14 <= 2'b01;
  731. 5'b00101 : selb14 <= 2'b01;
  732. 5'b00110 : selb14 <= 2'b01;
  733. 5'b00111 : selb14 <= 2'b01;
  734. 5'b01000 : selb14 <= 2'b01;
  735. 5'b01001 : selb14 <= 2'b01;
  736. 5'b01010 : selb14 <= 2'b01;
  737. 5'b01011 : selb14 <= 2'b01;
  738. 5'b01100 : selb14 <= 2'b01;
  739. 5'b01101 : selb14 <= 2'b01;
  740. 5'b01110 : selb14 <= 2'b01;
  741. 5'b01111 : selb14 <= 2'b10;
  742. 5'b10000 : selb14 <= 2'b10;
  743. 5'b10001 : selb14 <= 2'b10;
  744. 5'b10010 : selb14 <= 2'b10;
  745. 5'b10011 : selb14 <= 2'b10;
  746. 5'b10100 : selb14 <= 2'b10;
  747. 5'b10101 : selb14 <= 2'b10;
  748. 5'b10110 : selb14 <= 2'b10;
  749. 5'b10111 : selb14 <= 2'b10;
  750. 5'b11000 : selb14 <= 2'b10;
  751. 5'b11001 : selb14 <= 2'b10;
  752. 5'b11010 : selb14 <= 2'b10;
  753. 5'b11011 : selb14 <= 2'b10;
  754. 5'b11100 : selb14 <= 2'b10;
  755. 5'b11101 : selb14 <= 2'b10;
  756. 5'b11110 : selb14 <= 2'b10;
  757. 5'b11111 : selb14 <= 2'b11;
  758. endcase
  759. else
  760. selb14 <= 2'b00;
  761. always @ (posedge clk or posedge reset)
  762. if (reset == 1'b1)
  763. selb15 <= 2'b00;
  764. else
  765. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  766. case (counter1024_temp[9:5])
  767. 5'b00000 : selb15 <= 2'b01;
  768. 5'b00001 : selb15 <= 2'b01;
  769. 5'b00010 : selb15 <= 2'b01;
  770. 5'b00011 : selb15 <= 2'b01;
  771. 5'b00100 : selb15 <= 2'b01;
  772. 5'b00101 : selb15 <= 2'b01;
  773. 5'b00110 : selb15 <= 2'b01;
  774. 5'b00111 : selb15 <= 2'b01;
  775. 5'b01000 : selb15 <= 2'b01;
  776. 5'b01001 : selb15 <= 2'b01;
  777. 5'b01010 : selb15 <= 2'b01;
  778. 5'b01011 : selb15 <= 2'b01;
  779. 5'b01100 : selb15 <= 2'b01;
  780. 5'b01101 : selb15 <= 2'b01;
  781. 5'b01110 : selb15 <= 2'b01;
  782. 5'b01111 : selb15 <= 2'b01;
  783. 5'b10000 : selb15 <= 2'b10;
  784. 5'b10001 : selb15 <= 2'b10;
  785. 5'b10010 : selb15 <= 2'b10;
  786. 5'b10011 : selb15 <= 2'b10;
  787. 5'b10100 : selb15 <= 2'b10;
  788. 5'b10101 : selb15 <= 2'b10;
  789. 5'b10110 : selb15 <= 2'b10;
  790. 5'b10111 : selb15 <= 2'b10;
  791. 5'b11000 : selb15 <= 2'b10;
  792. 5'b11001 : selb15 <= 2'b10;
  793. 5'b11010 : selb15 <= 2'b10;
  794. 5'b11011 : selb15 <= 2'b10;
  795. 5'b11100 : selb15 <= 2'b10;
  796. 5'b11101 : selb15 <= 2'b10;
  797. 5'b11110 : selb15 <= 2'b10;
  798. 5'b11111 : selb15 <= 2'b10;
  799. endcase
  800. else
  801. selb15 <= 2'b00;
  802. always @ (posedge clk or posedge reset)
  803. if (reset == 1'b1)
  804. sel0 <= 2'b00;
  805. else
  806. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  807. case (counter1024_temp[9:5])
  808. 5'b00000 : sel0 <= 2'b01;
  809. 5'b00001 : sel0 <= 2'b10;
  810. 5'b00010 : sel0 <= 2'b10;
  811. 5'b00011 : sel0 <= 2'b10;
  812. 5'b00100 : sel0 <= 2'b10;
  813. 5'b00101 : sel0 <= 2'b10;
  814. 5'b00110 : sel0 <= 2'b10;
  815. 5'b00111 : sel0 <= 2'b10;
  816. 5'b01000 : sel0 <= 2'b10;
  817. 5'b01001 : sel0 <= 2'b10;
  818. 5'b01010 : sel0 <= 2'b10;
  819. 5'b01011 : sel0 <= 2'b10;
  820. 5'b01100 : sel0 <= 2'b10;
  821. 5'b01101 : sel0 <= 2'b10;
  822. 5'b01110 : sel0 <= 2'b10;
  823. 5'b01111 : sel0 <= 2'b10;
  824. 5'b10000 : sel0 <= 2'b10;
  825. 5'b10001 : sel0 <= 2'b11;
  826. 5'b10010 : sel0 <= 2'b11;
  827. 5'b10011 : sel0 <= 2'b11;
  828. 5'b10100 : sel0 <= 2'b11;
  829. 5'b10101 : sel0 <= 2'b11;
  830. 5'b10110 : sel0 <= 2'b11;
  831. 5'b10111 : sel0 <= 2'b11;
  832. 5'b11000 : sel0 <= 2'b11;
  833. 5'b11001 : sel0 <= 2'b11;
  834. 5'b11010 : sel0 <= 2'b11;
  835. 5'b11011 : sel0 <= 2'b11;
  836. 5'b11100 : sel0 <= 2'b11;
  837. 5'b11101 : sel0 <= 2'b11;
  838. 5'b11110 : sel0 <= 2'b11;
  839. 5'b11111 : sel0 <= 2'b11;
  840. endcase
  841. always @ (posedge clk or posedge reset)
  842. if (reset == 1'b1)
  843. sel1 <= 2'b00;
  844. else
  845. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  846. case (counter1024_temp[9:5])
  847. 5'b00000 : sel1 <= 2'b01;
  848. 5'b00001 : sel1 <= 2'b01;
  849. 5'b00010 : sel1 <= 2'b10;
  850. 5'b00011 : sel1 <= 2'b10;
  851. 5'b00100 : sel1 <= 2'b10;
  852. 5'b00101 : sel1 <= 2'b10;
  853. 5'b00110 : sel1 <= 2'b10;
  854. 5'b00111 : sel1 <= 2'b10;
  855. 5'b01000 : sel1 <= 2'b10;
  856. 5'b01001 : sel1 <= 2'b10;
  857. 5'b01010 : sel1 <= 2'b10;
  858. 5'b01011 : sel1 <= 2'b10;
  859. 5'b01100 : sel1 <= 2'b10;
  860. 5'b01101 : sel1 <= 2'b10;
  861. 5'b01110 : sel1 <= 2'b10;
  862. 5'b01111 : sel1 <= 2'b10;
  863. 5'b10000 : sel1 <= 2'b10;
  864. 5'b10001 : sel1 <= 2'b10;
  865. 5'b10010 : sel1 <= 2'b11;
  866. 5'b10011 : sel1 <= 2'b11;
  867. 5'b10100 : sel1 <= 2'b11;
  868. 5'b10101 : sel1 <= 2'b11;
  869. 5'b10110 : sel1 <= 2'b11;
  870. 5'b10111 : sel1 <= 2'b11;
  871. 5'b11000 : sel1 <= 2'b11;
  872. 5'b11001 : sel1 <= 2'b11;
  873. 5'b11010 : sel1 <= 2'b11;
  874. 5'b11011 : sel1 <= 2'b11;
  875. 5'b11100 : sel1 <= 2'b11;
  876. 5'b11101 : sel1 <= 2'b11;
  877. 5'b11110 : sel1 <= 2'b11;
  878. 5'b11111 : sel1 <= 2'b11;
  879. endcase
  880. always @ (posedge clk or posedge reset)
  881. if (reset == 1'b1)
  882. sel2 <= 2'b00;
  883. else
  884. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  885. case (counter1024_temp[9:5])
  886. 5'b00000 : sel2 <= 2'b01;
  887. 5'b00001 : sel2 <= 2'b01;
  888. 5'b00010 : sel2 <= 2'b01;
  889. 5'b00011 : sel2 <= 2'b10;
  890. 5'b00100 : sel2 <= 2'b10;
  891. 5'b00101 : sel2 <= 2'b10;
  892. 5'b00110 : sel2 <= 2'b10;
  893. 5'b00111 : sel2 <= 2'b10;
  894. 5'b01000 : sel2 <= 2'b10;
  895. 5'b01001 : sel2 <= 2'b10;
  896. 5'b01010 : sel2 <= 2'b10;
  897. 5'b01011 : sel2 <= 2'b10;
  898. 5'b01100 : sel2 <= 2'b10;
  899. 5'b01101 : sel2 <= 2'b10;
  900. 5'b01110 : sel2 <= 2'b10;
  901. 5'b01111 : sel2 <= 2'b10;
  902. 5'b10000 : sel2 <= 2'b10;
  903. 5'b10001 : sel2 <= 2'b10;
  904. 5'b10010 : sel2 <= 2'b10;
  905. 5'b10011 : sel2 <= 2'b11;
  906. 5'b10100 : sel2 <= 2'b11;
  907. 5'b10101 : sel2 <= 2'b11;
  908. 5'b10110 : sel2 <= 2'b11;
  909. 5'b10111 : sel2 <= 2'b11;
  910. 5'b11000 : sel2 <= 2'b11;
  911. 5'b11001 : sel2 <= 2'b11;
  912. 5'b11010 : sel2 <= 2'b11;
  913. 5'b11011 : sel2 <= 2'b11;
  914. 5'b11100 : sel2 <= 2'b11;
  915. 5'b11101 : sel2 <= 2'b11;
  916. 5'b11110 : sel2 <= 2'b11;
  917. 5'b11111 : sel2 <= 2'b11;
  918. endcase
  919. always @ (posedge clk or posedge reset)
  920. if (reset == 1'b1)
  921. sel3 <= 2'b00;
  922. else
  923. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  924. case (counter1024_temp[9:5])
  925. 5'b00000 : sel3 <= 2'b01;
  926. 5'b00001 : sel3 <= 2'b01;
  927. 5'b00010 : sel3 <= 2'b01;
  928. 5'b00011 : sel3 <= 2'b01;
  929. 5'b00100 : sel3 <= 2'b10;
  930. 5'b00101 : sel3 <= 2'b10;
  931. 5'b00110 : sel3 <= 2'b10;
  932. 5'b00111 : sel3 <= 2'b10;
  933. 5'b01000 : sel3 <= 2'b10;
  934. 5'b01001 : sel3 <= 2'b10;
  935. 5'b01010 : sel3 <= 2'b10;
  936. 5'b01011 : sel3 <= 2'b10;
  937. 5'b01100 : sel3 <= 2'b10;
  938. 5'b01101 : sel3 <= 2'b10;
  939. 5'b01110 : sel3 <= 2'b10;
  940. 5'b01111 : sel3 <= 2'b10;
  941. 5'b10000 : sel3 <= 2'b10;
  942. 5'b10001 : sel3 <= 2'b10;
  943. 5'b10010 : sel3 <= 2'b10;
  944. 5'b10011 : sel3 <= 2'b10;
  945. 5'b10100 : sel3 <= 2'b11;
  946. 5'b10101 : sel3 <= 2'b11;
  947. 5'b10110 : sel3 <= 2'b11;
  948. 5'b10111 : sel3 <= 2'b11;
  949. 5'b11000 : sel3 <= 2'b11;
  950. 5'b11001 : sel3 <= 2'b11;
  951. 5'b11010 : sel3 <= 2'b11;
  952. 5'b11011 : sel3 <= 2'b11;
  953. 5'b11100 : sel3 <= 2'b11;
  954. 5'b11101 : sel3 <= 2'b11;
  955. 5'b11110 : sel3 <= 2'b11;
  956. 5'b11111 : sel3 <= 2'b11;
  957. endcase
  958. always @ (posedge clk or posedge reset)
  959. if (reset == 1'b1)
  960. sel4 <= 2'b00;
  961. else
  962. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  963. case (counter1024_temp[9:5])
  964. 5'b00000 : sel4 <= 2'b01;
  965. 5'b00001 : sel4 <= 2'b01;
  966. 5'b00010 : sel4 <= 2'b01;
  967. 5'b00011 : sel4 <= 2'b01;
  968. 5'b00100 : sel4 <= 2'b01;
  969. 5'b00101 : sel4 <= 2'b10;
  970. 5'b00110 : sel4 <= 2'b10;
  971. 5'b00111 : sel4 <= 2'b10;
  972. 5'b01000 : sel4 <= 2'b10;
  973. 5'b01001 : sel4 <= 2'b10;
  974. 5'b01010 : sel4 <= 2'b10;
  975. 5'b01011 : sel4 <= 2'b10;
  976. 5'b01100 : sel4 <= 2'b10;
  977. 5'b01101 : sel4 <= 2'b10;
  978. 5'b01110 : sel4 <= 2'b10;
  979. 5'b01111 : sel4 <= 2'b10;
  980. 5'b10000 : sel4 <= 2'b10;
  981. 5'b10001 : sel4 <= 2'b10;
  982. 5'b10010 : sel4 <= 2'b10;
  983. 5'b10011 : sel4 <= 2'b10;
  984. 5'b10100 : sel4 <= 2'b10;
  985. 5'b10101 : sel4 <= 2'b11;
  986. 5'b10110 : sel4 <= 2'b11;
  987. 5'b10111 : sel4 <= 2'b11;
  988. 5'b11000 : sel4 <= 2'b11;
  989. 5'b11001 : sel4 <= 2'b11;
  990. 5'b11010 : sel4 <= 2'b11;
  991. 5'b11011 : sel4 <= 2'b11;
  992. 5'b11100 : sel4 <= 2'b11;
  993. 5'b11101 : sel4 <= 2'b11;
  994. 5'b11110 : sel4 <= 2'b11;
  995. 5'b11111 : sel4 <= 2'b11;
  996. endcase
  997. always @ (posedge clk or posedge reset)
  998. if (reset == 1'b1)
  999. sel5 <= 2'b00;
  1000. else
  1001. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1002. case (counter1024_temp[9:5])
  1003. 5'b00000 : sel5 <= 2'b01;
  1004. 5'b00001 : sel5 <= 2'b01;
  1005. 5'b00010 : sel5 <= 2'b01;
  1006. 5'b00011 : sel5 <= 2'b01;
  1007. 5'b00100 : sel5 <= 2'b01;
  1008. 5'b00101 : sel5 <= 2'b01;
  1009. 5'b00110 : sel5 <= 2'b10;
  1010. 5'b00111 : sel5 <= 2'b10;
  1011. 5'b01000 : sel5 <= 2'b10;
  1012. 5'b01001 : sel5 <= 2'b10;
  1013. 5'b01010 : sel5 <= 2'b10;
  1014. 5'b01011 : sel5 <= 2'b10;
  1015. 5'b01100 : sel5 <= 2'b10;
  1016. 5'b01101 : sel5 <= 2'b10;
  1017. 5'b01110 : sel5 <= 2'b10;
  1018. 5'b01111 : sel5 <= 2'b10;
  1019. 5'b10000 : sel5 <= 2'b10;
  1020. 5'b10001 : sel5 <= 2'b10;
  1021. 5'b10010 : sel5 <= 2'b10;
  1022. 5'b10011 : sel5 <= 2'b10;
  1023. 5'b10100 : sel5 <= 2'b10;
  1024. 5'b10101 : sel5 <= 2'b10;
  1025. 5'b10110 : sel5 <= 2'b11;
  1026. 5'b10111 : sel5 <= 2'b11;
  1027. 5'b11000 : sel5 <= 2'b11;
  1028. 5'b11001 : sel5 <= 2'b11;
  1029. 5'b11010 : sel5 <= 2'b11;
  1030. 5'b11011 : sel5 <= 2'b11;
  1031. 5'b11100 : sel5 <= 2'b11;
  1032. 5'b11101 : sel5 <= 2'b11;
  1033. 5'b11110 : sel5 <= 2'b11;
  1034. 5'b11111 : sel5 <= 2'b11;
  1035. endcase
  1036. always @ (posedge clk or posedge reset)
  1037. if (reset == 1'b1)
  1038. sel6 <= 2'b00;
  1039. else
  1040. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1041. case (counter1024_temp[9:5])
  1042. 5'b00000 : sel6 <= 2'b01;
  1043. 5'b00001 : sel6 <= 2'b01;
  1044. 5'b00010 : sel6 <= 2'b01;
  1045. 5'b00011 : sel6 <= 2'b01;
  1046. 5'b00100 : sel6 <= 2'b01;
  1047. 5'b00101 : sel6 <= 2'b01;
  1048. 5'b00110 : sel6 <= 2'b01;
  1049. 5'b00111 : sel6 <= 2'b10;
  1050. 5'b01000 : sel6 <= 2'b10;
  1051. 5'b01001 : sel6 <= 2'b10;
  1052. 5'b01010 : sel6 <= 2'b10;
  1053. 5'b01011 : sel6 <= 2'b10;
  1054. 5'b01100 : sel6 <= 2'b10;
  1055. 5'b01101 : sel6 <= 2'b10;
  1056. 5'b01110 : sel6 <= 2'b10;
  1057. 5'b01111 : sel6 <= 2'b10;
  1058. 5'b10000 : sel6 <= 2'b10;
  1059. 5'b10001 : sel6 <= 2'b10;
  1060. 5'b10010 : sel6 <= 2'b10;
  1061. 5'b10011 : sel6 <= 2'b10;
  1062. 5'b10100 : sel6 <= 2'b10;
  1063. 5'b10101 : sel6 <= 2'b10;
  1064. 5'b10110 : sel6 <= 2'b10;
  1065. 5'b10111 : sel6 <= 2'b11;
  1066. 5'b11000 : sel6 <= 2'b11;
  1067. 5'b11001 : sel6 <= 2'b11;
  1068. 5'b11010 : sel6 <= 2'b11;
  1069. 5'b11011 : sel6 <= 2'b11;
  1070. 5'b11100 : sel6 <= 2'b11;
  1071. 5'b11101 : sel6 <= 2'b11;
  1072. 5'b11110 : sel6 <= 2'b11;
  1073. 5'b11111 : sel6 <= 2'b11;
  1074. endcase
  1075. always @ (posedge clk or posedge reset)
  1076. if (reset == 1'b1)
  1077. sel7 <= 2'b00;
  1078. else
  1079. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1080. case (counter1024_temp[9:5])
  1081. 5'b00000 : sel7 <= 2'b01;
  1082. 5'b00001 : sel7 <= 2'b01;
  1083. 5'b00010 : sel7 <= 2'b01;
  1084. 5'b00011 : sel7 <= 2'b01;
  1085. 5'b00100 : sel7 <= 2'b01;
  1086. 5'b00101 : sel7 <= 2'b01;
  1087. 5'b00110 : sel7 <= 2'b01;
  1088. 5'b00111 : sel7 <= 2'b01;
  1089. 5'b01000 : sel7 <= 2'b10;
  1090. 5'b01001 : sel7 <= 2'b10;
  1091. 5'b01010 : sel7 <= 2'b10;
  1092. 5'b01011 : sel7 <= 2'b10;
  1093. 5'b01100 : sel7 <= 2'b10;
  1094. 5'b01101 : sel7 <= 2'b10;
  1095. 5'b01110 : sel7 <= 2'b10;
  1096. 5'b01111 : sel7 <= 2'b10;
  1097. 5'b10000 : sel7 <= 2'b10;
  1098. 5'b10001 : sel7 <= 2'b10;
  1099. 5'b10010 : sel7 <= 2'b10;
  1100. 5'b10011 : sel7 <= 2'b10;
  1101. 5'b10100 : sel7 <= 2'b10;
  1102. 5'b10101 : sel7 <= 2'b10;
  1103. 5'b10110 : sel7 <= 2'b10;
  1104. 5'b10111 : sel7 <= 2'b10;
  1105. 5'b11000 : sel7 <= 2'b11;
  1106. 5'b11001 : sel7 <= 2'b11;
  1107. 5'b11010 : sel7 <= 2'b11;
  1108. 5'b11011 : sel7 <= 2'b11;
  1109. 5'b11100 : sel7 <= 2'b11;
  1110. 5'b11101 : sel7 <= 2'b11;
  1111. 5'b11110 : sel7 <= 2'b11;
  1112. 5'b11111 : sel7 <= 2'b11;
  1113. endcase
  1114. always @ (posedge clk or posedge reset)
  1115. if (reset == 1'b1)
  1116. sel8 <= 2'b00;
  1117. else
  1118. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1119. case (counter1024_temp[9:5])
  1120. 5'b00000 : sel8 <= 2'b01;
  1121. 5'b00001 : sel8 <= 2'b01;
  1122. 5'b00010 : sel8 <= 2'b01;
  1123. 5'b00011 : sel8 <= 2'b01;
  1124. 5'b00100 : sel8 <= 2'b01;
  1125. 5'b00101 : sel8 <= 2'b01;
  1126. 5'b00110 : sel8 <= 2'b01;
  1127. 5'b00111 : sel8 <= 2'b01;
  1128. 5'b01000 : sel8 <= 2'b01;
  1129. 5'b01001 : sel8 <= 2'b10;
  1130. 5'b01010 : sel8 <= 2'b10;
  1131. 5'b01011 : sel8 <= 2'b10;
  1132. 5'b01100 : sel8 <= 2'b10;
  1133. 5'b01101 : sel8 <= 2'b10;
  1134. 5'b01110 : sel8 <= 2'b10;
  1135. 5'b01111 : sel8 <= 2'b10;
  1136. 5'b10000 : sel8 <= 2'b10;
  1137. 5'b10001 : sel8 <= 2'b10;
  1138. 5'b10010 : sel8 <= 2'b10;
  1139. 5'b10011 : sel8 <= 2'b10;
  1140. 5'b10100 : sel8 <= 2'b10;
  1141. 5'b10101 : sel8 <= 2'b10;
  1142. 5'b10110 : sel8 <= 2'b10;
  1143. 5'b10111 : sel8 <= 2'b10;
  1144. 5'b11000 : sel8 <= 2'b10;
  1145. 5'b11001 : sel8 <= 2'b11;
  1146. 5'b11010 : sel8 <= 2'b11;
  1147. 5'b11011 : sel8 <= 2'b11;
  1148. 5'b11100 : sel8 <= 2'b11;
  1149. 5'b11101 : sel8 <= 2'b11;
  1150. 5'b11110 : sel8 <= 2'b11;
  1151. 5'b11111 : sel8 <= 2'b11;
  1152. endcase
  1153. always @ (posedge clk or posedge reset)
  1154. if (reset == 1'b1)
  1155. sel9 <= 2'b00;
  1156. else
  1157. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1158. case (counter1024_temp[9:5])
  1159. 5'b00000 : sel9 <= 2'b01;
  1160. 5'b00001 : sel9 <= 2'b01;
  1161. 5'b00010 : sel9 <= 2'b01;
  1162. 5'b00011 : sel9 <= 2'b01;
  1163. 5'b00100 : sel9 <= 2'b01;
  1164. 5'b00101 : sel9 <= 2'b01;
  1165. 5'b00110 : sel9 <= 2'b01;
  1166. 5'b00111 : sel9 <= 2'b01;
  1167. 5'b01000 : sel9 <= 2'b01;
  1168. 5'b01001 : sel9 <= 2'b01;
  1169. 5'b01010 : sel9 <= 2'b10;
  1170. 5'b01011 : sel9 <= 2'b10;
  1171. 5'b01100 : sel9 <= 2'b10;
  1172. 5'b01101 : sel9 <= 2'b10;
  1173. 5'b01110 : sel9 <= 2'b10;
  1174. 5'b01111 : sel9 <= 2'b10;
  1175. 5'b10000 : sel9 <= 2'b10;
  1176. 5'b10001 : sel9 <= 2'b10;
  1177. 5'b10010 : sel9 <= 2'b10;
  1178. 5'b10011 : sel9 <= 2'b10;
  1179. 5'b10100 : sel9 <= 2'b10;
  1180. 5'b10101 : sel9 <= 2'b10;
  1181. 5'b10110 : sel9 <= 2'b10;
  1182. 5'b10111 : sel9 <= 2'b10;
  1183. 5'b11000 : sel9 <= 2'b10;
  1184. 5'b11001 : sel9 <= 2'b10;
  1185. 5'b11010 : sel9 <= 2'b11;
  1186. 5'b11011 : sel9 <= 2'b11;
  1187. 5'b11100 : sel9 <= 2'b11;
  1188. 5'b11101 : sel9 <= 2'b11;
  1189. 5'b11110 : sel9 <= 2'b11;
  1190. 5'b11111 : sel9 <= 2'b11;
  1191. endcase
  1192. always @ (posedge clk or posedge reset)
  1193. if (reset == 1'b1)
  1194. sel10 <= 2'b00;
  1195. else
  1196. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1197. case (counter1024_temp[9:5])
  1198. 5'b00000 : sel10 <= 2'b01;
  1199. 5'b00001 : sel10 <= 2'b01;
  1200. 5'b00010 : sel10 <= 2'b01;
  1201. 5'b00011 : sel10 <= 2'b01;
  1202. 5'b00100 : sel10 <= 2'b01;
  1203. 5'b00101 : sel10 <= 2'b01;
  1204. 5'b00110 : sel10 <= 2'b01;
  1205. 5'b00111 : sel10 <= 2'b01;
  1206. 5'b01000 : sel10 <= 2'b01;
  1207. 5'b01001 : sel10 <= 2'b01;
  1208. 5'b01010 : sel10 <= 2'b01;
  1209. 5'b01011 : sel10 <= 2'b10;
  1210. 5'b01100 : sel10 <= 2'b10;
  1211. 5'b01101 : sel10 <= 2'b10;
  1212. 5'b01110 : sel10 <= 2'b10;
  1213. 5'b01111 : sel10 <= 2'b10;
  1214. 5'b10000 : sel10 <= 2'b10;
  1215. 5'b10001 : sel10 <= 2'b10;
  1216. 5'b10010 : sel10 <= 2'b10;
  1217. 5'b10011 : sel10 <= 2'b10;
  1218. 5'b10100 : sel10 <= 2'b10;
  1219. 5'b10101 : sel10 <= 2'b10;
  1220. 5'b10110 : sel10 <= 2'b10;
  1221. 5'b10111 : sel10 <= 2'b10;
  1222. 5'b11000 : sel10 <= 2'b10;
  1223. 5'b11001 : sel10 <= 2'b10;
  1224. 5'b11010 : sel10 <= 2'b10;
  1225. 5'b11011 : sel10 <= 2'b11;
  1226. 5'b11100 : sel10 <= 2'b11;
  1227. 5'b11101 : sel10 <= 2'b11;
  1228. 5'b11110 : sel10 <= 2'b11;
  1229. 5'b11111 : sel10 <= 2'b11;
  1230. endcase
  1231. always @ (posedge clk or posedge reset)
  1232. if (reset == 1'b1)
  1233. sel11 <= 2'b00;
  1234. else
  1235. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1236. case (counter1024_temp[9:5])
  1237. 5'b00000 : sel11 <= 2'b01;
  1238. 5'b00001 : sel11 <= 2'b01;
  1239. 5'b00010 : sel11 <= 2'b01;
  1240. 5'b00011 : sel11 <= 2'b01;
  1241. 5'b00100 : sel11 <= 2'b01;
  1242. 5'b00101 : sel11 <= 2'b01;
  1243. 5'b00110 : sel11 <= 2'b01;
  1244. 5'b00111 : sel11 <= 2'b01;
  1245. 5'b01000 : sel11 <= 2'b01;
  1246. 5'b01001 : sel11 <= 2'b01;
  1247. 5'b01010 : sel11 <= 2'b01;
  1248. 5'b01011 : sel11 <= 2'b01;
  1249. 5'b01100 : sel11 <= 2'b10;
  1250. 5'b01101 : sel11 <= 2'b10;
  1251. 5'b01110 : sel11 <= 2'b10;
  1252. 5'b01111 : sel11 <= 2'b10;
  1253. 5'b10000 : sel11 <= 2'b10;
  1254. 5'b10001 : sel11 <= 2'b10;
  1255. 5'b10010 : sel11 <= 2'b10;
  1256. 5'b10011 : sel11 <= 2'b10;
  1257. 5'b10100 : sel11 <= 2'b10;
  1258. 5'b10101 : sel11 <= 2'b10;
  1259. 5'b10110 : sel11 <= 2'b10;
  1260. 5'b10111 : sel11 <= 2'b10;
  1261. 5'b11000 : sel11 <= 2'b10;
  1262. 5'b11001 : sel11 <= 2'b10;
  1263. 5'b11010 : sel11 <= 2'b10;
  1264. 5'b11011 : sel11 <= 2'b10;
  1265. 5'b11100 : sel11 <= 2'b11;
  1266. 5'b11101 : sel11 <= 2'b11;
  1267. 5'b11110 : sel11 <= 2'b11;
  1268. 5'b11111 : sel11 <= 2'b11;
  1269. endcase
  1270. always @ (posedge clk or posedge reset)
  1271. if (reset == 1'b1)
  1272. sel12 <= 2'b00;
  1273. else
  1274. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1275. case (counter1024_temp[9:5])
  1276. 5'b00000 : sel12 <= 2'b01;
  1277. 5'b00001 : sel12 <= 2'b01;
  1278. 5'b00010 : sel12 <= 2'b01;
  1279. 5'b00011 : sel12 <= 2'b01;
  1280. 5'b00100 : sel12 <= 2'b01;
  1281. 5'b00101 : sel12 <= 2'b01;
  1282. 5'b00110 : sel12 <= 2'b01;
  1283. 5'b00111 : sel12 <= 2'b01;
  1284. 5'b01000 : sel12 <= 2'b01;
  1285. 5'b01001 : sel12 <= 2'b01;
  1286. 5'b01010 : sel12 <= 2'b01;
  1287. 5'b01011 : sel12 <= 2'b01;
  1288. 5'b01100 : sel12 <= 2'b01;
  1289. 5'b01101 : sel12 <= 2'b10;
  1290. 5'b01110 : sel12 <= 2'b10;
  1291. 5'b01111 : sel12 <= 2'b10;
  1292. 5'b10000 : sel12 <= 2'b10;
  1293. 5'b10001 : sel12 <= 2'b10;
  1294. 5'b10010 : sel12 <= 2'b10;
  1295. 5'b10011 : sel12 <= 2'b10;
  1296. 5'b10100 : sel12 <= 2'b10;
  1297. 5'b10101 : sel12 <= 2'b10;
  1298. 5'b10110 : sel12 <= 2'b10;
  1299. 5'b10111 : sel12 <= 2'b10;
  1300. 5'b11000 : sel12 <= 2'b10;
  1301. 5'b11001 : sel12 <= 2'b10;
  1302. 5'b11010 : sel12 <= 2'b10;
  1303. 5'b11011 : sel12 <= 2'b10;
  1304. 5'b11100 : sel12 <= 2'b10;
  1305. 5'b11101 : sel12 <= 2'b11;
  1306. 5'b11110 : sel12 <= 2'b11;
  1307. 5'b11111 : sel12 <= 2'b11;
  1308. endcase
  1309. always @ (posedge clk or posedge reset)
  1310. if (reset == 1'b1)
  1311. sel13 <= 2'b00;
  1312. else
  1313. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1314. case (counter1024_temp[9:5])
  1315. 5'b00000 : sel13 <= 2'b01;
  1316. 5'b00001 : sel13 <= 2'b01;
  1317. 5'b00010 : sel13 <= 2'b01;
  1318. 5'b00011 : sel13 <= 2'b01;
  1319. 5'b00100 : sel13 <= 2'b01;
  1320. 5'b00101 : sel13 <= 2'b01;
  1321. 5'b00110 : sel13 <= 2'b01;
  1322. 5'b00111 : sel13 <= 2'b01;
  1323. 5'b01000 : sel13 <= 2'b01;
  1324. 5'b01001 : sel13 <= 2'b01;
  1325. 5'b01010 : sel13 <= 2'b01;
  1326. 5'b01011 : sel13 <= 2'b01;
  1327. 5'b01100 : sel13 <= 2'b01;
  1328. 5'b01101 : sel13 <= 2'b01;
  1329. 5'b01110 : sel13 <= 2'b10;
  1330. 5'b01111 : sel13 <= 2'b10;
  1331. 5'b10000 : sel13 <= 2'b10;
  1332. 5'b10001 : sel13 <= 2'b10;
  1333. 5'b10010 : sel13 <= 2'b10;
  1334. 5'b10011 : sel13 <= 2'b10;
  1335. 5'b10100 : sel13 <= 2'b10;
  1336. 5'b10101 : sel13 <= 2'b10;
  1337. 5'b10110 : sel13 <= 2'b10;
  1338. 5'b10111 : sel13 <= 2'b10;
  1339. 5'b11000 : sel13 <= 2'b10;
  1340. 5'b11001 : sel13 <= 2'b10;
  1341. 5'b11010 : sel13 <= 2'b10;
  1342. 5'b11011 : sel13 <= 2'b10;
  1343. 5'b11100 : sel13 <= 2'b10;
  1344. 5'b11101 : sel13 <= 2'b10;
  1345. 5'b11110 : sel13 <= 2'b11;
  1346. 5'b11111 : sel13 <= 2'b11;
  1347. endcase
  1348. always @ (posedge clk or posedge reset)
  1349. if (reset == 1'b1)
  1350. sel14 <= 2'b00;
  1351. else
  1352. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1353. case (counter1024_temp[9:5])
  1354. 5'b00000 : sel14 <= 2'b01;
  1355. 5'b00001 : sel14 <= 2'b01;
  1356. 5'b00010 : sel14 <= 2'b01;
  1357. 5'b00011 : sel14 <= 2'b01;
  1358. 5'b00100 : sel14 <= 2'b01;
  1359. 5'b00101 : sel14 <= 2'b01;
  1360. 5'b00110 : sel14 <= 2'b01;
  1361. 5'b00111 : sel14 <= 2'b01;
  1362. 5'b01000 : sel14 <= 2'b01;
  1363. 5'b01001 : sel14 <= 2'b01;
  1364. 5'b01010 : sel14 <= 2'b01;
  1365. 5'b01011 : sel14 <= 2'b01;
  1366. 5'b01100 : sel14 <= 2'b01;
  1367. 5'b01101 : sel14 <= 2'b01;
  1368. 5'b01110 : sel14 <= 2'b01;
  1369. 5'b01111 : sel14 <= 2'b10;
  1370. 5'b10000 : sel14 <= 2'b10;
  1371. 5'b10001 : sel14 <= 2'b10;
  1372. 5'b10010 : sel14 <= 2'b10;
  1373. 5'b10011 : sel14 <= 2'b10;
  1374. 5'b10100 : sel14 <= 2'b10;
  1375. 5'b10101 : sel14 <= 2'b10;
  1376. 5'b10110 : sel14 <= 2'b10;
  1377. 5'b10111 : sel14 <= 2'b10;
  1378. 5'b11000 : sel14 <= 2'b10;
  1379. 5'b11001 : sel14 <= 2'b10;
  1380. 5'b11010 : sel14 <= 2'b10;
  1381. 5'b11011 : sel14 <= 2'b10;
  1382. 5'b11100 : sel14 <= 2'b10;
  1383. 5'b11101 : sel14 <= 2'b10;
  1384. 5'b11110 : sel14 <= 2'b10;
  1385. 5'b11111 : sel14 <= 2'b11;
  1386. endcase
  1387. always @ (posedge clk or posedge reset)
  1388. if (reset == 1'b1)
  1389. sel15 <= 2'b00;
  1390. else
  1391. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1392. case (counter1024_temp[9:5])
  1393. 5'b00000 : sel15 <= 2'b01;
  1394. 5'b00001 : sel15 <= 2'b01;
  1395. 5'b00010 : sel15 <= 2'b01;
  1396. 5'b00011 : sel15 <= 2'b01;
  1397. 5'b00100 : sel15 <= 2'b01;
  1398. 5'b00101 : sel15 <= 2'b01;
  1399. 5'b00110 : sel15 <= 2'b01;
  1400. 5'b00111 : sel15 <= 2'b01;
  1401. 5'b01000 : sel15 <= 2'b01;
  1402. 5'b01001 : sel15 <= 2'b01;
  1403. 5'b01010 : sel15 <= 2'b01;
  1404. 5'b01011 : sel15 <= 2'b01;
  1405. 5'b01100 : sel15 <= 2'b01;
  1406. 5'b01101 : sel15 <= 2'b01;
  1407. 5'b01110 : sel15 <= 2'b01;
  1408. 5'b01111 : sel15 <= 2'b01;
  1409. 5'b10000 : sel15 <= 2'b10;
  1410. 5'b10001 : sel15 <= 2'b10;
  1411. 5'b10010 : sel15 <= 2'b10;
  1412. 5'b10011 : sel15 <= 2'b10;
  1413. 5'b10100 : sel15 <= 2'b10;
  1414. 5'b10101 : sel15 <= 2'b10;
  1415. 5'b10110 : sel15 <= 2'b10;
  1416. 5'b10111 : sel15 <= 2'b10;
  1417. 5'b11000 : sel15 <= 2'b10;
  1418. 5'b11001 : sel15 <= 2'b10;
  1419. 5'b11010 : sel15 <= 2'b10;
  1420. 5'b11011 : sel15 <= 2'b10;
  1421. 5'b11100 : sel15 <= 2'b10;
  1422. 5'b11101 : sel15 <= 2'b10;
  1423. 5'b11110 : sel15 <= 2'b10;
  1424. 5'b11111 : sel15 <= 2'b10;
  1425. endcase
  1426. //------------------------用于sad计算处理的选择信号的产生
  1427. always @ (posedge clk or posedge reset)
  1428. if (reset == 1'b1)
  1429. selc_temp <= 4'b0000;
  1430. else
  1431. if (fs_en_temp == 1'b1 && counter1024_temp[4:0]==5'b0)
  1432. case (counter1024_temp[9:5])
  1433. 5'b00000 : selc_temp <= 4'b0000;
  1434. 5'b00001 : selc_temp <= 4'b0001;
  1435. 5'b00010 : selc_temp <= 4'b0010;
  1436. 5'b00011 : selc_temp <= 4'b0011;
  1437. 5'b00100 : selc_temp <= 4'b0100;
  1438. 5'b00101 : selc_temp <= 4'b0101;
  1439. 5'b00110 : selc_temp <= 4'b0110;
  1440. 5'b00111 : selc_temp <= 4'b0111;
  1441. 5'b01000 : selc_temp <= 4'b1000;
  1442. 5'b01001 : selc_temp <= 4'b1001;
  1443. 5'b01010 : selc_temp <= 4'b1010;
  1444. 5'b01011 : selc_temp <= 4'b1011;
  1445. 5'b01100 : selc_temp <= 4'b1100;
  1446. 5'b01101 : selc_temp <= 4'b1101;
  1447. 5'b01110 : selc_temp <= 4'b1110;
  1448. 5'b01111 : selc_temp <= 4'b1111;
  1449. 5'b10000 : selc_temp <= 4'b0000;
  1450. 5'b10001 : selc_temp <= 4'b0001;
  1451. 5'b10010 : selc_temp <= 4'b0010;
  1452. 5'b10011 : selc_temp <= 4'b0011;
  1453. 5'b10100 : selc_temp <= 4'b0100;
  1454. 5'b10101 : selc_temp <= 4'b0101;
  1455. 5'b10110 : selc_temp <= 4'b0110;
  1456. 5'b10111 : selc_temp <= 4'b0111;
  1457. 5'b11000 : selc_temp <= 4'b1000;
  1458. 5'b11001 : selc_temp <= 4'b1001;
  1459. 5'b11010 : selc_temp <= 4'b1010;
  1460. 5'b11011 : selc_temp <= 4'b1011;
  1461. 5'b11100 : selc_temp <= 4'b1100;
  1462. 5'b11101 : selc_temp <= 4'b1101;
  1463. 5'b11110 : selc_temp <= 4'b1110;
  1464. 5'b11111 : selc_temp <= 4'b1111;
  1465. endcase
  1466. always @ (posedge clk or posedge reset)
  1467. if (reset == 1'b1)
  1468. begin
  1469. selc_temp1 <= 4'b0000;
  1470. selc <= 4'b0000;
  1471. end
  1472. else
  1473. begin
  1474. selc_temp1 <= selc_temp;
  1475. selc <= selc_temp1;
  1476. end
  1477. //--------------------图像宏块计数器
  1478. always @ (posedge clk or posedge reset)
  1479. if (reset == 1'b1)
  1480. block_num <= 11'b0;
  1481. else
  1482. if (next_state == s_blockend)
  1483. block_num <= block_num + 1'b1;
  1484. else if (next_state == s_frameend)
  1485. block_num <= 11'b0;
  1486. //-------------------有限状态机转换 
  1487. always @ (posedge clk or posedge reset)
  1488. if (reset ==1'b1)
  1489. present_state <= s_powerup;
  1490. else
  1491. present_state <= next_state;
  1492. always @ ( * )
  1493. case ( present_state )
  1494. s_powerup:
  1495. begin
  1496. next_state <= s_frameidle;
  1497. end
  1498. s_frameidle:
  1499. begin
  1500. if ( ven ==1'b1 && ven_delay==1'b0 )//帧有效上升沿
  1501. next_state <= s_idle;
  1502. else
  1503. next_state <= s_frameidle;
  1504. end
  1505. s_idle:
  1506. begin
  1507. if ( ven_delay == 1'b0 )
  1508. next_state <= s_frameidle;
  1509. else
  1510. begin
  1511. if ( cbready_temp == 1'b1 )//当前宏块数据有效
  1512. next_state <= s_cbready;
  1513. else
  1514. next_state <= s_idle;
  1515. end
  1516. end
  1517. s_cbready:
  1518. begin
  1519. if ( ven_delay == 1'b0 )
  1520. next_state <= s_frameidle;
  1521. else
  1522. begin
  1523. if ( swready_temp == 1'b1 )//搜索窗数据有效
  1524. next_state <= s_loading;
  1525. else
  1526. next_state <= s_cbready;
  1527. end
  1528. end
  1529. s_loading:
  1530. begin
  1531. if ( count20 ==5'b10100 )//当前数据与参考数据载入PE中
  1532. next_state <= s_calculating;
  1533. else
  1534. next_state <= s_loading;
  1535. end
  1536. s_calculating:
  1537. begin
  1538. if ( counter1024 == 10'b1111111111 )//一个宏块运动搜索结束
  1539. next_state <= s_blockend;
  1540. else
  1541. next_state <= s_calculating;
  1542. end
  1543. s_blockend:
  1544. begin
  1545. if ( block_num == 11'b11001010100 )//一帧图像运动搜索完成
  1546. next_state <= s_frameend;
  1547. else 
  1548. next_state <= s_idle;
  1549. end
  1550. s_frameend:
  1551. begin
  1552. next_state <= s_frameidle;
  1553. end
  1554. default : next_state <= s_frameidle;
  1555. endcase
  1556. endmodule