FPGA(一):用Verilog实现流水灯

大三的冬季学期选了工程教育中级,上的内容是fpga相关的东西,目前课程已经上了一大半,进入到大作业项目阶段,上的知识点不是太多,主要还是普及教育为主,很多东西还是需要自己课下花时间认真地自学。写过几个认为还可以拿出来的例子,希望有时间可以一一分享出来供大家参考借鉴,如有错误还请多多指正。

这次主要选择流水灯作为自己在FPGA方面的第一篇博客,很多人学习单片机、stm32抑或是FPGA都会有点灯相关的实验,这个流水灯实现的代码也比较简单。

说明:这个实验我是在学校发的通信原理课程项目板子上写的,板子的型号是MAX10 —10M50DAF484C7G,不同的板子在接口上会有一定的区别,还请注意。

流水灯实现代码

module flow_led(
	input clk_50,
	input rst_n,
	output reg [9:0]led
);
reg [24:0]counter;

// 初始化
initial
	begin
		led <= 10'b1111111111;
		counter <= 25'd0;
	end

// 计数	
always @ (posedge clk_50 or negedge rst_n)
begin
	if(!rst_n) begin
		counter <= 25'd0;
	end else if(counter == 25'd24999999) begin // 0.5秒换灯
		counter <= 25'd0;
	end else begin
		counter <= counter + 25'd1;
	end
end

// 移位
always @ (posedge clk_50 or negedge rst_n)
begin
	if(!rst_n) begin
		led <= 10'b1000000000;  // 初始亮一个灯,便于循环展示
	end else if(counter == 25'd24999999) begin  // o.5秒换灯
		led[9:0] <= {led[8:0],led[9]};  // 拼接移位
	end else begin
		led <= led;
	end
end
endmodule

编译界面

FPGA(一):用Verilog实现流水灯_第1张图片注:当只用检查语法基本问题的时候不需要全部编译,可以只Compile那个Analysis & Synthesis,因为全部编译会特别耗费时间,特别是对于更高版本的Quartus II软件,目前这个代码我是在Quartus Prime Standard Edition 16.0版本上编译实现的。全部编译会让人等待个15秒-20秒左右的时间,确实有点烦呀。

引脚配置

具体的引脚配置可以参考每个开发板的引脚说明,这里不再详细叙说。请看下图:
FPGA(一):用Verilog实现流水灯_第2张图片注:如果是第一次配置引脚,退出后需要重新编译才可以把代码和板子接口对应上。

烧录进开发板

FPGA(一):用Verilog实现流水灯_第3张图片
注:看到Progress为"100%(Successful)"说明烧录成功,此时就可以看到板子上小灯像流水一样循环点亮了。(具体下载方法不再说明)

你可能感兴趣的:(FPGA)