FPGA-DE2-115-实验一-亮度可调流水灯

这篇具有很好参考价值的文章主要介绍了FPGA-DE2-115-实验一-亮度可调流水灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:
本文主要介绍了集成电路EDA这门课程的相关实验及代码。使用的软件是Quartus Ⅱ,该实验使用fpga芯片为cyclone IV EP4CE115F29C7。

(一)实验目的

(1)熟悉流水灯的工作原理;
(2)了解设计中的优化方案;
(3)进一步掌握PWM信号的设计;

(二)设计要求

利用FPGA板及4个LED发光二极管,设计一个亮度可调流水灯程序:
其中流水灯亮度使用PWM驱动,并且可以使用按键切换不同亮度。

(三)实验原理

流水灯的实质是FPGA板各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,至于亮度可调则是使用PWM产生一定占空比的方波,实现输出电压变化,并可以通过调节占空比的大小改变输出电压值即LED灯的亮度。
实验中使用了单片机的P1端口和P4端口,对4个LED灯进行控制,要实现逐个亮灯即将各端口逐一置零,中间使用延时函数调用隔开各灯的亮灭。
本次实验先令四个灯全亮,延时500ms后再令四个灯全灭,之后点亮P4.7,P1.7两个灯,延时500ms后熄灭,之后依次点亮P4.7,P4.6,P1.7,P1.6,(一个灯点亮500ms后熄灭,第二个灯再点亮),然后反向,按照P1.6,P1.7,P4.6,P4.7顺序点亮一遍,如此往复循环。

(四)实验设备

(1)DE2-115型号FPGA板
(2)PC电脑

(五)实验结果

仿真图:
在quartusⅱ利用锁相环实现亮度70%的灯,集成电路EDA,fpga开发,fpga

PWM波形使用cnt_1ms与tim变量大小来产生,当cnt_1ms<=tim时低电平否则高电平,图中可以看到,初始值tim=0,此时当cnt_1ms>tim时第一个灯亮,按下一次按键后,time自加8,此时当cnt_1ms<=8时,灯灭,否则第一个灯亮。
在quartusⅱ利用锁相环实现亮度70%的灯,集成电路EDA,fpga开发,fpga

如上图所示,可以看到当cnt计数达到999时,由第二个灯亮变成第三个灯亮,证明完成了灯的流水操作。
实物图:
初始流水灯:
在quartusⅱ利用锁相环实现亮度70%的灯,集成电路EDA,fpga开发,fpga

按下按键调节亮度后:
在quartusⅱ利用锁相环实现亮度70%的灯,集成电路EDA,fpga开发,fpga

(六)结果分析

本次实验为了完成可调节亮度的流水灯的设计,首先产生0.5s脉冲使得每0.5s更改亮灯的位置,之后通过按键更改PWM产生波形中的占空比,从而调节灯的亮度。

代码:
1.顶层模块water_led

//4个led_out_reg灯,依次点亮,间隔0.5s   50Mhz-20ns	25000000次-25位
module	water_led
(
	input	wire				sys_clk     ,
	input	wire				sys_rst_n   ,
    input   wire                key1        ,
	output	reg	[3:0]		    led_out      	
);

parameter	CNT_MAX=25'd24_999_999  ;   //0.5s
parameter	CNT_1US_MAX=6'd49       ;	//1个时钟20ns,50个即1us
parameter	CNT_1MS_MAX=10'd999     ;	//计满1000个即1ms

