Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.79 KB | None | 0 0
  1. library ieee;
  2. use IEEE.std_logic_1164.all;
  3. use IEEE.numeric_std.all;
  4. library work;
  5. use work.std_logic_arithext.all;
  6.  
  7.  
  8. -- datapath entity
  9. entity sincx_ins is
  10. port(
  11. dataa : in std_logic_vector(31 downto 0);
  12. datab : in std_logic_vector(31 downto 0);
  13. start : in std_logic;
  14. clk_en : in std_logic;
  15. result : out std_logic_vector(31 downto 0);
  16. done : out std_logic;
  17. RST : in std_logic;
  18. CLK : in std_logic
  19. );
  20. end sincx_ins;
  21.  
  22.  
  23. architecture RTL of sincx_ins is
  24. -- signal declaration
  25. signal full0 : std_logic_vector(31 downto 0);
  26. signal full0_wire : std_logic_vector(31 downto 0);
  27. signal full1 : std_logic_vector(31 downto 0);
  28. signal full1_wire : std_logic_vector(31 downto 0);
  29. signal full2 : std_logic_vector(31 downto 0);
  30. signal full2_wire : std_logic_vector(31 downto 0);
  31. signal full3 : std_logic_vector(31 downto 0);
  32. signal full3_wire : std_logic_vector(31 downto 0);
  33. signal tap0 : std_logic_vector(31 downto 0);
  34. signal tap0_wire : std_logic_vector(31 downto 0);
  35. signal tap1 : std_logic_vector(31 downto 0);
  36. signal tap1_wire : std_logic_vector(31 downto 0);
  37. signal tap2 : std_logic_vector(31 downto 0);
  38. signal tap2_wire : std_logic_vector(31 downto 0);
  39. signal tap3 : std_logic_vector(31 downto 0);
  40. signal tap3_wire : std_logic_vector(31 downto 0);
  41. signal op_phase0 : std_logic_vector(31 downto 0);
  42. signal op_phase1 : std_logic_vector(31 downto 0);
  43. signal op_phase2 : std_logic_vector(31 downto 0);
  44. signal op_phase3 : std_logic_vector(31 downto 0);
  45. signal Yinp : std_logic_vector(31 downto 0);
  46. signal Yinp_wire : std_logic_vector(31 downto 0);
  47. signal Xinp : std_logic_vector(31 downto 0);
  48. signal Xinp_wire : std_logic_vector(31 downto 0);
  49. signal datap : std_logic_vector(31 downto 0);
  50. signal datap_wire : std_logic_vector(31 downto 0);
  51. signal streg : std_logic;
  52. signal streg_wire : std_logic;
  53. signal dnreg : std_logic;
  54. signal dnreg_wire : std_logic;
  55. signal sig_0 : std_logic;
  56. signal sig_1 : std_logic;
  57. signal sig_2 : std_logic;
  58. signal sig_3 : std_logic;
  59. signal sig_4 : std_logic_vector(31 downto 0);
  60. signal sig_5 : std_logic_vector(31 downto 0);
  61. signal sig_6 : std_logic_vector(31 downto 0);
  62. signal sig_7 : std_logic_vector(31 downto 0);
  63. signal sig_8 : std_logic_vector(31 downto 0);
  64. signal sig_9 : std_logic_vector(31 downto 0);
  65. signal sig_10 : std_logic_vector(31 downto 0);
  66. signal sig_11 : std_logic_vector(63 downto 0);
  67. signal sig_12 : std_logic_vector(31 downto 0);
  68. signal sig_13 : std_logic_vector(63 downto 0);
  69. signal sig_14 : std_logic_vector(63 downto 0);
  70. signal sig_15 : std_logic_vector(31 downto 0);
  71. signal sig_16 : std_logic_vector(63 downto 0);
  72. signal sig_17 : std_logic_vector(63 downto 0);
  73. signal sig_18 : std_logic_vector(31 downto 0);
  74. signal sig_19 : std_logic_vector(63 downto 0);
  75. signal sig_20 : std_logic_vector(63 downto 0);
  76. signal sig_21 : std_logic_vector(31 downto 0);
  77. signal sig_22 : std_logic_vector(63 downto 0);
  78. signal sig_23 : std_logic_vector(31 downto 0);
  79. signal sig_24 : std_logic_vector(63 downto 0);
  80. signal sig_25 : std_logic_vector(63 downto 0);
  81. signal sig_26 : std_logic_vector(31 downto 0);
  82. signal sig_27 : std_logic_vector(63 downto 0);
  83. signal sig_28 : std_logic_vector(63 downto 0);
  84. signal sig_29 : std_logic_vector(31 downto 0);
  85. signal sig_30 : std_logic_vector(63 downto 0);
  86. signal sig_31 : std_logic_vector(63 downto 0);
  87. signal sig_32 : std_logic_vector(31 downto 0);
  88. signal sig_33 : std_logic_vector(63 downto 0);
  89. signal sig_34 : std_logic_vector(31 downto 0);
  90. signal sig_35 : std_logic_vector(63 downto 0);
  91. signal sig_36 : std_logic_vector(63 downto 0);
  92. signal sig_37 : std_logic_vector(31 downto 0);
  93. signal sig_38 : std_logic_vector(63 downto 0);
  94. signal sig_39 : std_logic_vector(63 downto 0);
  95. signal sig_40 : std_logic_vector(31 downto 0);
  96. signal sig_41 : std_logic_vector(63 downto 0);
  97. signal sig_42 : std_logic_vector(63 downto 0);
  98. signal sig_43 : std_logic_vector(31 downto 0);
  99. signal sig_44 : std_logic_vector(63 downto 0);
  100. signal sig_45 : std_logic_vector(31 downto 0);
  101. signal sig_46 : std_logic_vector(63 downto 0);
  102. signal sig_47 : std_logic_vector(63 downto 0);
  103. signal sig_48 : std_logic_vector(31 downto 0);
  104. signal sig_49 : std_logic_vector(63 downto 0);
  105. signal sig_50 : std_logic_vector(63 downto 0);
  106. signal sig_51 : std_logic_vector(31 downto 0);
  107. signal sig_52 : std_logic_vector(63 downto 0);
  108. signal sig_53 : std_logic_vector(63 downto 0);
  109. signal done_int : std_logic;
  110. signal result_int : std_logic_vector(31 downto 0);
  111. signal sig_54 : std_logic;
  112. signal sig_55 : std_logic;
  113.  
  114.  
  115. -- lookup table declaration
  116. Type rom_table_0 is Array (Natural range <>) of std_logic_vector(31 downto 0);
  117. constant c0 : rom_table_0 := (
  118. B"00000000000000000000000000000000",
  119. B"11111111111111111111011111000100",
  120. B"11111111111111111111001001101011",
  121. B"11111111111111111111010001111001");
  122. Type rom_table_1 is Array (Natural range <>) of std_logic_vector(31 downto 0);
  123. constant c1 : rom_table_1 := (
  124. B"00000000000000000000000000000000",
  125. B"00000000000000000001001100110100",
  126. B"00000000000000000010100010111110",
  127. B"00000000000000000011100110011110");
  128. Type rom_table_2 is Array (Natural range <>) of std_logic_vector(31 downto 0);
  129. constant c2 : rom_table_2 := (
  130. B"00000000000000000011111110011100",
  131. B"00000000000000000011100110011110",
  132. B"00000000000000000010100010111110",
  133. B"00000000000000000001001100110100");
  134. Type rom_table_3 is Array (Natural range <>) of std_logic_vector(31 downto 0);
  135. constant c3 : rom_table_3 := (
  136. B"00000000000000000000000000000000",
  137. B"11111111111111111111010001111001",
  138. B"11111111111111111111001001101011",
  139. B"11111111111111111111011111000100");
  140.  
  141.  
  142. -- state register & states
  143. type STATE_TYPE is (s0, s1, s2, s3);
  144. signal STATE : STATE_TYPE;
  145. type CONTROL is (
  146. alwayssampledonedwn,
  147. alwaysshift,
  148. alwayscompute,
  149. alwaysdoneup
  150. );
  151. signal cmd : CONTROL;
  152.  
  153.  
  154. begin
  155.  
  156. -- register updates
  157. dpREG: process (CLK, RST)
  158. begin
  159. if (RST = '1') then
  160. full0 <= (others => '0');
  161. full1 <= (others => '0');
  162. full2 <= (others => '0');
  163. full3 <= (others => '0');
  164. tap0 <= (others => '0');
  165. tap1 <= (others => '0');
  166. tap2 <= (others => '0');
  167. tap3 <= (others => '0');
  168. Yinp <= (others => '0');
  169. Xinp <= (others => '0');
  170. datap <= (others => '0');
  171. streg <= '0';
  172. dnreg <= '0';
  173. elsif CLK' event and CLK = '1' then
  174. full0 <= full0_wire;
  175. full1 <= full1_wire;
  176. full2 <= full2_wire;
  177. full3 <= full3_wire;
  178. tap0 <= tap0_wire;
  179. tap1 <= tap1_wire;
  180. tap2 <= tap2_wire;
  181. tap3 <= tap3_wire;
  182. Yinp <= Yinp_wire;
  183. Xinp <= Xinp_wire;
  184. datap <= datap_wire;
  185. streg <= streg_wire;
  186. dnreg <= dnreg_wire;
  187. end if;
  188. end process dpREG;
  189.  
  190.  
  191. -- combinational logics
  192. dpCMB: process (full0, full1, full2, full3, tap0, tap1, tap2, tap3, op_phase0, op_phase1
  193. , op_phase2, op_phase3, Yinp, Xinp, datap, streg, dnreg, sig_0, sig_1, sig_2
  194. , sig_3, sig_4, sig_5, sig_6, sig_7, sig_8, sig_9, sig_10, sig_11, sig_12
  195. , sig_13, sig_14, sig_15, sig_16, sig_17, sig_18, sig_19, sig_20, sig_21, sig_22
  196. , sig_23, sig_24, sig_25, sig_26, sig_27, sig_28, sig_29, sig_30, sig_31, sig_32
  197. , sig_33, sig_34, sig_35, sig_36, sig_37, sig_38, sig_39, sig_40, sig_41, sig_42
  198. , sig_43, sig_44, sig_45, sig_46, sig_47, sig_48, sig_49, sig_50, sig_51, sig_52
  199. , sig_53, done_int, result_int, dataa, datab, start, clk_en,cmd,STATE)
  200. begin
  201. full0_wire <= full0;
  202. full1_wire <= full1;
  203. full2_wire <= full2;
  204. full3_wire <= full3;
  205. tap0_wire <= tap0;
  206. tap1_wire <= tap1;
  207. tap2_wire <= tap2;
  208. tap3_wire <= tap3;
  209. op_phase0 <= (others => '0');
  210. op_phase1 <= (others => '0');
  211. op_phase2 <= (others => '0');
  212. op_phase3 <= (others => '0');
  213. Yinp_wire <= Yinp;
  214. Xinp_wire <= Xinp;
  215. datap_wire <= datap;
  216. streg_wire <= streg;
  217. dnreg_wire <= dnreg;
  218. sig_0 <= '0';
  219. sig_1 <= '0';
  220. sig_2 <= '0';
  221. sig_3 <= '0';
  222. sig_4 <= (others => '0');
  223. sig_5 <= (others => '0');
  224. sig_6 <= (others => '0');
  225. sig_7 <= (others => '0');
  226. sig_8 <= (others => '0');
  227. sig_9 <= (others => '0');
  228. sig_10 <= (others => '0');
  229. sig_11 <= (others => '0');
  230. sig_12 <= (others => '0');
  231. sig_13 <= (others => '0');
  232. sig_14 <= (others => '0');
  233. sig_15 <= (others => '0');
  234. sig_16 <= (others => '0');
  235. sig_17 <= (others => '0');
  236. sig_18 <= (others => '0');
  237. sig_19 <= (others => '0');
  238. sig_20 <= (others => '0');
  239. sig_21 <= (others => '0');
  240. sig_22 <= (others => '0');
  241. sig_23 <= (others => '0');
  242. sig_24 <= (others => '0');
  243. sig_25 <= (others => '0');
  244. sig_26 <= (others => '0');
  245. sig_27 <= (others => '0');
  246. sig_28 <= (others => '0');
  247. sig_29 <= (others => '0');
  248. sig_30 <= (others => '0');
  249. sig_31 <= (others => '0');
  250. sig_32 <= (others => '0');
  251. sig_33 <= (others => '0');
  252. sig_34 <= (others => '0');
  253. sig_35 <= (others => '0');
  254. sig_36 <= (others => '0');
  255. sig_37 <= (others => '0');
  256. sig_38 <= (others => '0');
  257. sig_39 <= (others => '0');
  258. sig_40 <= (others => '0');
  259. sig_41 <= (others => '0');
  260. sig_42 <= (others => '0');
  261. sig_43 <= (others => '0');
  262. sig_44 <= (others => '0');
  263. sig_45 <= (others => '0');
  264. sig_46 <= (others => '0');
  265. sig_47 <= (others => '0');
  266. sig_48 <= (others => '0');
  267. sig_49 <= (others => '0');
  268. sig_50 <= (others => '0');
  269. sig_51 <= (others => '0');
  270. sig_52 <= (others => '0');
  271. sig_53 <= (others => '0');
  272. done_int <= '0';
  273. result_int <= (others => '0');
  274. result <= (others => '0');
  275. done <= '0';
  276.  
  277. case cmd is
  278. when alwayssampledonedwn =>
  279. done <= done_int;
  280. if (signed(dataa) = 2) then
  281. sig_0 <= '1';
  282. else
  283. sig_0 <= '0';
  284. end if;
  285. if (signed(dataa) = 3) then
  286. sig_1 <= '1';
  287. else
  288. sig_1 <= '0';
  289. end if;
  290. if (signed(dataa) = 4) then
  291. sig_2 <= '1';
  292. else
  293. sig_2 <= '0';
  294. end if;
  295. if (signed(dataa) = 5) then
  296. sig_3 <= '1';
  297. else
  298. sig_3 <= '0';
  299. end if;
  300. if (sig_3 = '1') then
  301. sig_4 <= op_phase3;
  302. else
  303. sig_4 <= std_logic_vector(to_unsigned(0, 32));
  304. end if;
  305. if (sig_0 = '1') then
  306. sig_5 <= op_phase0;
  307. elsif (sig_1 = '1') then
  308. sig_5 <= op_phase1;
  309. elsif (sig_2 = '1') then
  310. sig_5 <= op_phase2;
  311. else
  312. sig_5 <= sig_4;
  313. end if;
  314. result <= result_int;
  315. sig_6 <= std_logic_vector(shift_right(signed(full0), 14));
  316. op_phase0 <= sig_6;
  317. sig_7 <= std_logic_vector(shift_right(signed(full1), 14));
  318. op_phase1 <= sig_7;
  319. sig_8 <= std_logic_vector(shift_right(signed(full2), 14));
  320. op_phase2 <= sig_8;
  321. sig_9 <= std_logic_vector(shift_right(signed(full3), 14));
  322. op_phase3 <= sig_9;
  323. done_int <= dnreg;
  324. result_int <= sig_5;
  325. Xinp_wire <= dataa;
  326. Yinp_wire <= datab;
  327. streg_wire <= start;
  328. dnreg_wire <= '0';
  329. when alwaysshift =>
  330. done <= done_int;
  331. if (signed(dataa) = 2) then
  332. sig_0 <= '1';
  333. else
  334. sig_0 <= '0';
  335. end if;
  336. if (signed(dataa) = 3) then
  337. sig_1 <= '1';
  338. else
  339. sig_1 <= '0';
  340. end if;
  341. if (signed(dataa) = 4) then
  342. sig_2 <= '1';
  343. else
  344. sig_2 <= '0';
  345. end if;
  346. if (signed(dataa) = 5) then
  347. sig_3 <= '1';
  348. else
  349. sig_3 <= '0';
  350. end if;
  351. if (sig_3 = '1') then
  352. sig_4 <= op_phase3;
  353. else
  354. sig_4 <= std_logic_vector(to_unsigned(0, 32));
  355. end if;
  356. if (sig_0 = '1') then
  357. sig_5 <= op_phase0;
  358. elsif (sig_1 = '1') then
  359. sig_5 <= op_phase1;
  360. elsif (sig_2 = '1') then
  361. sig_5 <= op_phase2;
  362. else
  363. sig_5 <= sig_4;
  364. end if;
  365. result <= result_int;
  366. sig_6 <= std_logic_vector(shift_right(signed(full0), 14));
  367. op_phase0 <= sig_6;
  368. sig_7 <= std_logic_vector(shift_right(signed(full1), 14));
  369. op_phase1 <= sig_7;
  370. sig_8 <= std_logic_vector(shift_right(signed(full2), 14));
  371. op_phase2 <= sig_8;
  372. sig_9 <= std_logic_vector(shift_right(signed(full3), 14));
  373. op_phase3 <= sig_9;
  374. done_int <= dnreg;
  375. result_int <= sig_5;
  376. Xinp_wire <= dataa;
  377. Yinp_wire <= datab;
  378. streg_wire <= start;
  379. tap0_wire <= Yinp;
  380. tap1_wire <= tap0;
  381. tap2_wire <= tap1;
  382. tap3_wire <= tap2;
  383. when alwayscompute =>
  384. done <= done_int;
  385. if (signed(dataa) = 2) then
  386. sig_0 <= '1';
  387. else
  388. sig_0 <= '0';
  389. end if;
  390. if (signed(dataa) = 3) then
  391. sig_1 <= '1';
  392. else
  393. sig_1 <= '0';
  394. end if;
  395. if (signed(dataa) = 4) then
  396. sig_2 <= '1';
  397. else
  398. sig_2 <= '0';
  399. end if;
  400. if (signed(dataa) = 5) then
  401. sig_3 <= '1';
  402. else
  403. sig_3 <= '0';
  404. end if;
  405. if (sig_3 = '1') then
  406. sig_4 <= op_phase3;
  407. else
  408. sig_4 <= std_logic_vector(to_unsigned(0, 32));
  409. end if;
  410. if (sig_0 = '1') then
  411. sig_5 <= op_phase0;
  412. elsif (sig_1 = '1') then
  413. sig_5 <= op_phase1;
  414. elsif (sig_2 = '1') then
  415. sig_5 <= op_phase2;
  416. else
  417. sig_5 <= sig_4;
  418. end if;
  419. result <= result_int;
  420. sig_6 <= std_logic_vector(shift_right(signed(full0), 14));
  421. op_phase0 <= sig_6;
  422. sig_7 <= std_logic_vector(shift_right(signed(full1), 14));
  423. op_phase1 <= sig_7;
  424. sig_8 <= std_logic_vector(shift_right(signed(full2), 14));
  425. op_phase2 <= sig_8;
  426. sig_9 <= std_logic_vector(shift_right(signed(full3), 14));
  427. op_phase3 <= sig_9;
  428. done_int <= dnreg;
  429. result_int <= sig_5;
  430. Xinp_wire <= dataa;
  431. Yinp_wire <= datab;
  432. streg_wire <= start;
  433. sig_10 <= c3(to_integer(to_unsigned(0, 32)));
  434. sig_11 <= std_logic_vector(signed(tap0) * signed(sig_10));
  435. sig_12 <= c2(to_integer(to_unsigned(0, 32)));
  436. sig_13 <= std_logic_vector(signed(tap1) * signed(sig_12));
  437. sig_14 <= std_logic_vector(signed(sig_11) + signed(sig_13));
  438. sig_15 <= c1(to_integer(to_unsigned(0, 32)));
  439. sig_16 <= std_logic_vector(signed(tap2) * signed(sig_15));
  440. sig_17 <= std_logic_vector(signed(sig_14) + signed(sig_16));
  441. sig_18 <= c0(to_integer(to_unsigned(0, 32)));
  442. sig_19 <= std_logic_vector(signed(tap3) * signed(sig_18));
  443. sig_20 <= std_logic_vector(signed(sig_17) + signed(sig_19));
  444. sig_21 <= c3(to_integer(to_unsigned(1, 32)));
  445. sig_22 <= std_logic_vector(signed(tap0) * signed(sig_21));
  446. sig_23 <= c2(to_integer(to_unsigned(1, 32)));
  447. sig_24 <= std_logic_vector(signed(tap1) * signed(sig_23));
  448. sig_25 <= std_logic_vector(signed(sig_22) + signed(sig_24));
  449. sig_26 <= c1(to_integer(to_unsigned(1, 32)));
  450. sig_27 <= std_logic_vector(signed(tap2) * signed(sig_26));
  451. sig_28 <= std_logic_vector(signed(sig_25) + signed(sig_27));
  452. sig_29 <= c0(to_integer(to_unsigned(1, 32)));
  453. sig_30 <= std_logic_vector(signed(tap3) * signed(sig_29));
  454. sig_31 <= std_logic_vector(signed(sig_28) + signed(sig_30));
  455. sig_32 <= c3(to_integer(to_unsigned(2, 32)));
  456. sig_33 <= std_logic_vector(signed(tap0) * signed(sig_32));
  457. sig_34 <= c2(to_integer(to_unsigned(2, 32)));
  458. sig_35 <= std_logic_vector(signed(tap1) * signed(sig_34));
  459. sig_36 <= std_logic_vector(signed(sig_33) + signed(sig_35));
  460. sig_37 <= c1(to_integer(to_unsigned(2, 32)));
  461. sig_38 <= std_logic_vector(signed(tap2) * signed(sig_37));
  462. sig_39 <= std_logic_vector(signed(sig_36) + signed(sig_38));
  463. sig_40 <= c0(to_integer(to_unsigned(2, 32)));
  464. sig_41 <= std_logic_vector(signed(tap3) * signed(sig_40));
  465. sig_42 <= std_logic_vector(signed(sig_39) + signed(sig_41));
  466. sig_43 <= c3(to_integer(to_unsigned(3, 32)));
  467. sig_44 <= std_logic_vector(signed(tap0) * signed(sig_43));
  468. sig_45 <= c2(to_integer(to_unsigned(3, 32)));
  469. sig_46 <= std_logic_vector(signed(tap1) * signed(sig_45));
  470. sig_47 <= std_logic_vector(signed(sig_44) + signed(sig_46));
  471. sig_48 <= c1(to_integer(to_unsigned(3, 32)));
  472. sig_49 <= std_logic_vector(signed(tap2) * signed(sig_48));
  473. sig_50 <= std_logic_vector(signed(sig_47) + signed(sig_49));
  474. sig_51 <= c0(to_integer(to_unsigned(3, 32)));
  475. sig_52 <= std_logic_vector(signed(tap3) * signed(sig_51));
  476. sig_53 <= std_logic_vector(signed(sig_50) + signed(sig_52));
  477. full0_wire <= std_logic_vector(resize(signed(sig_20), 32));
  478. full1_wire <= std_logic_vector(resize(signed(sig_31), 32));
  479. full2_wire <= std_logic_vector(resize(signed(sig_42), 32));
  480. full3_wire <= std_logic_vector(resize(signed(sig_53), 32));
  481. when alwaysdoneup =>
  482. done <= done_int;
  483. if (signed(dataa) = 2) then
  484. sig_0 <= '1';
  485. else
  486. sig_0 <= '0';
  487. end if;
  488. if (signed(dataa) = 3) then
  489. sig_1 <= '1';
  490. else
  491. sig_1 <= '0';
  492. end if;
  493. if (signed(dataa) = 4) then
  494. sig_2 <= '1';
  495. else
  496. sig_2 <= '0';
  497. end if;
  498. if (signed(dataa) = 5) then
  499. sig_3 <= '1';
  500. else
  501. sig_3 <= '0';
  502. end if;
  503. if (sig_3 = '1') then
  504. sig_4 <= op_phase3;
  505. else
  506. sig_4 <= std_logic_vector(to_unsigned(0, 32));
  507. end if;
  508. if (sig_0 = '1') then
  509. sig_5 <= op_phase0;
  510. elsif (sig_1 = '1') then
  511. sig_5 <= op_phase1;
  512. elsif (sig_2 = '1') then
  513. sig_5 <= op_phase2;
  514. else
  515. sig_5 <= sig_4;
  516. end if;
  517. result <= result_int;
  518. sig_6 <= std_logic_vector(shift_right(signed(full0), 14));
  519. op_phase0 <= sig_6;
  520. sig_7 <= std_logic_vector(shift_right(signed(full1), 14));
  521. op_phase1 <= sig_7;
  522. sig_8 <= std_logic_vector(shift_right(signed(full2), 14));
  523. op_phase2 <= sig_8;
  524. sig_9 <= std_logic_vector(shift_right(signed(full3), 14));
  525. op_phase3 <= sig_9;
  526. done_int <= dnreg;
  527. result_int <= sig_5;
  528. Xinp_wire <= dataa;
  529. Yinp_wire <= datab;
  530. streg_wire <= start;
  531. dnreg_wire <= '1';
  532. when others =>
  533. end case;
  534. end process dpCMB;
  535.  
  536.  
  537. -- controller reg
  538. fsmREG: process (CLK, RST)
  539. begin
  540. if (RST = '1') then
  541. STATE <= s0;
  542. elsif CLK' event and CLK = '1' then
  543. STATE <= STATE;
  544. case STATE is
  545. when s0 =>
  546. if (sig_55 = '1') then
  547. STATE <= s1;
  548. else
  549. STATE <= s0;
  550. end if;
  551. when s1 =>
  552. STATE <= s2;
  553. when s2 =>
  554. STATE <= s3;
  555. when s3 =>
  556. STATE <= s0;
  557. when others =>
  558. end case;
  559. end if;
  560. end process fsmREG;
  561.  
  562.  
  563. -- controller cmb
  564. fsmCMB: process (full0, full1, full2, full3, tap0, tap1, tap2, tap3, op_phase0, op_phase1
  565. , op_phase2, op_phase3, Yinp, Xinp, datap, streg, dnreg, sig_0, sig_1, sig_2
  566. , sig_3, sig_4, sig_5, sig_6, sig_7, sig_8, sig_9, sig_10, sig_11, sig_12
  567. , sig_13, sig_14, sig_15, sig_16, sig_17, sig_18, sig_19, sig_20, sig_21, sig_22
  568. , sig_23, sig_24, sig_25, sig_26, sig_27, sig_28, sig_29, sig_30, sig_31, sig_32
  569. , sig_33, sig_34, sig_35, sig_36, sig_37, sig_38, sig_39, sig_40, sig_41, sig_42
  570. , sig_43, sig_44, sig_45, sig_46, sig_47, sig_48, sig_49, sig_50, sig_51, sig_52
  571. , sig_53, done_int, result_int, sig_54, sig_55, dataa, datab, start, clk_en,cmd,STATE)
  572. begin
  573. sig_54 <= '0';
  574. sig_55 <= '0';
  575. if (signed(Xinp) = 1) then
  576. sig_54 <= '1';
  577. else
  578. sig_54 <= '0';
  579. end if;
  580. sig_55 <= sig_54 and streg;
  581. cmd <= alwayssampledonedwn;
  582. case STATE is
  583. when s0 =>
  584. if (sig_55 = '1') then
  585. cmd <= alwayssampledonedwn;
  586. else
  587. cmd <= alwayssampledonedwn;
  588. end if;
  589. when s1 =>
  590. cmd <= alwaysshift;
  591. when s2 =>
  592. cmd <= alwayscompute;
  593. when s3 =>
  594. cmd <= alwaysdoneup;
  595. when others =>
  596. end case;
  597. end process fsmCMB;
  598.  
  599. end RTL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement