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

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

程序如下:

 library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity main is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
led : out STD_LOGIC_VECTOR ( downto );
an : out STD_LOGIC_VECTOR ( downto );
seg : out STD_LOGIC_VECTOR ( downto ));
end main; architecture Behavioral of main is
signal sclk: std_logic;
signal cnt0:integer:=;
signal cnt1:integer:=;
signal cnt2:integer:=;
signal cnt3:integer:=;
signal disp1:integer:=;
signal disp2:integer:=;
signal display:integer;
signal num1:integer;
signal num1_l:integer;
signal num1_h:integer;
signal num2:integer;
signal num2_l:integer;
signal num2_h:integer;
signal ledt: std_logic_vector ( downto );
signal an_sel: integer;
begin
led()<=ledt();
led()<=ledt();
led()<=ledt();
led()<=ledt();
led()<=ledt();
led()<=ledt();
process(clk)
begin
if(clk'event and clk='') then
if(cnt0=)then
cnt0<=;
sclk<=not sclk;
else
cnt0<=cnt0+;
end if;
end if;
end process; process(clk)
begin
if(clk'event and clk='') then
if(cnt2=) then
cnt2<=;
if(an_sel=)then
an_sel<=;
else
an_sel<=an_sel+;
end if;
else
cnt2<=cnt2+;
end if;
end if;
end process; process(rst,sclk)
begin
if(rst='') then
ledt()<='';
ledt()<='';
ledt()<='';
elsif(sclk'event and sclk='') then
cnt1<=cnt1+;
cnt3<=cnt3+;
if(cnt1>= and cnt1<=)then
ledt()<='';
ledt()<='';
ledt()<='';
elsif(cnt1>= and cnt1<=)then
ledt()<='';
ledt()<='';
ledt()<='';
elsif(cnt1=)then
ledt()<='';
ledt()<='';
ledt()<='';
elsif(cnt1=)then
cnt1<=;
end if;
if(cnt3>= and cnt3<=)then
ledt()<='';
ledt()<='';
ledt()<='';
elsif(cnt3>= and cnt3<=)then
ledt()<='';
ledt()<='';
ledt()<='';
elsif(cnt3=)then
ledt()<='';
ledt()<='';
ledt()<='';
elsif(cnt3=)then
cnt3<=;
end if;
end if;
end process; process(sclk,ledt,rst)
begin
if (rst='')then
disp1<=;
disp2<=;
elsif(sclk'event and sclk='') then
if(ledt()='' or ledt()='' or ledt()='')then
if(ledt()='' and disp1=)then
disp1<=;
elsif(ledt()='' and disp1=)then
disp1<=;
elsif(ledt()='' and disp1=)then
disp1<=;
else
disp1<=disp1 + ;
end if;
end if;
if(ledt()='' or ledt()='' or ledt()='')then
if(ledt()='' and disp2=)then
disp2<=;
elsif(ledt()='' and disp2=)then
disp2<=;
elsif(ledt()='' and disp2=)then
disp2<=;
else
disp2<=disp2 + ;
end if;
end if;
end if;
end process; process(an_sel)
begin
num1<=-disp1;
if(num1>=)then
num1_h<=;
num1_l<=num1-;
else
num1_h<=;
num1_l<=num1;
end if;
num2<=-disp2;
if(num2>=)then
num2_h<=;
num2_l<=num2-;
else
num2_h<=;
num2_l<=num2;
end if;
case an_sel is
when =>an<="";display<=num1_l;
when =>an<="";display<=num1_h;
when =>an<="";display<=num2_l;
when =>an<="";display<=num2_h;
when others=>null;
end case;
case display is
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when =>seg<=b"";
when others=>null;
end case;
end process;
end Behavioral;

约束文件

NET "clk" LOC = "B8";
NET "led<0>" LOC = "M5";
NET "led<1>" LOC = "M11";
NET "led<2>" LOC = "P7";
NET "led<3>" LOC = "P6";
NET "led<4>" LOC = "N5";
NET "led<5>" LOC = "N4";
NET "an<0>" LOC="F12";
NET "an<1>" LOC="J12";
NET "an<2>" LOC="M13";
NET "an<3>" LOC="K14";
#NET "seg<7>" LOC="N13";
NET "seg<6>" LOC="L14";
NET "seg<5>" LOC="H12";
NET "seg<4>" LOC="N14";
NET "seg<3>" LOC="N11";
NET "seg<2>" LOC="P12";
NET "seg<1>" LOC="L13";
NET "seg<0>" LOC="M12";
NET "rst" LOC="P11";

最新文章

  1. java对xml节点属性的增删改查
  2. Apache Shiro 简单概念
  3. jQuery设置disabled属性
  4. python中的字符数字之间的转换函数
  5. go语言的print
  6. 关于DISTINCE的用法
  7. scala多个构造函数的定义方法
  8. 反射 reflect 初始学习
  9. js的相关验证
  10. 【IOS学习基础】归档和解档
  11. Ubuntu14(64位) 集群环境下安装Hadoop2.4
  12. OVS 中的哈希表: shash
  13. [认证授权] 2.OAuth2授权(续) &amp; JWT(JSON Web Token)
  14. 安装vue脚手架和vue安装element-ui
  15. SMS PDU编码数据串格式分析
  16. springMVC 访问静态资源
  17. Xadmin的配置及使用
  18. PHP 5 时区
  19. iOS知识点整理
  20. jcabanillas/yii2-inspinia-asset composert 安装失败

热门文章

  1. C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型
  2. eclipse默认配色(内含恢复文件和恢复方法)
  3. weblogic运维时经常遇到的问题和常用的配置
  4. GO --微服务框架(二) goa
  5. STP 根桥、根port、指定port是怎样选举的
  6. Solaris 目录与文件管理
  7. Jenkins系列之-—06 Ant构建
  8. .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压
  9. do export method of oracle all database tables with dmp files.
  10. javascript点滴积累