FPGA入门:led流水灯全流程及代码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

不论是熟悉FPGA开发流程还是熟悉软件的使用,完成LED流水灯任务都是一个不错的任务。 严格来说,第一个任务更多的是知道怎么用,第二个项目才是熟练地使用这些软件和开发。 详细的pdf介绍链接在这里
·链接:https://pan.baidu.com/s/1mRIBvzK4DLr1QkRrAZn0oA?pwd=6t65 
 提取码:6t65 

一、硬件简要介绍

有必要介绍的是ax309的引脚:

4个led对应的FPGA管脚情况:
LED1----------PIN:P4
LED2---------PIN:N5
LED3---------PIN:P5
LED4----------PIN:M6
端口为“1”点亮LED,为“0”熄灭LED

二、软件使用流程及相关代码

1.led_test.v代码

/***************************************************************
* filename : led_test.v
*****************************************************************/

`timescale 1ns/1ps

module led_test(		
clk,   //开发板时钟
rst_n,  //开发板复位
led    //输出led,控制开发板上4个led
);

/****************************************************************
*      port declarations
********************************************************************/

input clk;
input rst_n;
output [3:0]led;

//寄存器定义
reg [31:0] timer;
reg [3:0] led;

//计数循环


always@(posedge clk or negedge rst_n )
	begin
		if(~rst_n)
			timer<=0;
		else if(timer==32'd199_999_999)//开发板晶振是50mhz,4秒计数减去1个clk是199_999_999
			timer<=0;
		else 
			timer<=timer+1'b1;//计数器+1
	end
	
/**********************************************************************************
*  led ctrl
********************************************************************************/
always@(posedge clk or negedge rst_n )
	begin
		if(~rst_n)
			led<=4'b1111;//led灯全高,4个都亮
		else if(timer==32'd49_999_999)
		led<=4'b1110;
		else if(timer==32'd99_999_999)
		led<=4'b1101;
		else if(timer==32'd149_999_999)
		led<=4'b1011;
		else if(timer== 32'd199_999_999)
		led<=4'b0111;
	end
	
	endmodule

2.vtf_led_test.v代码(tb)

代码如下

module vtf_led_test;
		//input
		reg clk;
		reg rst_n;
	

	//output
		wire [3:0] led;
		
		//例化单元
		
		led_test uut(
			.clk(clk),
			.rst_n(rst_n),
			.led(led)
			);
			
			initial 
				begin
					clk=0;
					rst_n=0;
					
					#100;
					rst_n=1;
					
					#2000;
					$stop;
				end
				
		always #10 clk = ~clk; //产生50mhz的时钟源
		
endmodule

3.UCF管脚约束

##
NET clk LOC = T8 | TNM_NET = sys_clk_pin | IOSTANDARD="LVCMOS33";
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz;
##

##
NET rst_n                           LOC=L3 | IOSTANDARD = "LVCMOS33";##Reset Button
##

###########LED PIN define##########################
NET led<0>                             LOC = P4 | IOSTANDARD = "LVCMOS33";  ##LED1
NET led<1>                             LOC = N5 | IOSTANDARD = "LVCMOS33";  ##LED2
NET led<2>                             LOC = P5 | IOSTANDARD = "LVCMOS33";  ##LED3
NET led<3>                             LOC = M6 | IOSTANDARD = "LVCMOS33";  ##LED4

特别说明:
ucf文件我在编译的时候遇到了bug
显示如下
在这里插入图片描述
是相关的空格没有添加上。ucf的空格是不能省的,看一下相关行数的空格是否都加全了(“|”两边都是有空格的)

总结

简单总结一下,led流水灯这种项目只会在代码上出问题?
私以为pdf的教程是很详细的,跟着走就不会出问题。如果对verilog的掌握还不能够独立写完整个流水灯的代码,建议可以直接copy。看写好的代码也是一种学习方式?

吐槽一句markdown为什么是使人集中在内容上的文本编辑器——因为他的文本编辑真的不好用——简单,明显。
我想找个全局字体的代码找了半天。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值