一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

一個req-ack接口引發(fā)的問題分析

CHANBAEK ? 來源:FPGA的現(xiàn)今未 ? 作者:FPGA的現(xiàn)今未 ? 2023-09-06 17:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近定位了一個bug,代碼是以前的同事留下的,沒有經(jīng)過太多充分的測試,且沒有仿真平臺,定位的過程是相當(dāng)?shù)耐纯啵昂蠡瞬畈欢嘁粋€星期。但是解決這個bug后,回頭看,其實(shí)也是一個很簡單的問題,就是請求應(yīng)答(req_ack)接口處理不正確造成的……

問題現(xiàn)象

項(xiàng)目在上板測試過程中必現(xiàn)報文被丟棄的現(xiàn)象,方案不是很復(fù)雜。FPGACPU獲取報文索引,然后根據(jù)索引讀取CPU內(nèi)存的報文(為了描述簡單,這里省去項(xiàng)目相關(guān)信息)。

定位過程

1、該模塊以前沒有問題,后繼模塊工作頻率降低后,給該模塊反壓了,才會出現(xiàn)該問題,首先是各種統(tǒng)計,上板測試沒有發(fā)現(xiàn)問題,說明邏輯內(nèi)部處理報文的時候沒有丟包;

2、這里省略1萬字各種懷疑各種測試,多方位證實(shí)了邏輯內(nèi)部處理報文的時候確實(shí)是沒有丟包的;

3、懷疑是不是CPU丟了索引,或者FPGA丟了索引?但是都不太好證實(shí),因?yàn)閬G棄報文的時候FPGA本身不感知,也不知道軟件下發(fā)了多少索引。

4、在和同事一起討論懷疑點(diǎn),檢視代碼的時候,看到CPU告知FPGA描述符的時候,通過寫寄存器的方式來告知,F(xiàn)PGA處理采用的是req_ack接口。如下圖所示:其實(shí)這也不是一個標(biāo)準(zhǔn)的req_ack接口,因?yàn)檎埱蠓街唤o一拍的wen信號,req和ack的處理都是應(yīng)答方內(nèi)部的一種處理方式。

圖片

所以有一個大膽猜想,會不會是上一次req還沒有處理完,CPU又來了下一個req導(dǎo)致有索引丟棄,從而導(dǎo)致了報文丟棄了?這個現(xiàn)象很好監(jiān)測,當(dāng)wen和req同時為1時,即為錯誤,監(jiān)測代碼如下所示:

always@(posedge clk_sys or posedge rst)
begin
    if(rst == 1'b1) begin
        error <= 1'b0;
    end
    else if((wen == 1'b1) && (req == 1'b1)) begin
        error <= 1'b1;
    end
end

增加error信號后,再次測試的過程中,果然error信號拉高了。

解決方案

首先CPU在寫寄存器的過程中,并不知道FPGA是否正確處理上一個索引,其次FPGA處理一個索引和報文的時間是未知的,和后繼模塊的性能有關(guān)。所以解決這個問題的方案就是先緩存CPU寫入的索引,然后再讀出來慢慢處理。如下圖所示:

圖片

CPU寫入索引后,先不處理,全部緩存到一個fifo中,然后再從fifo中讀出每一個索引依次處理。修改后的方案再次做穩(wěn)定性測試,上述問題不再出現(xiàn)。

這里會有一個問題,該fifo不會溢出嗎?在這個項(xiàng)目中,是不會的,因?yàn)镃PU連續(xù)寫入索引的最大個數(shù)是32個,所以只要fifo的深度大于32即可。那如果CPU連續(xù)寫入索引的個數(shù)沒有限制呢?上述方案也就無效了,必須和CPU之間建立一個發(fā)壓的機(jī)制,保證CPU寫入的索引不會丟失。

總結(jié)

本案例中的問題,是使用req_ack接口時,常見的一個問題,請求方和應(yīng)答方要保持好握手,在上一個任務(wù)處理結(jié)束前,不可以發(fā)起下一個任務(wù)。

