【Verilog HDL实践】汽车尾灯控制电路实现

这篇具有很好参考价值的文章主要介绍了【Verilog HDL实践】汽车尾灯控制电路实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Verilog HDL实践】汽车尾灯控制电路实现

使用芯片:Altera Cyclone® IV EP4CE22F17C6N FPGA
开发工具:Quartus Ⅱ
开发项目:

设计一个汽车尾灯控制电路。已知汽车左右两侧各有3个尾灯,采用K0、K1进行状态控制,要求尾灯按如下规则亮灭。
(1)汽车沿直线行驶时,两侧的指示灯全灭; (KEY=2’b00)
(2)右转弯时,左侧的指示灯全灭,右侧的指示灯按000,100,010,001,000循环顺序点亮;(KEY=2’b01)
(3)左转弯时,右侧的指示灯全灭,左侧的指示灯按与右侧同样的循环顺序点亮;(KEY=2’b10)
(4)如果在直行时刹车,两侧的指示灯全亮;如果在转弯时刹车,转弯这一侧的指示灯按上述的循环顺序点亮,另一侧的指示灯全亮。(KEY=2’b11)

序列检测分析

使用状态机思想
共6种状态:

当前状态 当前输入 下一时刻输出
直行 00 直行
直行 10 左转
直行 01 右转
直行 11 直行时刹车
直行时刹车 00 直行
直行时刹车 10 左转
直行时刹车 01 右转
直行时刹车 11 保持
其他情况类似
代码展示
/*
模块功能:
	设计一个汽车尾灯控制电路。已知汽车左右两侧各有3个尾灯,采用K0、K1进行状态控制,要求尾灯按如下规则亮灭。
		(1)汽车沿直线行驶时,两侧的指示灯全灭; (KEY=2’b00)
		(2)右转弯时,左侧的指示灯全灭,右侧的指示灯按000,100,010,001,000循环顺序点亮;(KEY=2’b01)
		(3)左转弯时,右侧的指示灯全灭,左侧的指示灯按与右侧同样的循环顺序点亮;(KEY=2’b10)
		(4)如果在直行时刹车,两侧的指示灯全亮;如果在转弯时刹车,转弯这一侧的指示灯按上述的循环顺序点亮,另一侧的指示灯全亮。(KEY=2’b11)
实现方法:
	状态机:共六种状态:直行、左转、右转、直行刹车、左转刹车、右转刹车
	以一定周期去检测按键情况,实现状态切换
*/

module Transport_led(clk, k0, k1, led);
	input clk, k0, k1;
	output reg[7:0] led;
	
	parameter state_s=3'b000, state_l=3'b001, state_r=3'b010, state_ss=3'b011, state_ls=3'b100, state_rs=3'b101;//状态定义
	parameter[31:0] duration = 32'd12500000; //timer:500ms
	
	reg[2:0] current_state = state_s, next_state = state_s;
	reg[31:0] counter = 32'b0;
	reg delay_flag = 1'b0;
	reg delay_flag2 = 1'b0;
	
	reg[2:0] left_cycle = 3'b001;
	reg[2:0] right_cycle = 3'b100;

	//状态切换
	always@(posedge clk) begin
		current_state <= next_state;
		counter <= counter + 1'b1;
		if(counter >= duration-1) begin
			counter <= 0;
			delay_flag <= ~delay_flag;
			delay_flag2 <= ~delay_flag2;
		end
	end
	
	//下个状态变换
	always@(posedge delay_flag) begin
		case(current_state)
			state_s: begin
				if(~(k0|k1))
					next_state <= state_ss;
				else if(~k0)
					next_state <= state_l;
				else if(~k1)
					next_state <= state_r;
			end
			state_l: begin
				case({k1,k0})
					2'b00: next_state <= state_ls;
					2'b01: next_state <= state_r;
					2'b10: next_state <= state_l;
					2'b11: next_state <= state_s;
				endcase
				/*if(~(k0|k1))
					next_state <= state_ls;
				else if(~k1)
					next_state <= state_r;
				else if(k1&k0)
					next_state <= state_s;
				else
					next_state <= state_l;*/
			end
			state_r: begin
				case({k1,k0})
					2'b00: next_state <= state_rs;
					2'b01: next_state <= state_r;
					2'b10: next_state <= state_l;
					2'b11: next_state <= state_s;
				endcase
				/*if(~(k0|k1))
					next_state <= state_rs;
				else if(~k0)
					next_state <= state_l;
				else if(k1&k0)
					next_state <= state_s;
				else
					next_state <= state_r;*/
			end
			state_ss: begin
				if(k1&k0)
					next_state <= state_s;
				else if((k0==0) & (k1==0))
					next_state <= state_ss;
				else if(~k1)
					next_state <= state_r;
				else if(~k0)
					next_state <= state_l;
			end
			state_ls: begin
				if(k1&k0)
					next_state <= state_s;
				else if(~(k0|k1))
					next_state <= state_ls;
				else if(~k1)
					next_state <= state_r;
				else if(~k0)
					next_state <= state_l;
			end
			state_rs: begin
				if(k1&k0)
					next_state <= state_s;
				else if(~(k0|k1))
					next_state <= state_rs;
				else if(~k1)
					next_state <= state_r;
				else if(~k0)
					next_state <= state_l;
			end
		endcase
	end
	
	always@(posedge delay_flag2) begin
		case(current_state)
			state_s: begin
				led <= 8'b0;
			end
			state_l: begin
				led <= {left_cycle, 5'b0};
				left_cycle <= {left_cycle[1:0], left_cycle[2]};
			end
			state_r: begin
				led <= {5'b0, right_cycle};
				right_cycle <= {right_cycle[0], right_cycle[2:1]};
			end
			state_ss: begin
				led <= 8'b11100111;
			end
			state_ls: begin
				led <= {left_cycle, 5'b00111};
				left_cycle <= {left_cycle[1:0], left_cycle[2]};
			end
			state_rs: begin
				led <= {5'b11100, right_cycle};
				right_cycle <= {right_cycle[0], right_cycle[2:1]};
			end
		endcase
	end
endmodule

代码中引入一个500ms的定时器去定时检测按键k0、k1的电平状态,加以当前状态去判断下一时刻状态。

时序测试

verilog做一个车灯控制系统,Verilog HDL,fpga开发,开发语言
无论是时序测试还是烧入到开发板测试,结果都与预期情况一致。文章来源地址https://www.toymoban.com/news/detail-760436.html

到了这里,关于【Verilog HDL实践】汽车尾灯控制电路实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 数电课设汽车尾灯控制电路

    数电课设汽车尾灯控制电路

    1.设计任务与指标 假设汽车尾部左右两侧各有3个指示灯(用发光二极管模拟),设计并制作一个汽车尾 灯控制电路,要求如下。 (1)汽车正常运行时指示灯全部熄灭。 (2)右转弯时,右侧3个指示灯按右循环顺序点亮,左侧指示灯熄灭。 (3)左转弯时,左侧3个指示灯按左循环顺序点亮

    2024年02月09日
    浏览(8)
  • 数字电路课程设计汽车尾灯控制器

    数字电路课程设计汽车尾灯控制器

    1、汽车尾灯控制器内容 基本设计要求: 设计系统模拟汽车尾灯两侧信号,左右各有3个 指示灯(用发光二极管模拟),具有如下模式: (1)汽车正向行使时,指示灯全部处于熄灭状态。 (2)汽车右转弯行驶时,右侧的3个指示灯按右循环顺序点亮, (3)汽车左转弯行驶时

    2024年02月06日
    浏览(9)
  • 【FPGA】组合逻辑电路三种建模方式(Verilog HDL 门级建模、Verilog HDL 数据流建模、组合电路行为级建模)

    【FPGA】组合逻辑电路三种建模方式(Verilog HDL 门级建模、Verilog HDL 数据流建模、组合电路行为级建模)

    目录   Verilog HDL 门级建模 各种逻辑门的表示和使用 门级建模书写实例 Verilog HDL 数据流建模 数据流建模 数据流建模书写实例 组合电路行为级建模 always语句 条件语句 多路分支语句 循环语句 for while repeat forever 行为级建模示例   可以理解为对逻辑电路中各个门依次进行描述

    2024年04月13日
    浏览(21)
  • 【【Verilog典型电路设计之log函数的Verilog HDL设计】】

    【【Verilog典型电路设计之log函数的Verilog HDL设计】】

    log函数是一种典型的单目计算函数,与其相应的还有指数函数、三角函数等。对于单目计算函数的硬件加速器设计一般两种简单方法:一种是查找表的方式;一种是使用泰勒级数展开成多项式进行近似计算。这两种方式在设计方法和精确度方面有很大的不同。查找表方式是通过

    2024年02月11日
    浏览(12)
  • 数字集成电路设计(六、Verilog HDL高级程序设计举例)

    数字集成电路设计(六、Verilog HDL高级程序设计举例)

    在我们的数电,集成电路设计里面,一定是层次化设计的 在一个手机芯片的一个部分,写的硬件描述语言的层次都能达到20几层,对于这样的设计,我i们就能想到采用底层的设计,中间层的设计和顶层的设计。对于小规模电路,极小规模电路,通常想的是先有模块然后去搭一

    2024年04月16日
    浏览(39)
  • 数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)

    数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)

    所有的是时序逻辑电路都可以拆成组合逻辑电路+存储 (关于组合逻辑电路的理解可以参考我数电的博客https://blog.csdn.net/y_u_yu_yu_/article/details/127592466) 可以分成两个部分,组合逻辑电路和存储电路。组合逻辑电路的输入一个是x信号一个是当前的状态,这两个信号决定了组合

    2024年02月06日
    浏览(54)
  • [蔡觉平老师主讲] Verilog HDL数字集成电路设计原理与应用

    [蔡觉平老师主讲] Verilog HDL数字集成电路设计原理与应用

    硬件描述语言,Hardware Description Language (HDL)。利用HDL,可以根据电路结构的特点,采用层次化的设计结构,将抽象的逻辑功能用电路的方式进行实现。之后通过EDA(电子设计自动化)工具,可以将HDL程序综合成网表,通过自动布线工具把网表转换为具体电路布线结构,用于

    2024年04月12日
    浏览(37)
  • 【【典型电路设计之片内存储器的设计之RAM的Verilog HDL描述一】】

    【【典型电路设计之片内存储器的设计之RAM的Verilog HDL描述一】】

    RAM是随机存储器,存储单元的内容可按需随意取出或存入。这种存储器在断电后将丢失所有数据,一般用来存储一些短时间内使用的程序和数据。 其内部结构如下图所示: 例:用Verilog HDL 设计深度为8,位宽为8的单端口RAM。 单口RAM,只有一套地址总线,读和写操作是分开的

    2024年02月12日
    浏览(7)
  • 基于Verilog HDL的按键控制流水灯即打地鼠小游戏的设计

    (1)用4个按键key0-key3对应控制4个小灯LED0-LED3;用触摸按键进行模式切换;用一位数码管显示当前控制模式,两位数码管显示当前得分。 (2)触摸按键没有按下时处于模式1,按下后处于模式2。用模式数码管显示当前的控制模式。 (3)模式1工作方式:当点亮LED0时,若按下

    2024年02月12日
    浏览(7)
  • FPGA/Verilog HDL/AC620零基础入门学习——第一个项目按键控制LED

    FPGA/Verilog HDL/AC620零基础入门学习——第一个项目按键控制LED

    最近要考试了,所以我赶紧补习FPGA,我们用的是小梅哥的AC620开发板,软件是Quartus。推荐看这个视频教程:零基础轻松学习FPGA,小梅哥FPGA设计思想与验证方法视频教程 用按键控制LED灯的亮灭就是一个二选一多路器,两个IO,a、b,可以是高电平,也可以是低电平。 输入按键

    2024年02月05日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包