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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM