メディア

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

» 2016年09月09日 10時00分 公開
[MONOist]
前のページへ 1|2|3       
PR

List 3

  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[3:0] pos_cntr;
  21. reg[7:0] seg_cntr1;
  22. reg[7:0] seg_cntr2;
  23. reg[9:0] disp_cntr;
  24. reg[1:0] dig_cntr;
  25. function [9:0] Seg_Display(
  26. input [3:0] pos_cnrt,
  27. input [7:0] seg_cntr1,
  28. input [7:0] seg_cntr2
  29. );
  30. begin
  31. if (pos_cntr[3] == 1'b1) begin
  32. Seg_Display[9] = 1'b1;
  33. Seg_Display[8] = 1'b0;
  34. Seg_Display[7] = (pos_cntr == 8)?seg_cntr2[7] : 1'b1;
  35. Seg_Display[6] = (pos_cntr == 9)?seg_cntr2[6] : 1'b1;
  36. Seg_Display[5] = (pos_cntr == 10)?seg_cntr2[5] : 1'b1;
  37. Seg_Display[4] = (pos_cntr == 11)?seg_cntr2[4] : 1'b1;
  38. Seg_Display[3] = (pos_cntr == 12)?seg_cntr2[3] : 1'b1;
  39. Seg_Display[2] = (pos_cntr == 13)?seg_cntr2[2] : 1'b1;
  40. Seg_Display[1] = (pos_cntr == 14)?seg_cntr2[1] : 1'b1;
  41. Seg_Display[0] = (pos_cntr == 15)?seg_cntr2[0] : 1'b1;
  42. end
  43. else begin
  44. Seg_Display[9] = 1'b0;
  45. Seg_Display[8] = 1'b1;
  46. Seg_Display[7] = (pos_cntr == 0)?seg_cntr1[7] : 1'b1;
  47. Seg_Display[6] = (pos_cntr == 1)?seg_cntr1[6] : 1'b1;
  48. Seg_Display[5] = (pos_cntr == 2)?seg_cntr1[5] : 1'b1;
  49. Seg_Display[4] = (pos_cntr == 3)?seg_cntr1[4] : 1'b1;
  50. Seg_Display[3] = (pos_cntr == 4)?seg_cntr1[3] : 1'b1;
  51. Seg_Display[2] = (pos_cntr == 5)?seg_cntr1[2] : 1'b1;
  52. Seg_Display[1] = (pos_cntr == 6)?seg_cntr1[1] : 1'b1;
  53. Seg_Display[0] = (pos_cntr == 7)?seg_cntr1[0] : 1'b1;
  54. end
  55. end
  56. endfunction
  57. function [7:0] Map_Display(
  58. input [3:0] dec_cntr
  59. );
  60. begin
  61. case (dec_cntr)
  62. 0 : Map_Display = 8'b00000100; // 1111011
  63. 1 : Map_Display = 8'b11100111; // 0011000
  64. 2 : Map_Display = 8'b01001000; // 0110111
  65. 3 : Map_Display = 8'b11000001; // 0111110
  66. 4 : Map_Display = 8'b00100011; // 1011100
  67. 5 : Map_Display = 8'b10010001; // 1101110
  68. 6 : Map_Display = 8'b00010000; // 1101111
  69. 7 : Map_Display = 8'b11000111; // 0111000
  70. 8 : Map_Display = 8'b00000000; // 1111111
  71. 9 : Map_Display = 8'b10000001; // 1111110
  72. default : Map_Display = 8'b11111111; // 0000000
  73. endcase
  74. end
  75. endfunction
  76. initial begin
  77. div_cntr1 = 0;
  78. div_cntr2 = 0;
  79. dec_cntr1 = 0;
  80. dec_cntr2 = 0;
  81. seg_cntr1 = 0;
  82. seg_cntr2 = 0;
  83. pos_cntr = 0;
  84. dig_cntr = 0;
  85. end
  86. always@(posedge Clock) begin
  87. div_cntr1 <= div_cntr1 + 1;
  88. if (div_cntr1 == 25000) begin
  89. div_cntr1 <= 0;
  90. div_cntr2 <= div_cntr2 + 1;
  91. if (div_cntr2 == 200) begin
  92. div_cntr2 <= 0;
  93. seg_cntr1 = Map_Display(dec_cntr1);
  94. dec_cntr1 <= dec_cntr1 + 1;
  95. if (dec_cntr1 == 9) begin
  96. dec_cntr1 <= 0;
  97. dec_cntr2 <= dec_cntr2 + 1;
  98. seg_cntr2 = Map_Display(dec_cntr2);
  99. if (dec_cntr2 == 9) begin
  100. dec_cntr2 <= 0;
  101. end
  102. end
  103. end
  104. else begin
  105. pos_cntr <= pos_cntr + 1;
  106. dig_cntr <= 1;
  107. disp_cntr = Seg_Display(pos_cntr, seg_cntr1, seg_cntr2);
  108. end
  109. end
  110. end
  111. assign Arduino_IO4 = disp_cntr[9] ;
  112. assign Arduino_IO5 = disp_cntr[8] ;
  113. assign Arduino_IO6 = disp_cntr[6] ;
  114. assign Arduino_IO7 = disp_cntr[5] ;
  115. assign Arduino_IO8 = disp_cntr[4] ;
  116. assign Arduino_IO9 = disp_cntr[7] ;
  117. assign Arduino_IO10 = disp_cntr[3] ;
  118. assign Arduino_IO11 = disp_cntr[2] ;
  119. assign Arduino_IO12 = disp_cntr[1] ;
  120. assign Arduino_IO13 = disp_cntr[0] ;
  121. endmodule
List3


前のページへ 1|2|3       

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

Copyright © ITmedia, Inc. All Rights Reserved.