【每周一练】盘古1K开发板 练习一:LED流水灯实验 - FPGA开发者技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

【每周一练】盘古1K开发板 练习一:LED流水灯实验

VID_20231221_000837

本文基于深圳市小眼睛半导体科技有限公司的MES1K开发板进行编程,其器件为紫光同创的PGC1KG-LPG100,使用的开发软件为Pango Design Suite。

软件的安装

Pango Design Suite简称PDS,是一款专用于紫光同创FPGA开发的EDA工具,其主要功能包括设计输入、综合、仿真、实现和位流生成,并能够借助一些常用的第三方软件(主要是逻辑综合工具和仿真工具)完成FPGA全流程开发。Pango Design Suite提供了免Lisence的Lite版本和需要Lisence的Standard版本,Lisence需要向官方提供模板信息来获取。关于软件的安装和使用。可以查看附件中的快速使用手册。

LED流水灯实验

本次实验实现LED流水灯,使用的到的硬件为LED灯,在【每周一练】小眼睛FPGA1K开发板硬件平台中使用的LED硬件和管脚分布进行了介绍。

实现流水灯效果,需要以0.5s的间隔接替闪烁8个LED。

Verilog设计

本实验中,流水灯效果表现为一个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作为对非阻塞赋值的延迟管理,具体的原因可以参考文章

编写完成控制逻辑后,对源码进行编译和综合,添加时钟和引脚约束。

流水灯约束.png

最后生成位流文件。使用Configuration工具连接调试器,烧录位流文件到FPGA中。

实现的效果如视频所示

总结

紫光同创的开发工具使用起来还是很方便的,FPGA设计的各个阶段都提供了相应的工具,很容易上手。

*附件:PDS快速使用手册.docx

更多回帖

×
发帖