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