国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ZYNQ AXI_DMA_UDP以太網(wǎng)傳輸(二)問題記錄

這篇具有很好參考價值的文章主要介紹了ZYNQ AXI_DMA_UDP以太網(wǎng)傳輸(二)問題記錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

ZYNQ AXI_DMA_UDP以太網(wǎng)傳輸(二)問題記錄

上一篇文章只是簡單的記錄一下調(diào)試成功的代碼
但調(diào)試成功這個過程很痛苦,踩了很多坑,特此記錄,留眼以后查看

問題1:DMA傳輸過程中報錯 dma error

參考博客
xilinx dma調(diào)試筆記
ZYNQ AXI DMA調(diào)試細(xì)節(jié)
在調(diào)試過程中出現(xiàn)這類問題基本上都是這一句代碼出了問題:

axi_dma_start(MAX_PKT_LEN);

再往里面跳可以看見這樣一個函數(shù),在正點(diǎn)原子提供的例程中是這樣的

status = XAxiDma_SimpleTransfer(&axidma, (u32) rx_buffer_ptr,
    		pkt_len, XAXIDMA_DEVICE_TO_DMA);

出現(xiàn)報錯基本上都是因?yàn)閜kt_len設(shè)置的太小,按照xilinx dma調(diào)試筆記的說法就是**“問題是設(shè)置傳輸?shù)腟2MM buffer length太小”“這里讀出0x5011表示例化DMA的時候配置的S2MM buffer length太小,導(dǎo)致DMA在接收buff滿的時候還沒有遇到last信號,就會產(chǎn)生DMAIntErr錯誤”**
最開始的時候我在ip核中設(shè)置的位寬是23位,那么我想著那我就把這個MAX_PKT_LEN(也就是pkt_len)設(shè)置為2^23-1,這么一改之后確實(shí)沒有報錯了,dma跑通了,但是我還是有些奇怪,為什么不能太小呢,具體的范圍有嗎?
后來我看到評論里的**“這里讀出0x5011表示例化DMA的時候配置的S2MM buffer length太小,導(dǎo)致DMA在接收buff滿的時候還沒有遇到last信號,就會產(chǎn)生DMAIntErr錯誤”**突然悟了,仔細(xì)看我的數(shù)據(jù)產(chǎn)生模塊代碼,產(chǎn)生2048個32bit的數(shù)據(jù)后才會產(chǎn)生一個時鐘周期的tlast信號,如果我把MAX_PKT_LEN設(shè)置的調(diào)小,這里的dma傳輸?shù)氖且粋€字節(jié),相當(dāng)于8bit,按照之前的設(shè)置MAX_PKT_LEN=2048,那肯定接收不到talst信號呀,所以肯定會報錯的,所以有一種改法是,不動正點(diǎn)原子的代碼,增加MAX_PKT_LEN,因?yàn)楫a(chǎn)生2048個32bit的數(shù)據(jù)后才會產(chǎn)生一個時鐘周期的tlast信號,所以其實(shí)是傳遞8192個字節(jié)后產(chǎn)生talst信號,于是MAX_PKT_LEN需要大于等于8192!這么一改果然對了!興奮!當(dāng)然還有一種改法,那就是【JokerのZYNQ7020】AXI_DMA_PL_PS最下面說的那樣"所有涉及MAX_PKT_LEN的地方,都要*sizeof(u32) ;" 一開始還不是很理解,這時候才恍然大悟,所以在我自己的代碼里這一部分改成了

status = XAxiDma_SimpleTransfer(&axidma, (u32) rx_buffer_ptr,
    		(u32)(pkt_len*sizeof(u32)), XAXIDMA_DEVICE_TO_DMA);

之后我再設(shè)置MAX_PKT_LEN只需要設(shè)置為2048就行了

問題2:DMA傳輸過程中第一次傳輸?shù)臄?shù)據(jù)總是從5開始

這個問題本來其實(shí)是打算忽略的,因?yàn)槌说谝淮蝹鬏?,之后的傳輸又都是?開始傳輸?shù)?,但是想著留在這里始終是個刺,還是研究一下吧,沒想到一研究發(fā)現(xiàn)這個問題有點(diǎn)惱火。
我最開始的數(shù)據(jù)產(chǎn)生模塊的代碼中的狀態(tài)機(jī)轉(zhuǎn)移其實(shí)是這么寫的:

