FPGA流水灯

主程序:

module led_flash(

//端口列表
	Clk50M,
	Rst_n,
	
	led
);
	
//端口定义
	input Clk50M;
	input Rst_n;
	
	output [3:0]led;
	
	reg [24:0]cnt;
	
	parameter CNT_MAX = 25'd24_999_999; //定义参数
	
	always@(posedge Clk50M or negedge Rst_n)
	if(!Rst_n)
		cnt <= 25'd0;	//非阻塞赋值方式
	else if(cnt == CNT_MAX)
		cnt <= 25'd0;
	else
		cnt <= cnt + 1'b1;
	
//	always@(posedge Clk50M or negedge Rst_n)
//	if(!Rst_n)
//		led <= 4'b1111;
//	else if(cnt == CNT_MAX)
//		led <= ~led;
//	else
//		led <= led;

	reg [3:0]led_r;

//	always@(posedge Clk50M or negedge Rst_n)
//	if(!Rst_n)
//		led_r <= 4'b0001;
//	else if(cnt == CNT_MAX)begin
//		if(led_r == 4'b1000)
//			led_r <= 4'b0001;
//		else
//			led_r <= led_r << 1;
//	end
//	else 
//		led_r <= led_r;
		
	always@(posedge Clk50M or negedge Rst_n)
	if(!Rst_n)
		led_r <= 4'b0001;
	else if(cnt == CNT_MAX)
		led_r <= {led_r[2:0],led_r[3]};
	else 
		led_r <= led_r;
		
	assign led = ~led_r;
	

endmodule

测试程序:

`timescale 1ns/1ns
`define clock_period 20

module led_flash_tb;

	reg Clk50M;
	reg Rst_n;
	
	wire [3:0]led;

//	led_flash 
//	#(
//		.CNT_MAX(25'd249)
//	)
//	led_flash0(
//		.Clk50M(Clk50M),
//		.Rst_n(Rst_n),
//		.led(led)
//	);
	
	led_flash led_flash0(
		.Clk50M(Clk50M),
		.Rst_n(Rst_n),
		.led(led)
	);
	
	//生成50M时钟信号
	
	initial Clk50M = 1;
	always #(`clock_period/2) Clk50M = ~Clk50M;

	initial begin
		Rst_n = 0;
		
		#(`clock_period*20 + 1) Rst_n = 1;
		
		#(`clock_period*25000000 +1);
		$stop;
		
	end
	
	
endmodule

引脚定义:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值