【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日
    浏览(37)
  • 数字电路课程设计汽车尾灯控制器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月05日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包