always @(*) begin
    case(r_current_state)
        IDLE : r_next_state = ( M_AXIS_tready) ? TRAN : IDLE;
        TRAN : r_next_state = (r_M_AXIS_tdata == TRANS_NUM) ? LAST : TRAN;
        LAST : r_next_state = M_AXIS_tready ? IDLE : LAST;
        default : r_next_state = IDLE;
    endcase
end

表面上看沒什么問題,但是按照這么寫每次第一次傳輸都從5開始,我就很奇怪,于是去ila抓信號查看,我發(fā)現(xiàn)我一進(jìn)入debug,首先不急著單步調(diào)試,而是直接在ila界面強(qiáng)制觸發(fā),發(fā)現(xiàn)信號如下圖所示:
ZYNQ AXI_DMA_UDP以太網(wǎng)傳輸(二)問題記錄,udp,單片機(jī),網(wǎng)絡(luò)協(xié)議

從圖中可以看出,我的代碼還沒運(yùn)行,但是FPGA內(nèi)部好像已經(jīng)滿足了我代碼里的狀態(tài)轉(zhuǎn)移條件,一開始就是個5,但是我一看M_AXIS_tready信號又是低電平,M_AXIS_tvalid信號又是高電平,這就給我整不會了,難道是在上電過程中M_AXIS_tready有高電平的時刻?然后因?yàn)檫M(jìn)入到了TRAN狀態(tài),在這個狀態(tài)下,tvaild信號為高電平,隨即tvaild和tready進(jìn)行握手,tready信號拉低,等待dma傳輸將tready拉高。
為了驗(yàn)證這個猜想,我首先注釋掉了TRAN狀態(tài)下的tvalid信號

TRAN : begin
            // r_M_AXIS_tvalid <= 1'd1;
            if(M_AXIS_tready)begin
                r_M_AXIS_tdata <= r_M_AXIS_tdata + 32'd1;
                if(r_M_AXIS_tdata == TRANS_NUM)
                    r_M_AXIS_tlast <= 1'd1;
                else
                    r_M_AXIS_tlast <= 1'd0;
            end
            else
                r_M_AXIS_tdata <= r_M_AXIS_tdata;
        end

然后跑ila發(fā)現(xiàn),
ZYNQ AXI_DMA_UDP以太網(wǎng)傳輸(二)問題記錄,udp,單片機(jī),網(wǎng)絡(luò)協(xié)議
數(shù)據(jù)一直在累加,M_AXIS_tready一直是1?。。?!這證明了部分猜想,可能是因?yàn)檫M(jìn)行了握手才導(dǎo)致M_AXIS_tready拉低的,但是我又改怎么避免誤觸發(fā)呢?最后是參考了博客ZYNQ通過AXI DMA實(shí)現(xiàn)PL發(fā)送連續(xù)大量數(shù)據(jù)到PS DDR
的寫法

always @(*) begin
    case(r_current_state)
        IDLE : r_next_state = (pos_trans_start && M_AXIS_tready) ? TRAN : IDLE;
        TRAN : r_next_state = (r_M_AXIS_tdata == TRANS_NUM) ? LAST : TRAN;
        LAST : r_next_state = M_AXIS_tready ? IDLE : LAST;
        default : r_next_state = IDLE;
    endcase
end

觸發(fā)條件增加一個上升沿,這樣子就能解決這個bug了。

問題3:網(wǎng)口調(diào)試助手連接不上指定端口

對于這個問題我是真無語。。。一開始我用正點(diǎn)原子的教程,跟著一步一步走,但是最后就是連接不上
ZYNQ AXI_DMA_UDP以太網(wǎng)傳輸(二)問題記錄,udp,單片機(jī),網(wǎng)絡(luò)協(xié)議
最后查了下最下面的報錯信息才意識到可能是端口號被占用了用不了,好家伙,結(jié)果我去查怎么查看電腦被占用的端口號,結(jié)果真占用了…于是我去招了個沒被占用的端口號,一試就成了,還是不能生搬硬套。

