基于BASYS2的VHDL程序——交通灯
请尊重作者版权,转载请注明原地址: 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";
基于BASYS2的VHDL程序——交通灯的更多相关文章
- 基于BASYS2的VHDL程序——交通灯(状态机版)
请尊重作者版权,转载注明源地址:http://www.cnblogs.com/connorzx/p/3694618.html 使用了状态机,增加了可读性和用户体验. library IEEE; use ...
- 基于BASYS2的VHDL程序——分频和数码管静态显示程序
转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...
- 基于BASYS2的VHDL程序与烧写——按键消抖程序
请尊重作者版权,转载请注明源地址http://www.cnblogs.com/connorzx/p/3548364.html 按键在按下的过程中通常会产生一段时间的抖动,为了消除这种抖动,一般采取两种 ...
- 基于BASYS2的VHDL程序与仿真——50%占空比8分频器
转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...
- 基于BASYS2的VHDL程序——数字钟(最终版)
转载请注明原地址:http://www.cnblogs.com/connorzx/p/3674178.html 调时电路正常工作.一切正常.发现做FPGA还是得从数电的思路思考,设置一个预置使能端,预 ...
- 基于BASYS2的VHDL程序——数字钟(改进版)
扩展到时分秒.加了入调时电路,但不知道为什么有两个按键不好使.而且不知道以何种方式假如按键消抖电路,因为加入后会多个时钟控制一个信号,物理不可实现.调试电路待解决.还有,四个数目管中间的那两个圆点怎么 ...
- 基于BASYS2的VHDL程序——数字钟
在编电子表时发现FPGA求余,取模只能针对2的次方.毕竟是数字的嘛! 时钟用到了动态刷新数码管.以一个大于50Hz的速度刷新每一个数码管. 因为数码管只有四个,只写了分针和秒针. 代码如下: libr ...
- 黑马程序员——【Java高新技术】——案例:交通灯管理系统
---------- android培训.java培训.期待与您交流! ---------- 一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 - ...
- 黑马程序员:Java编程_7K面试题之交通灯管理系统
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...
随机推荐
- POJ 1797 Heavy Transportation SPFA变形
原题链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- 某考试 T3 bitboard
bitboardDiscription 天才发明家小K 制造了一块比特板.板子上有2^n个比特元,编号为0 ∼ 2^n−1.每个比特元
- arch 安装
xfce参考 http://my.oschina.net/u/1408707/blog/182581#OSC_h2_6 chm阅读 – chmsee作为一个苦逼的码农,要忍受各种chm文件的蹂躏,这个 ...
- 【js】前台调试,在浏览器调试环境下找不到js怎么办?
针对这次 整个项目单页面的情况下,所有点击出现的新页面都是追加在母页面的情况下,很多时候不像原本的情况,可以直接在浏览器的调试环境下找到想要调试的js代码 这种情况下,怎么能找到子页面的js代码,调试 ...
- 定时任务crontab如何实现每秒执行?
linux crontab 命令,最小的执行时间是一分钟.如需要在小于一分钟内重复执行,可以有两个方法实现. 方法一:crontab -l内容如下,则每10秒执行一次/home/fdipzone/ph ...
- IDG | 四则运算表达式计算
分析 首先将中缀表达式转换为后缀表达式(逆波兰式),然后使用栈进行计算. 没有考虑括号.小数. 代码 import java.util.LinkedList; import java.util.Lis ...
- javascript一些面试经常使用的问题总结
有关函数调用变量问题 var a =10; function aaa(){ alert(a); } function bbb(){ var a = 20; aaa(); //10 } bbb(); 变 ...
- 自己写的通过ADO操作mysql数据库
#include <iostream> #include <windows.h> #include <atlstr.h> #import "c:\Prog ...
- nginx list directory
使用 http autoindex 模块列出 目录, 例如 需要将 /var/www 下的 resourcepacks 目录以 http 的方式 暴露 这样设置 nginx ...
- 为Redmine的项目加上起止时间
没有时间约束的项目不是好项目. 要给项目配置起止时间,须要用到自己定义属性. 我们须要管理员身份登录.才干够定义自己定义属性. 自己定义属性 看图吧,先是点击页面导航条(最上面那排菜单,有主页.我的工 ...