WinParameters.v 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 14:12:30 06/03/2020
  7. // Design Name:
  8. // Module Name: WinParameters
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies: kek
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module WinParameters
  22. #(
  23. parameter WindPhIncWidth = 48,
  24. parameter WindNormCoefWidth = 14,
  25. parameter WindPNumWidth = 32,
  26. parameter BandCmdWidth = 16
  27. )
  28. (
  29. input Clk_i,
  30. input Rst_i,
  31. input [BandCmdWidth-1:0] FilterCmd_i,
  32. output [WindPhIncWidth-1:0] WinPhInc_o,
  33. output [WindPhIncWidth-1:0] WinPhIncStart_o,
  34. output [WindNormCoefWidth-1:0] WinNormCoef_o,
  35. output [WindPNumWidth-1:0] WinPointsNum_o,
  36. output [WindPNumWidth-1:0] AverageNoiseLvl_o
  37. );
  38. //================================================================================
  39. // REG/WIRE
  40. //================================================================================
  41. reg [WindPhIncWidth-1:0] windPhInc;
  42. reg [WindNormCoefWidth-1:0] winNormCoef;
  43. reg [WindPNumWidth-1:0] winPointsNum;
  44. reg [WindPNumWidth-1:0] averageNoiseLvl;
  45. //================================================================================
  46. // ASSIGNMENTS
  47. //================================================================================
  48. assign WinPhInc_o = windPhInc;
  49. assign WinPhIncStart_o = 32'h80000000;
  50. assign WinNormCoef_o = winNormCoef;
  51. assign WinPointsNum_o = winPointsNum;
  52. assign AverageNoiseLvl_o = averageNoiseLvl;
  53. //================================================================================
  54. // CODING
  55. //================================================================================
  56. always @ (posedge Clk_i) begin
  57. if (!Rst_i) begin
  58. case (FilterCmd_i)
  59. 8'h0 : begin // 1 Hz
  60. windPhInc <= 32'h2a8;
  61. // winNormCoef <= 32'h334269d2;
  62. winNormCoef <= 32'h3395e8ca;
  63. winPointsNum <= 32'h30291a0;
  64. averageNoiseLvl <= 32'h0;
  65. end
  66. 8'h1 : begin// 1.5 Hz
  67. windPhInc <= 32'h3fc;
  68. // winNormCoef <= 32'h3391cf5e;
  69. winNormCoef <= 32'h3395e8ca;
  70. winPointsNum <= 32'h201b66a;
  71. averageNoiseLvl <= 32'h0;
  72. end
  73. 8'h2 : begin// 2 Hz
  74. windPhInc <= 32'h550;
  75. // winNormCoef <= 32'h33c269d2;
  76. winNormCoef <= 32'h33c7e10e;
  77. winPointsNum <= 32'h18148d0;
  78. averageNoiseLvl <= 32'h0;
  79. end
  80. 8'h3 : begin// 3 Hz
  81. windPhInc <= 32'h7f9;
  82. // winNormCoef <= 32'h3411ccc1;
  83. winNormCoef <= 32'h3415e61b;
  84. winPointsNum <= 32'h100db35;
  85. averageNoiseLvl <= 32'h0;
  86. end
  87. 8'h4 : begin// 5 Hz
  88. windPhInc <= 32'hd49;
  89. // winNormCoef <= 32'h347301aa;
  90. winNormCoef <= 32'h3479d6a3;
  91. winPointsNum <= 32'h9a1d20;
  92. averageNoiseLvl <= 32'h0;
  93. end
  94. 8'h5 : begin// 7 Hz
  95. windPhInc <= 32'h129a;
  96. // winNormCoef <= 32'h34aa19fd;
  97. winNormCoef <= 32'h34aee23e;
  98. winPointsNum <= 32'h6e14cd;
  99. averageNoiseLvl <= 32'h0;
  100. end
  101. 8'h10 : begin// 10 Hz
  102. windPhInc <= 32'h1a93;
  103. // winNormCoef <= 32'h34f3005d;
  104. winNormCoef <= 32'h34f9d54a;
  105. winPointsNum <= 32'h4d0e90;
  106. averageNoiseLvl <= 32'h0;
  107. end
  108. 8'h11 : begin// 15 Hz
  109. windPhInc <= 32'h27dd;
  110. // winNormCoef <= 32'h35363ff7;
  111. winNormCoef <= 32'h353b5fa5;
  112. winPointsNum <= 32'h335f0a;
  113. averageNoiseLvl <= 32'h0;
  114. end
  115. 8'h12 : begin// 20 Hz
  116. windPhInc <= 32'h3527;
  117. // winNormCoef <= 32'h3572ffba;
  118. winNormCoef <= 32'h3579d49f;
  119. winPointsNum <= 32'h268748;
  120. averageNoiseLvl <= 32'h0;
  121. end
  122. 8'h13 : begin// 30 Hz
  123. windPhInc <= 32'h4fbb;
  124. // winNormCoef <= 32'h35b63fa7;
  125. winNormCoef <= 32'h35bb5f4e;
  126. winPointsNum <= 32'h19af85;
  127. averageNoiseLvl <= 32'h0;
  128. end
  129. 8'h14 : begin// 50 Hz
  130. windPhInc <= 32'h84e3;
  131. // winNormCoef <= 32'h3617df9c;
  132. winNormCoef <= 32'h361c24a2;
  133. winPointsNum <= 32'hf6950;
  134. averageNoiseLvl <= 32'h0;
  135. end
  136. 8'h15 : begin// 70 Hz
  137. windPhInc <= 32'hba0b;
  138. // winNormCoef <= 32'h36549f77;
  139. winNormCoef <= 32'h365a99ac;
  140. winPointsNum <= 32'hb0214;
  141. averageNoiseLvl <= 32'h0;
  142. end
  143. 8'h20 : begin// 100 Hz
  144. windPhInc <= 32'h109c7;
  145. // winNormCoef <= 32'h3697df93;
  146. winNormCoef <= 32'h369c248d;
  147. winPointsNum <= 32'h7b4a8;
  148. averageNoiseLvl <= 32'h0;
  149. end
  150. 8'h21 : begin// 150 Hz
  151. windPhInc <= 32'h18eab;
  152. // winNormCoef <= 32'h36e3cf84;
  153. winNormCoef <= 32'h36ea36ec;
  154. winPointsNum <= 32'h5231a;
  155. averageNoiseLvl <= 32'h0;
  156. end
  157. 8'h22 : begin// 200 Hz
  158. windPhInc <= 32'h21390;
  159. // winNormCoef <= 32'h3717df94;
  160. winNormCoef <= 32'h371c2478;
  161. winPointsNum <= 32'h3da54;
  162. averageNoiseLvl <= 32'h0;
  163. end
  164. 8'h23 : begin// 300 Hz
  165. windPhInc <= 32'h31d5b;
  166. // winNormCoef <= 32'h3763cf83;
  167. winNormCoef <= 32'h376a36b6;
  168. winPointsNum <= 32'h2918d;
  169. averageNoiseLvl <= 32'h0;
  170. end
  171. 8'h24 : begin// 500 Hz
  172. windPhInc <= 32'h530e3;
  173. // winNormCoef <= 32'h37bdd7e8;
  174. winNormCoef <= 32'h37c32db2;
  175. winPointsNum <= 32'h18a88;
  176. averageNoiseLvl <= 32'h0;
  177. end
  178. 8'h25 : begin// 700 Hz
  179. windPhInc <= 32'h7449e;
  180. // winNormCoef <= 32'h3804e417;
  181. winNormCoef <= 32'h38089ffd;
  182. winPointsNum <= 32'h119ce;
  183. averageNoiseLvl <= 32'h0;
  184. end
  185. 8'h30 : begin// 1 kHz
  186. windPhInc <= 32'ha61fc;
  187. // winNormCoef <= 32'h383dd7e8;
  188. winNormCoef <= 32'h38432d23;
  189. winPointsNum <= 32'hc544;
  190. averageNoiseLvl <= 32'h0;
  191. end
  192. 8'h31 : begin// 1.5 kHz
  193. windPhInc <= 32'hf92fb;
  194. // winNormCoef <= 32'h388e6329;
  195. winNormCoef <= 32'h389262af;
  196. winPointsNum <= 32'h8382;
  197. averageNoiseLvl <= 32'h0;
  198. end
  199. 8'h32 : begin// 2 kHz
  200. windPhInc <= 32'h14c3f9;
  201. // winNormCoef <= 32'h38bdd900;
  202. winNormCoef <= 32'h38c32d23;
  203. winPointsNum <= 32'h62a2;
  204. averageNoiseLvl <= 32'h0;
  205. end
  206. 8'h33 : begin// 3 kHz
  207. windPhInc <= 32'h1f25f6;
  208. // winNormCoef <= 32'h390e6466;
  209. winNormCoef <= 32'h391262b5;
  210. winPointsNum <= 32'h41c1;
  211. averageNoiseLvl <= 32'h0;
  212. end
  213. 8'h34 : begin// 5 kHz
  214. windPhInc <= 32'h33ee26;
  215. // winNormCoef <= 32'h396d509f;
  216. winNormCoef <= 32'h3973f593;
  217. winPointsNum <= 32'h2774;
  218. averageNoiseLvl <= 32'h0;
  219. end
  220. 8'h35 : begin// 7 kHz
  221. windPhInc <= 32'h48bca9;
  222. // winNormCoef <= 32'h39a61fcc;
  223. winNormCoef <= 32'h39aac491;
  224. winPointsNum <= 32'h1c2e;
  225. averageNoiseLvl <= 32'h0;
  226. end
  227. 8'h40 : begin// 10 kHz
  228. windPhInc <= 32'h67dc4c;
  229. // winNormCoef <= 32'h39ed577f;
  230. winNormCoef <= 32'h39f3f593;
  231. winPointsNum <= 32'h13ba;
  232. averageNoiseLvl <= 32'h0;
  233. end
  234. 8'h41 : begin// 15 kHz
  235. windPhInc <= 32'h9c09c0;
  236. // winNormCoef <= 32'h3a3206c8;
  237. winNormCoef <= 32'h3a36f82e;
  238. winPointsNum <= 32'hd26;
  239. averageNoiseLvl <= 32'h0;
  240. end
  241. 8'h42 : begin// 20 kHz
  242. windPhInc <= 32'hd00d00;
  243. // winNormCoef <= 32'h3a6d577f;
  244. winNormCoef <= 32'h3a73e7a1;
  245. winPointsNum <= 32'h9dd;
  246. averageNoiseLvl <= 32'h0;
  247. end
  248. 8'h43 : begin// 30 kHz
  249. windPhInc <= 32'h1381381;
  250. // winNormCoef <= 32'h3ab21643;
  251. winNormCoef <= 32'h3ab6f82e;
  252. winPointsNum <= 32'h693;
  253. averageNoiseLvl <= 32'h0;
  254. end
  255. 8'h44 : begin// 50 kHz
  256. windPhInc <= 32'h2082082;
  257. // winNormCoef <= 32'h3b14707d;
  258. winNormCoef <= 32'h3b1870f3;
  259. winPointsNum <= 32'h3f2;
  260. averageNoiseLvl <= 32'h0;
  261. end
  262. 8'h45 : begin// 70 KHz
  263. windPhInc <= 32'h2d82d82;
  264. // winNormCoef <= 32'h3b500d01;
  265. winNormCoef <= 32'h3b559010;
  266. winPointsNum <= 32'h2d1;
  267. averageNoiseLvl <= 32'h0;
  268. end
  269. 8'h50 : begin// 100 KHz
  270. windPhInc <= 32'h4104104;
  271. // winNormCoef <= 32'h3b949b93;
  272. winNormCoef <= 32'h3b98700b;
  273. winPointsNum <= 32'h1f9;
  274. averageNoiseLvl <= 32'h0;
  275. end
  276. 8'h51 : begin// 150 KHz
  277. windPhInc <= 32'h6186186;
  278. // winNormCoef <= 32'h3bdfac1f;
  279. winNormCoef <= 32'h3be52dcd;
  280. winPointsNum <= 32'h150;
  281. averageNoiseLvl <= 32'h0;
  282. end
  283. 8'h52 : begin// 200 KHz
  284. windPhInc <= 32'h8421084;
  285. // winNormCoef <= 32'h3c14f209;
  286. winNormCoef <= 32'h3c18700b;
  287. winPointsNum <= 32'hfc;
  288. averageNoiseLvl <= 32'h0;
  289. end
  290. 8'h53 : begin// 300 KHz
  291. windPhInc <= 32'hc30c30c;
  292. // winNormCoef <= 32'h3c607038;
  293. winNormCoef <= 32'h3c652dcd;
  294. winPointsNum <= 32'ha8;
  295. averageNoiseLvl <= 32'h0;
  296. end
  297. 8'h54 : begin// 500 KHz
  298. windPhInc <= 32'h1c71c71;
  299. // winNormCoef <= 32'h3ce38e38;
  300. winNormCoef <= 32'h3ce98ccd;
  301. winPointsNum <= 32'h90;
  302. averageNoiseLvl <= 32'h0;
  303. end
  304. 8'h55 : begin// 700 KHz
  305. windPhInc <= 32'h2828282;
  306. // winNormCoef <= 32'h3d20a0a0;
  307. winNormCoef <= 32'h3d24cd6d;
  308. winPointsNum <= 32'h66;
  309. averageNoiseLvl <= 32'h0;
  310. end
  311. 8'h60 : begin// 1 MHz
  312. windPhInc <= 32'h38e38e3;
  313. // winNormCoef <= 32'h3d638e39;
  314. winNormCoef <= 32'h3d698ccd;
  315. winPointsNum <= 32'h48;
  316. averageNoiseLvl <= 32'h0;
  317. end
  318. 8'h61 : begin// 1.5 MHz
  319. windPhInc <= 32'h5555555;
  320. // winNormCoef <= 32'h3daaaaab;
  321. winNormCoef <= 32'h3daf299a;
  322. winPointsNum <= 32'h30;
  323. averageNoiseLvl <= 32'h0;
  324. end
  325. 8'h62 : begin// 2 MHz
  326. windPhInc <= 32'h71c71c7;
  327. // winNormCoef <= 32'h3de38e39;
  328. winNormCoef <= 32'h3de98759;
  329. winPointsNum <= 32'h24;
  330. averageNoiseLvl <= 32'h0;
  331. end
  332. 8'h63 : begin
  333. windPhInc <= 32'h0;
  334. // winNormCoef <= 32'h3e124925;
  335. winNormCoef <= 32'h3e1665f8;
  336. winPointsNum <= 32'he;
  337. averageNoiseLvl <= 32'h3b83126f;
  338. end
  339. // 8'h64 : begin// 5 MHz
  340. // windPhInc <= 32'h12492492;
  341. // winNormCoef <= 32'h3e924925;
  342. // winPointsNum <= 32'he;
  343. // end
  344. // 8'h64 : begin// 2,46 MHz
  345. // windPhInc <= 32'h9d89d89;
  346. // winNormCoef <= 32'h3df76c57;
  347. // winPointsNum <= 32'h1a;
  348. // end
  349. // 8'h70 : begin
  350. // параметры для калибровки - прямоугольное окно 65536 отсчетов 2^16
  351. // windPhInc <= 32'h1FFFFFFF;
  352. // winNormCoef <= 32'h6D13892;
  353. // winPointsNum <= 32'h10000;
  354. // end
  355. // 8'h71 : begin
  356. // 7.5MHZ
  357. // windPhInc <= 32'h1c71c71c;
  358. // winNormCoef <= 32'h3ee38e39;
  359. // winPointsNum <= 32'h9;
  360. // end
  361. // 8'h72 : begin
  362. // 10MHZ
  363. // windPhInc <= 32'h24924924;
  364. // winNormCoef <= 32'h3f124925;
  365. // winPointsNum <= 32'h7;
  366. // end
  367. 8'h64 : begin
  368. windPhInc <= 32'h0;
  369. // winNormCoef <= 32'h3e800000;
  370. winNormCoef <= 32'h3e839930;
  371. winPointsNum <= 32'h8;
  372. averageNoiseLvl <= 32'h3bc49ba6;
  373. end
  374. 8'h70 : begin
  375. // параметры для калибровки - прямоугольное окно 65536 отсчетов 2^16
  376. windPhInc <= 32'h1FFFFFFF;
  377. winNormCoef <= 32'h6D13892;
  378. winPointsNum <= 32'h10000;
  379. averageNoiseLvl <= 32'h0;
  380. end
  381. 8'h71 : begin
  382. windPhInc <= 32'h0;
  383. // winNormCoef <= 32'h3eaaaaab;
  384. winNormCoef <= 32'h3eaf76cd;
  385. winPointsNum <= 32'h6;
  386. averageNoiseLvl <= 32'h3c03126f;
  387. end
  388. 8'h72 : begin
  389. windPhInc <= 32'h0;
  390. // winNormCoef <= 32'h3f000000;
  391. winNormCoef <= 32'h3f039939;
  392. winPointsNum <= 32'h4;
  393. averageNoiseLvl <= 32'h3a83126f;
  394. end
  395. default: begin
  396. windPhInc <= 32'h15555555;
  397. winNormCoef <= 32'h3e86cfea;
  398. winPointsNum <= 32'hc;
  399. averageNoiseLvl <= 32'h0;
  400. end
  401. endcase
  402. end
  403. end
  404. endmodule