其實(shí)還有遇到很多問題,比如:

  • 根據(jù)csdn中的要求,axi fifo最好打開packet模式
  • 提供數(shù)據(jù)的模塊必須產(chǎn)生tlast信號給axi
    fifo,否則會沒有數(shù)據(jù),這也就要求提供數(shù)據(jù)的模塊外圍得包裝一個axi協(xié)議相關(guān)的架構(gòu),包括tlast,ready、valid、keep等
  • 使用以太網(wǎng)傳輸前需要確定自己的電腦哪些端口可用,否則會出現(xiàn)端口被占用導(dǎo)致無法網(wǎng)口調(diào)試的情況,如何查看被占用的端口可百度。
  • 正點(diǎn)原子提供的udp發(fā)數(shù)據(jù)的代碼有個bug,傳輸數(shù)據(jù)是寫死的,自己需要簡單改成變量。 另外自定義的axi數(shù)據(jù)模塊的時鐘命名會影響block design的驗(yàn)證:不能定義為i_clk(無語)

一開始遇到這些問題真的是好折磨,但后面解決完了回過頭看還是很有收獲的,bug就是讓人成長的(笑死)。文章來源地址http://www.zghlxwxcb.cn/news/detail-839661.html

到了這里,關(guān)于ZYNQ AXI_DMA_UDP以太網(wǎng)傳輸(二)問題記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • FPGA高端項(xiàng)目:圖像采集+GTX+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持

    FPGA高端項(xiàng)目:圖像采集+GTX+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持

    FPGA高端項(xiàng)目:圖像采集+GTX+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持 沒玩過圖像處理、GT高速接口、UDP網(wǎng)絡(luò)通信,都不好意思說自己玩兒過FPGA,這是CSDN某大佬說過的一句話,鄙人深信不疑。。。GT資源是Xilinx系列FPGA的重要賣點(diǎn),也是做

    2024年02月05日
    瀏覽(25)
  • FPGA高端項(xiàng)目:圖像縮放+GTX+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持

    FPGA高端項(xiàng)目:圖像縮放+GTX+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持

    FPGA高端項(xiàng)目:圖像縮放+GTX+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持 沒玩過圖像處理、GT高速接口、UDP網(wǎng)絡(luò)通信,都不好意思說自己玩兒過FPGA,這是CSDN某大佬說過的一句話,鄙人深信不疑。。。GT資源是Xilinx系列FPGA的重要賣點(diǎn),也是做

    2024年03月14日
    瀏覽(23)
  • FPGA高端項(xiàng)目:圖像縮放+GTP+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持

    FPGA高端項(xiàng)目:圖像縮放+GTP+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持

    FPGA高端項(xiàng)目:圖像縮放+GTP+UDP架構(gòu),高速接口以太網(wǎng)視頻傳輸,提供2套工程源碼加QT上位機(jī)源碼和技術(shù)支持 沒玩過圖像處理、GT高速接口、UDP網(wǎng)絡(luò)通信,都不好意思說自己玩兒過FPGA,這是CSDN某大佬說過的一句話,鄙人深信不疑。。。GT資源是Xilinx系列FPGA的重要賣點(diǎn),也是做

    2024年02月05日
    瀏覽(24)
  • 以太網(wǎng)UDP數(shù)據(jù)回環(huán)實(shí)驗(yàn)

    以太網(wǎng)UDP數(shù)據(jù)回環(huán)實(shí)驗(yàn)

    ????????前面說到TCP/IP是一個協(xié)議簇,其中包含有IP協(xié)議、TCP協(xié)議、UDP協(xié)議、ARP協(xié)議、DNS協(xié)議、FTP協(xié)議等。設(shè)備之間要想完成通信,就必須通過這些網(wǎng)絡(luò)通信協(xié)議。 ? ? ? ? ?物理層的主要作用就是傳輸比特流(將1、0轉(zhuǎn)化為電流強(qiáng)弱來進(jìn)行傳輸,到達(dá)目的地后在轉(zhuǎn)化為1、

    2024年01月23日
    瀏覽(20)
  • FPGA - 以太網(wǎng)UDP通信(一)

    FPGA - 以太網(wǎng)UDP通信(一)

    ?以太網(wǎng)是一種計算機(jī)局域網(wǎng)技術(shù)。IEEE組織的IEEE 802.3標(biāo)準(zhǔn)制定了以太網(wǎng)的技術(shù)標(biāo)準(zhǔn),它規(guī)定了包括物理層的連線、電子信號和介質(zhì)訪問層協(xié)議的內(nèi)容。 ? 以太網(wǎng)是現(xiàn)實(shí)世界中最普遍的一種計算機(jī)網(wǎng)絡(luò)。以太網(wǎng)有兩類:第一類是經(jīng)典以太網(wǎng),第二類是交換式以太網(wǎng),使用了一

    2024年04月18日
    瀏覽(21)
  • FPGA 以太網(wǎng)傳輸ov5640視頻

    FPGA 以太網(wǎng)傳輸ov5640視頻

    使用 DFZU4EV MPSoC 開發(fā)板及雙目 OV5640 攝像頭其中一個攝像頭實(shí)現(xiàn)圖像采集,并通過開發(fā)板上的以太網(wǎng)接口發(fā)送給上位機(jī)實(shí)時顯示。 時鐘模塊用于為 I2C 驅(qū)動模塊、以太網(wǎng)頂層模塊和開始傳輸控制模塊提供驅(qū)動時鐘;I2C 驅(qū)動模塊和 I2C 配置模塊用于初始化 OV5640 圖像傳感器;攝像

    2024年04月10日
    瀏覽(18)
  • 車載以太網(wǎng) - 傳輸層 - TCP/IP

    車載以太網(wǎng) - 傳輸層 - TCP/IP

    一、傳輸層基礎(chǔ)介紹 傳輸層主要包括兩種協(xié)議 傳輸層端口號 二、UDP通信 ?UDP協(xié)議介紹 UDP 通信特點(diǎn): UDP?Segment結(jié)構(gòu) UDP通信過程 三、TCP通信 TCP通信特點(diǎn): TCP Segment結(jié)構(gòu) 傳輸層的尋址方式: 端口號 ????????包括傳輸層的尋址方式,TCP/UDP 傳輸層協(xié)議工作流程,及TCP/UDP Packe

    2024年02月09日
    瀏覽(20)
  • 車載以太網(wǎng) - 傳輸層 - TCP通信過程

    車載以太網(wǎng) - 傳輸層 - TCP通信過程

    TCP 通信階段 1、連接建立Connection establishment 2、數(shù)據(jù)傳輸 Data?transfer 3、連接釋放 Connection release TCP通信的三個階段: TCP連接(三次握手) 1、Client(ECUA)?-?Server(ECU B)第一次握手 2、Server?-?Client 第二次握手 3、Client -?Server 第三次握手 數(shù)據(jù)傳輸 1、Client - ServerTCP 數(shù)據(jù)請求 2、TC

    2024年02月11日
    瀏覽(21)
  • 基于光口的以太網(wǎng) udp 回環(huán)實(shí)驗(yàn)

    基于光口的以太網(wǎng) udp 回環(huán)實(shí)驗(yàn)

    本章實(shí)驗(yàn)我們通過網(wǎng)絡(luò)調(diào)試助手發(fā)送數(shù)據(jù)給 FPGA,FPGA通過光口接收數(shù)據(jù)并將數(shù)據(jù)使用 UDP 協(xié)議發(fā)送給電腦。 提示:任何文章不要過度深思!萬事萬物都經(jīng)不起審視,因?yàn)槭郎蠜]有同樣的成長環(huán)境,也沒有同樣的認(rèn)知水平,更「沒有適用于所有人的解決方案」 ;不要急著評判文

    2024年01月19日
    瀏覽(24)
  • 以太網(wǎng)Checksum-UDP手算教學(xué)

    以太網(wǎng)Checksum-UDP手算教學(xué)

    tcp/ip的checksum計算步驟及方法請見如下鏈接: 以太網(wǎng)Checksum-TCP/IP手算拆解教學(xué)-CSDN博客 1、UDP數(shù)據(jù)結(jié)構(gòu)如圖 在計算UDP首部校驗(yàn)和時,計算范圍包括了偽首部、UDP首部、UDP數(shù)據(jù)報,其中各個部分?jǐn)?shù)據(jù)容量如下: 偽首部—---------12字節(jié)=48字符 其中 源IP地址---------4字節(jié)=16字符 目的

    2024年04月28日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包