FPGA入门————LED流水灯(超详细教程)

这篇具有很好参考价值的文章主要介绍了FPGA入门————LED流水灯(超详细教程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文使用软件为vivado,其实用哪个软件都是一样的,主要是掌握核心编程思想。

如有需要下载vivado软件下载可以参考:

vivado及ISE各版本软件下载方法、链接及详细步骤,官方网页下载_ise软件下载_千寻xun的博客-CSDN博客

目录

一、新建工程及设计文件

二、编写LED流水灯程序

一、新建工程及设计文件

1、双击打开软件(我使用的是2021版本,使用其他版本也一样)

fpga点亮led灯,FPGA,fpga开发

2、新建工程

点击创建工程:

fpga点亮led灯,FPGA,fpga开发

 点下一步:fpga点亮led灯,FPGA,fpga开发

 选择工程存放路径以及生成的工程名字:fpga点亮led灯,FPGA,fpga开发

 可以选择先不定义源文件,后面进行添加即可,点下一步:fpga点亮led灯,FPGA,fpga开发

 选择器件型号,如果有FPGA开发板,在这里选择自己FPGA对应的型号即可,如果没有开发板,可以随便选择一个,选好点击下一步:

fpga点亮led灯,FPGA,fpga开发

 点击完成即可:

fpga点亮led灯,FPGA,fpga开发

 2、添加工程文件

点击添加文件:

fpga点亮led灯,FPGA,fpga开发

先添加设计文件,点击下一步:

fpga点亮led灯,FPGA,fpga开发

点击新建:

fpga点亮led灯,FPGA,fpga开发

定义新建的设计文件名字,建议和工程名字相同。点ok。fpga点亮led灯,FPGA,fpga开发

 点击完成

fpga点亮led灯,FPGA,fpga开发

点击ok。选择yes.。

 fpga点亮led灯,FPGA,fpga开发

在设计文件中可以看到我们新建的工程文件。

fpga点亮led灯,FPGA,fpga开发

 到这里,新建工程和设计文件以经完成了。

二、编写LED流水灯程序

 1、定义端口

LED流水灯主要需要定义时钟clk,和led。

我这里led灯有8个,定义信号名为【7:0】led。


module LED(
    input clk,//输入信号定义为input
    output [7:0]led//输出信号定义为output
    );    
endmodule

 如果添加一个输入复位信号rst,知道该怎么定义了吗

2、计数器设计。

流水灯如果频率太快看起来就和全部常亮一样。我这里设计一个1s周期的流水灯,频率f=1/T;频率为1hz。我这个板上时钟频率为25mhz,根据自己实际的时钟来。

   reg [31:0]cnt=0;//计数
   reg clk1hz=0;//1hz时钟
   always@(posedge clk)
   begin
        if(cnt==32'd12500000-1)
            begin
               cnt<=0;
               clk1hz<=!clk1hz; 
            end
        else
            cnt<=cnt+1;
   end

cnt计数到12500000-1;这个值怎么算的?

时钟25Mhz,即25000000;

要得到的时钟为1hz,

及一个1hz的时钟周期需要25mhz时钟计数25000000/1次。

一个时钟包括高电平和低电平。一般时钟的占空比都为百分之50,

所以1hz时钟的高电平和低电平都需要25mhz时钟计数12500000次。

计数器是从0开始计数的,所以计数到12500000-1就相当于计数了12500000次;

给时钟定义一个初值0,计数到12500000-1就翻转一次,变为1。一直循环即可得到一个1hz的时钟。

3、led灯赋值

首先需要确定led灯是低电平点亮还是高电平点亮。

我这里是高电平点亮。

流水灯的设计有很多方法,我这里介绍一个代码相对简短的。

  reg[7:0]c1=8'd1;
    always@(posedge clk1hz)
    begin
        if(c1[7]==1)
            c1<=8'd1;
        else
            c1<=c1<<1'b1;
    end
    assign led=c1;

<<为移位符号。

原理为:c1信号赋初值为1,及8'b00000001;

在时钟clk1hz下进行移位,<<1'b1表示一次移1位;

当c1【7】==0,即=8‘b10000000时让它又回到8'b00000001。

重复循环就实现了一个简单的流水灯。

4、整体代码

module LED(
    input clk,//25M
    output [7:0]led
    );
    reg [31:0]cnt=0;
   reg clk1hz=0;
   always@(posedge clk)
   begin
        if(cnt==32'd12500000-1)
            begin
               cnt<=0;
               clk1hz<=!clk1hz; 
            end
        else
            cnt<=cnt+1;
   end
    reg[7:0]c1=8'd1;
    always@(posedge clk1hz)
    begin
        if(c1[7]==1)
            c1<=8'd1;
        else
            c1<=c1<<1'b1;
    end
    assign led=c1;
endmodule

三、代码仿真

新建仿真文件

fpga点亮led灯,FPGA,fpga开发

fpga点亮led灯,FPGA,fpga开发

fpga点亮led灯,FPGA,fpga开发

 fpga点亮led灯,FPGA,fpga开发

fpga点亮led灯,FPGA,fpga开发

2、编写仿真代码

打开新建的文件

fpga点亮led灯,FPGA,fpga开发 2、编写仿真的测试代码

 代码如下:

module tb_led();
reg clk=0;
wire [7:0]led;

    LED u1(
    .clk(clk),
    .led(led)   
    );
    
always #10 clk<=~clk;
endmodule

 3、运行仿真

fpga点亮led灯,FPGA,fpga开发

fpga点亮led灯,FPGA,fpga开发

 用vivado自带的仿真比较慢。fpga点亮led灯,FPGA,fpga开发

 可以看出led在按位变为1,即点亮。文章来源地址https://www.toymoban.com/news/detail-713960.html

到了这里,关于FPGA入门————LED流水灯(超详细教程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯

    【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯 FPGA图形化可以提高FPGA的开发效率,为产品迭代、功能机验证,产品参数调试提供的便捷的编程方式。LabVIEW作为一款图形化开发软件可以为FPGA提供零代码开发,图形化界面可以非常直观的展示出FPGA的并行结构。LabVIEW的开

    2023年04月27日
    浏览(32)
  • FPGA:Vivado流水灯设计详细流程(1)

    基于Vivado的FPGA设计开发的流程主要包括以下步骤: 1)创建工程; 2)创建源设计文件,包括Verilog文本、IP核、模块文件、网表输入等方式; 3)行为仿真(Behavioral Simulation),Vivado自带仿真器,也可以选择第三方仿真软件ModelSim等工具进行仿真; 4)综合(Synthesis):根据设

    2024年02月03日
    浏览(36)
  • 流水灯——FPGA

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 要求: 每隔0.2s循环亮起LED灯 从LED0开始亮起到LED3又回到LED0循环往复。 流水灯 这里使用了拼接符对LED进行处理加上一个0.2s的计时器进行控制即可。 led流水灯

    2024年02月16日
    浏览(34)
  • fpga--流水灯

    fpga流水灯的设计 思路:外部时钟频率50mhz,若要实现每隔0.5s闪烁一次,则使用内部计数器计数到24999999拉高一个周期电平,当电平被拉高的时候,进行LED灯电平的设置,每次检测到高电平,就进行一位LED灯的设置,进行循环设置,就形成了流水灯的设计。 测试代码  

    2024年02月15日
    浏览(30)
  • FPGA学习——点亮流水灯

    在FPGA开发板中,一般板载LED默认高电平点亮,因此我们只需要将想要亮起的LED赋值为1即可。 本入门实验要求为每隔1s开发板上的LED轮流亮起,因此我们需要一个1s的计数器, 由于开发板晶振时钟为50MHz,因此我们计数50_000_000即为1s。 注意:为了后续方便仿真所以这里MAX设置

    2024年02月13日
    浏览(38)
  • 按键控制流水灯方向——FPGA

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 要求: 按键1按下,流水灯从右开始向左开始流动,按键2按下,流水灯从左开始向右开始流动,按键3按下LED每隔1s进行亮灭,按键4按下LED常亮。 “自锁”是指开关能通过锁定机构保持某种状态(通或断),“轻触”是说明操

    2024年02月07日
    浏览(36)
  • SOC FPGA之流水灯设计

            Altera Soc EDS开发套件的核心是Altera版ARM Development Studio 5(DS-5)工具包,为SoC器件提供了完整的嵌入式开发环境、FPGA自适应调试和对Altera工具的兼容。 首先下载破解器 然后进入cmd运行,进入到破解器所在文件夹  然后输入patcher.exe --license ?:licensepath 最后显示.dat文件即

    2024年02月14日
    浏览(28)
  • FPGA学习——verilog实现流水灯

    学习芯片: EP4CE6F17C8 verilog代码如下: 配置引脚,查看芯片的指导书: 烧录运行结果如下: 如图我们可以看见开发板上四个led灯同时被电亮。 代码如下: 配置引脚,查看clock和key的引脚: 运行结果如下图: 此时可以看见四个led灯同时闪烁。 流水灯代码实现: 实验效果图如

    2024年02月16日
    浏览(40)
  • ARM入门(实现LED流水灯)超简单

            实现效果将LDE2到LED5依次点亮再依次熄灭。点亮LED灯就像我们接触编程语言的第一天输出一个\\\"hello world\\\"一样,这是一个最基础的入门操作。这里我们以点亮LED2的过程进行详细讲解,因其他LED灯的点亮过程都是一样的,所以就不做一一介绍了。 1、首先第一步我们需

    2023年04月10日
    浏览(31)
  • 基于FPGA的花样流水灯的设计

    1、学习ISE Design Suite 14.7的基本操作; 2、掌握FPGA的开发流程; 3、学习时序电路的设计; 4、巩固状态机的相关知识。 根据对该实验要求的分析,设计状态转移图如下: 其中,在S1状态下LED灯从左往右依次亮;在S2状态下LED灯从右往左依次亮;在S3状态下LED灯从中间向两边扩散

    2024年01月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包