0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA設(shè)計(jì)調(diào)試流程

FPGA設(shè)計(jì)論壇 ? 來(lái)源:FPGA設(shè)計(jì)論壇 ? 2025-03-04 11:02 ? 次閱讀

FPGA設(shè)計(jì)調(diào)試流程

FPGA開(kāi)發(fā)是一個(gè)不斷迭代的過(guò)程,一般的FPGA設(shè)計(jì)流程一般包含下面幾個(gè)步驟:

硬件架構(gòu)和算法驗(yàn)證:實(shí)現(xiàn)需要的功能需要哪幾個(gè)模塊,模塊和模塊之間如何進(jìn)行通信和連接;硬件算法是否可行和穩(wěn)定(以圖像處理算法為例,一般可以采用MATLAB進(jìn)行算法驗(yàn)證);

RTL代碼編寫;

硬件調(diào)試與驗(yàn)證:一般這個(gè)過(guò)程會(huì)耗費(fèi)大量的時(shí)間,如果沒(méi)有一定的經(jīng)驗(yàn)以及技巧,有可能會(huì)使得開(kāi)發(fā)時(shí)間延長(zhǎng)幾倍,甚至開(kāi)發(fā)失??;

調(diào)試,即Debug,有一定開(kāi)發(fā)經(jīng)驗(yàn)的人一定會(huì)明確這是設(shè)計(jì)中最復(fù)雜最磨人的部分。對(duì)于一個(gè)龐大復(fù)雜的FPGA工程而言,出現(xiàn)問(wèn)題的概率極大,這時(shí)如果沒(méi)有一個(gè)清晰的Debug思路,調(diào)試過(guò)程只能是像無(wú)頭蒼蠅一樣四處亂撞。在FPGA設(shè)計(jì)中一般的調(diào)試思路如下所示:
?
首先排查硬件問(wèn)題:在出現(xiàn)問(wèn)題時(shí),首先懷疑并排除硬件問(wèn)題。首先檢查開(kāi)發(fā)板的供電和連接是否正常,是否有電子元件被燒毀,是否出現(xiàn)元件虛焊等問(wèn)題。確認(rèn)開(kāi)發(fā)板以及供電沒(méi)有問(wèn)題后,使用例程或者已有的程序或者工程對(duì)出現(xiàn)問(wèn)題的核心部件進(jìn)行測(cè)試。例如,在讀寫DDR時(shí),如果DDR沒(méi)有反應(yīng),可以通過(guò)網(wǎng)絡(luò)查找例程,或者使用開(kāi)發(fā)板官方提供的例程對(duì)DDR讀寫進(jìn)行測(cè)試,確認(rèn)DDR可以正常工作;在讀寫SD卡時(shí),可以嘗試換一張SD卡操作,或者通過(guò)將SD卡切換到其他設(shè)備上,確保SD卡沒(méi)有損壞等。實(shí)際工程應(yīng)用中,需要靈活選擇測(cè)試和排查方案,但是目的基本都是相同的。
?
其次排查全局信號(hào):確認(rèn)硬件連接沒(méi)有問(wèn)題后,排查全局信號(hào)可能出現(xiàn)的問(wèn)題。全局信號(hào)一般指接在內(nèi)部所有模塊的信號(hào),例如i_sys_clk和i_sys_rst_n等。需要確保這些信號(hào)正常工作,之后的RTL排查才有意義。
?
最后排查RTL代碼:在確保硬件和全局信號(hào)沒(méi)有問(wèn)題后,再開(kāi)始排查RTL代碼。在RTL代碼排查中也有一定的順序可以參考,一般可以參考下面的順序:

檢查主從設(shè)備(模塊)之間的握手機(jī)制,或者說(shuō)檢查主從設(shè)備之間是否正常連接。很多時(shí)候可以參考設(shè)備的官方Datasheet檢查主從模塊之間的初始化指令是否書(shū)寫正確。

檢查狀態(tài)跳轉(zhuǎn)是否正常:在初始化過(guò)程中,經(jīng)常使用狀態(tài)機(jī)進(jìn)行RTL編程。

檢查讀寫數(shù)據(jù)是否正常:可以設(shè)計(jì)一些“假數(shù)據(jù)”,例如人為規(guī)定的一些有規(guī)律的數(shù)據(jù),檢查這些數(shù)據(jù)在從設(shè)備中的地址是否正常,數(shù)據(jù)是否正確。