另外這種接口在高性能場景下,是有一定的性能損耗,盡可能采用流式接口來處理。

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

    關(guān)注

    68

    文章

    11080

    瀏覽量

    217088
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153751
  • 仿真
    +關(guān)注

    關(guān)注

    52

    文章

    4289

    瀏覽量

    135865
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3125

    瀏覽量

    75270
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70741
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    TC377中如何使用這個SCU接口信號-SMU_EMGSTP_REQ?

    TC377中如何使用這個 SCU 接口信號-SMU_EMGSTP_REQ? 它是觸發(fā)微控制器中的任何引腳還是它的處理方式...??
    發(fā)表于 01-31 06:48

    PCM3168的I2C接口訪問不回ACK是怎么回事?

    我在用DSP的I2C接口訪問PCM3168A的時候遇到了問題:發(fā)完從地址以后,發(fā)現(xiàn)PCM3168不回ACK,請問要想讓這個片子的控制接口工作在I2C模式下,除了配置MODE、ADR0、ADR1以外
    發(fā)表于 10-31 06:48

    BLE中的ACK機(jī)制

    ACK
    橙群微電子
    發(fā)布于 :2023年03月31日 09:52:36

    CC2530 等待ack回復(fù)時間內(nèi)如何處理其它幀?

    CC2530 等待ack回復(fù)時間內(nèi)如何處理其它幀?CC2530 發(fā)送ack.req的幀時,發(fā)送完成后會在段時間內(nèi)等待
    發(fā)表于 03-30 10:19

    為什么不發(fā)送SCAN-REQ事件?

    嗨,我正在使用帶有DTM固件的BlueNRG-2芯片。它通過SPI連接到主處理器STM32。該藍(lán)牙設(shè)備在外圍設(shè)備中起作用(某些傳感器)。 廣告工作正常:作為主設(shè)備的另一個設(shè)備接收ADV_IND
    發(fā)表于 09-26 17:50

    ACK電路圖

    ACK電路圖
    發(fā)表于 01-01 05:36 ?1391次閱讀
    <b class='flag-5'>ACK</b>電路圖

    什么是ACK (ACKnowledge Character)

    什么是ACK (ACKnowledge Character)  英文縮寫: ACK (ACKnowledge Character) 中文譯名: 確認(rèn)字符 分  類: 傳輸與接入
    發(fā)表于 02-22 10:12 ?1982次閱讀

    24C02中IIC總線的應(yīng)答信號(ACK)時序圖分析

    24C02中IIC總線的應(yīng)答信號(ACK)時序圖分析,很好的單片機(jī)學(xué)習(xí)資料。
    發(fā)表于 03-21 17:30 ?93次下載

    CAN總線波形中為什么ACK電平偏高?

    CAN總線直以實(shí)時性強(qiáng)、傳輸距離遠(yuǎn)、抗干擾能力強(qiáng)、數(shù)據(jù)保證到達(dá)等特點(diǎn)而廣泛應(yīng)用于高可靠性的場合。但常常在觀察CAN通信波形時,我們會發(fā)現(xiàn)差分電平在ACK段突然增高,這是什么原因?qū)е碌哪??這里結(jié)合測試實(shí)例對ACK電平偏高的原因做
    發(fā)表于 07-05 15:08 ?9973次閱讀
    CAN總線波形中為什么<b class='flag-5'>ACK</b>電平偏高?

    Ack/Nak機(jī)制詳細(xì)介紹

    Ack/Nak是種由硬件實(shí)現(xiàn)的,完全自動的機(jī)制,目的是保證TLP有效可靠地傳輸。Ack DLLP用于確認(rèn)TLP被成功接收,Nak DLLP則用于表明TLP傳輸中遇到了錯誤。
    的頭像 發(fā)表于 05-29 14:46 ?1.6w次閱讀
    <b class='flag-5'>Ack</b>/Nak機(jī)制詳細(xì)介紹

    簡單地分析幾個Ack/Nak機(jī)制的例子

    設(shè)備B接收到了TLP4095,但是該TLP并未通過CRC校檢(即存在錯誤)。此時無論AckNak_LATENCY_TIMER處于何種狀態(tài),設(shè)備B都會立即向設(shè)備A返回Ack4094(注意返回的Ack
    的頭像 發(fā)表于 05-30 09:16 ?6660次閱讀
    簡單地<b class='flag-5'>分析</b>幾個<b class='flag-5'>Ack</b>/Nak機(jī)制的例子

    I2C接口配置ES7243錄音芯片,MCU(STM32)收不到I2C ACK的問題

    I2C接口配置ES7243錄音芯片,MCU(STM32)收不到I2C ACK的問題
    發(fā)表于 12-08 16:36 ?10次下載
    I2C<b class='flag-5'>接口</b>配置ES7243錄音芯片,MCU(STM32)收不到I2C <b class='flag-5'>ACK</b>的問題

    ngx_dynamic_limit_req_module IP動態(tài)鎖定工具

    ./oschina_soft/ngx_dynamic_limit_req_module.zip
    發(fā)表于 05-07 09:29 ?0次下載
    ngx_dynamic_limit_<b class='flag-5'>req</b>_module IP動態(tài)鎖定工具

    ack文本查找工具

    ./oschina_soft/ack3.zip
    發(fā)表于 05-25 09:24 ?0次下載
    <b class='flag-5'>ack</b>文本查找工具

    CAN總線波形中為什么ACK電平偏高?

    在觀察CAN通信波形時,我們會發(fā)現(xiàn)差分電平在ACK段突然增高,這是什么原因?qū)е碌哪??本文結(jié)合測試實(shí)例對ACK電平偏高的原因做簡單分析。ACK簡介AC
    的頭像 發(fā)表于 03-28 08:23 ?1850次閱讀
    CAN總線波形中為什么<b class='flag-5'>ACK</b>電平偏高?