【Verilog HDL实践】状态机:8路彩灯控制程序

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

【Verilog HDL实践】8路彩灯控制程序

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

四、设计一个8路彩灯控制程序,要求彩灯重复显示以下6种演示花型,在演示过程中,只有当一种花型演示完毕才能转向其他演示花型。
(1)8路彩灯同时亮灭;
(2)从左至右逐个亮(每次只有1路亮);
(3)8路彩灯每次间隔1路灯亮,1路灯灭,且亮灭相间,交替亮灭。

序列检测分析

使用状态机思想
共3种状态:
没有输入,当前状态演示完毕直接进入下一个状态即可。

代码展示
/*
模块功能:
	四、设计一个8路彩灯控制程序,要求彩灯重复显示以下6种演示花型,在演示过程中,只有当一种花型演示完毕才能转向其他演示花型。
		(1)8路彩灯同时亮灭;
		(2)从左至右逐个亮(每次只有1路亮);
		(3)8路彩灯每次间隔1路灯亮,1路灯灭,且亮灭相间,交替亮灭。
实现方法:
	状态机:共3种状态,分别对应3种演示花型
	以一定周期去切换状态。
	考虑到第二种情况最少需要8个时钟周期,我们以8个时钟周期为一个大周期。
*/

module LED_control8(clk, areset, led);
	input clk;
	input areset;
	output reg[7:0] led;
	
	parameter[31:0] cycle = 32'd12500000;
	reg[31:0] delay_counter;
	reg delay_flag = 1'b0;

	parameter style_one=2'b01, style_two=2'b10, style_three=2'b11;
	parameter duration_style = 4'b1000; //每个演示样式耗费8个时间周期 0.8s
	reg[3:0] duration_style_counter=4'b0000; //记录当前处于8周期中的哪个周期
	
	reg[1:0] current_state=style_one, next_state=style_one;
	
	reg[7:0] style_one_output=8'b0;
	reg[7:0] style_two_output=8'b1;
	reg[7:0] style_three_output=8'b01010101;
	
	always@(posedge clk)begin
		delay_counter <= delay_counter + 1'b1;
		current_state <= next_state;
		if(delay_counter >= cycle-1)begin
			delay_flag <= ~delay_flag;
			delay_counter <= 1'b0;
		end		
	end
	
	//各状态动作
	always@(posedge delay_flag) begin
		case(current_state)
			style_one:begin
				style_one_output<=~style_one_output;
				led <= style_one_output;
				duration_style_counter <= duration_style_counter + 1'b1;
				if(duration_style_counter >= duration_style) begin
					duration_style_counter <= 0;	
					next_state <= style_two;
				end
			end
			style_two:begin
				style_two_output<={style_two_output[6:0], style_two_output[7]};
				led <= style_two_output;
				duration_style_counter <= duration_style_counter+1'b1;
				if(duration_style_counter >= duration_style) begin
					duration_style_counter <= 0;	
					next_state <= style_three;
				end
			end
			style_three:begin
				style_three_output<=~style_three_output;
				led <= style_three_output;
				duration_style_counter <= duration_style_counter + 1'b1;
				if(duration_style_counter >= duration_style) begin
					duration_style_counter <= 0;	
					next_state <= style_one;
				end
			end
		endcase
	end
	
endmodule

代码流程比较简单,先引入一个500ms的定时器作为样式内的循环周期,如状态2需要从左至右逐个亮(共8路),故每次切换耗时500ms;同时规定一个样式最多消耗8个周期,即状态切换需要4秒。按顺序切换即可。

时序测试

没做时序测试,烧入到开发板效果与预期一致。文章来源地址https://www.toymoban.com/news/detail-751812.html

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

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

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

相关文章

  • 物联网实践教程(终章):微信小程序结合OneNET平台MQTT实现51/STM32单片机智能控制与温度等数据实时显示【微信小程序篇】

    本项目教程总共分为四节 1.创建OneNET新版MQTT设备:为微信小程序与单片机通信打基础(微信小程序通信单片机前置任务) 2.ESP8266-01s入门:烧录AT固件与OneNET MQTT通信教程包含MQTT.fx1.7.1教程(微信小程序通信单片机前置任务) 3.物联网实践教程:微信小程序结合OneNET平台MQTT实

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

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

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

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

    2024年02月12日
    浏览(54)
  • 利用Verilog HDL实现序列检测器,附上仿真程序。

    序列检测器的逻辑功能就是将一个指定的比特序列从一串较长的比特流中识别出来。 例如:针对一个较长的比特流010010010011110101010…,我们希望能将比特序列为“10010”的序列检测出来,并且每次检测到10010就将输出置“1”. 注意:如序列”100100100…\\\",根据以上的介绍,会在

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

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

    2024年04月16日
    浏览(62)
  • 【控制】滑模控制,小例子,有程序有结果图

    目录 滑模控制的一点笔记和看法 1 【控制】滑动模型控制(Sliding Mode Control) 2 【控制】滑模控制,小例子,有程序有结果图 3 【控制】滑模控制,滑模面的选择 假设存在一个被控系统如下 x ˙ 1 = x 2 x ˙ 2 = x 3 x ˙ 3 = x 1 + x 2 x 3 + u (1) begin{aligned} dot{x}_1 = x_2 \\\\ dot{x}_2 = x_3

    2023年04月20日
    浏览(36)
  • Unity控制程序退出

      大家好,我是阿赵。   最近把公司的游戏发布到各种PC的游戏大厅,遇到了挺多奇怪的需求。之前介绍了一些Unity发布PC端控制窗口最大最小化、修改exe信息等问题,这次来探讨一下退出游戏的问题。   某游戏大厅要求,运行游戏后,如果玩家没有创建角色进入游戏

    2024年02月09日
    浏览(37)
  • Python程序设计基础:程序流程控制(一)

    程序流程的基本结构主要有三种,顺序结构、选择结构和循环结构,在顺序结构中是按照语句的位置一句一句顺序执行,每条语句有且只会执行一次,而在选择结构和循环结构中,通常是需要根据条件表达式的值来确定下一步的执行流程。 条件表达中一般使用两种运算符:关

    2024年02月11日
    浏览(47)
  • Java的程序逻辑控制

    导读: 本篇是JAVA基础系列,主要总结了程序的逻辑结构,也就是顺序结构、分支结构和循环结构。这三种结构在日常代码编写过程中是离不开的。而一个程序猿是否是老手,从逻辑结构的运用上就可以直观的看出来。 Java的基本结构就是顺序结构,除非特别指明,否则就安装

    2024年03月23日
    浏览(46)
  • #微信小程序(按键控制)

    1.IDE:微信开发者工具 2.实验:微信小程序设计两个按钮,对onenet平台数据流(旧版)来进行http post上传,下位机再http get得到控制信息 3.记录 (1)bind-tap(绑定函数) (2)关键代码 (3)函数绑定 4.代码 index.js

    2024年03月10日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包