1. 程式人生 > >Lattice開發工具 diamond總結

Lattice開發工具 diamond總結

1. PLL

EDP 的AUX clk要求是16MHZ, data rate 是1mbps。 
100MHZ時鐘源,Lattice的PLL直接分是不能分出16MHZ的,大概是15.8mhz; 
如果用serdes 的135mhz直接分,可以分出16.1mhz;(CLKOP) 
經過嘗試,可以先CLKOP分出27MHZ,再用OS分出16mhz,即可滿足條件; 
有可能是先用CLKOP分的的頻率是27mhz,導致VCO的頻點範圍縮小導致的。

2. LVDS路視訊:

      無需 2個畫素轉成1個畫素,因為FPGA的LVDS埠輸出是按兩個畫素並行輸出的;

3. framebuffer模擬路徑:

D:\......\framebuff\frame_buffer_eval\framebuff\sim\modelsim\scripts

4. framebuff_beh.v 引數:

frame_buffer_core_framebuff 
.MAXFWIDTH -> 800 
.MAXFHEIGHT -> 480

5. framebuffer IP問題:

發現,改了frame buffer IP的引數配置,在generate, IP底層生成的param.v 等程式碼沒有變化,即沒有生效;

6. CVO 控制邏輯,參考adaptor board:

6.1 S6MCB2RGB.vhd:

    TransferData <= not SrcFifo_Empty when (DstFifo_Full = '0') else
    not SrcFifo_Empty when (SrcFifo_Flush = '1') else '0' ;

6.2

     SrcFifo_Flush <= '0';
    DstFifo_Flush <= '0';
   ------------------------------------------------------------------------------------
   -- stm for data transfer from mcb to fifo
   ------------------------------------------------------------------------------------

7. 編譯參考工程報錯,解決辦法:

參考工程,因為在我的本地解壓路徑和他的工程路徑不一致,所以編譯的時候報錯,需要雙擊“strategy1”改“Macro search path”:

11. reset 腳在bank 8, 在lpf 裡面約束為1.8v,但是在diamond 裡面編譯的時候,報1.8v ,2.5v衝突;

  解決: 在GUI 裡面設定bank8 電壓為 1.8v;
  原因: bank8 是 config bank,預設是2.5v電壓,但是不在lpf 裡面顯示電壓,要在GUI手動改成1.8V;

12.在使用中發現,當把 rvl 加進去,編譯完上板,燒錄bit,開啟 reveal analizer,報錯;

-> 原因:rva 與 rvl 沒有關聯起來; 
-> 分析: 由於工程中存在“rvs”,“trc”等殘留,導致新建“rva”沒有關聯“rvl”; 
-> 規避:在每次新建rva 的時候,要先刪除與 rvl 同目錄下殘留的“rvs”,“trc”(此步驟很關鍵,否則不會彈出“getting started”視窗); 
然後關聯 rvl 檔案; 
-> lattice reveal analyzer 使用步驟:

    1. 編譯工程;
    2. 新建rvl,點選insert
    3. 全編譯;
    4. 燒錄 bit;
    5. 在“rvl”目錄下檢查是否有殘留“*.rvs”,"*.trc",一定要刪掉;
    5. 點選“reveal analyzer” ,彈出視窗,如下圖,無需關聯xcf,需關聯rvl檔案,儲存;
    6. 在 “reveal analyzer”GUI新增訊號,trigger;
    ![](index_files/1526621232633b5125708-b90c-48ec-907c-b02d2ce43469.png)

13. 在Diamond 裡面插入 serdes 除錯核,線上除錯serdes:

  • 1 開啟 PCS ip, 使能 serdes 線上除錯口,注意在程式碼裡面要把 sci 口引出 
  • 2 在 reveal 裡面新增serdes 除錯核;設定 時鐘為serdes恢復時鐘,復位; 
     
  • 3 在 planner裡面placment:拖放至PCS pin; 
  • 4 全編譯後,上電,燒錄bit檔案,開啟 reveal,開啟serdes 除錯介面,可是看到serdes lock狀態指示;可以更改引數; 

14. Lattice edp issue:

Dino提供的版本,當在edp GUI使能“enhanced frame”功能的時候,serdes輸出異常,edp無輸出; 
原因: 在edp IP內部,有兩條路涉及到training,1. 使能 GPU aux,則edp training用外部的mico32控制training過程;2.disable GPU aux口,則使用edp內部的狀態機來training;目前不用外部cpu來training,使用內部硬邏輯狀態機來控制training,由於狀態機不支援“enhanced frame”,所以當rx 配置項告訴tx 支援 enhanced frame(DPCD內容),但是實際邏輯rx 側是不支援 “enhanced frame”的,造成tx 側傳送“enhanced frame”的時候,rx 側無法解析,所以edp rx 沒有輸出; 
注意項:目前階段,edp IP功能不全,注意後面要disable “enhanced frame”和 “GPU AUX”;

15. reveal 功能異常:

發現Dino 除錯好的版本拷貝到我的PC,在reveal中抓取訊號,serdes輸出訊號可以抓到,但是抓取不到edp輸出的sof等訊號;重新編譯工程,依然抓取不到訊號;懷疑是軟體和PC的問題;

16. k28.5 K碼:

SERDES 除錯為什麼要看K碼?

17. serdes 的參考時鐘:

目前第一版serdes 參考時鐘沒有走專用的serdes參考時鐘通道,serdes的恢復時鐘可能不穩定;Dino建議在第二版保留原有serdes參考時鐘的pin,並增加serdes的專用參考時鐘腳,把時鐘源接到專用腳;
差異: 不走專用serdes時鐘腳,時鐘經過fibre路徑,質量可能變差;
走專用serdes參考時鐘腳,參考時鐘直接到PHY,質量可能更好,但有可能容易受到干擾;

18. Lattice diamond modelsim 模擬庫原始檔:

C:\lscc\diamond\3.10_x64\cae_library\simulation\verilog\ecp5u 
C:\lscc\diamond\3.10_x64\cae_library\simulation\verilog\pmi

19. Lattice FPGA 燒錄,下載

19.1 在工程裡面要設定系統配置電壓:

19.2 固化失敗:

由於電路設計錯誤,CFG模式應該是“010”(master模式),硬體設計成“110”,rework後解決;

19.2 關於FPGA載入固化的映象:

預設上電不需要SOC干預載入,Program_N腳是依賴於上電power up的瞬間,產生低到高的跳變,所以只需保證 promgramN,DONE,INIT 這三個腳是上拉即可。注意這三個腳是 open drain,不是簡單的IO輸入輸出;

19.3 第一次固化成功後,第二次固化更新失敗:需先擦除再固化

由於上電後,FPGA片內有程式執行,可能會引起FPGA固化失敗(是不是有些PIN與燒錄有關pin導致待查?),所以,在固化前先切換到"JTAG 1532 MODE", 執行“erase” 操作(擦除片上程式),再切回到 “SPI flash bakground mode”,執行固化;後面再確認是不是否是插入reveal導致;

20. perforce 上傳下載問題:

上傳後再下載到本地,發現過程需要重新設定,可能是diamond軟體問題,下載後一些配置會丟失,導致編譯失敗 
exclude sbx檔案 :

設定top檔案:

21 . reveal 報錯:

因為SOC側沒有給FPGA置位,導致FPGA沒有正常工作,下載完bit檔案後,執行reveal 報錯;

22. diamond 編譯工程失敗,沒有任何錯誤提示

應該是diamond問題,一般是語法問題,可以在modelsim裡面直接編譯 裸的.v頂層檔案(只需編譯這一個檔案,無需新增IP等),利用modelsim來做語法分析糾錯;

23. 利用DDR3 裡面多餘的PLL資源:

由於專案最終用的是 ECP5-25的晶片,只有兩個PLL資源(DDR3 controller佔用一個,LVDS輸出佔用一個),為了充分利用PLL資源,考慮把DDR3 controller裡面的pll刪除,自己手動例化再新增到ddr3 controller裡面。 
自己例化的好處是,可以自由配置輸出,在GUI介面可以看到實際的頻點。注意原DDR3 IP裡面有兩個PLL,一個是PLL原語(pmi_pll_fp),一個是PLL(ddr_pll_inst1),效果是一樣的。 
top層關係: ddr3_ip_inst/ddr3_sdram_mem_top_wrapper_inst1.v/ddr_clks_inst1/pmi_pll_fp 
-> 替換成自己的例化的IP;

24. waning "has no load"

25. 在 hierarchy 下可以確定IP有沒有編譯進去;

26. 注意: diamond 的 IP 輸出訊號不能直接在 reveal裡面引出;

27. diamond編譯報告檔案

在implement目錄下:.par .twr檔案;

28. reveal 加多個除錯核的問題

現象:在除錯中加了多個reveal核,編譯報錯,

 
原因:是由於插入的reveal核的名字和設計程式碼中的名字完全一樣導致,reveal核的名字是cvo,設計程式碼中也有“cvo.v”模組,衝突導致。把reveal核名字改成“cvo_input”就ok