本文基于深圳市小眼睛半导体科技有限公司的MES1K开发板进行编程,其器件为紫光同创的PGC1KG-LPG100,使用的开发软件为Pango Design Suite。
Pango Design Suite简称PDS,是一款专用于紫光同创FPGA开发的EDA工具,其主要功能包括设计输入、综合、仿真、实现和位流生成,并能够借助一些常用的第三方软件(主要是逻辑综合工具和仿真工具)完成FPGA全流程开发。Pango Design Suite提供了免Lisence的Lite版本和需要Lisence的Standard版本,Lisence需要向官方提供模板信息来获取。关于软件的安装和使用。可以查看附件中的快速使用手册。
本次实验实现LED流水灯,使用的到的硬件为LED灯,在【每周一练】小眼睛FPGA1K开发板硬件平台中使用的LED硬件和管脚分布进行了介绍。
实现流水灯效果,需要以0.5s的间隔接替闪烁8个LED。
本实验中,流水灯效果表现为一个LED灯表现为与其他LED不同的状态,该表现不同的LED每隔一定的间隔进行变换。实现该效果的方法有很多,比如有限状态机、数值运算等。
由于FPGA中可以定义寄存器中不同位的状态,不同信号线之间的排序及相互之间的赋值可以随意组合。
板载的时钟晶振为50MHz,0.5s对应的翻转计数为25000000。设置以下module用于实现流水灯效果。
`timescale 1ns / 1ps
`define UD #1
module water_led(
input clk,
input rstn,
output [7:0] led
);
//==============================================================================
//reg and wire
reg [25:0] led_light_cnt= 26'd0;
reg [ 7:0] led_status = 8'b0000_0001;
// time counter
always @(posedge clk)
begin
if(!rstn)
led_light_cnt <= `UD 26'd0;
else if(led_light_cnt == 26'd19_999_999)
led_light_cnt <= `UD 26'd0;
else
led_light_cnt <= `UD led_light_cnt + 26'd1;
end
// led status change
always @(posedge clk)
begin
if(!rstn)
led_status <= `UD 8'b0000_0001;
else if(led_light_cnt == 25'd19_999_999)
led_status <= `UD {led_status[6:0],led_status[7]};
end
assign led = led_status;
endmodule
代码中使用#1作为对非阻塞赋值的延迟管理,具体的原因可以参考文章。
编写完成控制逻辑后,对源码进行编译和综合,添加时钟和引脚约束。
最后生成位流文件。使用Configuration工具连接调试器,烧录位流文件到FPGA中。
实现的效果如视频所示
紫光同创的开发工具使用起来还是很方便的,FPGA设计的各个阶段都提供了相应的工具,很容易上手。
更多回帖