请尊重作者版权,转载请注明原地址: http://www.cnblogs.com/connorzx/p/3676746.html

数电实验交通灯VHDL版,程序写的扩展性很差,待以后有时间进行优化。

程序如下:

  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.STD_LOGIC_ARITH.ALL;
  4. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5. entity main is
  6. Port ( clk : in STD_LOGIC;
  7. rst : in STD_LOGIC;
  8. led : out STD_LOGIC_VECTOR ( downto );
  9. an : out STD_LOGIC_VECTOR ( downto );
  10. seg : out STD_LOGIC_VECTOR ( downto ));
  11. end main;
  12.  
  13. architecture Behavioral of main is
  14. signal sclk: std_logic;
  15. signal cnt0:integer:=;
  16. signal cnt1:integer:=;
  17. signal cnt2:integer:=;
  18. signal cnt3:integer:=;
  19. signal disp1:integer:=;
  20. signal disp2:integer:=;
  21. signal display:integer;
  22. signal num1:integer;
  23. signal num1_l:integer;
  24. signal num1_h:integer;
  25. signal num2:integer;
  26. signal num2_l:integer;
  27. signal num2_h:integer;
  28. signal ledt: std_logic_vector ( downto );
  29. signal an_sel: integer;
  30. begin
  31. led()<=ledt();
  32. led()<=ledt();
  33. led()<=ledt();
  34. led()<=ledt();
  35. led()<=ledt();
  36. led()<=ledt();
  37. process(clk)
  38. begin
  39. if(clk'event and clk='') then
  40. if(cnt0=)then
  41. cnt0<=;
  42. sclk<=not sclk;
  43. else
  44. cnt0<=cnt0+;
  45. end if;
  46. end if;
  47. end process;
  48.  
  49. process(clk)
  50. begin
  51. if(clk'event and clk='') then
  52. if(cnt2=) then
  53. cnt2<=;
  54. if(an_sel=)then
  55. an_sel<=;
  56. else
  57. an_sel<=an_sel+;
  58. end if;
  59. else
  60. cnt2<=cnt2+;
  61. end if;
  62. end if;
  63. end process;
  64.  
  65. process(rst,sclk)
  66. begin
  67. if(rst='') then
  68. ledt()<='';
  69. ledt()<='';
  70. ledt()<='';
  71. elsif(sclk'event and sclk='') then
  72. cnt1<=cnt1+;
  73. cnt3<=cnt3+;
  74. if(cnt1>= and cnt1<=)then
  75. ledt()<='';
  76. ledt()<='';
  77. ledt()<='';
  78. elsif(cnt1>= and cnt1<=)then
  79. ledt()<='';
  80. ledt()<='';
  81. ledt()<='';
  82. elsif(cnt1=)then
  83. ledt()<='';
  84. ledt()<='';
  85. ledt()<='';
  86. elsif(cnt1=)then
  87. cnt1<=;
  88. end if;
  89. if(cnt3>= and cnt3<=)then
  90. ledt()<='';
  91. ledt()<='';
  92. ledt()<='';
  93. elsif(cnt3>= and cnt3<=)then
  94. ledt()<='';
  95. ledt()<='';
  96. ledt()<='';
  97. elsif(cnt3=)then
  98. ledt()<='';
  99. ledt()<='';
  100. ledt()<='';
  101. elsif(cnt3=)then
  102. cnt3<=;
  103. end if;
  104. end if;
  105. end process;
  106.  
  107. process(sclk,ledt,rst)
  108. begin
  109. if (rst='')then
  110. disp1<=;
  111. disp2<=;
  112. elsif(sclk'event and sclk='') then
  113. if(ledt()='' or ledt()='' or ledt()='')then
  114. if(ledt()='' and disp1=)then
  115. disp1<=;
  116. elsif(ledt()='' and disp1=)then
  117. disp1<=;
  118. elsif(ledt()='' and disp1=)then
  119. disp1<=;
  120. else
  121. disp1<=disp1 + ;
  122. end if;
  123. end if;
  124. if(ledt()='' or ledt()='' or ledt()='')then
  125. if(ledt()='' and disp2=)then
  126. disp2<=;
  127. elsif(ledt()='' and disp2=)then
  128. disp2<=;
  129. elsif(ledt()='' and disp2=)then
  130. disp2<=;
  131. else
  132. disp2<=disp2 + ;
  133. end if;
  134. end if;
  135. end if;
  136. end process;
  137.  
  138. process(an_sel)
  139. begin
  140. num1<=-disp1;
  141. if(num1>=)then
  142. num1_h<=;
  143. num1_l<=num1-;
  144. else
  145. num1_h<=;
  146. num1_l<=num1;
  147. end if;
  148. num2<=-disp2;
  149. if(num2>=)then
  150. num2_h<=;
  151. num2_l<=num2-;
  152. else
  153. num2_h<=;
  154. num2_l<=num2;
  155. end if;
  156. case an_sel is
  157. when =>an<="";display<=num1_l;
  158. when =>an<="";display<=num1_h;
  159. when =>an<="";display<=num2_l;
  160. when =>an<="";display<=num2_h;
  161. when others=>null;
  162. end case;
  163. case display is
  164. when =>seg<=b"";
  165. when =>seg<=b"";
  166. when =>seg<=b"";
  167. when =>seg<=b"";
  168. when =>seg<=b"";
  169. when =>seg<=b"";
  170. when =>seg<=b"";
  171. when =>seg<=b"";
  172. when =>seg<=b"";
  173. when =>seg<=b"";
  174. when others=>null;
  175. end case;
  176. end process;
  177. end Behavioral;

约束文件

  1. NET "clk" LOC = "B8";
  2. NET "led<0>" LOC = "M5";
  3. NET "led<1>" LOC = "M11";
  4. NET "led<2>" LOC = "P7";
  5. NET "led<3>" LOC = "P6";
  6. NET "led<4>" LOC = "N5";
  7. NET "led<5>" LOC = "N4";
  8. NET "an<0>" LOC="F12";
  9. NET "an<1>" LOC="J12";
  10. NET "an<2>" LOC="M13";
  11. NET "an<3>" LOC="K14";
  12. #NET "seg<7>" LOC="N13";
  13. NET "seg<6>" LOC="L14";
  14. NET "seg<5>" LOC="H12";
  15. NET "seg<4>" LOC="N14";
  16. NET "seg<3>" LOC="N11";
  17. NET "seg<2>" LOC="P12";
  18. NET "seg<1>" LOC="L13";
  19. NET "seg<0>" LOC="M12";
  20. NET "rst" LOC="P11";

基于BASYS2的VHDL程序——交通灯的更多相关文章

  1. 基于BASYS2的VHDL程序——交通灯(状态机版)

    请尊重作者版权,转载注明源地址:http://www.cnblogs.com/connorzx/p/3694618.html 使用了状态机,增加了可读性和用户体验. library IEEE; use ...

  2. 基于BASYS2的VHDL程序——分频和数码管静态显示程序

    转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...

  3. 基于BASYS2的VHDL程序与烧写——按键消抖程序

    请尊重作者版权,转载请注明源地址http://www.cnblogs.com/connorzx/p/3548364.html 按键在按下的过程中通常会产生一段时间的抖动,为了消除这种抖动,一般采取两种 ...

  4. 基于BASYS2的VHDL程序与仿真——50%占空比8分频器

    转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...

  5. 基于BASYS2的VHDL程序——数字钟(最终版)

    转载请注明原地址:http://www.cnblogs.com/connorzx/p/3674178.html 调时电路正常工作.一切正常.发现做FPGA还是得从数电的思路思考,设置一个预置使能端,预 ...

  6. 基于BASYS2的VHDL程序——数字钟(改进版)

    扩展到时分秒.加了入调时电路,但不知道为什么有两个按键不好使.而且不知道以何种方式假如按键消抖电路,因为加入后会多个时钟控制一个信号,物理不可实现.调试电路待解决.还有,四个数目管中间的那两个圆点怎么 ...

  7. 基于BASYS2的VHDL程序——数字钟

    在编电子表时发现FPGA求余,取模只能针对2的次方.毕竟是数字的嘛! 时钟用到了动态刷新数码管.以一个大于50Hz的速度刷新每一个数码管. 因为数码管只有四个,只写了分针和秒针. 代码如下: libr ...

  8. 黑马程序员——【Java高新技术】——案例:交通灯管理系统

    ---------- android培训.java培训.期待与您交流! ---------- 一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 - ...

  9. 黑马程序员:Java编程_7K面试题之交通灯管理系统

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...

随机推荐

  1. SSL剥离工具sslstrip

    SSL剥离工具sslstrip   在日常上网过程中,用户只是在地址栏中输入网站域名,而不添加协议类型,如HTTP和HTTPS.这时,浏览器会默认在域名之前添加http://,然后请求网站.如果网站采 ...

  2. git移除上一次的commit中误添加的文件

    在使用git进行版本管理时,往往会出现一些误操作,比如将一些不加上传的文件放到了暂存区,即上传到了上一次commit中 比如: commit c134ab90ca7c4daf8bfa22e3ad706 ...

  3. android 扩大view的响应区域

    1.Android提供TouchDelegate帮助实现扩大一个很小的view的点击区域 例如:https://developer.android.com/training/gestures/view ...

  4. OpenLayers3 动画

    参考文章 openlayers3中三种动画实现

  5. Hibernate中的对象状态,及自动更新原因,Hibernate set对象后不调用update却自动更新

    原文:http://www.cnblogs.com/xiaoda/p/3225617.html Hibernate的对象有三种状态,分别为:瞬时状态 (Transient). 持久化状态(Persis ...

  6. eclipse项目java版本更改

    然后.右键点击项目->properties->Java Compiler->....如图 ​ 最后,右键点击项目->properties->Project  Facets ...

  7. tf.nn.softmax_cross_entropy_with_logits的用法

    http://blog.csdn.net/mao_xiao_feng/article/details/53382790 计算loss的时候,最常见的一句话就是tf.nn.softmax_cross_e ...

  8. Oracle对没有主键的表分页

    普通情况对于有主键,能够做唯一表识的表.我们能够利用主键和rownum配合实现.比如: select scott.emp.* from scott.emp left join (select empn ...

  9. Hibernate Restrictions QBC运算符

    HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <>  Restrictions.ne() 不等于not equal >  Restrict ...

  10. python(8)- python基础数据类型

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视 频.网页等各种各样的数据,不同的数据,需要 ...