• FPGA学习——Xilinx Vivado 实现led流水灯详解


    FPGA学习——Xilinx Vivado 实现led流水灯详解
    整个流程

        创建工程
        设计代码、编写功能
        RTL分析——引脚定义和绑定
        综合synthesis
        时序约束
        仿真设置并配置激励文件(中小等项目可跳过,直接在线调试毕竟仿真时间太久)
        生成bit文件导入fpga中——在线调试
        判断是否达成目标功能

    1. 建立工程

      建立led工程,然后Next直到选择开发板型号(我的是xilinx黑金zynq7010),选错也没事,后面进入工程可以修改,选好就按finish完成
    在这里插入图片描述
    在这里插入图片描述
    2. 编写功能代码

    主界面如下,点击加号添加资源文件led.v,然后点击finish-ok-yes完成,并编写代码
    主界面如上
    在这里插入图片描述
    插入此段代码,实现流水灯,还有其它几种写法,不懂可以讨论。

    //代码如下
    module led(clk,rst_n,led);
        input clk;       //时钟信号输入
        input rst_n;    //复位信号
        output reg [3:0] led;    //4个led灯
        reg [1:0] state;        //标志位
        reg [31:0] counter;        //计数量
        
    /*     也可以这样表示引脚绑定变量在()中
        module led(
        input clk,
        input rst_n,
        output reg [3:0] led);
        reg [1:0] state;
        reg [31:0] counter; */
        
    always@(posedge clk or negedge rst_n)    //时序电路非阻塞赋值写法

    begin
        if(!rst_n)
            begin
                led <= 4'b1111;
                state <= 2'd0;
                counter <= 32'd0;
            end    
        else
            begin
            case(state)        
                0:
                begin
                    led <= 4'b0111;
                    if(counter < 32'd49_999_999)     //50MHz,延时1s
                        begin
                            counter <= counter+32'd1;
                        end
                    else
                        begin
                            counter <= 0;
                            state <= 2'd1;
                        end
                end                
                1:
                begin
                    led <= 4'b1011;
                    if(counter < 32'd49_999_999)
                        begin
                            counter <= counter+32'd1;
                        end
                    else
                        begin
                            counter <= 0;
                            state <= 2'd2;
                        end
                end
                2:
                begin
                    led <= 4'b1101;
                    if(counter < 32'd49_999_999)
                        begin
                            counter <= counter+32'd1;
                        end
                    else
                        begin
                            counter <= 0;
                            state <= 2'd3;
                        end
                end
                3:
                begin
                    led <= 4'b1110;
                    if(counter < 32'd49_999_999)
                        begin
                            counter <= counter+32'd1;
                        end
                    else
                        begin
                            counter <= 0;
                            state <= 2'd0;
                        end
                end
                default:
                    state <= 2'd0;
            endcase
        end
    end        

    endmodule

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60
        61
        62
        63
        64
        65
        66
        67
        68
        69
        70
        71
        72
        73
        74
        75
        76
        77
        78
        79
        80
        81
        82
        83
        84
        85
        86
        87
        88

    3. RTL分析——引脚定义

    重要!(根据开发板原理图设置,这是我的led引脚)
    两种方法实现:在这里插入图片描述在这里插入图片描述

    - 图形界面设置: 设置好点击保存在这里插入图片描述在这里插入图片描述

    - 代码设置:
    新建并打开led.xdc文件,设置引脚和电平。
    在这里插入图片描述

    set_property PACKAGE_PIN M14 [get_ports {led[0]}]                        //设置引脚接口
    set_property PACKAGE_PIN M15 [get_ports {led[1]}]
    set_property PACKAGE_PIN K16 [get_ports {led[2]}]
    set_property PACKAGE_PIN J16 [get_ports {led[3]}]
    set_property PACKAGE_PIN U18 [get_ports clk]
    set_property PACKAGE_PIN N15 [get_ports rst_n]
    set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]             //设置引脚电平
    set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
    set_property IOSTANDARD LVCMOS33 [get_ports clk]
    set_property IOSTANDARD LVCMOS33 [get_ports rst_n]

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12

    在这里插入图片描述
    5. run synthesis综合

    在这里插入图片描述
    综合完成后出现这个框框可以关掉,也可以直接选择对应操作进行,把鼠标放在对应选择上有提示出现。
    在这里插入图片描述
    6. 时序约束

    在这里插入图片描述

    create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]     //在led.xdc代码最后插入

        1

    在这里插入图片描述
    7. 在线调试

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    8.仿真调试和使用自带的逻辑分析仪(后面补充)

    原文链接:https://blog.csdn.net/moumourenaini/article/details/103892062

    作者:柒月
    Q群 :2122210(嵌入式/机器学习)
  • 相关阅读:
    CountDownLatch demo演示裁判和选手赛跑
    @Async异步方法对异常的处理,从内层向外层抛出机制
    python3读csv文件,出现UnicodeDecodeError: 'utf8' codec can't decode byte 0xd0 in position 0: invalid con
    Python3 dict和str互转
    python批量读取excel csv文件插入mysql数据库
    dotnet 6 精细控制 HttpClient 网络请求超时
    读书笔记 为什么要有R5G6B5颜色格式
    dotnet 6 推荐一个可代替 .NET Remoting 的 IPC 库
    dotnet 6 通过 DOTNET_ROOT 让调起的应用的进程拿到共享的运行时文件夹
    记 Win8.1 某应用渲染抛出 OutOfMemoryException 异常及修复方法
  • 原文地址:https://www.cnblogs.com/Ph-one/p/15508744.html
Copyright © 2020-2023  润新知