FPGA系统性学习笔记连载_Day10 【流水灯实验】

2021-04-07 14:27:48 浏览数 (1)

FPGA系统性学习笔记连载_Day10 【流水灯实验】之【intel Q、Xilinx S-6、ZYNQ7020三个平台的实现及验证】

本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主。

连载《叁芯智能fpga设计与研发-第10天》 【流水灯实验】之【intel Cyclone IV、Xilinx Spartan-6、Xilinx ZYNQ7020三个平台的实现及验证】

原创作者:紫枫术河 转载请联系群主授权,否则追究责任

本实验要求设计 用4个led实现流水灯的效果,要求每隔一秒切换一个led灯,间隔时间为1秒,同一时间只能有一个led点亮

一、模块设计

我分为2个模块counter.v led_water.v及仿真led_water_tb.v

二、代码设计counter.v

代码语言:javascript复制
module  counter(
    input               clk,
    input               rst_n,
    output  reg     flag
);
 
    reg [25:0] count;
     
    parameter   T =     26'd49_000_000;
     
    always@(posedge clk,negedge rst_n)begin
        if(!rst_n)begin
            flag <= 1'b0;
            count <= 0;
            end
        else    if(count == T)begin
                flag <= 1'b1;
                count <= 0;
            end
        else
            begin
                count <= count   1'b1;
                flag <= 1'b0;
            end
    end
 
endmodule

三、代码设计 led_water.v

代码语言:javascript复制
module led_water(
    input                   clk,
    input                   rst_n,
    output  reg [3:0]   led
);
     
    reg  [3:0]  led_cnt;
    wire            flag;
     
    counter counter_inst(
        .clk        (clk),
        .rst_n  (rst_n),
        .flag       (flag)
    );
 
    always@(posedge flag,negedge rst_n)begin
        if(!rst_n)
            led_cnt <= 0;
        else if(led_cnt == 4'd3)
            led_cnt <= 4'd0;
        else
            led_cnt <= led_cnt   1'b1;
    end
     
    always@(*)begin
        case(led_cnt)
            4'd0:led = 4'b0001;
            4'd1:led = 4'b0010;
            4'd2:led = 4'b0100;
            4'd3:led = 4'b1000;
           default:
                led = 4'b0000;
        endcase
    end
 
endmodule

四、仿真代码led_water_tb.v

代码语言:javascript复制
`timescale 1ns/1ps
 
module led_water_tb;
 
        reg                     clk;
        reg                     rst_n;
        wire        [3:0]   led;
 
        always #10 clk = ~clk;
         
        defparam led_water_isnt.counter_inst.T = 26'd49;
         
        led_water   led_water_isnt(
            .clk        (clk),
            .rst_n  (rst_n),
            .led        (led)
        );
     
        initial begin
            clk = 0;
            rst_n = 0;
            #15;
            rst_n = 1;
            #4000000000;
            $stop;
        end
 
endmodule

五、结果仿真

从仿真结果可以看出,我们设计的流水灯是正确的

六、硬件验证【intel Cyclone IV】

我用的是叁芯智能的开发板(intel Cycle IV:EP4CE6E22C8)

1、LED灯原理图

LED0:PIN_73

LED1:PIN_74

LED2:PIN_75

LED3:PIN_76

2、复位按键原理图

rest = PIN24

3、时钟引脚 clk = PIN23

4、打开Pin Planner引脚分配工具,具体方法,参考我之前的文章

5、硬件验证效果

七、Xilinx Spartan-6 FPGA 平台验证

1、我用的是叁芯智能的开发板(Xilinx Spartan-6:XC6SLX9)

2、复位按键、时钟原理图

RESET:PIN_23

CLK:PIN22

3、LED灯原理图

LED0:PIN_74

LED1:PIN_75

LED2:PIN_78

LED3:PIN_79

4、下板验证

八、ZYNQ7020

ZYNQ7020,因为只有3个led可以使用,这个实验就不下板了。

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有。

【微信交流群】

现微信交流群已建立09群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

0 人点赞