【FPGA】用Verilog语言实现呼吸灯实验

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

一、模块框图

【FPGA】用Verilog语言实现呼吸灯实验
包含两个输入信号:系统时钟(sys_clk)以及复位信号(sys_rst_n)。
一个输出信号:led_out

二、大致原理

通过PWN来控制呼吸灯的亮、灭程度
前一周期为:完全熄灭 ——> 完全点亮
后一周期为:完全点亮 ——> 完全熄灭
【FPGA】用Verilog语言实现呼吸灯实验

三、波形图

1、时钟与复位信号

【FPGA】用Verilog语言实现呼吸灯实验

2、计数器

完全熄灭 ——> 完全点亮 、 完全点亮 ——> 完全熄灭 时间均为1s
由板子频率可知,1us需要50个时钟周期,1ms需要1000us,1s则需要1000ms。
【FPGA】用Verilog语言实现呼吸灯实验
将1s分成1000份,每个T为1ms(份数分得越大,呼吸效果越明显)
将每个T分成1000份,每次越变的宽度就增加一小份,即为1us

3、输出信号

当cnt_1ms计数器的值 ≤ cnt_1s计数器的值 led_out为低电平,其余时间为高电平
【FPGA】用Verilog语言实现呼吸灯实验
上半部分为: 完全熄灭 ——> 完全点亮
下半部分为:完全点亮 ——> 完全熄灭 (即led_out取反)

4、使能信号

用于区分led_out是由 完全熄灭 ——> 完全点亮 还是 完全点亮 ——> 完全熄灭。
完全熄灭 ——> 完全点亮:先低后高
【FPGA】用Verilog语言实现呼吸灯实验
完全点亮 ——> 完全熄灭:先高后低
【FPGA】用Verilog语言实现呼吸灯实验

四、代码部分

1、Verilog代码

module breath_led
#(
parameter CNT_1US_MAX = 6'd49,
parameter CNT_1MS_MAX = 10'd999,
parameter CNT_1S_MAX = 10'd999
)
(
input wire sys_clk,
input wire sys_rst_n,

output reg led_out
);

reg [9:0] cnt_1s;
reg [9:0] cnt_1ms;
reg [5:0] cnt_1us;
reg cnt_en;

always@(posedge sys_clk or negedge sys_rst_n)
      if(sys_rst_n == 1'b0)
		   cnt_1us <= 6'd0;
		else if (cnt_1us == CNT_1US_MAX)
		   cnt_1us <= 6'd0;
		else
		   cnt_1us <= cnt_1us + 6'd1;
			
always@(posedge sys_clk or negedge sys_rst_n)
      if(sys_rst_n == 1'b0)
		   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;
			
always@(posedge sys_clk or negedge sys_rst_n)
      if(sys_rst_n == 1'b0)
		   cnt_1s <= 10'd0;
		else if((cnt_1s == CNT_1S_MAX)&&(cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX))
		   cnt_1s <= 10'd0;
		else if ((cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX))
		   cnt_1s <= cnt_1s + 10'd1;
		else
		   cnt_1s <= cnt_1s;
			
always@(posedge sys_clk or negedge sys_rst_n)
      if(sys_rst_n == 1'b0)
		   cnt_en <= 1'b0;
		else if((cnt_1s == CNT_1S_MAX)&&(cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX))
		   cnt_en <= ~cnt_en;
		else
		   cnt_en <= cnt_en;
			
always@(posedge sys_clk or negedge sys_rst_n)
       if(sys_rst_n == 1'b0)
		    led_out <= 1'b1;
		 else if(cnt_1ms <= cnt_1s)
		    led_out <= cnt_en;
		 else
		    led_out <= ~cnt_en;
			 
endmodule

2、tb仿真代码

`timescale 1ns/1ns
module tb_breath_led();
reg sys_clk;
reg sys_rst_n;

wire led_out;

initial
    begin
	    sys_clk = 1'b1;
		 sys_rst_n <= 1'b0;
		 #20
		 sys_rst_n <= 1'b1;
	 end
	 
always #10 sys_clk = ~sys_clk;

breath_led
#(
    .CNT_1US_MAX(6'd4),
	 .CNT_1MS_MAX(10'd9),
	 .CNT_1S_MAX(10'd9)
)
breath_led_inst
(
    .sys_clk(sys_clk),
	 .sys_rst_n(sys_rst_n),
	 
	 .led_out(led_out)
);
endmodule

五、仿真波形

【FPGA】用Verilog语言实现呼吸灯实验
经分析,与开始手动绘制的波形图吻合,结果正确,此处不再上传上版验证结果。文章来源地址https://www.toymoban.com/news/detail-500016.html

到了这里,关于【FPGA】用Verilog语言实现呼吸灯实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ECG信号的特点与噪声 4.2 FPGA在ECG信号处理中的应用 4.3 ECG信号滤波原理 4.4 心率计算原理 4.5 FPGA在ECG信号处理中的优势 5.算法完整程序工程 其RTL结构如下: vivado2019.2          心电图(ECG)是

    2024年02月20日
    浏览(37)
  • m基于FPGA的桶形移位寄存器verilog实现,包含testbench

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1、桶形移位寄存器的基本原理 2.2、桶形移位寄存器的数学模型 2.3、桶形移位寄存器的实现步骤 3.Verilog核心程序 4.完整算法代码文件 本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera 6.6d  Starter Edition 其

    2024年02月04日
    浏览(55)
  • 基于FPGA的二维DCT变换和逆变换verilog实现,包含testbench

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 数据导入到matlab显示图像 vivado2019.2 matlab2022a         离散余弦变换(Discrete Cosine Transform,DCT)是一种广泛应用于图像和信号处理领域的变换技术。在图像处理中,DCT常被用于

    2024年02月21日
    浏览(60)
  • m基于FPGA的8PSK调制解调系统verilog实现,包含testbench测试文件

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 8PSK调制原理 2.2 基于FPGA的8PSK调制解调器设计和实现 3.Verilog核心程序 4.完整算法代码文件获得 vivado仿真结果如下: 借助matlab看8PSK的星座图:         随着通信技术的不断发展,相位调制技术因其高频谱效率和抗干扰能力而广

    2024年02月05日
    浏览(48)
  • m基于FPGA的PPM光学脉位调制解调系统verilog实现,包含testbench

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 PPM调制解调原理 2.2 基于FPGA的PPM系统实现 3.Verilog核心程序 4.完整算法代码文件获得 vivado2019.2仿真结果如下:          基于FPGA的PPM(脉冲位置调制)光学脉位调制解调系统是一个复杂的电子与光电子相结合的通信系统。    

    2024年02月03日
    浏览(52)
  • fpga verilog rs232 发送模块实现

    RS-232是一种串行通信协议,用于在计算机和其他外部设备之间进行数据传输。RS-232定义了电气特性、信号级别、机械特性和传输速率等规范,为串行通信提供了一种标准化的接口。 RS-232通常使用DB9连接器,用于传输和接收数据、控制信号以及地线连接。 但除了235脚其它基本

    2024年02月03日
    浏览(51)
  • m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 Hamming编码过程 2.2 Hamming解码与纠错 2.3 FPGA实现 3.Verilog核心程序 4.完整算法代码文件 本系统进行了Vivado2019.2平台的开发,测试结果如下:        在现代数字通信和存储系统中,错误检测和纠正(Error Detection and Correction, EDC)机

    2024年01月23日
    浏览(37)
  • m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 卷积码编码 2.2 RS码编码 2.3 级联编码 2.4 解码过程 3.Verilog核心程序 4.完整算法代码文件获得 Vivado2019.2仿真结果如下:         级联码是一种通过将两种或多种纠错码结合使用来提高纠错能力的编码方案。在RS+卷积级联编码中,

    2024年02月22日
    浏览(52)
  • m基于FPGA的OFDM系统verilog实现,包括IFFT,FFT,成型滤波以及加CP去CP,包含testbench

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 OFDM原理 2.2 基于FPGA的OFDM系统设计和实现 2.2.1IFFT/FFT模块设计和实现 2.2.2成型滤波模块设计和实现 2.2.3加CP去CP模块设计和实现 3.Verilog核心程序 4.完整算法代码文件获得 vivado2019.2仿真结果如下: CP加入,删除效果: 系统RTL结构图

    2024年02月05日
    浏览(58)
  • FPGA综合设计实验:基于PWM脉宽调制的呼吸流水灯设计

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

    2024年02月13日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包