檢查執(zhí)行操作的觸發(fā)信號(hào):檢查信號(hào)的Trigger是否正常工作。

總之,RTL調(diào)試是最枯燥的部分,很多時(shí)候需要“抽絲剝繭”、“追本溯源”才能找到問(wèn)題所在。但是筆者認(rèn)為這恰恰是體現(xiàn)一個(gè)FPGA工程師硬實(shí)力的必要技能和心境。

Vivado ILA IP 的使用

ILA,全稱Integrated Logic Analyzer,是Xilinx FPGA芯片中設(shè)計(jì)的芯片內(nèi)部集成邏輯分析儀。它可以在一定程度上替代外部的傳統(tǒng)邏輯分析儀的作用。ILA通常和VIO(Vritual Input/Output)結(jié)合使用,VIO不僅可以實(shí)時(shí)監(jiān)控內(nèi)部的邏輯信號(hào)和端口信號(hào),還可以充當(dāng)模擬輸入驅(qū)動(dòng)內(nèi)部端口。ILA監(jiān)控內(nèi)部信號(hào)輸出給PC端,而VIO接收PC端的實(shí)時(shí)指令從而給內(nèi)部端口提供輸入信號(hào)。
?
ILA調(diào)試有多種方法,可以直接在代碼中通過(guò)原語(yǔ)添加,也可以在原理圖中通過(guò)Debug添加,也可以在網(wǎng)絡(luò)列表Netlist中添加。

?

在這里先創(chuàng)建一個(gè)示例工程,使用一個(gè)呼吸燈模塊作為頂層代碼:

