FPGA自学教程 04 设计跑马灯(8个LED灯每个以0.5s的速率闪烁)

双非硕士 研一下学期视觉转FPGA(在b站跟小梅哥视频)

长路漫漫,但希望前途光明

省去前面创建工程的内容(如果对创建工程有疑问的,可以看我前面的两篇文章),首先给出跑马灯的逻辑代码,如下图所示:

module led_run(
    Clk,
    Reset_n,
    Led
);
    input Clk;
    input Reset_n;
    output reg [7:0]Led;
    
    reg [24:0]counter;
    
    parameter MCNT =25'd24999999;
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter <=0;
    else if(counter == MCNT)
        counter <=0;
    else 
        counter <= counter +1'd1;    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)   
        Led <=8'b0000_0001;
    else if(counter == MCNT)begin
        if (Led == 8'b1000_0000)
            Led <=8'b0000_0001;
        else
            Led <=Led <<1;
            
        //Led <= {Led[6:0],Led[7]};
    end
    else
        Led <= Led;
    
endmodule

接下来要进行仿真验证,代码如下:

`timescale 1ns/1ns

module led_run_tb;
    reg Clk;
    reg Reset_n;
    wire [7:0]Led;

    led_run
    led_run_ints0(
        .Clk(Clk),
        .Reset_n(Reset_n),
        .Led(Led)
    );
    defparam led_run_ints0.MCNT=24999;
    
    initial Clk =1;
    always #10 Clk =!Clk;
    
    initial begin
        Reset_n = 0;
        #201;
        Reset_n=1;
        #40000000;
        $stop;
    end
endmodule

观察波形图,可以验证我们的代码逻辑是正确的

补充,如果使用3-8移码器实现上述效果的话,我们可以将之前创建的decoder_3_8.v文件复制到本路径下,如下图所示

 接下来,点击左侧栏中的Add Sources ,同样选择Add or create design sources,点击OK就可以将之前的项目包导进来了。

 代码内容如下:

module led_run_test2(
    Clk,
    Reset_n,
    Led
);
    input Clk;
    input Reset_n;
    output [7:0]Led;
    reg [24:0]counter;
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter<=0;
    else if(counter == 24999)
        counter<=0;
    else
        counter <= counter +1'b1;
    
    //使用3-8译码器来实现LED灯的变动
    reg [2:0]counter2;
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter2 <=0;
    else if(counter2 == 7)
        counter2<=0;
    else if(counter == 24999)
        counter2 <= counter2 +1'b1;
        
    decoder_3_8 decoder_3_8(
            .a(counter2[2]),
            .b(counter2[1]),
            .c(counter2[0]),
            .out(Led)
        );
endmodule

以上,就是通过使用Verilog实现流水灯的实验

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: FPGA流水跑马灯设计实验是一种常见的数字电路实验,目的是通过FPGA(现场可编程门阵列)来实现流水跑马灯效果。 在FPGA流水设计实验中,我们需要利用FPGA芯片上的逻辑单元和时钟信号实现流水效果。首先,我们将多个LED连接到FPGA芯片的输出引脚上。然后,通过编程设置FPGA芯片的逻辑电路,让LED按照一定的顺序依次点亮和熄灭,形成像水流一样循环流动的效果。这个顺序通常是由一个时钟信号控制的,时钟信号的频率决定了流水的流动速度。 而在FPGA跑马灯设计实验中,我们需要利用FPGA芯片的逻辑单元和时钟信号实现跑马灯效果。跑马灯通常是多个LED按照一定的模式循环点亮的效果。在设计实验中,我们需要将多个LED连接到FPGA芯片的输出引脚上,并通过编程控制FPGA芯片的逻辑电路,让LED按照一个特定的模式进行点亮和熄灭。这个模式通常是由时钟信号和一些逻辑操作决定的,时钟信号的频率决定了跑马灯的刷新速度,逻辑操作则决定了每个LED的点亮顺序和时长。 总之,FPGA流水跑马灯设计实验都是利用FPGA芯片的逻辑单元和时钟信号来实现LED的点亮和熄灭,从而达到流水跑马灯效果。这些实验不仅可以帮助我们理解数字电路设计的原理,还可以提升我们的编程和逻辑思维能力。 ### 回答2: FPGA(可编程逻辑门阵列)流水跑马灯是常见的电子设计实验。流水设计实验是指使用FPGA来实现多个LED的顺序依次亮起的效果。跑马灯设计实验是指使用FPGA实现LED在多个位置之间循环移动的效果。 对于FPGA流水设计实验,首先需要通过电路连接FPGA开发板上的LEDFPGA芯片。然后,在FPGA芯片上编写VHDL或Verilog等硬件描述语言的程序代码,根据一定的时序,依次激活LED,使其顺序点亮。可以使用计数器实现,每次计数器增加,对应的LED亮起,然后计数器再加一,顺序切换到下一个LED。 对于FPGA跑马灯设计实验,同样需要先进行电路连接。然后,在FPGA芯片上编写程序代码,在不同的时刻控制LED亮灭。可以使用一个移位寄存器实现跑马灯效果,每次移位寄存器的值左移一位,并将最高位的值传送到最低位,这样LED的亮灭位置会循环移动。可以通过定时器来控制移位寄存器的移位速度,实现不同的光切换速度。 这两个实验都是通过对FPGA芯片进行编程来实现的,通过改变代码中的时序控制和光切换方式,可以实现不同的光效果。同时,这两个实验也可以作为学习FPGA和硬件设计的基础实验,帮助学生理解数字逻辑、时序控制和硬件描述语言等相关概念,培养电子设计和嵌入式系统开发的能力。 ### 回答3: FPGA(现场可编程门阵列)是一种先进的可编程电子器件,它具有灵活性和并行处理能力。流水跑马灯设计实验是FPGA入门实验中常见的两个项目,其主要目的是帮助学习者了解FPGA的基本原理和搭建简单的数字逻辑电路。 流水实验是最简单的FPGA实验之一。该实验通过FPGA上的时钟信号,使一串LED像流水一样依次亮起。首先,需要将FPGA开发板上的几个LED引脚与FPGA芯片内部的逻辑门连接起来。然后,在FPGA芯片内部搭建一个简单的计数器电路,使其能够产生一个二进制的计数值。这个计数值会通过逻辑门得到一个对应的控制信号,这个信号会依次控制LED的亮灭,从而实现流水的效果。 跑马灯实验是流水实验的扩展。相比于流水实验,跑马灯实验需要更多的LED,其效果更加复杂有趣。跑马灯实验在FPGA芯片内部搭建一个多位计数器电路,使其能够产生多个计数值。这些计数值会通过逻辑门生成多个控制信号,分别控制多个LED的亮灭。通过适当的控制信号延时,可以使LED的亮灭效果像一个小马在循环跑动,从而实现跑马灯的效果。 这两个实验是FPGA入门实验中的经典案例。通过这些实验,学习者可以深入了解FPGA的基本原理、数字逻辑电路的设计和搭建、时钟信号的利用等。同时,这些实验也为进一步学习高级FPGA应用和开发打下了基础。因此,这些实验是学习FPGA的重要一环,也是培养学生对数字电路及其应用的理解和能力的有效方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值