wire            key1_flag;
reg			    cnt_flag;
reg  [9:0]      tim;
reg [24:0]	    cnt;
reg	[5:0]		cnt_1us;
reg	[9:0]		cnt_1ms;
reg	[9:0]		cnt_1s;
reg [3:0]       i;
//0.5s间隔闪烁
always @(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		cnt<=25'd0;
	else if(cnt==CNT_MAX)
		cnt<=25'd0;
	else
		cnt<=cnt+25'd1;
//计数满0.5s标志位
always @(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		cnt_flag<=1'd0;
	else if(cnt==CNT_MAX-1)
		cnt_flag<=1'd1;
	else
		cnt_flag<=1'd0;
        
//亮度变量调整
always @(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
        tim <= 10'd0;
    else if(tim >= 10'd999)
        tim <= 10'd0;
    else if(key1_flag)
        tim <= tim + 10'd80;
    else
        tim <= tim;

//cnt_1us
always@(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		cnt_1us<=6'd0;
	else if(cnt_1us==CNT_1US_MAX)
		cnt_1us<=6'd0;
	else
		cnt_1us<=cnt_1us+6'd1;
//cnt_1ms
always@(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		cnt_1ms<=10'd0;
	else if((cnt_1ms==CNT_1MS_MAX)&&(cnt_1us==CNT_1US_MAX))
		cnt_1ms<=10'd0;
	else if(cnt_1us==CNT_1US_MAX)
		cnt_1ms<=cnt_1ms+10'd1;
	else
		cnt_1ms<=cnt_1ms;
//每0.5s,i自加1,即更改亮灯位置
always @(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
        i <= 3'd0;
    else if((cnt_flag == 1'd1)&&(i == 3))
        i <= 3'd0;
    else if(cnt_flag == 1'd1)
        i <= i + 1'd1;
    else
        i <= i;      

//输出控制		
always @(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		led_out <= 4'b0001;
    else    
        begin
            if(cnt_1ms<=tim)  
                led_out <= 4'b0000;  
            else
                case(i)
                    3'd0: led_out <= 4'b0001;   
                    3'd1: led_out <= 4'b0010;      
                    3'd2: led_out <= 4'b0100;       
                    3'd3: led_out <= 4'b1000;         
                    default: led_out <= 4'b0000;
                endcase
        end   
//按键滤波模块,按下按键后模块输出一个时钟周期的高脉冲
key_filiter key_filiter_inst
(
	.sys_clk   (sys_clk  )  ,
	.sys_rst_n (sys_rst_n)  ,
	.key_in    (key1      )  ,
	.key_flag  (key1_flag)
);
        
endmodule

2.按键模块key_filiter文章来源地址https://www.toymoban.com/news/detail-762749.html

//按键滤波器,按下按钮后即低电平输入,经过该模块输出一个系统时钟周期的高脉冲
module	key_filiter
(
	input		sys_clk     ,
	input		sys_rst_n   ,
	input		key_in      ,
	output	reg	key_flag
);

reg	[19:0]	cnt_20ms;
parameter	CNT_MAX=20'd999999;

always@(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		cnt_20ms<=20'd0;
	else	if(key_in)
		cnt_20ms<=20'd0;
	else	if(cnt_20ms==CNT_MAX)	//最大值保持
		cnt_20ms<=CNT_MAX;
	else
		cnt_20ms<=cnt_20ms+1'd1;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		key_flag<=1'b0;
	else	if(cnt_20ms==CNT_MAX-20'd1)
		key_flag<=1'b1;
	else
		key_flag<=1'b0;
		
endmodule

到了这里,关于FPGA-DE2-115-实验一-亮度可调流水灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA综合设计实验:基于PWM脉宽调制的呼吸流水灯设计

    目录 一、引言 二、项目准备 1.项目预期目标 2.项目原理及总体实现思路

    2024年02月13日
    浏览(51)
  • 【FPGA】VGA显示文字、彩条、图片——基于DE2-115

    **VGA(Video Graphics Array)**视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输出数据的专用接口。VGA接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号

    2024年02月02日
    浏览(32)
  • 流水灯——FPGA

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 要求: 每隔0.2s循环亮起LED灯 从LED0开始亮起到LED3又回到LED0循环往复。 流水灯 这里使用了拼接符对LED进行处理加上一个0.2s的计时器进行控制即可。 led流水灯

    2024年02月16日
    浏览(34)
  • fpga--流水灯

    fpga流水灯的设计 思路:外部时钟频率50mhz,若要实现每隔0.5s闪烁一次,则使用内部计数器计数到24999999拉高一个周期电平,当电平被拉高的时候,进行LED灯电平的设置,每次检测到高电平,就进行一位LED灯的设置,进行循环设置,就形成了流水灯的设计。 测试代码  

    2024年02月15日
    浏览(30)
  • FPGA学习——点亮流水灯

    在FPGA开发板中,一般板载LED默认高电平点亮,因此我们只需要将想要亮起的LED赋值为1即可。 本入门实验要求为每隔1s开发板上的LED轮流亮起,因此我们需要一个1s的计数器, 由于开发板晶振时钟为50MHz,因此我们计数50_000_000即为1s。 注意:为了后续方便仿真所以这里MAX设置

    2024年02月13日
    浏览(38)
  • ARM实验5-流水灯仿真实验

    一、实验名称:流水灯仿真实验 二、实验目的: 掌握ARM处理器的输入输出接口。 掌握通过MDK提供的仿真功能,实现系统的仿真运行。 通过该编程实验,进一步巩固和强化学生ARM汇编编程的能,ARM应用程序框架,培养学生实际应用的能力。 三、实验内容: 按下面电路图,编

    2024年02月15日
    浏览(26)
  • 按键控制流水灯方向——FPGA

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 要求: 按键1按下,流水灯从右开始向左开始流动,按键2按下,流水灯从左开始向右开始流动,按键3按下LED每隔1s进行亮灭,按键4按下LED常亮。 “自锁”是指开关能通过锁定机构保持某种状态(通或断),“轻触”是说明操

    2024年02月07日
    浏览(36)
  • 实验 6 流水灯设计

    6.1 实验目的 编 写 Verilog HDL 代 码 驱 动 开 发 板 上 10 颗 LED 实现流水灯效果 6.2 实 验 仪 器 与 器 材 1. EDA 开发软件 一 套 2.微机 一 台 3.实验开发系统 一 台 4.打印机 一 台 5.其他器件与材料 若 干 6.3 实 验 说 明 1、 10 位的流水灯,从左到右流水,每隔 500ms 流动一下

    2024年01月16日
    浏览(32)
  • 基于FPGA的3位十进制密码锁VHDL代码Quartus DE2-115开发板

    名称:基于FPGA的3位十进制密码锁VHDL代码Quartus  DE2-115开发板(文末获取) 软件:Quartus 语言:VHDL 代码功能: 借助EDA工具和设计方法,学习硬件描述语言VHDL用编程的方法来设计电路,在QUARTUSⅡ软件环境中,基于EDA实验室的开发装置DE2-115,其FPGA芯片型号为EP4CE115F29C7,进行电

    2024年03月13日
    浏览(37)
  • SOC FPGA之流水灯设计

            Altera Soc EDS开发套件的核心是Altera版ARM Development Studio 5(DS-5)工具包,为SoC器件提供了完整的嵌入式开发环境、FPGA自适应调试和对Altera工具的兼容。 首先下载破解器 然后进入cmd运行,进入到破解器所在文件夹  然后输入patcher.exe --license ?:licensepath 最后显示.dat文件即

    2024年02月14日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包