module Breath_LED (
    input sys_clk,
    input sys_rst_n,
    output reg led
);  
    parameter CNT_2US_MAX = 7'd100;
    parameter CNT_2MS_MAX = 10'd1000;
    parameter CNT_2S_MAX = 10'd1000;

    reg [6:0] cnt_2us;  // sys_clk = 50MHz, T = 20ns, cnt_2us: 0 ~ 99
    reg [9:0] cnt_2ms;
    reg [9:0] cnt_2s;  // cnt_2ms, cnt_2s: 0 ~ 999
    reg inc_dec_flag;   // 0: increase, 1: decrease

    // count to 2us
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            cnt_2us <= 7'd0;
        else if (cnt_2us == (CNT_2US_MAX - 7'd1))
            cnt_2us <= 7'd0;
        else 
            cnt_2us <= cnt_2us + 7'd1;
    end

    // count to 2ms by cnt_2us
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            cnt_2ms <= 10'd0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)))
            cnt_2ms <= 10'd0;
        else if (cnt_2us == (CNT_2US_MAX - 7'd1))
            cnt_2ms <= cnt_2ms + 10'd1;
    end

    // count to 2s by cnt_2ms
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            cnt_2s <= 10'd0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)) && 
            (cnt_2s == (CNT_2S_MAX - 10'd1)))
            cnt_2s <= 10'd0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)))
            cnt_2s <= cnt_2s + 10'd1;
    end

    // inc_dec_flag
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            inc_dec_flag <= 1'b0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)) && 
            (cnt_2s == (CNT_2S_MAX - 10'd1)))
            inc_dec_flag <= ~inc_dec_flag;
        else 
            inc_dec_flag <= inc_dec_flag;
    end

    // led PWM configuration
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            led <= 1'b0;
        else if ((inc_dec_flag == 1'b0) && (cnt_2ms <= cnt_2s)) // increase
            led <= 1'b1;
        else if ((inc_dec_flag == 1'b1) && (cnt_2ms >= cnt_2s)) // decrease
            led <= 1'b1;
        else 
            led <= 1'b0;
    end

endmodule

IP核配置

在IP Catalog中搜索ILA即可找到ILA IP核,雙擊之后就會(huì)跳出配置界面。

f4fa2ee2-f720-11ef-9310-92fbcf53809c.png

設(shè)置部件名稱、探針數(shù)量(需要測(cè)量信號(hào)的數(shù)量)和采樣深度。clk信號(hào)一般是系統(tǒng)的時(shí)鐘信號(hào),ILA IP會(huì)在每個(gè)clk上升沿(或下降沿、具體有待考量)采一次對(duì)應(yīng)信號(hào)的數(shù)據(jù),直到采信號(hào)的次數(shù)達(dá)到采樣深度為止。

f50a1ffa-f720-11ef-9310-92fbcf53809c.png

在這里,假設(shè)代碼出現(xiàn)了問(wèn)題,我們需要檢測(cè)sys_clk、led、sys_rst_n、cnt_2us、cnt_2ms四個(gè)信號(hào)。四個(gè)信號(hào)的寬度分別為1,1,7,10。

f5273158-f720-11ef-9310-92fbcf53809c.png

完成設(shè)置后,點(diǎn)擊OK,出現(xiàn)下面界面。如果綜合選項(xiàng)選擇Global,代碼會(huì)在每次綜合時(shí)都對(duì)ILA進(jìn)行綜合;如果選擇OutofconextperIP(OOC模式),代碼只會(huì)在ILA設(shè)置發(fā)生改變時(shí)對(duì)ILA進(jìn)行綜合。一般選擇后者即可,可以加快綜合速度。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1643

    文章

    21967

    瀏覽量

    614263
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    829

    瀏覽量

    68243
  • 硬件調(diào)試
    +關(guān)注

    關(guān)注

    1

    文章

    10

    瀏覽量

    10819
  • ILA
    ILA
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    3709

原文標(biāo)題:使用ILA進(jìn)行FPGA硬件調(diào)試

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA基本開(kāi)發(fā)流程概述

    驗(yàn)證無(wú)誤,則可以生產(chǎn)下載配置文件燒錄的實(shí)際器件中進(jìn)行板級(jí)的調(diào)試工作。圖5.15 FPGA/CPLD開(kāi)發(fā)流程當(dāng)然了,對(duì)于沒(méi)有實(shí)際工程經(jīng)驗(yàn)的初學(xué)者而言,這個(gè)流程圖可能不是那么容易理解。不過(guò)
    發(fā)表于 01-28 02:29

    FPGA基本開(kāi)發(fā)設(shè)計(jì)流程

    、板級(jí)仿真以及芯片編程與調(diào)試等主要步驟。圖1-10 FPGA開(kāi)發(fā)的一般流程1.電路功能設(shè)計(jì)在系統(tǒng)設(shè)計(jì)之前,首先要進(jìn)行的是方案論證、系統(tǒng)設(shè)計(jì)和FPGA芯片選擇等準(zhǔn)備工作。系統(tǒng)工程師根據(jù)任
    發(fā)表于 07-23 09:12

    FPGA的設(shè)計(jì)流程是怎樣的

    第二章 FPGA 開(kāi)發(fā)流程FPGA 的設(shè)計(jì)流程就是利用 EDA 開(kāi)發(fā)軟件和編程工具對(duì) FPGA 芯片進(jìn)行開(kāi)發(fā)的過(guò)程。原理圖和HDL(Hard
    發(fā)表于 02-23 06:23

    FPGA調(diào)試工具-chipscope

    FPGA調(diào)試工具chipscope,學(xué)習(xí)與使用FPGA必用的工具。。
    發(fā)表于 03-23 09:45 ?86次下載

    FPGA硬件系統(tǒng)的調(diào)試方法

    FPGA硬件系統(tǒng)的調(diào)試方法 在調(diào)試FPGA電路時(shí)要遵循一定的原則和技巧,才能減少調(diào)試時(shí)間,避免誤操作損壞電路。一般情況下,可以參考以下步驟
    發(fā)表于 02-08 14:44 ?2913次閱讀

    加速FPGA系統(tǒng)實(shí)時(shí)調(diào)試技術(shù)

    隨著 FPGA 的設(shè)計(jì)速度、尺寸和復(fù)雜度明顯增長(zhǎng),使得整個(gè)設(shè)計(jì)流程中的實(shí)時(shí)驗(yàn)證和調(diào)試成為當(dāng)前FPGA 系統(tǒng)的關(guān)鍵部分。獲得FPGA 內(nèi)部信號(hào)
    發(fā)表于 06-10 15:42 ?28次下載
    加速<b class='flag-5'>FPGA</b>系統(tǒng)實(shí)時(shí)<b class='flag-5'>調(diào)試</b>技術(shù)

    FPGA設(shè)計(jì)流程指南

    FPGA設(shè)計(jì)的流程,步驟,選型,仿真,軟硬件設(shè)計(jì),調(diào)試流程。
    發(fā)表于 05-11 14:33 ?29次下載

    對(duì)FPGA進(jìn)行測(cè)試和調(diào)試有哪些辦法?

    FPGA的設(shè)計(jì)速度、尺寸和復(fù)雜度明顯增加,使得整個(gè)設(shè)計(jì)流程中的驗(yàn)證和調(diào)試成為當(dāng)前FPGA系統(tǒng)的關(guān)鍵部分。獲得FPGA內(nèi)部信號(hào)有限、
    發(fā)表于 07-19 14:19 ?1.4w次閱讀
    對(duì)<b class='flag-5'>FPGA</b>進(jìn)行測(cè)試和<b class='flag-5'>調(diào)試</b>有哪些辦法?

    關(guān)于FPGA它的開(kāi)發(fā)流程是怎樣的

    FPGA的設(shè)計(jì)流程就是利用EDA開(kāi)發(fā)軟件和編程工具對(duì)FPGA芯片進(jìn)行開(kāi)發(fā)的過(guò)程。FPGA的開(kāi)發(fā)流程一般包括功能定義/器件選型、設(shè)計(jì)輸入、功能
    發(fā)表于 11-06 15:17 ?2636次閱讀

    FPGA的開(kāi)發(fā)流程以及它的適用場(chǎng)景

    FPGA的設(shè)計(jì)流程就是利用EDA開(kāi)發(fā)軟件和編程工具對(duì)FPGA芯片進(jìn)行開(kāi)發(fā)的過(guò)程。FPGA的開(kāi)發(fā)流程包括功能定義/器件選型、設(shè)計(jì)輸入、功能仿真
    發(fā)表于 11-20 15:06 ?1976次閱讀

    FPGA設(shè)計(jì)與調(diào)試教程說(shuō)明

    FPGA概述FPGA調(diào)試介紹調(diào)試挑戰(zhàn)設(shè)計(jì)流程概述■FPGA調(diào)
    發(fā)表于 09-22 17:43 ?11次下載
    <b class='flag-5'>FPGA</b>設(shè)計(jì)與<b class='flag-5'>調(diào)試</b>教程說(shuō)明

    FPGA設(shè)計(jì)流程指南

    FPGA設(shè)計(jì)流程指南
    發(fā)表于 11-02 16:29 ?12次下載

    FPGA基礎(chǔ)知識(shí)----第二章 FPGA 開(kāi)發(fā)流程

    第二章 FPGA 開(kāi)發(fā)流程FPGA 的設(shè)計(jì)流程就是利用 EDA 開(kāi)發(fā)軟件和編程工具對(duì) FPGA 芯片進(jìn)行開(kāi)發(fā)的過(guò)程。原理圖和HDL(Hard
    發(fā)表于 12-29 19:40 ?9次下載
    <b class='flag-5'>FPGA</b>基礎(chǔ)知識(shí)----第二章 <b class='flag-5'>FPGA</b> 開(kāi)發(fā)<b class='flag-5'>流程</b>

    FPGA入門之FPGA 開(kāi)發(fā)流程

    硬件電路描述方法。其中,運(yùn)用 HDL 設(shè)計(jì)方法具有更好的移植性、通用性以及利于模塊劃分的特點(diǎn),在工作學(xué)習(xí)中被廣泛使用。典型 FPGA 的開(kāi)發(fā)流程一般如下圖所示, 其包括功能定義/器件選型、設(shè)計(jì)輸入、功能仿真、綜合優(yōu)化、綜合后仿真、實(shí)現(xiàn)、布線后仿真、板級(jí)仿真以及芯片編程與
    的頭像 發(fā)表于 03-21 10:26 ?3656次閱讀

    FPGA設(shè)計(jì)流程

    FPGA的設(shè)計(jì)流程主要包括HDL代碼編寫、RTL綜合、布局布線、靜態(tài)時(shí)序分析、生成下載文件。下面將逐一介紹各部分。下面是FPGA設(shè)計(jì)的流程圖。
    的頭像 發(fā)表于 07-04 12:06 ?1712次閱讀
    <b class='flag-5'>FPGA</b>設(shè)計(jì)<b class='flag-5'>流程</b>

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品