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

 



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]

 




在这里插入图片描述
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

posted @ 2021-11-04 16:20  瘋耔  阅读(1650)  评论(0编辑  收藏  举报
跳至侧栏