logancberrypie

Wheeler jump working

Jan 21st, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.63 KB | None | 0 0
  1. -- =============================================================================================================
  2. -- *
  3. -- * Copyright (c) M.Freeman
  4. -- *
  5. -- * File Name: ram.vhd
  6. -- *
  7. -- * Version: V1.0
  8. -- *
  9. -- * Release Date:
  10. -- *
  11. -- * Author(s): M.Freeman
  12. -- *
  13. -- * Description: Simple RAM
  14. -- *
  15. -- * Change History: $Author: $
  16. -- * $Date: $
  17. -- * $Revision: $
  18. -- *
  19. -- * Conditions of Use: THIS CODE IS COPYRIGHT AND IS SUPPLIED "AS IS" WITHOUT WARRANTY OF ANY KIND, INCLUDING,
  20. -- * BUT NOT LIMITED TO, ANY IMPLIED WARRANTY OF MERCHANTABILITY AND FITNESS FOR A
  21. -- * PARTICULAR PURPOSE.
  22. -- *
  23. -- * Notes:
  24. -- *
  25. -- =============================================================================================================
  26. --
  27. -- INSTRUCTIONS
  28. -- ------------
  29. -- Load ACC kk : 0000 XXXX KKKKKKKK <- Load constant into acc
  30. -- Add ACC kk : 0100 XXXX KKKKKKKK <- Add constant to acc
  31. -- Add ACC pp : 1100 XXXX PPPPPPPP <- Add val at memory location to acc
  32. -- Input ACC pp : 1010 XXXX PPPPPPPP <- Load val at addr into acc
  33. -- Output ACC pp : 1110 XXXX PPPPPPPP <- Store value in acc at addr
  34. -- Jump U aa : 1000 XXXX AAAAAAAA <- Unconditional Jump
  35. -- Jump Z aa : 1001 00XX AAAAAAAA <- Jump if zero
  36. -- Jump C aa : 1001 10XX AAAAAAAA <- Jump if carry
  37. -- Jump NZ aa : 1001 01XX AAAAAAAA <- Jump if not zero
  38. -- Jump NC aa : 1001 11XX AAAAAAAA <- Jump if not carry
  39.  
  40. LIBRARY IEEE;
  41. USE IEEE.std_logic_1164.ALL;
  42. USE IEEE.std_logic_unsigned.ALL;
  43.  
  44. ENTITY ram IS
  45. GENERIC(
  46. ADDR_WIDTH : INTEGER := 8;
  47. DATA_WIDTH : INTEGER := 16 );
  48. PORT (
  49. clk : IN STD_LOGIC;
  50. addr : IN STD_LOGIC_VECTOR( ADDR_WIDTH-1 DOWNTO 0 );
  51. din : IN STD_LOGIC_VECTOR( DATA_WIDTH-1 DOWNTO 0 );
  52. dout : OUT STD_LOGIC_VECTOR( DATA_WIDTH-1 DOWNTO 0 );
  53. rw : IN STD_LOGIC
  54. );
  55. END ram;
  56.  
  57. ARCHITECTURE ram_arch OF ram IS
  58.  
  59. -- LOW BYTE (0xFE)
  60. -- 0 : output[00] : #led0_b
  61. -- 1 : output[01] : #led0_g
  62. -- 2 : output[02] : #led0_r
  63. -- 3 : output[03] : #led1_b
  64. -- 4 : output[04] : #led1_g
  65. -- 5 : output[05] : #led1_r
  66. -- 6 : output[06] : #led2_b
  67. -- 7 : output[07] : #led2_g
  68.  
  69. -- HIGH BYTE (0xFF)
  70. -- 0 : output[08] : #led2_r
  71. -- 1 : output[09] : #led3_b
  72. -- 2 : output[10] : #led3_g
  73. -- 3 : output[11] : #led3_r
  74. -- 4 : output[12] : #led
  75. -- 5 : output[13] : #led
  76. -- 6 : output[14] : #led
  77. -- 7 : output[15] : #led
  78.  
  79. CONSTANT INVALID_DATA : STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0) := (OTHERS => 'X');
  80.  
  81. subtype DATA_RAM_WORD IS STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
  82. TYPE DATA_RAM_TABLE IS ARRAY (0 TO (2**ADDR_WIDTH)-1) OF DATA_RAM_WORD;
  83.  
  84. SIGNAL data_ram : DATA_RAM_TABLE := DATA_RAM_TABLE'
  85. (
  86. -- Our program is here
  87. DATA_RAM_WORD'("0000000000001001"), --00 load red high
  88. DATA_RAM_WORD'("1110000011111110"), --01 store in FE
  89. DATA_RAM_WORD'("0000000000100100"), --02 load red low
  90. DATA_RAM_WORD'("1110000011111111"), --03 store in FF
  91. DATA_RAM_WORD'("0000000000000100"), --04 Load 04 into acc
  92. DATA_RAM_WORD'("1000000011000000"), --05 Jump delay
  93. DATA_RAM_WORD'("0000000000001101"), --06 load orange high
  94. DATA_RAM_WORD'("1110000011111110"), --07 store in FE
  95. DATA_RAM_WORD'("0000000010110110"), --08 Load orange Low
  96. DATA_RAM_WORD'("1110000011111111"), --09 store in FF
  97. DATA_RAM_WORD'("1110000000001010"), --0A Load 0A into acc
  98. DATA_RAM_WORD'("1110000010110110"), --0B Jump delay
  99. DATA_RAM_WORD'("0000000000000000"), --0C
  100. DATA_RAM_WORD'("0000000000000000"), --0D
  101. DATA_RAM_WORD'("0000000000000000"), --0E
  102. DATA_RAM_WORD'("0000000000000000"), --0F
  103.  
  104. DATA_RAM_WORD'("0000000000000000"), --10
  105. DATA_RAM_WORD'("0000000000000000"), --11
  106. DATA_RAM_WORD'("0000000000000000"), --12
  107. DATA_RAM_WORD'("0000000000000000"), --13
  108. DATA_RAM_WORD'("0000000000000000"), --14
  109. DATA_RAM_WORD'("0000000000000000"), --15
  110. DATA_RAM_WORD'("0000000000000000"), --16
  111. DATA_RAM_WORD'("0000000000000000"), --17
  112. DATA_RAM_WORD'("0000000000000000"), --18
  113. DATA_RAM_WORD'("0000000000000000"), --19
  114. DATA_RAM_WORD'("0000000000000000"), --1A
  115. DATA_RAM_WORD'("0000000000000000"), --1B
  116. DATA_RAM_WORD'("0000000000000000"), --1C
  117. DATA_RAM_WORD'("0000000000000000"), --1D
  118. DATA_RAM_WORD'("0000000000000000"), --1E
  119. DATA_RAM_WORD'("0000000000000000"), --1F
  120.  
  121. DATA_RAM_WORD'("0000000000000000"), --20
  122. DATA_RAM_WORD'("0000000000000000"), --21
  123. DATA_RAM_WORD'("0000000000000000"), --22
  124. DATA_RAM_WORD'("0000000000000000"), --23
  125. DATA_RAM_WORD'("0000000000000000"), --24
  126. DATA_RAM_WORD'("0000000000000000"), --25
  127. DATA_RAM_WORD'("0000000000000000"), --26
  128. DATA_RAM_WORD'("0000000000000000"), --27
  129. DATA_RAM_WORD'("0000000000000000"), --28
  130. DATA_RAM_WORD'("0000000000000000"), --29
  131. DATA_RAM_WORD'("0000000000000000"), --2A
  132. DATA_RAM_WORD'("0000000000000000"), --2B
  133. DATA_RAM_WORD'("0000000000000000"), --2C
  134. DATA_RAM_WORD'("0000000000000000"), --2D
  135. DATA_RAM_WORD'("0000000000000000"), --2E
  136. DATA_RAM_WORD'("0000000000000000"), --2F
  137.  
  138. DATA_RAM_WORD'("0000000000000000"), --30
  139. DATA_RAM_WORD'("0000000000000000"), --31
  140. DATA_RAM_WORD'("0000000000000000"), --32
  141. DATA_RAM_WORD'("0000000000000000"), --33
  142. DATA_RAM_WORD'("0000000000000000"), --34
  143. DATA_RAM_WORD'("0000000000000000"), --35
  144. DATA_RAM_WORD'("0000000000000000"), --36
  145. DATA_RAM_WORD'("0000000000000000"), --37
  146. DATA_RAM_WORD'("0000000000000000"), --38
  147. DATA_RAM_WORD'("0000000000000000"), --39
  148. DATA_RAM_WORD'("0000000000000000"), --3A
  149. DATA_RAM_WORD'("0000000000000000"), --3B
  150. DATA_RAM_WORD'("0000000000000000"), --3C
  151. DATA_RAM_WORD'("0000000000000000"), --3D
  152. DATA_RAM_WORD'("0000000000000000"), --3E
  153. DATA_RAM_WORD'("0000000000000000"), --3F
  154.  
  155. DATA_RAM_WORD'("0000000000000000"), --40
  156. DATA_RAM_WORD'("0000000000000000"), --41
  157. DATA_RAM_WORD'("0000000000000000"), --42
  158. DATA_RAM_WORD'("0000000000000000"), --43
  159. DATA_RAM_WORD'("0000000000000000"), --44
  160. DATA_RAM_WORD'("0000000000000000"), --45
  161. DATA_RAM_WORD'("0000000000000000"), --46
  162. DATA_RAM_WORD'("0000000000000000"), --47
  163. DATA_RAM_WORD'("0000000000000000"), --48
  164. DATA_RAM_WORD'("0000000000000000"), --49
  165. DATA_RAM_WORD'("0000000000000000"), --4A
  166. DATA_RAM_WORD'("0000000000000000"), --4B
  167. DATA_RAM_WORD'("0000000000000000"), --4C
  168. DATA_RAM_WORD'("0000000000000000"), --4D
  169. DATA_RAM_WORD'("0000000000000000"), --4E
  170. DATA_RAM_WORD'("0000000000000000"), --4F
  171.  
  172. DATA_RAM_WORD'("0000000000000000"), --50
  173. DATA_RAM_WORD'("0000000000000000"), --51
  174. DATA_RAM_WORD'("0000000000000000"), --52
  175. DATA_RAM_WORD'("0000000000000000"), --53
  176. DATA_RAM_WORD'("0000000000000000"), --54
  177. DATA_RAM_WORD'("0000000000000000"), --55
  178. DATA_RAM_WORD'("0000000000000000"), --56
  179. DATA_RAM_WORD'("0000000000000000"), --57
  180. DATA_RAM_WORD'("0000000000000000"), --58
  181. DATA_RAM_WORD'("0000000000000000"), --59
  182. DATA_RAM_WORD'("0000000000000000"), --5A
  183. DATA_RAM_WORD'("0000000000000000"), --5B
  184. DATA_RAM_WORD'("0000000000000000"), --5C
  185. DATA_RAM_WORD'("0000000000000000"), --5D
  186. DATA_RAM_WORD'("0000000000000000"), --5E
  187. DATA_RAM_WORD'("0000000000000000"), --5F
  188.  
  189. DATA_RAM_WORD'("0000000000000000"), --60
  190. DATA_RAM_WORD'("0000000000000000"), --61
  191. DATA_RAM_WORD'("0000000000000000"), --62
  192. DATA_RAM_WORD'("0000000000000000"), --63
  193. DATA_RAM_WORD'("0000000000000000"), --64
  194. DATA_RAM_WORD'("0000000000000000"), --65
  195. DATA_RAM_WORD'("0000000000000000"), --66
  196. DATA_RAM_WORD'("0000000000000000"), --67
  197. DATA_RAM_WORD'("0000000000000000"), --68
  198. DATA_RAM_WORD'("0000000000000000"), --69
  199. DATA_RAM_WORD'("0000000000000000"), --6A
  200. DATA_RAM_WORD'("0000000000000000"), --6B
  201. DATA_RAM_WORD'("0000000000000000"), --6C
  202. DATA_RAM_WORD'("0000000000000000"), --6D
  203. DATA_RAM_WORD'("0000000000000000"), --6E
  204. DATA_RAM_WORD'("0000000000000000"), --6F
  205.  
  206. DATA_RAM_WORD'("0000000000000000"), --70
  207. DATA_RAM_WORD'("0000000000000000"), --71
  208. DATA_RAM_WORD'("0000000000000000"), --72
  209. DATA_RAM_WORD'("0000000000000000"), --73
  210. DATA_RAM_WORD'("0000000000000000"), --74
  211. DATA_RAM_WORD'("0000000000000000"), --75
  212. DATA_RAM_WORD'("0000000000000000"), --76
  213. DATA_RAM_WORD'("0000000000000000"), --77
  214. DATA_RAM_WORD'("0000000000000000"), --78
  215. DATA_RAM_WORD'("0000000000000000"), --79
  216. DATA_RAM_WORD'("0000000000000000"), --7A
  217. DATA_RAM_WORD'("0000000000000000"), --7B
  218. DATA_RAM_WORD'("0000000000000000"), --7C
  219. DATA_RAM_WORD'("0000000000000000"), --7D
  220. DATA_RAM_WORD'("0000000000000000"), --7E
  221. DATA_RAM_WORD'("0000000000000000"), --7F
  222.  
  223. DATA_RAM_WORD'("0000000000000000"), --80
  224. DATA_RAM_WORD'("0000000000000000"), --81
  225. DATA_RAM_WORD'("0000000000000000"), --82
  226. DATA_RAM_WORD'("0000000000000000"), --83
  227. DATA_RAM_WORD'("0000000000000000"), --84
  228. DATA_RAM_WORD'("0000000000000000"), --85
  229. DATA_RAM_WORD'("0000000000000000"), --86
  230. DATA_RAM_WORD'("0000000000000000"), --87
  231. DATA_RAM_WORD'("0000000000000000"), --88
  232. DATA_RAM_WORD'("0000000000000000"), --89
  233. DATA_RAM_WORD'("0000000000000000"), --8A
  234. DATA_RAM_WORD'("0000000000000000"), --8B
  235. DATA_RAM_WORD'("0000000000000000"), --8C
  236. DATA_RAM_WORD'("0000000000000000"), --8D
  237. DATA_RAM_WORD'("0000000000000000"), --8E
  238. DATA_RAM_WORD'("0000000000000000"), --8F
  239.  
  240. DATA_RAM_WORD'("0000000000000000"), --90
  241. DATA_RAM_WORD'("0000000000000000"), --91
  242. DATA_RAM_WORD'("0000000000000000"), --92
  243. DATA_RAM_WORD'("0000000000000000"), --93
  244. DATA_RAM_WORD'("0000000000000000"), --94
  245. DATA_RAM_WORD'("0000000000000000"), --95
  246. DATA_RAM_WORD'("0000000000000000"), --96
  247. DATA_RAM_WORD'("0000000000000000"), --97
  248. DATA_RAM_WORD'("0000000000000000"), --98
  249. DATA_RAM_WORD'("0000000000000000"), --99
  250. DATA_RAM_WORD'("0000000000000000"), --9A
  251. DATA_RAM_WORD'("0000000000000000"), --9B
  252. DATA_RAM_WORD'("0000000000000000"), --9C
  253. DATA_RAM_WORD'("0000000000000000"), --9D
  254. DATA_RAM_WORD'("0000000000000000"), --9E
  255. DATA_RAM_WORD'("0000000000000000"), --9F
  256.  
  257. DATA_RAM_WORD'("0000000000000000"), --A0
  258. DATA_RAM_WORD'("0000000000000000"), --A1
  259. DATA_RAM_WORD'("0000000000000000"), --A2
  260. DATA_RAM_WORD'("0000000000000000"), --A3
  261. DATA_RAM_WORD'("0000000000000000"), --A4
  262. DATA_RAM_WORD'("0000000000000000"), --A5
  263. DATA_RAM_WORD'("0000000000000000"), --A6
  264. DATA_RAM_WORD'("0000000000000000"), --A7
  265. DATA_RAM_WORD'("0000000000000000"), --A8
  266. DATA_RAM_WORD'("0000000000000000"), --A9
  267. DATA_RAM_WORD'("0000000000000000"), --AA
  268. DATA_RAM_WORD'("0000000000000000"), --AB
  269. DATA_RAM_WORD'("0000000000000000"), --AC
  270. DATA_RAM_WORD'("0000000000000000"), --AD
  271. DATA_RAM_WORD'("0000000000000000"), --AE
  272. DATA_RAM_WORD'("0000000000000000"), --AF
  273.  
  274. DATA_RAM_WORD'("0000000000000000"), --B0
  275. DATA_RAM_WORD'("0000000000000000"), --B1
  276. DATA_RAM_WORD'("0000000000000000"), --B2
  277. DATA_RAM_WORD'("0000000000000000"), --B3
  278. DATA_RAM_WORD'("0000000000000000"), --B4
  279. DATA_RAM_WORD'("0000000000000000"), --B5
  280. DATA_RAM_WORD'("0000000000000000"), --B6
  281. DATA_RAM_WORD'("0000000000000000"), --B7
  282. DATA_RAM_WORD'("0000000000000000"), --B8
  283. DATA_RAM_WORD'("0000000000000000"), --B9
  284. DATA_RAM_WORD'("0000000000000000"), --BA
  285. DATA_RAM_WORD'("0000000000000000"), --BB
  286. DATA_RAM_WORD'("0000000000000000"), --BC
  287. DATA_RAM_WORD'("0000000000000000"), --BD
  288. DATA_RAM_WORD'("0000000000000000"), --BE
  289. DATA_RAM_WORD'("0000000000000000"), --BF
  290.  
  291. DATA_RAM_WORD'("0100000000000010"), --C0 acc <- acc +2
  292. DATA_RAM_WORD'("1110000011000110"), --C1 store in dummy instruction C6
  293. DATA_RAM_WORD'("0000000001100000"), --C2 acc <- 0
  294. DATA_RAM_WORD'("0100000000000000"), --C3 acc <- acc + 0
  295. DATA_RAM_WORD'("0100000000000001"), --C4 acc <- acc + 1
  296. DATA_RAM_WORD'("1001010011000011"), --C5 jump to C3
  297. DATA_RAM_WORD'("1000000000000000"), --C6 dummy instruction
  298. DATA_RAM_WORD'("0000000000000000"), --C7
  299. DATA_RAM_WORD'("0000000000000000"), --C8
  300. DATA_RAM_WORD'("0000000000000000"), --C9
  301. DATA_RAM_WORD'("0000000000000000"), --CA
  302. DATA_RAM_WORD'("0000000000000000"), --CB
  303. DATA_RAM_WORD'("0000000000000000"), --CC
  304. DATA_RAM_WORD'("0000000000000000"), --CD
  305. DATA_RAM_WORD'("0000000000000000"), --CE
  306. DATA_RAM_WORD'("0000000000000000"), --CF
  307.  
  308. DATA_RAM_WORD'("0000000000000000"), --D0
  309. DATA_RAM_WORD'("0000000000000000"), --D1
  310. DATA_RAM_WORD'("0000000000000000"), --D2
  311. DATA_RAM_WORD'("0000000000000000"), --D3
  312. DATA_RAM_WORD'("0000000000000000"), --D4
  313. DATA_RAM_WORD'("0000000000000000"), --D5
  314. DATA_RAM_WORD'("0000000000000000"), --D6
  315. DATA_RAM_WORD'("0000000000000000"), --D7
  316. DATA_RAM_WORD'("0000000000000000"), --D8
  317. DATA_RAM_WORD'("0000000000000000"), --D9
  318. DATA_RAM_WORD'("0000000000000000"), --DA
  319. DATA_RAM_WORD'("0000000000000000"), --DB
  320. DATA_RAM_WORD'("0000000000000000"), --DC
  321. DATA_RAM_WORD'("0000000000000000"), --DD
  322. DATA_RAM_WORD'("0000000000000000"), --DE
  323. DATA_RAM_WORD'("0000000000000000"), --DF
  324.  
  325. DATA_RAM_WORD'("0000000000000000"), --E0
  326. DATA_RAM_WORD'("0000000000000000"), --E1
  327. DATA_RAM_WORD'("0000000000000000"), --E2
  328. DATA_RAM_WORD'("0000000000000000"), --E3
  329. DATA_RAM_WORD'("0000000000000000"), --E4
  330. DATA_RAM_WORD'("0000000000000000"), --E5
  331. DATA_RAM_WORD'("0000000000000000"), --E6
  332. DATA_RAM_WORD'("0000000000000000"), --E7
  333. DATA_RAM_WORD'("0000000000000000"), --8
  334. DATA_RAM_WORD'("0000000000000000"), --E9
  335. DATA_RAM_WORD'("0000000000000000"), --EA
  336. DATA_RAM_WORD'("0000000000000000"), --EB
  337. DATA_RAM_WORD'("0000000000000000"), --EC
  338. DATA_RAM_WORD'("0000000000000000"), --ED
  339. DATA_RAM_WORD'("0000000000000000"), --EE
  340. DATA_RAM_WORD'("0000000000000000"), --EF
  341.  
  342. DATA_RAM_WORD'("0000000000000000"), --F0
  343. DATA_RAM_WORD'("0000000000000000"), --F1
  344. DATA_RAM_WORD'("0000000000000000"), --F2
  345. DATA_RAM_WORD'("0000000000000000"), --F3
  346. DATA_RAM_WORD'("0000000000000000"), --F4
  347. DATA_RAM_WORD'("0000000000000000"), --F5
  348. DATA_RAM_WORD'("0000000000000000"), --F6
  349. DATA_RAM_WORD'("0000000000000000"), --F7
  350. DATA_RAM_WORD'("0000000000000000"), --F8
  351. DATA_RAM_WORD'("0000000000000000"), --F9
  352. DATA_RAM_WORD'("0000000000000000"), --FA
  353. DATA_RAM_WORD'("0000000000000000"), --FB
  354. DATA_RAM_WORD'("0000000000000000"), --FC
  355. DATA_RAM_WORD'("0000000000000000"), --FD
  356. DATA_RAM_WORD'("0000000000000000"), --FE
  357. DATA_RAM_WORD'("0000000000000000") --FF
  358.  
  359. );
  360.  
  361. BEGIN
  362.  
  363. PROCESS ( clk)
  364. BEGIN
  365. IF clk='0' and clk'event
  366. THEN
  367. dout <= data_ram( CONV_INTEGER(addr)); -- Implementstion version
  368. IF rw='0'
  369. THEN
  370. data_ram( CONV_INTEGER(addr)) <= din;
  371. END IF;
  372. END IF;
  373. END PROCESS;
  374.  
  375. END ram_arch;
Advertisement
Add Comment
Please, Sign In to add comment