性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

ReCclay
認(rèn)證:VIP會員
作者動態(tài)
【FPGA基礎(chǔ)】基于 Pango Design Suite(PDS) 的FPGA開發(fā)流程
2021-05-14 11:22
【FPGA基礎(chǔ)】基于Quartus Prime 17.1 的FPGA開發(fā)流程
2021-05-08 17:49
【AD快速入門】8051最小系統(tǒng)繪制
2021-04-22 10:03
藍(lán)橋嵌入式之 ADC電壓采集與顯示
2021-04-14 11:48
藍(lán)橋嵌入式之 實時時鐘RTC
2021-04-13 14:50

【FPGA基礎(chǔ)】基于 Pango Design Suite(PDS) 的FPGA開發(fā)流程

?

導(dǎo)讀:本文旨在通過 LED 的 Demo,實現(xiàn)快速上手基于PGL22G的FPGA開發(fā)。

?

@


    一、創(chuàng)建工程

    STEP #1

    啟動 Pango Design Suite 2020.3 開發(fā)環(huán)境(在開始菜單中選擇 pango->Pango DesignSuite 2020.3>Pango Design Suite 。Pango Design Suite(簡稱 PDS)或者雙擊桌面的Pango Design Suite 2020.3 的圖標(biāo)直接打開軟件。

    在這里插入圖片描述

    STEP #2

    在 PDS 開發(fā)環(huán)境里雙擊 Create Project 或 File->New Project...這兩種方式都可,如下圖:

    在這里插入圖片描述

    STEP #3

    彈出一個 PDS 的工程向?qū)?,點擊 Next 按鈕。

    在這里插入圖片描述

    STEP #4

    在彈出的對話框中輸入工程名和工程存放的目錄,這里取一個 led_test 的工程名,點擊 Next;

    在這里插入圖片描述

    STEP #5

    在下面的對話框中默認(rèn)選擇 RTL Project, 因為我們這里使用 verilog 行為描述語言來編程,單擊 Next

    在這里插入圖片描述

    STEP #6

    進(jìn)入 Add Design Source Files 界面,這里先不添加任何設(shè)計文件。點擊 Next;

    在這里插入圖片描述

    STEP #7

    這里問是否添加已有的 IP,保持默認(rèn)不添加,單擊 Next;

    在這里插入圖片描述

    STEP #8

    提示是否添加已有的約束文件,這里約束文件我們也沒有設(shè)計好,也不添加。

    在這里插入圖片描述

    STEP #9

    在接下來的對話框選擇所用的 FPGA 器件,以及進(jìn)行一些配置。開發(fā)板首先在 Family 欄里選擇 Logos,Device 中選擇 PGL22G,在 Package 欄選擇 BG324, Speed grade 欄選擇-6;綜合工具選擇 ADS;單擊 NEXT 進(jìn)入下一界面:

    在這里插入圖片描述

    STEP #10

    再次確認(rèn)一下板子型號有沒有選對, 沒有問題再點擊“Finish”完成工程創(chuàng)建。

    在這里插入圖片描述

    STEP #11

    工程創(chuàng)建后如下圖所示:

    二、編寫流水燈的 verilog 代碼

    STEP #1

    雙擊 Sources 下的 Designs 圖標(biāo);

    STEP #2

    在 Add Design Source Files 界面中進(jìn)行如下設(shè)置,點擊 OK;

    STEP #3

    可以看到已經(jīng)新建的 led_test.v 文件,點擊 OK 按鈕。

    在這里插入圖片描述

    向?qū)崾灸x I/O 的端口,這里我們可以不定義,后面自己在程序中編寫就可以,單擊 OK 完成

    這時在 Navigator 界面下的 Designs 里已經(jīng)有了一個 led_test.v 文件, 并且自動成為項目的頂層(Top)模塊了。

    STEP #4

    接下去我們來編寫 led_test.v 的程序,這里我們定義了一個 32 位的寄存器 timer,用于循環(huán)計數(shù) 0~199_999_999(4 秒鐘)。

    • 當(dāng)計數(shù)到 49_999_999(1 秒)的時候,熄滅第一個 LED 燈;
    • 當(dāng)計數(shù)到 99_999_999(2 秒)的時候,熄滅第二個 LED 燈;
    • 當(dāng)計數(shù)到 149_999_999(3 秒)的時候,熄滅第三個 LED 燈;
    • 當(dāng)計數(shù)到 199_999_999(4 秒)的時候,熄滅第四個 LED 燈,計數(shù)器再重新計數(shù)。
    `timescale 1ns/1nsmodule led_test(               sys_clk,      // system clock 50Mhz on board  rst_n,          // reset ,low active              led             // LED,use for control the LED signal on board);            input         sys_clk;input         rst_n;output [3:0]  led;//define the time counterreg [31:0]   timer;                  reg [3:0]    led;always @(posedge sys_clk or negedge rst_n) begin  if (~rst_n)                               timer <32'd0;                     // when the reset signal valid,time counter clearing  else if (timer == 32'd199_999_999)    //4 seconds count(50M*4-1=199999999)    timer <= 32'd0;                       //count done,clearing the time counter  else    timer <= timer + 1'b1;            //timer counter = timer counter + 1endalways @(posedge sys_clk or negedge rst_n) begin  if (~rst_n)                          led <4'b0000;                  //when the reset signal active           else if (timer == 32'd49_999_999)    //time counter count to 1st sec,LED1 Extinguish     led <= 4'b0001;                   else if (timer == 32'd99_999_999)  begin  //time counter count to 2nd sec,LED2 Extinguish     led <= 4'b0010;                    end  else if (timer == 32'd149_999_999)   //time counter count to 3nd sec,LED3 Extinguish     led <4'b0100;                                            else if (timer == 32'd199_999_999)   //time counter count to 4nd sec,LED4 Extinguish     led <= 4'b1000;                         end    endmodule 

    頂層模塊編寫幾個注意事項:

    • ①、在定義寄存器時,如果寄存器在 always 塊里使用必須定義為 reg 類型
    • ②、如果僅是用于連線或是直接賦值需定義為 wire 類型
    • ③、wire 類型只能在 assign 中連續(xù)賦值,即:assign 語句中的賦值目標(biāo)變量(位于左側(cè)),必須是 wire 型的。
    • ③、輸入信號的類型不能定義為 reg 型

    三、添加 UCE 約束

    ?

    PDS開發(fā)中的約束文件默認(rèn)是.fdc格式

    ?

    User Constraint Editor(Timing and Logic)簡稱 UCE,主要是完成管腳的約束,時鐘的約束,以及組的約束。這里我們需要對 led_test.v 程序中的輸入輸出端口分配到 FPGA 的真實管腳上。

    STEP #1

    點擊菜單欄“Tools”下的"User Constraint Editor";

    在這里插入圖片描述

    STEP #2

    在彈出的界面中單擊 Device;

    在這里插入圖片描述

    STEP #3

    在 Device 中單擊 I/O,可看到工程中用到的 IO 端口;

    STEP #4

    按如下方式分配管腳,LOC 就是與硬件中 FPGA 相對應(yīng)的管腳,VCCIOFPGA 的 IO 的電壓標(biāo)準(zhǔn),與硬件對應(yīng),其它在這里保持默認(rèn)即可;

    在這里插入圖片描述

    STEP #5

    單擊保存后會彈對話框,在這里選擇默認(rèn);

    在這里插入圖片描述

    四、 生成位流文件

    雙擊 Generate Bitstream,然后軟件會按照 Synthesize-> Device Map-> Place & Route-> Generate Bitstream 來產(chǎn)生位流文件。

    在這里插入圖片描述

    如果工程在生成位流文件過程中沒有錯誤,則會出現(xiàn)下圖中每一步都正確的“”,否則就會在 Messages 欄中顯示 errors 的錯誤。

    在這里插入圖片描述

    位流文件生成完成后,我們可以在 Report Summary 頁面的到了 FPGA 資源的使用情況。

    在這里插入圖片描述

    此外還可以通過下圖操作查看 RTL 視圖;

    在這里插入圖片描述

    在這里插入圖片描述

    五、下載和調(diào)試

    ?

    直接下載到FPGA的程序文件格式為:.sbit,該種方式掉電會丟失! 間接下載到FLASH的程序文件格式為:.sfc,該種方式掉電不會丟失!

    ?

    在上面生成了位流文件(.sbit)后,我們可以把 sbit 文件下載到 FPGA 芯片中,看一下 LED實際運行的效果。下載和調(diào)試之前先連接硬件,把 JTAG 下載器和開發(fā)板連接,然后開發(fā)板上電(下圖為開發(fā)板的硬件連接圖)。

    在這里插入圖片描述

    STEP #1

    單擊界面中的“Configuration”按鈕,作用一是下載程序到 FPGA 中運行;二是固化程序到 flash 中。

    在這里插入圖片描述

    STEP #2

    在彈出的界面中的單擊Boundary Scan”,然后在右側(cè)空白區(qū)單擊右鍵選擇Scan Device”;

    在這里插入圖片描述

    STEP #3

    在掃描到 JTAG 設(shè)備后會彈出如下對話框,并按如下加載.sbit 文件即可;

    STEP #4

    然后可以看到左側(cè)顯示了要加載的文件選中右側(cè)綠色的方塊,右擊會彈出下拉菜單并選擇"Program...",下載完成后在板上可以在開發(fā)板上看到 LED 流水燈的效果。注意:這種方式程序是在 FPGA 運行,掉電后會消失

    在這里插入圖片描述

    六、FLASH 程序固化

    可能已經(jīng)有朋友發(fā)現(xiàn)下載.sbit 文件到 FPGA 后,開發(fā)板重新上電后配置程序已經(jīng)丟失,還需要 JTAG 下載。這豈不麻煩!好吧,這一節(jié)我們來介紹如何把配置程序固化到開發(fā)板上的 FLASH中,這樣不用擔(dān)心掉電后程序丟失了。

    在我們的開發(fā)板上有一個 8Pin128MbitFLASH, 用于存儲配置程序。我們不能直接把sbit 文件下載到這個 FLASH 中,只能下載 sfc 文件到 flash 中。下面為大家介紹 FLASH 程序的固化的流程。

    STEP #1

    首先,需要 sbit 文件轉(zhuǎn)換成能下載的 flash 的 sfc 文件。在完成上節(jié)下載和調(diào)試后,選擇菜單"Operations"下"Convert File"進(jìn)行文件轉(zhuǎn)換。

    在這里插入圖片描述

    然后彈出如下界面,這里要根據(jù)硬件的 flash 型號來選擇 flash 的廠家和設(shè)備型號,開發(fā)板用到的是 WINBONDW25Q128Q。Flash Read Mode 選擇 SPI X4 然后選擇要轉(zhuǎn)換的 sbit 文件,點擊 OK 即可轉(zhuǎn)換;

    在這里插入圖片描述

    轉(zhuǎn)換完成后顯示如下界面,單擊 OK;

    在這里插入圖片描述

    STEP #2

    選中右側(cè)綠色的方塊,右擊會彈出下拉菜單并選擇"Scan outer Flash"。

    選擇已生成的 sfc 文件,單擊 Open;

    在這里插入圖片描述

    可以看到界面中有了 flash 器件,選中“Outer Flash”綠色方塊并右擊選擇菜單中“Program...

    彈出正在編程的進(jìn)度界面,flash 編程完成后進(jìn)度界面自動消失。

    至此,SPI FLASH 燒寫完畢,led_test 程序已經(jīng)固化到 SPI FLASH 中了。我們來驗證一下,關(guān)電重新啟動開發(fā)板,等待一會兒你就可以看到開發(fā)板上的 LED 燈已經(jīng)在做跑馬運動了。

    七、仿真驗證

    接下來我們不妨小試牛刀,讓仿真工具 modelsim 來輸出波形驗證流水燈程序設(shè)計結(jié)果和我們的預(yù)想是否一致。具體步驟如下:

    STEP #1 添加激勵測試文件,點擊 Project 下的 Add Source;

    在這里插入圖片描述

    STEP #2

    點擊 Add or create simulation sources 并"Next";

    在這里插入圖片描述

    STEP #3

    在彈出的對話框中輸入激勵文件的名字,這里我們輸入名為 vtf_led_test,其它按下圖設(shè)置;

    STEP #4

    點擊 OK 按鈕返回。

    STEP #5

    這里我們先不添加 IO Ports,點擊 OK。

    在這里插入圖片描述

    STEP #6

    在 Simulation 目錄下多了一個剛才添加的 vtf_led_test 文件。雙擊打開這個文件,可以看到里面只有 module 名的定義,其它都沒有。

    在這里插入圖片描述

    STEP #7

    接下去我們需要編寫這個 vtf_led_test.v 文件的內(nèi)容。首先定義輸入和輸出信號,然后需要實例化 led_test 模塊,讓 led_test 程序作為本測試程序的一部分。再添加復(fù)位和時鐘的激勵。完成后的 vtf_led_test.v 文件如下:

    `timescale 1ns / 1ns//////////////////////////////////////////////////////////////////////////////////// Module Name: vtf_led_test//////////////////////////////////////////////////////////////////////////////////module vtf_led_test;// Inputsreg sys_clk;reg  rst_n;// Outputswire [3:0] led;// Instantiate the Unit Under Test (UUT)led_test uut ( .sys_clk(sys_clk),    .rst_n(rst_n),  .led(led));initial begin // Initialize Inputs sys_clk = 0; rst_n = 0// Wait 100 ns for global reset to finish #1000;   rst_n = 1;         // Add stimulus here #20000;  //  $stop; endalways #10 sys_clk = ~ sys_clk;   //20ns   endmodule

    仿真模塊編寫流程:

    • ①、首先定義輸入和輸出信號;
    • ②、然后實例化模塊;
    • ③、最后添加復(fù)位和時鐘的激勵。

    仿真模塊編寫幾個注意事項:

    • ①、模塊中的input信號在仿真代碼中定義為reg類型;
    • ②、模塊中的output信號在仿真代碼中定義為wire類型!

    STEP #8

    編寫好后保存,vtf_led_test.v 自動成了這個仿真的頂層了,它下面是設(shè)計文件 led_test.v

    在這里插入圖片描述

    STEP #9

    接下來設(shè)置 PDS 的仿真配置,在軟件菜單 Project->Project Setting,然后在彈出的界面中進(jìn)行如下設(shè)置,注意仿真庫的路徑在《00.Pango Design Suite 2020.3 安裝》教程中已介紹。設(shè)置好后單擊 OK。

    在這里插入圖片描述

    STEP #10

    右擊仿真文件并在下拉菜單中選擇 Run Behavioral Simulation。這里我們做一下行為級的仿真就可以了。

    如果沒有錯誤,PDS 會調(diào)用 Modelsim 仿真軟件開始工作了

    STEP #11

    在彈出仿真界面后如下圖,界面是仿真軟件自動運行到仿真設(shè)置的 50ms 的波形。

    由于 LED[3:0]在程序中設(shè)計的狀態(tài)變化時間長,而仿真又比較耗時,在這里觀測 timer[31:0]計數(shù)器變化。把它放到 Wave 中觀察(點擊界面中的 uut, 再右擊右側(cè) timer, 在彈出的下拉菜單里選擇 Add Wave)。

    在這里插入圖片描述

    添加后 timer 顯示在 Wave 的波形界面上,如下圖所示。

    點擊 Restart 按鈕復(fù)位一下,再點擊 Run All 按鈕。(需要耐心!?。。?,可以看到仿真波形與設(shè)計相符。

    在這里插入圖片描述

    我們可以看到 led 的信號會逐一變 1,說明 LED1~LED4 燈逐個熄滅。

    ?

    補(bǔ)充:仿真自帶例程幾點注意:

    • ①、路徑名稱不能含有中文或空格
    • ②、需要重新編譯仿真庫,具體操作如下:
      • 打開 Tools -> Compile Simulation Libraries,分別:
        • 設(shè)置 Compiled Library Location 為:D:/modeltech64_10.1c/pango_sim_libraries;
        • 設(shè)置 Simulator Executable Path 為:D:/modeltech64_10.1c/win64,然后點擊Compile(大概需要2min)
    ?

    這里為止,我們的第一個項目就圓滿完成了,相信您也掌握了 PDS 的 FPGA 開發(fā)的整個流程,再也不是那個 FPGA 的門外漢了吧!

    聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
    覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
    贊 7
    收藏 7
    關(guān)注 431
    成為作者 賺取收益
    全部留言
    0/200
    成為第一個和作者交流的人吧