Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.38 KB | None | 0 0
  1. Library IEEE;
  2. use IEEE.std_logic_1164.all;
  3. use IEEE.std_logic_signed.all;
  4.  
  5. entity SortCollatz is
  6. end SortCollatz;
  7.  
  8. architecture SIM of SortCollatz is
  9. signal sysClk : std_logic := '0';
  10. signal resetIn : std_logic := '0';
  11. signal onStartIn : std_logic := '0';
  12. signal dataIn : std_logic_vector(7 downto 0) := (others => '0');
  13. signal tempOut : std_logic_vector(15 downto 0) := (others => '0');
  14. signal counterOut : std_logic_vector(7 downto 0) := (others => '0');
  15. signal stateOut : std_logic_vector(1 downto 0) := (others => '0');
  16. signal onFinishOut: std_logic := '0';
  17.  
  18. signal isSorting :std_logic := '0';
  19.  
  20. signal data1 : std_logic_vector(7 downto 0);
  21. signal data2 : std_logic_vector(7 downto 0);
  22. signal data3 : std_logic_vector(7 downto 0);
  23. signal data4 : std_logic_vector(7 downto 0);
  24. signal data5 : std_logic_vector(7 downto 0);
  25. signal data6 : std_logic_vector(7 downto 0);
  26. signal data7 : std_logic_vector(7 downto 0);
  27. signal data8 : std_logic_vector(7 downto 0);
  28. signal data9 : std_logic_vector(7 downto 0);
  29. signal data10: std_logic_vector(7 downto 0);
  30. signal data11: std_logic_vector(7 downto 0);
  31. signal data12: std_logic_vector(7 downto 0);
  32. signal data13: std_logic_vector(7 downto 0);
  33. signal data14: std_logic_vector(7 downto 0);
  34. signal data15: std_logic_vector(7 downto 0);
  35. signal data16: std_logic_vector(7 downto 0);
  36.  
  37. signal counter1 : std_logic_vector(7 downto 0);
  38. signal counter2 : std_logic_vector(7 downto 0);
  39. signal counter3 : std_logic_vector(7 downto 0);
  40. signal counter4 : std_logic_vector(7 downto 0);
  41. signal counter5 : std_logic_vector(7 downto 0);
  42. signal counter6 : std_logic_vector(7 downto 0);
  43. signal counter7 : std_logic_vector(7 downto 0);
  44. signal counter8 : std_logic_vector(7 downto 0);
  45. signal counter9 : std_logic_vector(7 downto 0);
  46. signal counter10: std_logic_vector(7 downto 0);
  47. signal counter11: std_logic_vector(7 downto 0);
  48. signal counter12: std_logic_vector(7 downto 0);
  49. signal counter13: std_logic_vector(7 downto 0);
  50. signal counter14: std_logic_vector(7 downto 0);
  51. signal counter15: std_logic_vector(7 downto 0);
  52. signal counter16: std_logic_vector(7 downto 0);
  53.  
  54. type vectorArray is array (0 to 15) of std_logic_vector(7 downto 0);
  55. signal dataArray : vectorArray := (others => (others => '0'));
  56. signal counterArray: vectorArray := (others => (others => '0'));
  57.  
  58. component Collatz
  59. port (
  60. sysClk : in std_logic := '0';
  61. resetIn : in std_logic := '0';
  62. onStartIn : in std_logic := '0';
  63. dataIn : in std_logic_vector(7 downto 0) := (others => '0'); -- max 255
  64. tempOut : out std_logic_vector(15 downto 0) := (others => '0'); -- max 13120 (when dataIn is 255)
  65. counterOut : out std_logic_vector(7 downto 0) := (others => '0'); -- max 127 (when dataIn is 231, 235)
  66. stateOut : out std_logic_vector(1 downto 0) := (others => '0');
  67. onFinishOut: out std_logic := '0'
  68. );
  69. end component;
  70.  
  71. begin
  72. CL: Collatz port map(
  73. sysClk => sysClk,
  74. resetIn => resetIn,
  75. onStartIn => onStartIn,
  76. dataIn => dataIn,
  77. tempOut => tempOut,
  78. counterOut => counterOut,
  79. stateOut => stateOut,
  80. onFinishOut => onFinishOut
  81. );
  82.  
  83. process begin
  84. sysClk <= '1';
  85. wait for 10 ns;
  86. sysClk <= '0';
  87. wait for 10 ns;
  88. end process;
  89.  
  90. process begin
  91. wait for 1 ns;
  92. if stateOut = "00" then
  93. wait for 1 ns;
  94. resetIn <= '1';
  95. dataIn <= dataIn + 1;
  96. wait for 10 ns;
  97. resetIn <= '0';
  98. onStartIn <= '1';
  99. wait for 10 ns;
  100. onStartIn <= '0';
  101. end if;
  102. end process;
  103.  
  104. process begin
  105. wait until rising_edge(sysClk);
  106. if (isSorting = '1' or onFinishOut = '1') then
  107. isSorting <= '1';
  108. -- for i in 0 to 15 loop
  109. -- if counterArray(i) <= counterOut then
  110. -- if i < 15 then
  111. -- for j in 14 downto i loop
  112. -- dataArray(j + 1) <= dataArray(j);
  113. -- counterArray(j + 1) <= counterArray(j);
  114. -- end loop;
  115. -- end if;
  116. -- dataArray(i) <= dataIn;
  117. -- counterArray(i) <= counterOut;
  118. -- exit;
  119. -- end if;
  120. -- end loop;
  121. if counterArray(0) <= counterOut then -- i = 0
  122. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  123. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  124. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  125. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  126. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  127. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  128. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  129. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  130. dataArray(7) <= dataArray(6); counterArray(7) <= counterArray(6);
  131. dataArray(6) <= dataArray(5); counterArray(6) <= counterArray(5);
  132. dataArray(5) <= dataArray(4); counterArray(5) <= counterArray(4);
  133. dataArray(4) <= dataArray(3); counterArray(4) <= counterArray(3);
  134. dataArray(3) <= dataArray(2); counterArray(3) <= counterArray(2);
  135. dataArray(2) <= dataArray(1); counterArray(2) <= counterArray(1);
  136. dataArray(1) <= dataArray(0); counterArray(1) <= counterArray(0);
  137. dataArray(0) <= dataIn; counterArray(0) <= counterOut;
  138. elsif counterArray(1) <= counterOut then -- i = 1
  139. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  140. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  141. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  142. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  143. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  144. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  145. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  146. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  147. dataArray(7) <= dataArray(6); counterArray(7) <= counterArray(6);
  148. dataArray(6) <= dataArray(5); counterArray(6) <= counterArray(5);
  149. dataArray(5) <= dataArray(4); counterArray(5) <= counterArray(4);
  150. dataArray(4) <= dataArray(3); counterArray(4) <= counterArray(3);
  151. dataArray(3) <= dataArray(2); counterArray(3) <= counterArray(2);
  152. dataArray(2) <= dataArray(1); counterArray(2) <= counterArray(1);
  153. dataArray(1) <= dataIn; counterArray(1) <= counterOut;
  154. elsif counterArray(2) <= counterOut then -- i = 2
  155. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  156. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  157. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  158. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  159. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  160. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  161. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  162. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  163. dataArray(7) <= dataArray(6); counterArray(7) <= counterArray(6);
  164. dataArray(6) <= dataArray(5); counterArray(6) <= counterArray(5);
  165. dataArray(5) <= dataArray(4); counterArray(5) <= counterArray(4);
  166. dataArray(4) <= dataArray(3); counterArray(4) <= counterArray(3);
  167. dataArray(3) <= dataArray(2); counterArray(3) <= counterArray(2);
  168. dataArray(2) <= dataIn; counterArray(2) <= counterOut;
  169. elsif counterArray(3) <= counterOut then -- i = 3
  170. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  171. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  172. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  173. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  174. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  175. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  176. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  177. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  178. dataArray(7) <= dataArray(6); counterArray(7) <= counterArray(6);
  179. dataArray(6) <= dataArray(5); counterArray(6) <= counterArray(5);
  180. dataArray(5) <= dataArray(4); counterArray(5) <= counterArray(4);
  181. dataArray(4) <= dataArray(3); counterArray(4) <= counterArray(3);
  182. dataArray(3) <= dataIn; counterArray(3) <= counterOut;
  183. elsif counterArray(4) <= counterOut then -- i = 4
  184. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  185. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  186. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  187. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  188. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  189. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  190. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  191. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  192. dataArray(7) <= dataArray(6); counterArray(7) <= counterArray(6);
  193. dataArray(6) <= dataArray(5); counterArray(6) <= counterArray(5);
  194. dataArray(5) <= dataArray(4); counterArray(5) <= counterArray(4);
  195. dataArray(4) <= dataIn; counterArray(4) <= counterOut;
  196. elsif counterArray(5) <= counterOut then -- i = 5
  197. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  198. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  199. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  200. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  201. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  202. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  203. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  204. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  205. dataArray(7) <= dataArray(6); counterArray(7) <= counterArray(6);
  206. dataArray(6) <= dataArray(5); counterArray(6) <= counterArray(5);
  207. dataArray(5) <= dataIn; counterArray(5) <= counterOut;
  208. elsif counterArray(6) <= counterOut then -- i = 6
  209. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  210. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  211. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  212. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  213. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  214. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  215. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  216. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  217. dataArray(7) <= dataArray(6); counterArray(7) <= counterArray(6);
  218. dataArray(6) <= dataIn; counterArray(6) <= counterOut;
  219. elsif counterArray(7) <= counterOut then -- i = 7
  220. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  221. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  222. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  223. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  224. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  225. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  226. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  227. dataArray(8) <= dataArray(7); counterArray(8) <= counterArray(7);
  228. dataArray(7) <= dataIn; counterArray(7) <= counterOut;
  229. elsif counterArray(8) <= counterOut then -- i = 8
  230. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  231. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  232. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  233. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  234. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  235. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  236. dataArray(9) <= dataArray(8); counterArray(9) <= counterArray(8);
  237. dataArray(8) <= dataIn; counterArray(8) <= counterOut;
  238. elsif counterArray(9) <= counterOut then -- i = 9
  239. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  240. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  241. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  242. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  243. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  244. dataArray(10) <= dataArray(9); counterArray(10) <= counterArray(9);
  245. dataArray(9) <= dataIn; counterArray(9) <= counterOut;
  246. elsif counterArray(10) <= counterOut then -- i = 10
  247. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  248. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  249. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  250. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  251. dataArray(11) <= dataArray(10); counterArray(11) <= counterArray(10);
  252. dataArray(10) <= dataIn; counterArray(10) <= counterOut;
  253. elsif counterArray(11) <= counterOut then -- i = 11
  254. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  255. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  256. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  257. dataArray(12) <= dataArray(11); counterArray(12) <= counterArray(11);
  258. dataArray(11) <= dataIn; counterArray(11) <= counterOut;
  259. elsif counterArray(12) <= counterOut then -- i = 12
  260. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  261. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  262. dataArray(13) <= dataArray(12); counterArray(13) <= counterArray(12);
  263. dataArray(12) <= dataIn; counterArray(12) <= counterOut;
  264. elsif counterArray(13) <= counterOut then -- i = 13
  265. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  266. dataArray(14) <= dataArray(13); counterArray(14) <= counterArray(13);
  267. dataArray(13) <= dataIn; counterArray(13) <= counterOut;
  268. elsif counterArray(14) <= counterOut then -- i = 14
  269. dataArray(15) <= dataArray(14); counterArray(15) <= counterArray(14);
  270. dataArray(14) <= dataIn; counterArray(14) <= counterOut;
  271. elsif counterArray(15) <= counterOut then -- i = 15
  272. dataArray(15) <= dataIn; counterArray(15) <= counterOut;
  273. end if;
  274. end if;
  275. isSorting <= '0';
  276. end process;
  277.  
  278. data1 <= dataArray(0);
  279. data2 <= dataArray(1);
  280. data3 <= dataArray(2);
  281. data4 <= dataArray(3);
  282. data5 <= dataArray(4);
  283. data6 <= dataArray(5);
  284. data7 <= dataArray(6);
  285. data8 <= dataArray(7);
  286. data9 <= dataArray(8);
  287. data10 <= dataArray(9);
  288. data11 <= dataArray(10);
  289. data12 <= dataArray(11);
  290. data13 <= dataArray(12);
  291. data14 <= dataArray(13);
  292. data15 <= dataArray(14);
  293. data16 <= dataArray(15);
  294.  
  295. counter1 <= counterArray(0);
  296. counter2 <= counterArray(1);
  297. counter3 <= counterArray(2);
  298. counter4 <= counterArray(3);
  299. counter5 <= counterArray(4);
  300. counter6 <= counterArray(5);
  301. counter7 <= counterArray(6);
  302. counter8 <= counterArray(7);
  303. counter9 <= counterArray(8);
  304. counter10 <= counterArray(9);
  305. counter11 <= counterArray(10);
  306. counter12 <= counterArray(11);
  307. counter13 <= counterArray(12);
  308. counter14 <= counterArray(13);
  309. counter15 <= counterArray(14);
  310. counter16 <= counterArray(15);
  311.  
  312. end SIM;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement