5.2 FPGA:基于verilog的LED流水灯设计(多种方法)

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

目录

设计目标:8个LED灯以每0.5s的速率进行循环闪烁

方法1:移位法实现

设计模块

仿真代码

实验结果

 方法2:循环移位方法

 设计模块

方法3:使用三八译码器实现流水灯

顶层模块

底层模块


设计目标:8个LED灯以每0.5s的速率进行循环闪烁

当仿真时时间长,可以减小设计代码的计数次数,对分析移位功能没有影响。

方法1:移位法实现

设计模块

module led_run(
    Clk,
    Reset_n,
    led
);
    input Clk;
    input Reset_n;
    output reg [7:0]led;
    
    reg [24:0] counter;

    always@(podedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter <= 0;
    else if(counter == 24999999)
        counter <= 0;
    else
        counter <= counter + 1'd1;

    always@(podedge Clk or negedge Reset_n)
    if(!Reset_n)
        led <= 8'b0000_0001;
    else if(counter == 24999999)begin
        if(led == 8'b1000_0000)
            led <= 8'b0000_0001;
        else
            led <= led << 1;
    end
    else
        led = led;
        

endmoduule

仿真代码

`timescale 1ns/1ns

module led_run_tb();

    reg Clk;
    reg Reset_n;
    wire [7:0]led;

    led_run led_run(
        .Clk(Clk),
        .Reset_n(Reset_n),
        .led(led)
    );

    initial Clk = 1;
    always #10 Clk = ~Clk;

    initial begin
        Reset_n = 0;
        #201;
        Reset_n = 1;
        #4000000000; //延时4s
        $stop;
    end

endmodule

实验结果

5.2 FPGA:基于verilog的LED流水灯设计(多种方法),FPGA,fpga开发

 方法2:循环移位方法

知识点:位拼接

5.2 FPGA:基于verilog的LED流水灯设计(多种方法),FPGA,fpga开发

 设计模块

module led_run1(
    Clk,
    Reset_n,
    led
);
    input Clk;
    input Reset_n;
    output reg [7:0] led;
    
    reg [24:0] counter;
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter <= 0;
//    else if(counter == 24999999)
    else if(counter == 24999) //500us
        counter <= 0;
    else
        counter <= counter + 1'd1;
        
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        led = 8'b0000_0001;
 //   else if(counter == 24999999)begin
    else if(counter == 24999)
        led <= {led[6:0],led[7]};    //位拼接
    else
        led <= led;
    
endmodule

方法3:使用三八译码器实现流水灯

知识点:1.计数器记满清零。2. 模块间的调用。

在当前模块中调用三八译码器模块,将38译码器的设计模块添加到当前文件夹中,在led_run2.v中通过接口调用三八译码器。

将led_run2.v中的 led 接到三八译码器的 out 端口上时,led 不能再定义为 reg 型,因为三八译码器底层已经将out定义为reg型。底层已经定义了reg型,顶层就不能再定义reg型。 led是由底层模块驱动的,顶层只能定义为wire型。

顶层模块

module led_run2(
    Clk,
    Reset_n,
    led
);
    input Clk;
    input Reset_n;
    output  [7:0] led;
    
    reg [24:0] counter;
    reg [2:0] counter1; //二进制8个状态,3位
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter <= 0;
//    else if(counter == 24999999)
    else if(counter == 24999) //500us
        counter <= 0;
    else
        counter <= counter + 1'd1;
        
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter1 <= 0;
 //   else if(counter == 24999999)
    else if(counter == 24999)
        counter1 <= counter1 + 1'b1;

    decoder_3_8 decoder_3_8(
        .a(counter1[2]),    //counter1[2] 是最高位
        .b(counter1[1]),
        .c(counter1[0]),
        .out(led)       //底层已将out定义为reg型,所以顶层不能再定义成reg型
    );
    
endmodule

底层模块

module decoder_3_8(
    a,
    b,
    c,
    out
);

input a;
input b;
input c;
output reg [7:0] out;
// 2种写法:reg [7:0] out;

//以always块描述的信号赋值,被赋值对象必须定义为reg类型
//{a,b,c}拼接成了一个三位信号

always@(*)begin
    case({a,b,c})
        3'b000: out = 8'b0000_0001;
        3'b001: out = 8'b0000_0010;
        3'b010: out = 8'b0000_0100;
        3'b011: out = 8'b0000_1000;
        3'b100: out = 8'b0001_0000;
        3'b101: out = 8'b0010_0000;
        3'b110: out = 8'b0100_0000;
        3'b111: out = 8'b1000_0000;
    endcase
end

endmodule

defparam写法不能在testbench中生效文章来源地址https://www.toymoban.com/news/detail-741425.html

到了这里,关于5.2 FPGA:基于verilog的LED流水灯设计(多种方法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

    本文使用软件为vivado,其实用哪个软件都是一样的,主要是掌握核心编程思想。 如有需要下载vivado软件下载可以参考: vivado及ISE各版本软件下载方法、链接及详细步骤,官方网页下载_ise软件下载_千寻xun的博客-CSDN博客 目录 一、新建工程及设计文件 二、编写LED流水灯程序

    2024年02月08日
    浏览(43)
  • FPGA学习分享--01 led流水灯的实现

    需求 : 博宸电子的ZYNQ7020DEV开发板 Vivado 2018.3 一定的verilog语言基础 博主目前学习的是 博宸电子的ZYNQ7020DEV开发板 ,下面是关于本次分享led流水灯的原理图 图1 涉及本次led流水灯的电路 首先,从图1来看,每个led端口都和一个阻值为4.7k的电阻和一个发光二极管相连,并且发光

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

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

    2024年02月16日
    浏览(56)
  • FPGA综合设计实验:基于PWM脉宽调制的呼吸流水灯设计

    目录 一、引言 二、项目准备 1.项目预期目标 2.项目原理及总体实现思路

    2024年02月13日
    浏览(61)
  • 基于Verilog HDL的按键控制流水灯即打地鼠小游戏的设计

    (1)用4个按键key0-key3对应控制4个小灯LED0-LED3;用触摸按键进行模式切换;用一位数码管显示当前控制模式,两位数码管显示当前得分。 (2)触摸按键没有按下时处于模式1,按下后处于模式2。用模式数码管显示当前的控制模式。 (3)模式1工作方式:当点亮LED0时,若按下

    2024年02月12日
    浏览(54)
  • 多路彩灯控制器LED流水灯花型verilog仿真图视频、源代码

    名称:多路彩灯控制器LED流水灯花型verilog 软件:Quartus 语言:Verilog 代码功能:      用quartus和modelism,设计一个多路彩灯控制器,能够使花型循环变化,具有复位清零功能,并可以选择花型变化节奏。具体要求如下:  1)彩灯控制器由16路发光二极管构成,当控制开关打开时

    2024年02月04日
    浏览(54)
  • 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计

    基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号:A0005 结合实际情况,基于51单片机设计一个LED彩灯控制器设计。该系统应满足的功能要

    2024年02月02日
    浏览(50)
  • FPGA学习——按键控制LED流水灯(附源码 无按键消抖版本)

    在博主的cyclone4开发板上一共有4个按键,本次实验的目的是为了实现每按下一次按键,都会使开发板上的4个LED灯切换一次状态,博主一共设计了四种状态,分别是: 按键 状态 按键1按下 自右向左的流水灯 按键2按下 自左向右的流水灯 按键3按下 四灯常亮 按键4按下 四灯闪烁

    2024年02月06日
    浏览(47)
  • 【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯

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

    2023年04月27日
    浏览(45)
  • 【FPGA】verilog基础语法与应用:位操作 / 模块调用——流水灯(跑马灯)

    今天的实验是计数器实验的升级,设计让8个LED灯以每个0.5s的速率循环闪烁 1 移位法实现 1.1 移位方法1 每个LED灯代表一位,共8位,亮为1,灭为0 如何实现这样的逻辑呢? 移位操作即可! 怎么样才能移位呢? 第一个状态需满足最低位为1,然后每次左移1个 源代码 仿真代码 功

    2024年01月16日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包