精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個req-ack接口引發的問題分析

CHANBAEK ? 來源:FPGA的現今未 ? 作者:FPGA的現今未 ? 2023-09-06 17:36 ? 次閱讀

最近定位了一個bug,代碼是以前的同事留下的,沒有經過太多充分的測試,且沒有仿真平臺,定位的過程是相當的痛苦,前后花了差不多一個星期。但是解決這個bug后,回頭看,其實也是一個很簡單的問題,就是請求應答(req_ack)接口處理不正確造成的……

問題現象

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

定位過程

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

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

3、懷疑是不是CPU丟了索引,或者FPGA丟了索引?但是都不太好證實,因為丟棄報文的時候FPGA本身不感知,也不知道軟件下發了多少索引。

4、在和同事一起討論懷疑點,檢視代碼的時候,看到CPU告知FPGA描述符的時候,通過寫寄存器的方式來告知,FPGA處理采用的是req_ack接口。如下圖所示:其實這也不是一個標準的req_ack接口,因為請求方只給一拍的wen信號,req和ack的處理都是應答方內部的一種處理方式。

圖片

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

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處理一個索引和報文的時間是未知的,和后繼模塊的性能有關。所以解決這個問題的方案就是先緩存CPU寫入的索引,然后再讀出來慢慢處理。如下圖所示:

圖片

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

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

總結

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10826

    瀏覽量

    211160
  • 接口
    +關注

    關注

    33

    文章

    8503

    瀏覽量

    150840
  • 仿真
    +關注

    關注

    50

    文章

    4044

    瀏覽量

    133421
  • 內存
    +關注

    關注

    8

    文章

    3002

    瀏覽量

    73887
  • 代碼
    +關注

    關注

    30

    文章

    4751

    瀏覽量

    68357
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    BLE中的ACK機制

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

    CC2530 等待ack回復時間內如何處理其它幀?

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

    為什么不發送SCAN-REQ事件?

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

    ACK電路圖

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

    什么是ACK (ACKnowledge Character)

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

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

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

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

    CAN總線直以實時性強、傳輸距離遠、抗干擾能力強、數據保證到達等特點而廣泛應用于高可靠性的場合。但常常在觀察CAN通信波形時,我們會發現差分電平在ACK段突然增高,這是什么原因導致的呢?這里結合測試實例對ACK電平偏高的原因做
    發表于 07-05 15:08 ?9420次閱讀
    CAN總線波形中為什么<b class='flag-5'>ACK</b>電平偏高?

    Ack/Nak機制詳細介紹

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

    簡單地分析幾個Ack/Nak機制的例子

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

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

    I2C接口配置ES7243錄音芯片,MCU(STM32)收不到I2C ACK的問題
    發表于 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動態鎖定工具

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

    ack文本查找工具

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

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

    在觀察CAN通信波形時,我們會發現差分電平在ACK段突然增高,這是什么原因導致的呢?本文結合測試實例對ACK電平偏高的原因做簡單分析ACK簡介AC
    的頭像 發表于 03-28 08:23 ?1075次閱讀
    CAN總線波形中為什么<b class='flag-5'>ACK</b>電平偏高?