手把手教你用lattice ice40up5k核心板做一个简单的RGB炫彩灯
通过Verilog描述几个级联的计数器,生成占空比连续变化的PWM波形,加上简单的逻辑使得板载3色led连续变化颜色。
标签
FPGA
常勃兄
更新2021-06-27
4665

起因:

写这篇文章并不是为了安利这个开发板!主要是为了帮助和我一样入坑的小伙伴,给一起入坑的小伙伴指出误区并提供玩转这个开发板的示例步骤!对本款FPGA开发板不感兴趣的小伙伴很抱歉浪费了你的时间。

对本站的这个开发板眼馋已久,主要是之前就了解过iCE40UP5k这款FPGA,据说是全世界功耗最低的FPGA,看了一下内部资源,竟然还不少,毕竟是核心板,价格相比于Xilinx和Altera的FPGA开发板也算是很良心了(至少我能承担的起つ﹏⊂),等我变强后说不定能拿来开发产品(做白日梦ing),于是心里一横,剁手了。

就是这个开发板

发货有些慢,感觉是拍下了很久才发货的亚子,不过幸好还是在我毕业前收到货了(再晚一个星期就赶不上了),微信群里的Lucia老师还在发货前告诉我订单发货了,激动得要死。

开箱就不发了,用小脚丫FPGA开发板的盒子发的,保护的挺严实。

 

windows下开发环境lattice Radiant的安装:

这里我走了弯路,所以要说一下,首先要注册一个lattice帐号,并在邮箱激活(国际惯例),但激活后你的账户并不能申请license,要过一两天才能申请。这时候申请证书会提示这个

虽然要过两个工作日才能申请license,不过你已经可以下载软件了,下载软件的时候有一行小字

Radiant 2.2.1 Update requires previous installation of Radiant 2.2 64 bit for Windows

 

FlSwicfye-McxILAIjgAFmspvz6u

也就是说,要安装最新的版本,你必须先下载并安装Radiant2.2的旧版本,我个人建议两个都下载,已更新Radiant 3.0,直接下载即可,下载的软件解压后即得到exe安装包。(如果你看到这个文章时版本已经变化请无视),这时可以不要先急着安装,因为没有license,你安装好了也打不开。

两个工作日后,再申请license,不申请license的话,软件是无法启动的。在下载页面点击那个写着Licensing的大蓝色按钮,选择你需要的license。

floating license配置起来比较麻烦,需要配置在服务器上,通过服务器授权允许局域网中的用户使用。

node-locked license更加方便个人使用,只能在唯一的设备上使用,但配置非常方便。我个人推荐使用这种方式。

FnKliE_Fr-3-RJeFB1hJP1cUPzMO

首先按下win+r键,输入cmd,点击确定打开命令提示符,接着输入ipconfig /all,找到你连接网络用的适配器(我用的笔记本自带的无线网卡连接的WiFi,因此是这个)

FjIUA1D1__l40XIEQL6I2s06Dir1

ctrl+C复制物理地址,填到Host NIC (physical address)后面的框框里,然后点击generate license,几秒之后会有一个邮件发送到你注册lattice帐号的邮箱里,邮件的附件就是我们需要的license。

安装好程序并启动后会弹出窗口要我们激活,把邮件发给我们的license复制到安装路径\lscc\radiant\2.2\license下,然后打开就行。

打开软件后可能会提示我们需要更新,但是软件自带的下载很反人类,直接把目标设成-1byte,根本不会自己停止,体验很差,我个人建议用之前下载好的最新版本的exe包手动更新。

三色LED炫彩灯使用的Verilog代码

Radiant里面自带的Example Project无法在这个开发板上正常运行,有一点误导性,我们用Radiant新建一个工程,新建工程太简单了,只要看得懂英语就没问题,这里就不做介绍了,只要记得芯片选择好iCE40UP5k,封装选择sg48就行。

首先我们要新建一个Verilog源文件,在input file那右键点击Add->new file就行,我们新建PWM_loop.v文件。

Fiqgn8sp5CWZ6Z8IgaMBHI75rEtN

首先为了改变LED的亮度,我们需要产生PWM波,并且其占空比需要变化,通过查看开发板的电路图,可以看到RGB LED是共阳极连接的,因此输出低电平时LED才会亮,输出高电平时led会灭,红色LED在39号引脚,绿色LED在40号引脚,蓝色LED在41号引脚。

