FPGAでLEDをダイナミックにLチカさせる(ソースコード)(2/3 ページ)

» 2016年09月09日 10時00分 公開
[MONOist]
PR

List 2

  1. module top(
  2. //Clock from oscillator
  3. input Clock,
  4. //Arduino I/Os
  5. inout Arduino_IO4,
  6. inout Arduino_IO5,
  7. inout Arduino_IO6,
  8. inout Arduino_IO7,
  9. inout Arduino_IO8,
  10. inout Arduino_IO9,
  11. inout Arduino_IO10,
  12. inout Arduino_IO11,
  13. inout Arduino_IO12,
  14. inout Arduino_IO13
  15. );
  16. reg[14:0] div_cntr1;
  17. reg[7:0] div_cntr2;
  18. reg[3:0] dec_cntr1;
  19. reg[3:0] dec_cntr2;
  20. reg[4:0] pos_cntr;
  21. reg[6:0] seg_cntr1;
  22. reg[6:0] seg_cntr2;
  23. reg[7:0] disp_cntr;
  24. reg[1:0] dig_cntr;
  25. initial begin
  26. div_cntr1 = 0;
  27. div_cntr2 = 0;
  28. dec_cntr1 = 0;
  29. dec_cntr2 = 0;
  30. seg_cntr1 = 0;
  31. seg_cntr2 = 0;
  32. pos_cntr = 0;
  33. dig_cntr = 0;
  34. end
  35. always@(posedge Clock) begin
  36. div_cntr1 <= div_cntr1 + 1;
  37. if (div_cntr1 == 25000) begin
  38. div_cntr1 <= 0;
  39. div_cntr2 <= div_cntr2 + 1;
  40. if (div_cntr2 == 200) begin
  41. div_cntr2 <= 0;
  42. case (dec_cntr1)
  43. 0 : seg_cntr1 <= 7'b0000100; // 1111011
  44. 1 : seg_cntr1 <= 7'b1100111; // 0011000
  45. 2 : seg_cntr1 <= 7'b1001000; // 0110111
  46. 3 : seg_cntr1 <= 7'b1000001; // 0111110
  47. 4 : seg_cntr1 <= 7'b0100011; // 1011100
  48. 5 : seg_cntr1 <= 7'b0010001; // 1101110
  49. 6 : seg_cntr1 <= 7'b0010000; // 1101111
  50. 7 : seg_cntr1 <= 7'b1000111; // 0111000
  51. 8 : seg_cntr1 <= 7'b0000000; // 1111111
  52. 9 : seg_cntr1 <= 7'b0000001; // 1111110
  53. default : seg_cntr1 <= 7'b1111111; // 0000000
  54. endcase
  55. dec_cntr1 <= dec_cntr1 + 1;
  56. if (dec_cntr1 == 9) begin
  57. dec_cntr1 <= 0;
  58. dec_cntr2 <= dec_cntr2 + 1;
  59. case (dec_cntr2)
  60. 0 : seg_cntr2 <= 7'b0000100; // 1111011
  61. 1 : seg_cntr2 <= 7'b1100111; // 0011000
  62. 2 : seg_cntr2 <= 7'b1001000; // 0110111
  63. 3 : seg_cntr2 <= 7'b1000001; // 0111110
  64. 4 : seg_cntr2 <= 7'b0100011; // 1011100
  65. 5 : seg_cntr2 <= 7'b0010001; // 1101110
  66. 6 : seg_cntr2 <= 7'b0010000; // 1101111
  67. 7 : seg_cntr2 <= 7'b1000111; // 0111000
  68. 8 : seg_cntr2 <= 7'b0000000; // 1111111
  69. 9 : seg_cntr2 <= 7'b0000001; // 1111110
  70. default : seg_cntr2 <= 7'b1111111; // 0000000
  71. endcase
  72. if (dec_cntr2 == 9) begin
  73. dec_cntr2 <= 0;
  74. end
  75. end
  76. end
  77. else begin
  78. pos_cntr <= pos_cntr + 1;
  79. case (pos_cntr)
  80. 0 : begin
  81. dig_cntr <= 1;
  82. disp_cntr[7] <= 1;
  83. disp_cntr[6] <= seg_cntr1[6];
  84. disp_cntr[5] <= 1;
  85. disp_cntr[4] <= 1;
  86. disp_cntr[3] <= 1;
  87. disp_cntr[2] <= 1;
  88. disp_cntr[1] <= 1;
  89. disp_cntr[0] <= 1;
  90. end
  91. 1 : begin
  92. dig_cntr <= 1;
  93. disp_cntr[7] <= 1;
  94. disp_cntr[6] <= 1;
  95. disp_cntr[5] <= seg_cntr1[5] ;
  96. disp_cntr[4] <= 1;
  97. disp_cntr[3] <= 1;
  98. disp_cntr[2] <= 1;
  99. disp_cntr[1] <= 1;
  100. disp_cntr[0] <= 1;
  101. end
  102. 2 : begin
  103. dig_cntr <= 1;
  104. disp_cntr[7] <= 1;
  105. disp_cntr[6] <= 1;
  106. disp_cntr[5] <= 1;
  107. disp_cntr[4] <= seg_cntr1[4] ;
  108. disp_cntr[3] <= 1;
  109. disp_cntr[2] <= 1;
  110. disp_cntr[1] <= 1;
  111. disp_cntr[0] <= 1;
  112. end
  113. 3 : begin
  114. dig_cntr <= 1;
  115. disp_cntr[7] <= 1;
  116. disp_cntr[6] <= 1;
  117. disp_cntr[5] <= 1;
  118. disp_cntr[4] <= 1;
  119. disp_cntr[3] <= seg_cntr1[3] ;
  120. disp_cntr[2] <= 1;
  121. disp_cntr[1] <= 1;
  122. disp_cntr[0] <= 1;
  123. end
  124. 4 : begin
  125. dig_cntr <= 1;
  126. disp_cntr[7] <= 1;
  127. disp_cntr[6] <= 1;
  128. disp_cntr[5] <= 1;
  129. disp_cntr[4] <= 1;
  130. disp_cntr[3] <= 1;
  131. disp_cntr[2] <= seg_cntr1[2] ;
  132. disp_cntr[1] <= 1;
  133. disp_cntr[0] <= 1;
  134. end
  135. 5 : begin
  136. dig_cntr <= 1;
  137. disp_cntr[7] <= 1;
  138. disp_cntr[6] <= 1;
  139. disp_cntr[5] <= 1;
  140. disp_cntr[4] <= 1;
  141. disp_cntr[3] <= 1;
  142. disp_cntr[2] <= 1;
  143. disp_cntr[1] <= seg_cntr1[1] ;
  144. disp_cntr[0] <= 1;
  145. end
  146. 6 : begin
  147. dig_cntr <= 1;
  148. disp_cntr[7] <= 1;
  149. disp_cntr[6] <= 1;
  150. disp_cntr[5] <= 1;
  151. disp_cntr[4] <= 1;
  152. disp_cntr[3] <= 1;
  153. disp_cntr[2] <= 1;
  154. disp_cntr[1] <= 1;
  155. disp_cntr[0] <= seg_cntr1[0] ;
  156. end
  157. 7 : begin
  158. dig_cntr <= 1;
  159. disp_cntr[7] <= dec_cntr1[0] ;
  160. disp_cntr[6] <= 1;
  161. disp_cntr[5] <= 1;
  162. disp_cntr[4] <= 1;
  163. disp_cntr[3] <= 1;
  164. disp_cntr[2] <= 1;
  165. disp_cntr[1] <= 1;
  166. disp_cntr[0] <= 1;
  167. end
  168. 8 : begin
  169. dig_cntr <= 2;
  170. disp_cntr[7] <= 1;
  171. disp_cntr[6] <= seg_cntr2[6];
  172. disp_cntr[5] <= 1;
  173. disp_cntr[4] <= 1;
  174. disp_cntr[3] <= 1;
  175. disp_cntr[2] <= 1;
  176. disp_cntr[1] <= 1;
  177. disp_cntr[0] <= 1;
  178. end
  179. 9 : begin
  180. dig_cntr <= 2;
  181. disp_cntr[7] <= 1;
  182. disp_cntr[6] <= 1;
  183. disp_cntr[5] <= seg_cntr2[5] ;
  184. disp_cntr[4] <= 1;
  185. disp_cntr[3] <= 1;
  186. disp_cntr[2] <= 1;
  187. disp_cntr[1] <= 1;
  188. disp_cntr[0] <= 1;
  189. end
  190. 10 : begin
  191. dig_cntr <= 2;
  192. disp_cntr[7] <= 1;
  193. disp_cntr[6] <= 1;
  194. disp_cntr[5] <= 1;
  195. disp_cntr[4] <= seg_cntr2[4] ;
  196. disp_cntr[3] <= 1;
  197. disp_cntr[2] <= 1;
  198. disp_cntr[1] <= 1;
  199. disp_cntr[0] <= 1;
  200. end
  201. 11 : begin
  202. dig_cntr <= 2;
  203. disp_cntr[7] <= 1;
  204. disp_cntr[6] <= 1;
  205. disp_cntr[5] <= 1;
  206. disp_cntr[4] <= 1;
  207. disp_cntr[3] <= seg_cntr2[3] ;
  208. disp_cntr[2] <= 1;
  209. disp_cntr[1] <= 1;
  210. disp_cntr[0] <= 1;
  211. end
  212. 12 : begin
  213. dig_cntr <= 2;
  214. disp_cntr[7] <= 1;
  215. disp_cntr[6] <= 1;
  216. disp_cntr[5] <= 1;
  217. disp_cntr[4] <= 1;
  218. disp_cntr[3] <= 1;
  219. disp_cntr[2] <= seg_cntr2[2] ;
  220. disp_cntr[1] <= 1;
  221. disp_cntr[0] <= 1;
  222. end
  223. 13 : begin
  224. dig_cntr <= 2;
  225. disp_cntr[7] <= 1;
  226. disp_cntr[6] <= 1;
  227. disp_cntr[5] <= 1;
  228. disp_cntr[4] <= 1;
  229. disp_cntr[3] <= 1;
  230. disp_cntr[2] <= 1;
  231. disp_cntr[1] <= seg_cntr2[1] ;
  232. disp_cntr[0] <= 1;
  233. end
  234. 14 : begin
  235. dig_cntr <= 2;
  236. disp_cntr[7] <= 1;
  237. disp_cntr[6] <= 1;
  238. disp_cntr[5] <= 1;
  239. disp_cntr[4] <= 1;
  240. disp_cntr[3] <= 1;
  241. disp_cntr[2] <= 1;
  242. disp_cntr[1] <= 1;
  243. disp_cntr[0] <= seg_cntr2[0] ;
  244. end
  245. 15 : begin
  246. dig_cntr <= 2;
  247. disp_cntr[7] <= dec_cntr2[0] ;
  248. disp_cntr[6] <= 1;
  249. disp_cntr[5] <= 1;
  250. disp_cntr[4] <= 1;
  251. disp_cntr[3] <= 1;
  252. disp_cntr[2] <= 1;
  253. disp_cntr[1] <= 1;
  254. disp_cntr[0] <= 1;
  255. end
  256. default: begin
  257. dig_cntr <= 0;
  258. disp_cntr[7] <= 1;
  259. disp_cntr[6] <= 1;
  260. disp_cntr[5] <= 1;
  261. disp_cntr[4] <= 1;
  262. disp_cntr[3] <= 1;
  263. disp_cntr[2] <= 1;
  264. disp_cntr[1] <= 1;
  265. disp_cntr[0] <= 1;
  266. end
  267. endcase
  268. end
  269. end
  270. end
  271. assign Arduino_IO4 = dig_cntr[1] ;
  272. assign Arduino_IO5 = dig_cntr[0] ;
  273. assign Arduino_IO6 = disp_cntr[6] ;
  274. assign Arduino_IO7 = disp_cntr[5] ;
  275. assign Arduino_IO8 = disp_cntr[4] ;
  276. assign Arduino_IO9 = disp_cntr[7] ;
  277. assign Arduino_IO10 = disp_cntr[3] ;
  278. assign Arduino_IO11 = disp_cntr[2] ;
  279. assign Arduino_IO12 = disp_cntr[1] ;
  280. assign Arduino_IO13 = disp_cntr[0] ;
  281. endmodule
List 2

提供:日本アルテラ株式会社
アイティメディア営業企画/制作:MONOist 編集部/掲載内容有効期限:2016年10月10日

Copyright © ITmedia, Inc. All Rights Reserved.