Advertisement
Guest User

Untitled

a guest
Nov 27th, 2022
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.86 KB | None | 0 0
  1. -- "Simple" programming project done in VHDL to throw onto a DE-10 board.
  2. -- A programmable timer/alarm clock and a stopwatch. Use switches and buttons on the board to
  3. -- Program the alarm clock, or switch between modes.
  4.  
  5. LIBRARY ieee;
  6. USE ieee.std_logic_1164.all;
  7. USE ieee.numeric_std.all;
  8.  
  9. ENTITY GroupClockTest IS
  10. PORT( CLOCK, RESETN : IN STD_LOGIC;
  11. CE, UDN : IN STD_LOGIC;
  12. START : IN STD_LOGIC;
  13. ADDSEC, ADDMIN, ADDHR : IN STD_LOGIC;
  14. HEX54, HEX32, HEX10 : OUT STD_LOGIC_VECTOR(13 DOWNTO 0);
  15. LED : OUT STD_LOGIC;
  16. BUZZ : OUT STD_LOGIC);
  17. -- CE = Switch between modes, 0 = CountClock, 1 = Stopwatch
  18. -- ADDSEC, etc are the pushbuttons related to adding time
  19. -- HEX54, etc are outputs to 7-segment display
  20. -- LED + BUZZ are an LED and buzzer on DE-10
  21. END GroupClockTest;
  22.  
  23. ARCHITECTURE behavior OF GroupClockTest IS
  24. SIGNAL COUNTSEC : INTEGER := 1;
  25. SIGNAL SEC_CLOCK : STD_LOGIC;
  26. SIGNAL HOURS : INTEGER range 0 to 59;
  27. SIGNAL SECS : INTEGER range 0 to 59;
  28. SIGNAL MINS : INTEGER range 0 to 59;
  29. -- COUNTSEC + SEC_CLOCK are used for scaling down DE-10 50hz clock to 1sec
  30. -- HOURS,SECS,MINS are values for time
  31.  
  32. BEGIN
  33. PROCESS(CLOCK, RESETN) -- Clock scaling process for seconds
  34. BEGIN
  35. IF (RESETN = '0') THEN
  36. COUNTSEC <= 1;
  37. ELSIF (RISING_EDGE(CLOCK)) THEN
  38. IF (COUNTSEC = 25000000) THEN
  39. SEC_CLOCK <= '1';
  40. COUNTSEC <= 1;
  41. ELSE
  42. SEC_CLOCK <= '0';
  43. COUNTSEC <= COUNTSEC + 1;
  44. END IF;
  45. END IF;
  46. END PROCESS;
  47.  
  48. PROCESS(CLOCK, RESETN)
  49. BEGIN
  50. IF RESETN = '0' THEN -- Universal Reset
  51. HOURS <= 0;
  52. SECS <= 0;
  53. MINS <= 0;
  54. ELSIF RISING_EDGE(CLOCK) THEN
  55. IF (SEC_CLOCK = '1') THEN
  56. IF CE = '0' THEN -- Alarm Clock / Timer BEGIN
  57. IF ADDHR = '0' THEN -- If button ADDHR pushed, add/sub time
  58. IF UDN = '0' THEN
  59. HOURS <= HOURS + 1;
  60. ELSIF UDN = '1' THEN
  61. HOURS <= HOURS - 1;
  62. END IF;
  63. END IF;
  64. IF ADDSEC = '0' THEN -- Adding time SECS
  65. IF UDN = '0' THEN
  66. SECS <= SECS + 1;
  67. ELSIF UDN = '1' THEN
  68. SECS <= SECS - 1;
  69. END IF;
  70. END IF;
  71. IF ADDMIN = '0' THEN -- Adding time MINS
  72. IF UDN = '0' THEN
  73. MINS <= MINS + 1;
  74. ELSIF UDN = '1' THEN
  75. MINS <= MINS - 1;
  76. END IF;
  77. END IF;
  78.  
  79. IF START = '1' THEN -- START timer after time has been set
  80. IF MINS = 0 THEN
  81. HOURS <= HOURS - 1;
  82. MINS <= 59;
  83. END IF;
  84. IF SECS = 0 THEN
  85. MINS <= MINS - 1;
  86. SECS <= 59;
  87. END IF;
  88. IF (HOURS = 0 AND MINS = 0 AND SECS = 0) THEN
  89. LED <= '1';
  90. BUZZ <= '1';
  91. -- If time = 0, buzzer + LED
  92. END IF;
  93. END IF;
  94. END IF; -- Alarm Clock / Timer END
  95.  
  96. ELSIF CE = '1' THEN -- Stopwatch BEGIN
  97. IF HOURS = 59 THEN
  98. HOURS <= 0;
  99. END IF;
  100. IF SECS = 59 THEN
  101. SECS <= 0;
  102. MINS <= MINS + 1;
  103. END IF;
  104. IF MINS = 59 THEN
  105. MINS <= 0;
  106. HOURS <= HOURS + 1;
  107. END IF;
  108. END IF; -- Stopwatch END
  109. END IF;
  110. END PROCESS;
  111.  
  112. -- Seven Segment Display Output Section
  113. HEX10 <= "10000001000000" WHEN SECS = 0;
  114. HEX10 <= "10000001111001" WHEN SECS = 1;
  115. HEX10 <= "10000000100100" WHEN SECS = 2;
  116. HEX10 <= "10000000110000" WHEN SECS = 3;
  117. HEX10 <= "10000000011001" WHEN SECS = 4;
  118. HEX10 <= "10000000010010" WHEN SECS = 5;
  119. HEX10 <= "10000000000010" WHEN SECS = 6;
  120. HEX10 <= "10000001111000" WHEN SECS = 7;
  121. HEX10 <= "10000000000000" WHEN SECS = 8;
  122. HEX10 <= "10000000010000" WHEN SECS = 9;
  123. HEX10 <= "11110011000000" WHEN SECS = 10;
  124. HEX10 <= "11110011111001" WHEN SECS = 11;
  125. HEX10 <= "11110010100100" WHEN SECS = 12;
  126. HEX10 <= "11110010110000" WHEN SECS = 13;
  127. HEX10 <= "11110010011001" WHEN SECS = 14;
  128. HEX10 <= "11110010010010" WHEN SECS = 15;
  129. HEX10 <= "11110010000010" WHEN SECS = 16;
  130. HEX10 <= "11110011111000" WHEN SECS = 17;
  131. HEX10 <= "11110010000000" WHEN SECS = 18;
  132. HEX10 <= "11110010010000" WHEN SECS = 19;
  133. HEX10 <= "01001001000000" WHEN SECS = 20;
  134. HEX10 <= "01001001111001" WHEN SECS = 21;
  135. HEX10 <= "01001000100100" WHEN SECS = 22;
  136. HEX10 <= "01001000110000" WHEN SECS = 23;
  137. HEX10 <= "01001000011001" WHEN SECS = 24;
  138. HEX10 <= "01001000010010" WHEN SECS = 25;
  139. HEX10 <= "01001000000010" WHEN SECS = 26;
  140. HEX10 <= "01001001111000" WHEN SECS = 27;
  141. HEX10 <= "01001000000000" WHEN SECS = 28;
  142. HEX10 <= "01001000010000" WHEN SECS = 29;
  143. HEX10 <= "01100001000000" WHEN SECS = 30;
  144. HEX10 <= "01100001111001" WHEN SECS = 31;
  145. HEX10 <= "01100000100100" WHEN SECS = 32;
  146. HEX10 <= "01100000110000" WHEN SECS = 33;
  147. HEX10 <= "01100000011001" WHEN SECS = 34;
  148. HEX10 <= "01100000010010" WHEN SECS = 35;
  149. HEX10 <= "01100000000010" WHEN SECS = 36;
  150. HEX10 <= "01100001111000" WHEN SECS = 37;
  151. HEX10 <= "01100000000000" WHEN SECS = 38;
  152. HEX10 <= "01100000010000" WHEN SECS = 39;
  153. HEX10 <= "00110011000000" WHEN SECS = 40;
  154. HEX10 <= "00110011111001" WHEN SECS = 41;
  155. HEX10 <= "00110010100100" WHEN SECS = 42;
  156. HEX10 <= "00110010110000" WHEN SECS = 43;
  157. HEX10 <= "00110010011001" WHEN SECS = 44;
  158. HEX10 <= "00110010010010" WHEN SECS = 45;
  159. HEX10 <= "00110010000010" WHEN SECS = 46;
  160. HEX10 <= "00110011111000" WHEN SECS = 47;
  161. HEX10 <= "00110010000000" WHEN SECS = 48;
  162. HEX10 <= "00110010010000" WHEN SECS = 49;
  163. HEX10 <= "00100101000000" WHEN SECS = 50;
  164. HEX10 <= "00100101111001" WHEN SECS = 51;
  165. HEX10 <= "00100100100100" WHEN SECS = 52;
  166. HEX10 <= "00100100110000" WHEN SECS = 53;
  167. HEX10 <= "00100100011001" WHEN SECS = 54;
  168. HEX10 <= "00100100010010" WHEN SECS = 55;
  169. HEX10 <= "00100100000010" WHEN SECS = 56;
  170. HEX10 <= "00100101111000" WHEN SECS = 57;
  171. HEX10 <= "00100100000000" WHEN SECS = 58;
  172. HEX10 <= "00100100010000" WHEN SECS = 59;
  173.  
  174. HEX32 <= "10000001000000" WHEN MINS = 0;
  175. HEX32 <= "10000001111001" WHEN MINS = 1;
  176. HEX32 <= "10000000100100" WHEN MINS = 2;
  177. HEX32 <= "10000000110000" WHEN MINS = 3;
  178. HEX32 <= "10000000011001" WHEN MINS = 4;
  179. HEX32 <= "10000000010010" WHEN MINS = 5;
  180. HEX32 <= "10000000000010" WHEN MINS = 6;
  181. HEX32 <= "10000001111000" WHEN MINS = 7;
  182. HEX32 <= "10000000000000" WHEN MINS = 8;
  183. HEX32 <= "10000000010000" WHEN MINS = 9;
  184. HEX32 <= "11110011000000" WHEN MINS = 10;
  185. HEX32 <= "11110011111001" WHEN MINS = 11;
  186. HEX32 <= "11110010100100" WHEN MINS = 12;
  187. HEX32 <= "11110010110000" WHEN MINS = 13;
  188. HEX32 <= "11110010011001" WHEN MINS = 14;
  189. HEX32 <= "11110010010010" WHEN MINS = 15;
  190. HEX32 <= "11110010000010" WHEN MINS = 16;
  191. HEX32 <= "11110011111000" WHEN MINS = 17;
  192. HEX32 <= "11110010000000" WHEN MINS = 18;
  193. HEX32 <= "11110010010000" WHEN MINS = 19;
  194. HEX32 <= "01001001000000" WHEN MINS = 20;
  195. HEX32 <= "01001001111001" WHEN MINS = 21;
  196. HEX32 <= "01001000100100" WHEN MINS = 22;
  197. HEX32 <= "01001000110000" WHEN MINS = 23;
  198. HEX32 <= "01001000011001" WHEN MINS = 24;
  199. HEX32 <= "01001000010010" WHEN MINS = 25;
  200. HEX32 <= "01001000000010" WHEN MINS = 26;
  201. HEX32 <= "01001001111000" WHEN MINS = 27;
  202. HEX32 <= "01001000000000" WHEN MINS = 28;
  203. HEX32 <= "01001000010000" WHEN MINS = 29;
  204. HEX32 <= "01100001000000" WHEN MINS = 30;
  205. HEX32 <= "01100001111001" WHEN MINS = 31;
  206. HEX32 <= "01100000100100" WHEN MINS = 32;
  207. HEX32 <= "01100000110000" WHEN MINS = 33;
  208. HEX32 <= "01100000011001" WHEN MINS = 34;
  209. HEX32 <= "01100000010010" WHEN MINS = 35;
  210. HEX32 <= "01100000000010" WHEN MINS = 36;
  211. HEX32 <= "01100001111000" WHEN MINS = 37;
  212. HEX32 <= "01100000000000" WHEN MINS = 38;
  213. HEX32 <= "01100000010000" WHEN MINS = 39;
  214. HEX32 <= "00110011000000" WHEN MINS = 40;
  215. HEX32 <= "00110011111001" WHEN MINS = 41;
  216. HEX32 <= "00110010100100" WHEN MINS = 42;
  217. HEX32 <= "00110010110000" WHEN MINS = 43;
  218. HEX32 <= "00110010011001" WHEN MINS = 44;
  219. HEX32 <= "00110010010010" WHEN MINS = 45;
  220. HEX32 <= "00110010000010" WHEN MINS = 46;
  221. HEX32 <= "00110011111000" WHEN MINS = 47;
  222. HEX32 <= "00110010000000" WHEN MINS = 48;
  223. HEX32 <= "00110010010000" WHEN MINS = 49;
  224. HEX32 <= "00100101000000" WHEN MINS = 50;
  225. HEX32 <= "00100101111001" WHEN MINS = 51;
  226. HEX32 <= "00100100100100" WHEN MINS = 52;
  227. HEX32 <= "00100100110000" WHEN MINS = 53;
  228. HEX32 <= "00100100011001" WHEN MINS = 54;
  229. HEX32 <= "00100100010010" WHEN MINS = 55;
  230. HEX32 <= "00100100000010" WHEN MINS = 56;
  231. HEX32 <= "00100101111000" WHEN MINS = 57;
  232. HEX32 <= "00100100000000" WHEN MINS = 58;
  233. HEX32 <= "00100100010000" WHEN MINS = 59;
  234.  
  235. HEX54 <= "10000001000000" WHEN SECS = 0;
  236. HEX54 <= "10000001111001" WHEN SECS = 1;
  237. HEX54 <= "10000000100100" WHEN SECS = 2;
  238. HEX54 <= "10000000110000" WHEN SECS = 3;
  239. HEX54 <= "10000000011001" WHEN SECS = 4;
  240. HEX54 <= "10000000010010" WHEN SECS = 5;
  241. HEX54 <= "10000000000010" WHEN SECS = 6;
  242. HEX54 <= "10000001111000" WHEN SECS = 7;
  243. HEX54 <= "10000000000000" WHEN SECS = 8;
  244. HEX54 <= "10000000010000" WHEN SECS = 9;
  245. HEX54 <= "11110011000000" WHEN SECS = 10;
  246. HEX54 <= "11110011111001" WHEN SECS = 11;
  247. HEX54 <= "11110010100100" WHEN SECS = 12;
  248. HEX54 <= "11110010110000" WHEN SECS = 13;
  249. HEX54 <= "11110010011001" WHEN SECS = 14;
  250. HEX54 <= "11110010010010" WHEN SECS = 15;
  251. HEX54 <= "11110010000010" WHEN SECS = 16;
  252. HEX54 <= "11110011111000" WHEN SECS = 17;
  253. HEX54 <= "11110010000000" WHEN SECS = 18;
  254. HEX54 <= "11110010010000" WHEN SECS = 19;
  255. HEX54 <= "01001001000000" WHEN SECS = 20;
  256. HEX54 <= "01001001111001" WHEN SECS = 21;
  257. HEX54 <= "01001000100100" WHEN SECS = 22;
  258. HEX54 <= "01001000110000" WHEN SECS = 23;
  259. HEX54 <= "01001000011001" WHEN SECS = 24;
  260. HEX54 <= "01001000010010" WHEN SECS = 25;
  261. HEX54 <= "01001000000010" WHEN SECS = 26;
  262. HEX54 <= "01001001111000" WHEN SECS = 27;
  263. HEX54 <= "01001000000000" WHEN SECS = 28;
  264. HEX54 <= "01001000010000" WHEN SECS = 29;
  265. HEX54 <= "01100001000000" WHEN SECS = 30;
  266. HEX54 <= "01100001111001" WHEN SECS = 31;
  267. HEX54 <= "01100000100100" WHEN SECS = 32;
  268. HEX54 <= "01100000110000" WHEN SECS = 33;
  269. HEX54 <= "01100000011001" WHEN SECS = 34;
  270. HEX54 <= "01100000010010" WHEN SECS = 35;
  271. HEX54 <= "01100000000010" WHEN SECS = 36;
  272. HEX54 <= "01100001111000" WHEN SECS = 37;
  273. HEX54 <= "01100000000000" WHEN SECS = 38;
  274. HEX54 <= "01100000010000" WHEN SECS = 39;
  275. HEX54 <= "00110011000000" WHEN SECS = 40;
  276. HEX54 <= "00110011111001" WHEN SECS = 41;
  277. HEX54 <= "00110010100100" WHEN SECS = 42;
  278. HEX54 <= "00110010110000" WHEN SECS = 43;
  279. HEX54 <= "00110010011001" WHEN SECS = 44;
  280. HEX54 <= "00110010010010" WHEN SECS = 45;
  281. HEX54 <= "00110010000010" WHEN SECS = 46;
  282. HEX54 <= "00110011111000" WHEN SECS = 47;
  283. HEX54 <= "00110010000000" WHEN SECS = 48;
  284. HEX54 <= "00110010010000" WHEN SECS = 49;
  285. HEX54 <= "00100101000000" WHEN SECS = 50;
  286. HEX54 <= "00100101111001" WHEN SECS = 51;
  287. HEX54 <= "00100100100100" WHEN SECS = 52;
  288. HEX54 <= "00100100110000" WHEN SECS = 53;
  289. HEX54 <= "00100100011001" WHEN SECS = 54;
  290. HEX54 <= "00100100010010" WHEN SECS = 55;
  291. HEX54 <= "00100100000010" WHEN SECS = 56;
  292. HEX54 <= "00100101111000" WHEN SECS = 57;
  293. HEX54 <= "00100100000000" WHEN SECS = 58;
  294. HEX54 <= "00100100010000" WHEN SECS = 59;
  295.  
  296. END behavior;
  297.  
  298.  
  299.  
  300.  
  301.  
  302. Output:
  303.  
  304.  
  305. Info (10041): Inferred latch for "HEX10[10]" at GroupClockTest.vhd(113)
  306. Info (10041): Inferred latch for "HEX10[11]" at GroupClockTest.vhd(113)
  307. Info (10041): Inferred latch for "HEX10[12]" at GroupClockTest.vhd(113)
  308. Info (10041): Inferred latch for "HEX10[13]" at GroupClockTest.vhd(113)
  309. Error (10028): Can't resolve multiple constant drivers for net "HEX54[13]" at GroupClockTest.vhd(236)
  310. Error (10029): Constant driver at GroupClockTest.vhd(235)
  311. Error (10028): Can't resolve multiple constant drivers for net "HEX54[12]" at GroupClockTest.vhd(236)
  312. Error (10028): Can't resolve multiple constant drivers for net "HEX54[11]" at GroupClockTest.vhd(236)
  313. Error (10028): Can't resolve multiple constant drivers for net "HEX54[10]" at GroupClockTest.vhd(236)
  314. Error (10028): Can't resolve multiple constant drivers for net "HEX54[9]" at GroupClockTest.vhd(236)
  315. Error (10028): Can't resolve multiple constant drivers for net "HEX54[8]" at GroupClockTest.vhd(236)
  316. Error (10028): Can't resolve multiple constant drivers for net "HEX54[7]" at GroupClockTest.vhd(236)
  317. Error (10028): Can't resolve multiple constant drivers for net "HEX54[6]" at GroupClockTest.vhd(236)
  318. Error (10028): Can't resolve multiple constant drivers for net "HEX54[5]" at GroupClockTest.vhd(236)
  319. Error (10028): Can't resolve multiple constant drivers for net "HEX54[4]" at GroupClockTest.vhd(236)
  320. Error (10028): Can't resolve multiple constant drivers for net "HEX54[3]" at GroupClockTest.vhd(236)
  321. Error (10028): Can't resolve multiple constant drivers for net "HEX54[2]" at GroupClockTest.vhd(236)
  322. Error (10028): Can't resolve multiple constant drivers for net "HEX54[1]" at GroupClockTest.vhd(236)
  323. Error (10028): Can't resolve multiple constant drivers for net "HEX54[0]" at GroupClockTest.vhd(236)
  324. Error (10028): Can't resolve multiple constant drivers for net "HEX32[13]" at GroupClockTest.vhd(175)
  325. Error (10029): Constant driver at GroupClockTest.vhd(174)
  326. Error (10028): Can't resolve multiple constant drivers for net "HEX32[12]" at GroupClockTest.vhd(175)
  327. Error (10028): Can't resolve multiple constant drivers for net "HEX32[11]" at GroupClockTest.vhd(175)
  328. Error (12153): Can't elaborate top-level user hierarchy
  329.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement