SRIO調試(C6678->SRIO和Virtex6->FPGA)


C6678->SRIO和Virtex6->FPGA

 

設計的板子到了SRIO調試階段了,在板子上,一片V6和兩片6678通過4XSRIO互聯,中間沒有Switch,總算搞定了相互之間的通信。

  首先,感謝Ti論壇提供的SRIO程序范例,但是其硬件平台是EVM板,更多的只能用於loopback測試,但是可以在其基礎上修改。

1.初始化DSP的SRIO,主要是對SerDes進行配置,然后是Lane和Speed的配置,最后需要等待FPGA的LinK建立,我們在建立時候碰到一點困難,每次建立並不都是4X,一直沒有找到問題,我們使用了一個別的辦法來保證link為4X。

2.數據發送,DSP上提供的數據發送方法主要有兩種,DirectIO和Message,主要區別為DirectIO需要TX和RX雙方知道地址映射關系,而Message是通過Message中mail信息得到數據需要保存的地址,我們使用的為DirectIO方法,6678上提供了8組LSU來進行DirectIO數據發送,每個LSU有6個寄存器,當5th寄存器寫完后,數據會發送出去,第6個寄存器主要用於檢測當前的LSU狀態。LSU還有16(32)個影子寄存器 

3.SWRITE/NWRITE/NREAD:對DSP來說,初始化完SRIO后,FPGA便可以通過SRIO來發送數據,但是要注意,Designer並不知道什么時候FPGA會發送數據,所以通常會先發送一個DoorBell信息來告知DSP,FPGA要發送數據了,DoorBell可以觸發中斷,對於NREAD來說,FPGA發送這個命令后,DSP會自動的將請求的數據發送出去,Designer也並不知道數據發送出去,這些都需要DoorBell來支持。

 

1 問題:

你好,我們現在也能DSP發數據到fpga,但是存在如下問題:
   dsp用Nwrite給fpga寫數據,fpga能收到數據但是沒有響應數據給dsp?(請問需不要兩邊都確認下 讀寫的地址??)

  dsp用Nread給fpga發,嘗試着讀取fpga里的數據,但是fpga這邊沒反應?

  fpga主動發起給dsp讀寫數據,dsp那邊該怎么寫程序啊?

 

答:

   采用DirectIO模式,FPGA不會主動響應的

   DSP發送Nread命令,FPGA應該使用用戶接口將Nread命令中請求的地址空間中的數據發送出去
   可以采用先發送Doorbell,再發送數據

 

2 問:

現在我們已經能dsp主動發起對fpga進行讀寫,但可是fpga無法主動發起對dsp進行讀寫? 不知道fpga這邊需要怎樣配置ip核才能實現 dsp,fpga都能主動發起讀寫數據請求??

答:

如果沒記錯的話,FPGA發送NREAD命令就可以了,DSP會自動將數據發送過去,注意NREAD命令中的地址是DSP的實際訪問地址

 

3 問:

你好,請問用DirectIO傳輸數據是用DMA傳輸的嗎?
這個需要寄存器配置還是直接默認的就是?
還有,FPGA這端有沒有DMA這個說法?需不需要進行配置啊?

答:


應該不需要 FPGA沒有DMA這個東西 一般FPGA的DMA都是和上位機配合完成的本身沒有DMA的吧

 

 

注:在編輯模式下可以看到詳細問答

 

 
 
 
好文要頂  已關注  收藏該文   
 
 
我在關注他  取消關注
1
0
 
 
 
« 上一篇: MII接口全家福
» 下一篇: TI Davinci 五年七宗罪
posted @  2012-07-13 23:11 FPGA/DSP 閱讀(4373) 評論(19) 編輯 收藏

 
 
#1樓   2012-08-16 13:51 gavincj  
你好,很高興能看到你的博客,最近我也正在調試 C6678與Virtex 5 之間的SRIO,剛起步,覺得有些迷惑,還望指點指點;
我主要負責FPGA這一部分,用的是IP核V5.6,核程序里面用到了 ILA VIO 的核,請問我能不用這些核嗎? 我想直接自己建立.cdc文件抓自己想抓的數據? 如果是自己建立的.cdc文件,那該怎么去觸發核呢(該怎么去給核發Nread,Nwrite之類的請求?)?原來是用VIO 觸發的吧。
因為是新手,所以可能問的也不是很清楚,還望多包涵包涵~~~~
#2樓 [ 樓主] 2012-08-26 13:30 FPGA/DSP  
@ gavincj
我們是在V6上使用的,FPGA也不是我負責的部分,不過用chipscope抓取數據是沒有問題的,主要抓取對用戶接口那邊的數據,不過里面有兩個時鍾,chipscope用的時鍾需要注意。觸發的時候你讓DSP發送數據,然后使用ip核里面對用戶接口的有個rdy之類的信號做出發既可以
#3樓   2012-08-29 23:58 gavincj  
@ FPGA/DSP
你好,我們現在也能DSP發數據到fpga,但是存在如下問題:
1、dsp用Nwrite給fpga寫數據,fpga能收到數據但是沒有響應數據給dsp?(請問需不要兩邊都確認下 讀寫的地址??)

2、dsp用Nread給fpga發,嘗試着讀取fpga里的數據,但是fpga這邊沒反應?

3、 fpga主動發起給dsp讀寫數據,dsp那邊該怎么寫程序啊?
#4樓 [ 樓主] 2012-09-22 00:12 FPGA/DSP  
@ gavincj
不知道問題解決沒
1、采用DirectIO模式,FPGA不會主動響應的
2、DSP發送Nread命令,FPGA應該使用用戶接口將Nread命令中請求的地址空間中的數據發送出去
3、可以采用先發送Doorbell,再發送數據
#5樓 [ 樓主] 2012-09-22 00:12 FPGA/DSP  
@ gavincj
DSP支持Doorbell中斷
#6樓   2012-11-25 22:58 gavincj  
@ FPGA/DSP
你好,好久沒上博客園了,感謝你的回答,現在我們已經能dsp主動發起對fpga進行讀寫,但可是fpga無法主動發起對dsp進行讀寫? 不知道fpga這邊需要怎樣配置ip核才能實現 dsp,fpga都能主動發起讀寫數據請求??
#7樓 [ 樓主] 2012-12-03 22:15 FPGA/DSP  
@ gavincj
如果沒記錯的話,FPGA發送NREAD命令就可以了,DSP會自動將數據發送過去,注意NREAD命令中的地址是DSP的實際訪問地址
#8樓   2012-12-28 13:08 gavincj  
你好,請問用DirectIO傳輸數據是用DMA傳輸的嗎?
這個需要寄存器配置還是直接默認的就是?
還有,FPGA這端有沒有DMA這個說法?需不需要進行配置啊?
#9樓 [ 樓主] 2012-12-31 01:02 FPGA/DSP  
@ gavincj
應該不需要 FPGA沒有DMA這個東西 一般FPGA的DMA都是和上位機配合完成的本身沒有DMA的吧
#10樓   2013-01-04 14:23 gavincj  
@ FPGA/DSP
你好,那DSP這一端呢?DMA該怎么配置啊?
#11樓   2013-07-11 19:50 天空才是極限  
Hi,你好,我以前調通了srio,也用在了好幾個板卡上,但最近總是出現連不通的情況(我們現在也是是fpga V6跟DSP 6678互聯),好幾個板卡都有這個情況,但是我用IBERT 測試,讓他跑srio協議,並且遠端,這樣跟dsp竟然能通,這似乎說明硬件沒什么問題; 可是我也是完全相同的srio程序(只有管腳分配不一樣),有些板卡能通,有些不能,甚至有些bank跟dsp連的能通,有些bank不行; 這點讓我很苦惱,因為既有證據證明硬件是好的,也有證據證明軟件也是好的,請問這大概是啥原因?我也是知識很有限,希望能得到你的指點、交流。
PS:我用一代核V5.6和二代核都試過,都是這樣的情況;
#12樓   2013-08-07 15:49 迷途的驢  
您好,我們也遇到“每次建立並不都是4X”的問題,請問您使用什么方法來“保證link為4X”的?是判斷如果不為4x的話重新訓練嗎?
#13樓 [ 樓主] 2013-08-08 23:40 FPGA/DSP  
@ 迷途的驢
#14樓   2013-08-10 11:06 迷途的驢  
感謝您的回答!
我們在上電訓練的時候進行了判斷,能以4x進行工作,但在傳輸過程中又掉成了1x。這時如果此時再次訓練的話對實時處理系統來說是個大問題。您遇到過類似問題嗎?
我查了一些資料,信號質量應該是關鍵。所以我覺得每次上電情況不同以及工作過程中掉成1x可能是硬件問題,電源紋波和時鍾質量應該都有影響。我們將電源紋波降低后,訓練成4x的概率明顯提高,但還是不能保證每次上電訓練都是4x,而且還會出現4x跑一段時間后掉成1x。您在信號質量方面有什么建議嗎?
謝謝您!
#15樓 [ 樓主] 2013-08-31 10:32 FPGA/DSP  
@ 迷途的驢
我們只碰到了訓練的時候不是4x,但是不會出現4x變成1x的情況,可以用示波器看看你們的srio的眼圖
#16樓   2013-08-31 18:08 迷途的驢  
@ FPGA/DSP
好的,謝謝您!
#17樓   2013-09-16 00:10 superdragon  
您好,我現在也用SRIO在V6和C6678之間通信,配置的4X,3.125G,輸入參考時鍾125MHz。FPGA和DSP之間可以保證能夠通信,但是不能保證4X模式,初始化完畢之后有時候可以4X,有時候不可以,您的通過判斷mode_sel是如何控制重新開始訓練的,可否告知一下?
另外,不知道您是如何測試FPGA發送數據給DSP時的速度的,配置4X,3.125G的時候,最高能跑到多高?
謝謝!
#18樓   2013-10-23 21:41 lucky1991  
您好。
1.DSP和FPGA,四對LVDS收發線相連。
2.我們准備FPGA發數據給DSP,DSP再發送給FPGA;后期會DSP處理完后再發回給FPGA。
請問,FPGA如何通知DSP接收數據?FPGA何時開始發送數據?DSP怎么知道何時接收完畢;完畢后,又怎么通知FPGA接收數據?FPGA何時開始接收數據?
我只了解一些大概,真正實現,還有很多疑惑。
期待您的回復,能否留下您的QQ號?即時向您請教幾個問題?非常感謝!

 轉載自:http://www.cnblogs.com/fpga/archive/2012/07/13/2590929.html

 

 

 

 

 

 

C6678 SRIO DSP接收Doorbell中斷問題

此問題有建議答案
 
    •  
      舉人844分
       
      srio_dsp.rar

      在公司自己開發的板卡上調試SRIO

      使用的DSP是TMS320C6678,FPGA是K7系列芯片,芯片間通過SRIO連接

      C6678使用的開發環境是CCS5.3,編譯器版本為C6000_7.4.1,MCSDK版本為2.1.2.6。

      在調試過程中,C6678與FPGA互相用nwrite方式寫數據均成功。調試Doorbell中斷時,C6678向FPGA發送Doorbell沒有問題,

      但是FPGA向C6678發送Doorbell中斷時,C6678最多只能接收999次Doorbell中斷,之后就再也不能響應,此時FPGA在ChipScope中還能觀察到Doorbell已發送出去。

      附上調試用的C6678 SRIO程序,請各位工程師幫我看看程序中哪里配置有問題,導致有這個現象產生

      謝謝!

       
       
    •  
      進士5125分

      每次Doorbell中斷服務程序中都要清除Doorbell標志,否則后面的Doorbell就不能再觸發中斷,下面是示例代碼:

      //read doorbell. this test only use doorbell reg 0
      doorbell= gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICSR;

      //clear doorbell interrupt
      gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICCR= doorbell;

       
       
    •  
      秀才161分

      請問樓主,問題解決了嗎?我也遇到了相似的問題,我的C6657接收門鈴中斷的次數遠小於FPGA發送的門鈴包數,DSP的門鈴中斷使用的是intdst16,不存在INTDSTX_Rate_CNTL寄存器設置的問題。

       
       
    •  
      探花13445分

      響應時間間隔是多少?程序中有沒有其他更高優先級的中斷會占用?中斷函數處理占用時間是多少?

       

      上述內容如果回答了您的問題,請點擊標簽欄“是”按鈕。您的輕輕一點,會幫助我們更好的管理論壇內容,謝謝!

    •  
      秀才161分

      謝謝 ,問題有了進展,增加了FPGA發送門鈴的間隔,DSP就不丟門鈴中斷了。DSP測試程序然雖然開了幾個中斷,但只有一個門鈴中斷會被觸發。

      我使用的是FPGA的SRIO IP核,IP核中測試例程會向外發起多個SRIO通信(寫、讀、門鈴、stream等),每種SRIO通信的間隔都很小,我就是把這些SRIO通信都改為門鈴,就出現了DSP了丟失門鈴中斷問題。我現在的困惑是FPGA的SRIO IP核測試例程為什么不增加每種SRIO通信的間隔。

       
       
    •  
      秀才161分

      DSP門鈴中斷服務程序只有三行代碼,除了下面2行,另外一行就是給一個全局變量置位。

      //read doorbell. this test only use doorbell reg 0
      doorbell= gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICSR;

      //clear doorbell interrupt
      gpSRIO_regs->DOORBELL_ICSR_ICCR[0].RIO_DOORBELL_ICCR= doorbell;

       

      另外,我們的C6657與FPGA通信不太穩定,經常會出現無法建立連接的問題,也就時等不到port OK。關於這些問題我會在另外的帖子中提問,這個問題基本算有個結論了。謝謝大家。

       

       

       
       
    •  
      秀才30分

      Anni Zhang,

            你好,我們也遇到了doorbell中斷只能進一次的問題,並且ICCR好像被鎖住了還是怎么樣,無法對ICCR進行寫操作,這是為什么你知道嗎?

       
       
    •  
      秀才40分

      只能進一次中斷,主要是這兩個寄存器設置有問題(6678 DSP):

      3.8.9.2 Interrupt Rate Counter Register(對於映射到INTDST0-INTDST15):

      INTDSTn_RATE_CNTL Interrupt Rate Control Counter 和 INTDST_RATE_DIS Interrupt Pacing Disable (Address Offset 0x0310)這兩個寄存器沒有設置正確。如果

      在INTDST_RATE_DIS Interrupt Pacing Disable = 0x0000的情況下,不重復寫INTDSTn_RATE_CNTL Interrupt Rate Control Counter寄存器的話中斷就只能進去一

      次。如果你不想重復寫INTDSTn_RATE_CNTL Interrupt Rate Control Counter寄存器,就將INTDST_RATE_DIS Interrupt Pacing Disable = 0xFFFF。

       
       
    •  
      秀才40分

      我在調試的過程中發現如果DSP(6678)中斷服務程序占用時間較長的話,在Doorbell間隔比較小的情況下會造成doorbell丟包(可以從chipscope看到Doorbell應答消息

      (Hello Format)的錯誤標志位有時候為1),如果想分析問題,在調試程序時,盡量減少printf這些語句的使用。我覺得應該是中斷服務子程序的時間決定doorbell的

      時間間隔。而要及時的觸發中斷(INTDST0-INTDST15),則可以設置INTDST_RATE_DIS Interrupt Pacing Disable 和 INTDSTn_RATE_CNTL Interrupt Rate Control Counter寄存器。

       
       
 
轉載自:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/78807.aspx
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM