FPGA(7)--有限状态机--交通灯
文章目录
- 一、实验目的
- 二、实验内容
- 三、实验设计与结果
- 四、实验思考与小结
一、实验目的
掌握有限状态机的编程和使用方法。
二、实验内容
设计一个十字路口交通灯控制器,东西(b)、南北(a)方向有红灯、黄灯、绿灯,持续时间分别为45、5、40秒,仿真验证其功能。
三、实验设计与结果
1.整体设计思路:根据题目要求可知,需要用VHDL描述设计不同的进程分别进行“复位清零”、“状态定义及转化”、“时间定义及控制”、“计时”的功能。而又因为红绿灯需要持续40秒,而黄灯只需要持续5秒,因此需要将“时间的定义及控制”、“计时”的功能各自都分开成两个部分。细节:需要注意复位清零的异步性、双向红绿灯存在的4种不同状态、计时功能与状态选择的衔接等。VHDL描述代码如下。
①引入与定义:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;ENTITY rgy3 isport( clk,rst: in std_logic;Ra,Rb,Ga,Gb,Ya,Yb: out std_logic);
END rgy3;Architecture bhv of rgy3 istype state is (S0,S1,S2,S3);signal presentstate,nextstate : state;signal time40,time5 : std_logic;signal rst40,rst5 : std_logic ;signal en40,en5 : std_logic ; signal tmp40 : std_logic_vector(5 downto 0);signal tmp5 : std_logic_vector(2 downto 0);begin
②异步复位清零:
process(clk,rst)beginif rst = '1' then presentstate <= S0;elsif clk'event and clk='1' thenpresentstate<=nextstate;end if;end process;
③40秒计时:
process(clk,rst40,en40) begin if rst = '1' then tmp40<="000000";elsif rst40='1' then tmp40<="000000";elsif clk'event and clk='1' then if en40='1' thenif tmp40="100111" then tmp40<="000000";else tmp40<=tmp40+1;end if;end if;end if;if tmp40="100111" then time40<='1';else time40<='0';end if;end process;
④5秒计时:
process(clk,rst5,en5) begin if rst = '1' then tmp5<="000";elsif rst5='1' then tmp5<="000";elsif clk 'event and clk='1' then if en5='1' thenif tmp5="100" then tmp5<="000";else tmp5<=tmp5+1;end if;end if;end if;if tmp5="100" then time5<='1';else time5<='0';end if;end process;
⑤时间与状态衔接:
process(presentstate,time40,time5)begincase presentstate iswhen S0 => rst40 <='0';en40<='1';rst5<='1';en5<='0';if time40= '1' then nextstate<= S1;else nextstate<= S0; end if;when S1 => rst5 <='0';en5 <='1';rst40<='1';en40<='0';if time5= '1' then nextstate<= S2;else nextstate<= S1; end if; when S2 => rst40 <='0';en40<='1';rst5<='1';en5<='0';if time40= '1' then nextstate<= S3;else nextstate<= S2; end if; when S3 => rst5 <='0';en5<='1';rst40<='1';en40<='0';if time5= '1' then nextstate<= S0;else nextstate<= S3; end if; end case;end process;
⑥状态对应转化:
process(presentstate)begincase presentstate is when S0 => Ra<='0'; Ya<= '0'; Ga<='1'; Rb<='1'; Yb<= '0'; Gb<='0'; when S1 => Ra<='0'; Ya<= '1'; Ga<='0'; Rb<='1'; Yb<= '0'; Gb<='0'; when S2 => Ra<='1'; Ya<= '0'; Ga<='0'; Rb<='0'; Yb<= '0'; Gb<='1'; when S3 => Ra<='1'; Ya<= '0'; Ga<='0'; Rb<='0'; Yb<= '1'; Gb<='0';end case;end process;
2.仿真实验:输入:clk、rst,输出:Ra、Rb、Ga、Gb、Ya、Yb以及状态中间输出:presentstate、tmp40、tmp5。
3.状态机转换图。
4.根据引脚配置完成接线,下载至FPGA芯片中,在实验箱上完成验证。如下图为相关的实验验证。
四、实验思考与小结
1.VHDL描述的模块化,将实现不同功能的VHDL描述分开在不同的进程里面,实现VHDL的“高内聚低耦合”。
2. 需要明确不同的状态机它们之间的转换条件。
3. 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。交通信号灯可以用状态机的原理来实现,因为信号灯的变化状态是有限的,各个状态可以列举出来,状态间切换由计数器决定。
FPGA(7)--有限状态机--交通灯相关推荐
- FPGA双模式交通灯的设计
一.设计要求 1.模块一:模拟十字路口主干道与辅道灯光变化情况: a.FPGA板上电后,控制显示的开关拨至高电平,进行五秒的倒计时,然后出现第一次红绿灯转换: b.接下来会根据所处不同的状态有不同的倒 ...
- step fpga上实现呼吸灯和交通灯
呼吸灯 呼吸灯:我们将通过脉宽调制技术来实现"呼吸灯",实现LED的亮度由最暗逐渐增加到最亮,再逐渐变暗的过程. 脉冲宽度调制.它是利用微控制器的数字输出调制实现,是对模拟电路进行 ...
- CASE_01 基于FPGA的交通灯控制器
该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源. 目录 1 案例引导 1.1 硬件设计初窥 1.2 逻辑设计初窥 2 模块级逻 ...
- FPGA学习心得分享——交通灯(EGO1)
学期快结束了,学了一个学期FPGA课程,通过自己思索加上老师的指导我完成了自己第一份交通灯的作业,我希望把经验分享给学习Verilog遇到困难的同学,更希望大家都能顺利完成自己的作业. 灯能左右改变方 ...
- 基于FPGA的交通灯
交通灯是单片机和FPGA都会做的简单项目.本次交通灯做得比较简单,只是模仿一个十字路口的交通灯. 总共有三个模块组成,RTL视图如下: 顶层模块,控制模块,数码管显示模块.代码如下: 顶层模块: mo ...
- FPGA开发基础——基于multisim以及Quartus实现的交通灯电路
作者:王子齐 学校:电子科技大学 学号:2018151202014 设计目的:完成对于FGPA开发的基础练习,建立FPGA开发思想. 目录 设计要求 基于multisim对于交通灯的电路搭建 1.1 ...
- 基于FPGA的交通灯系统
基于FPGA的交通灯系统 一.实验目的 1.学习和掌握将实践中的要求抽象为逻辑需求关系的方法. 2.掌握将小型数字系统划分为控制器和处理器的方法. 3.掌握依据ASM图设计小型数字系统的方法 4.掌握 ...
- 基于fpga的交通灯的设计
课题一:交通灯控制设计 1.课程设计的目的与要求 1.1目的 以FPGA为核心,设计一个交通灯控制器,每个路口都有红.黄.绿三盏灯.该交通信号灯控制器由一条车道A和一条车道B汇合成十字路口,在每个入口 ...
- FPGA智能交通灯控制器系统系统设计
1系统总体设计 把由5OM的有源晶振产生的现场可编程逻辑器件FPGA 的系统时钟输入到分频模块,经分频模块分频产生频率为1Hz的时钟脉冲,作为控制定时模块.控制模块.紧急模块.计数模块的时钟信号,然后 ...
最新文章
- iOS7以下设备获取mac地址
- C++文件流:myfstream,fstream,文件读写,随机文件读写【C++文件流】(59)
- 自定义sort函数第三个参数的规则
- SAP UI5 setModel of scFld Controller
- spring 调用python_Spring http服务远程调用实现过程解析
- 012.Adding a New Field --【添加一个新字段】
- ciclop读音,购机必备,15种 3D扫描 设备 优缺点汇总
- 如何理解指向指针的指针?
- 【HAVENT原创】让 axios 支持 jsonp
- python模拟登陆GDUFE教学一体化平台
- 微信小程序实现页面按钮分享,右上角三个点分享禁用分享
- java原始人赛车,原始人赛车
- 网站上传服务器浏览器打不开,网站发布或自己上传程序后,网站打不开的原因有哪些?...
- 云台山风景美如画,四大网红打卡景点等你来!
- 如何被猎头猎杀:猎头慕名而来的绝招
- 数学计算机游戏攻略,孩子们的游戏学习基本的数学
- java组件叠加显示,如何让上层的组件一直在上层显示
- 数据可视化之汽车销量,截止到2022年目前中国汽车保有量是3.02亿辆
- android 局部tab页,安卓TabLayout+ViewPager实现切页
- 作为Gatekeeper,请守好交付质量关口(Quality Gate)
热门文章
- 用于Spring应用程序的Gradle原型
- 使用Java和Scala将Play Framework 2应用程序部署到Openshift
- zsh 主题的下载和安装
- 前端 JS 如何在一个页面中局部加载其它页面的数据
- QPW 用户签署协议日志表(tf_user_agreement_log)
- MySQL JDBC URL各参数详解
- 使用IDEA的Spring Initializr创建SpringBoot工程
- axure元件库 文件上传_手把手教你打造一套属于产品经理自己的元件库
- shell开启飞行模式_今天才知道,原来手机的飞行模式用处那么多,看完涨知识了...
- 正则表达式实战---爬取多张图片