Fo88Xv55m1UOnwrHEY6h00ZFAw4M

以下是PWM_loop.v文件的内容:

module PWM_loop(
	input clk,
	input rst,
	output reg pwm,
	output reg [1:0] state
	);

	reg[7:0] high;//determine the duty 0~255
	reg[7:0] counter;//0~255
	reg[8:0] times;//loop times of any duty cycle

	always @(posedge clk or negedge rst)
	begin
		if(!rst)
		begin
			counter<=0;
			state<=0;
			high<=0;
			pwm<=0;
		end
		else if(counter==255)//占空比一共分为256级强度
			begin
				counter<=0;
				pwm<=0;

				if(times==182)//每个占空比重复183次,重复完后改变占空比
				begin
					times<=0;

					if(high==255)//占空比一共分为256级强度
					begin
						high<=0;

						if(state==2)//用于循环改变颜色,红->绿,绿->蓝,蓝->红
							state<=0;
						else
							state<=state+1;
					end
					else
					begin
						high<=high+1;
					end
				end
				else
				begin
					times<=times+1;
				end
			end
		else
		begin 
			counter<=counter+1;
			if(counter<=high)
				pwm<=1;//产生PWM波形
			else
				pwm<=0;
		end
	end

endmodule

接着新建LED_top.v顶层文件,通过上面的PWM生成器改变LED的亮度:

module RGB_LED(
	input clk,
	input rst,
	output reg [2:0] rgb_led
	);

	wire pwm_wave;
	wire next;
	wire [1:0] state;

	PWM_loop pwm (
		.clk(clk),
		.rst(rst),
		.pwm(pwm_wave),
		.state(state)
		);

	always @(state)
	begin
		
		case(state)
			2'd0://红色渐弱,绿色渐强
			begin
				rgb_led[0]<=pwm_wave;
				rgb_led[1]<=~pwm_wave;//这样它们的占空比就正好相反
				rgb_led[2]<=1'b1;
			end
			2'd1://绿色渐弱,蓝色渐强
			begin
				rgb_led[0]<=1'b1;
				rgb_led[1]<=pwm_wave;
				rgb_led[2]<=~pwm_wave;
			end
			2'd2://蓝色渐弱,红色渐强
			begin
				rgb_led[0]<=~pwm_wave;
				rgb_led[1]<=1'b1;
				rgb_led[2]<=pwm_wave;
			end
			default:
				rgb_led=3'b111;
		endcase	

	end

endmodule

接着加入综合后约束文件将顶层模块的输入输出约束在FPGA的各个引脚上,新建文件的过程同上,但是新建文件时选择post-synthesis constraint file。我们通过查看这个开发板的电路图,可以看到晶振连接在35号引脚,复位连接到13号引脚,结合之前的LED连接方式,编写pdc文件如下:

ldc_set_location -site 35 [get_ports {clk}]
ldc_set_location -site 13 [get_ports {rst}]
ldc_set_location -site 39 [get_ports {rgb_led[0]}]
ldc_set_location -site 40 [get_ports {rgb_led[1]}]
ldc_set_location -site 41 [get_ports {rgb_led[2]}]

Radiant产生.rbt文件与烧录办法

完成代码及约束文件的编写后,就可以在开发板上实现我们的电路了,不过默认生成的bitstream和程序自带的烧录功能不兼容我们的开发板,我们需要改一下设置

非常感谢微信群里的苏老师为我解答烧录的问题。

FjTwm0gSZn8MKZnfAm5C6iQTsBfXFmCDiAXRAVtHW4kwsE96EKTk23bu

接着直接双击上面的Export File等整个流程变成绿色框框就行。

我们将开发板插上电脑,打开文件管理器,会看到电脑上多了一个叫STEPLink的U盘,不管它,我们打开项目的文件夹,在 项目路径\项目名\impl_1 下会看到一个rbt文件,右键将它发送到STEPLink中会看到开发板上prog 指示灯亮起,文件传输结束后就会熄灭,此时按一下板子上的复位按钮就可以看到RGB led灯的颜色不断切换。

软硬件
元器件
ICE40UP5K
超低功耗FPGA、5280 LUTs, 1024kbit SPRAM,1.2V、48-pin QFN (7 x 7 mm)
附件下载
RGB_led_lattice.rar
团队介绍
还是我,就我一个,哈哈哈哈
团队成员
常勃兄
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号