文章目录

Vivado开发流程:FPGA初步教程实战:点亮LED灯,步骤清晰,必能跟下来

创建工程

正点原子领航者开发板在右下方板载了4颗LED灯,左侧两个位于PL端,右侧两个则位于PS端。本文的目的,是让PL端的LED灯交替点亮并熄灭,从而产生跑马灯的效果。

通过对系统时钟进行计数,可以实现LED灯的亮暗交替。另一方面,为了防止程序在运行时出现异常,可通过复位来将程序恢复至默认状态。因此,程序需要有两个输入,而输出则可通过一个二位宽的向量来表示。因此,在创建Vivado工程是,在弹出的Define Module窗口中,需要

Port Name Direction Bus MSB LSB
sys_clk input 不勾选 - -
sys_rst input 不勾选 - -
led output 勾选 1 0

代码

进入Vivado的默认布局页面后,找到flow_led.v,将其内容更改如下

module flow_led(
    input               sys_clk,
    input               sys_rst,

    output  reg  [1:0]  led
);

reg  [24:0]  cnt ;                  //计数器

//计数器计时0.5s
always @(posedge sys_clk or negedge sys_rst) begin
    if(!sys_rst)
        cnt <= 25'd0;
    else if(cnt < 25'd2499_9999)
        cnt <= cnt + 25'd1;
    else
        cnt <= 25'd0;
end

//对LED灯进行移位控制,以输出2位LED的状态
always @(posedge sys_clk or negedge sys_rst) begin
    if(!sys_rst)
        led <= 2'b01;
    else if(cnt == 25'd2499_9999)
        led <= {led[0],led[1]};
    else
        led <= led;
end

endmodule

其中,【always @】语句用于事件触发,后面的括号里是触发条件,其中posedge是上升沿触发,negedge是下降沿触发。

这两个触发代码块的触发条件是一致的,都是在系统时钟上升沿或者复位信号下降沿时触发。触发后,如果复位信号为0,则将cnt赋值为0,将led赋值为1。如果复位信号不为0,则开始计数,且当cnt刚好等于2499_9999时,调换led[0]和led[1]的值。

实现

首先【Open Elaborated Design】,分配I/O引脚,引脚名flow_led,引脚参数如下

Name Package Pin I/O Std 说明
led[0] H15 LVCMOS33 PL_LED0
led[1] L15 LVCMOS33 PL_LED1
sys_clk U18 LVCMOS33 系统时钟50MHz
sys_rst N16 LVCMOS33 复位键,低电平有效

在这里插入图片描述

然后,【Run Synthesis】 -> 【Run Implemented】 -> 【Generate Bitstre】 -> 【Open Hardware Manager】->【Auto Connect】->【Program】。

至此,就可以看到FPGA板子上PL端的两个LED交替闪烁了。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