2. LVDS路视频:
3. framebuffer仿真路径:
4. framebuff_beh.v 参数:
5. framebuffer IP问题:
6. CVO 控制逻辑,参考DIS2 adaptor board:
6.1 S6MCB2RGB.vhd:
6.2
7. 编译参考工程报错,解决办法:
11. reset 脚在bank 8, 在lpf 里面约束为1.8v,但是在diamond 里面编译的时候,报1.8v ,2.5v冲突;
12.在使用中发现,当把 rvl 加进去,编译完上板,烧录bit,打开 reveal analizer,报错;
13. 在Diamond 里面插入 serdes 调试核,在线调试serdes:
14. Lattice edp issue:
15. reveal 功能异常:
16. k28.5 K码:
17. serdes 的参考时钟:
18. Lattice diamond modelsim 仿真库源文件:
19. Lattice FPGA 烧录,下载
19.1 在工程里面要设置系统配置电压:
19.2 固化失败:
19.2 关于FPGA加载固化的镜像:
19.3 第一次固化成功后,第二次固化更新失败:需先擦除再固化
20. perforce 上传下载问题:
21 . reveal 报错:
22. diamond 编译工程失败,没有任何错误提示
23. 利用DDR3 里面多余的PLL资源:
24. waning "has no load"
25. 在 hierarchy 下可以确定IP有没有编译进去;
26. 注意: diamond 的 IP 输出信号不能直接在 reveal里面引出;
27. diamond编译报告文件
28. reveal 加多个调试核的问题
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核,编译报错,
32. diamond IP: sbx打不开:
如果IP目录下面对于的ngo丢失,会导致双击sbx文件后无法打开GUI进行 config,所以当sbx文件无法打开时,先确认是否IP目录下ngo文件丢失了,如果ngo丢失了,把ngo文件放到对于目录下,即可打开IP并config;