304|2

859

帖子

3

TA的资源

版主

【Tang Primer 25K 测评】3、高云IDE使用及PMOD-LEDx8模块点灯实验 [复制链接]

本帖最后由 1nnocent 于 2025-1-29 21:51 编辑

    高云官网可以下载通用指南,里面包含了各种资料,包括fpga使用的原语、IDE使用指南、约束指南等等。

一、设计思路

  • 实现 LED 数组的动态闪烁效果。
  • 模拟人呼吸的节奏,通过控制 LEDs 的亮度变化来达到“呼出”和“吸气”的效果。
  • 支持多通道 LED 显示。

二、工程建立

    打开Gowin软件,点击New Project...建立工程,并设置好工程名称和保存路径,这里可以勾选默认路径,下次打开可以不用再选择路径。

image.png  

    选择器件时选中GW5A-LV25MG121NES型号。

image.png    

    最后点击finish就能完成工程的建立。

image.png   

三、代码编写

   新建文件选择Verilog File。

image.png  

    pwm_gen模块:该模块用于产生pwm信号来驱动led实现呼吸灯效果,模块时钟默认50MHz,pwm一个周期为2秒,占空比变化2千次。以下为pwm_gen的代码。

module pwm_gen#(
    parameter   CYCLE   = 50_000,
    parameter   STEP    = 50
)(
    input       clk,
    input       rst,
    input       ena,

    output      pwm_out
);
    reg  [31:0] cycle_cnt;
    reg  [31:0] pwm_cnt;
    reg         pwm_flag;
    wire        pwm_inc;
    always@(posedge clk)begin
        if(rst)
            cycle_cnt <= 'd0;
        else if(ena)
            cycle_cnt <= cycle_cnt >= CYCLE ? 'd0 : (cycle_cnt + 'd1);
        else
            cycle_cnt <= 'd0;
    end
    always@(posedge clk)begin
        if(rst)
            pwm_cnt <= 'd0;
        else if(cycle_cnt >= CYCLE) 
            pwm_cnt <= pwm_cnt >= CYCLE ? 'd0 : (pwm_cnt + STEP);
        else
            pwm_cnt <= pwm_cnt;
    end
    always@(posedge clk)begin
        if(rst)
            pwm_flag <= 1'b1;
        else
            pwm_flag <= pwm_cnt >= CYCLE ? !pwm_flag : pwm_flag;
    end
    assign pwm_inc = cycle_cnt <= pwm_cnt;
    assign pwm_out = pwm_flag ? pwm_inc : !pwm_inc;
endmodule

    PMOD_LED_top模块:该模块为顶层模块,顶层模块例化了8个pwm_gen模块分别用于驱动8个led灯,每个灯的“呼吸”频率相同并且起点相互错开(第一个结束时第八个刚好开始),这样就可以实现具有流水灯效果的呼吸灯。以下为顶层模块的代码:

module PMOD_LED_top(
    input       clk,
    input       rst,
    output [7:0]led
);
    parameter   LED_STEP    = 6_250_000;

    reg  [7:0]  ena;
    reg  [31:0] cnt;

    always@(posedge clk)begin
        if(rst)
            cnt <= 'd0;
        else if(cnt >= LED_STEP)
            cnt <= 'd0;
        else
            cnt <= cnt + 'd1;
    end
    always@(posedge clk)begin
        if(rst)
            ena <= 'd1;
        else if(cnt >= LED_STEP)begin
            ena <= {ena[6:0],ena[0]};
        end
        else
            ena <= ena;
    end
    genvar i;
    generate
        for(i=0;i<=7;i=i+1)
            pwm_gen#(
                .CYCLE      (50_000 ),
                .STEP       (50     )
            )pwm_gen(
                .clk        (clk    ),
                .rst        (rst    ),
                .ena        (ena[i] ),
                .pwm_out    (led[i] )
            );
    endgenerate
endmodule

    管脚约束

IO_LOC "rst_n" H11;
IO_PORT "rst_n" PULL_MODE=DOWN DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "clk" E2;
IO_PORT "clk" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;


IO_LOC "led[7]" A11;
IO_LOC "led[6]" A10;
IO_LOC "led[5]" E11;
IO_LOC "led[4]" E10;
IO_LOC "led[3]" K11;
IO_LOC "led[2]" L11;
IO_LOC "led[1]" L5;
IO_LOC "led[0]" K5;
IO_PORT "led[7]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_PORT "led[6]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_PORT "led[5]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_PORT "led[4]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_PORT "led[3]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_PORT "led[2]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_PORT "led[1]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_PORT "led[0]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;

IO_LOC "rst" H10;
IO_PORT "rst" PULL_MODE=DOWN DRIVE=OFF BANK_VCCIO=3.3;
IO_LOC "clk" E2;
IO_PORT "clk" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;

四、编译

    编译过程中发现有报错,检查了clk信号的约束语句没有问题,但就是报错了

image.png  

    最后在网上搜索了一番发现是IO复用没有配置好。如下配置后正常编译。  

image.png  

image.png  

五、上板验证

    烧写代码验证具有流水灯效果的呼吸灯如下:

b8ef9ebd5797c368f1c0a3e7318e15aa

工程代码:

PMOD_LED_breath.rar (668.42 KB, 下载次数: 0)

最新回复

这个直接有例程吗?看着好像汇编的写法   详情 回复 发表于 2025-2-1 08:23

回复
举报

6674

帖子

9

TA的资源

版主

这个直接有例程吗?看着好像汇编的写法

点评

有例程但是我没看自己写的,用的是Verilog  详情 回复 发表于 2025-2-1 08:49
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引


回复

859

帖子

3

TA的资源

版主

秦天qintian0303 发表于 2025-2-1 08:23 这个直接有例程吗?看着好像汇编的写法

有例程但是我没看自己写的,用的是Verilog


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表