Lattice Diamond
刚开始接触到diamond,感觉界面与ISE和Quartus还都差不多吧,记下一些以防不常用而忘记。
1.Tools->spread sheet view进行时序约束、物理约束。
2.diamond有一个自动生成的时序约束文件,.prf文件,这个是在两个前提下可以自动生成,第一个就是在project->active strategy,在map trace settings选项里有一个auto timing,这个要是true才可以,第二个就是你不能手动的设置任何一点timing preferences,这样的话直接运行map trace,打开prf文件就能看到自动生成的约束,它是约束了时钟网络所能跑到的最大的频率,你可以用这个文件来自己编辑lpf文件,这样的话你remap以后,rpf的文件也会被你重新编辑的lpf文件所覆盖了。
3.lattice的pll可以进行分频和倍频,而dll只可以进行分频。
4.生成IP核的时候注意选import IPX to diamond project,否则的话还得手动加。双击.ipx文件进行已存在IP核的编辑。
5.tools下有reveal inserter和reveal analyzer,分别用来建立文件和抓波形。
文件建好以后,保存为.rvl文件,然后debug->insert debug,就将rvl文件加入到工程中去。在工程栏里debug files下可以看到。
6.看ECP3的datasheet,时钟包括PLL、DLL和CLKDIV,PLL是通过PFD(phase frequency detect)检测reference clk和feedback clk的频率和相位,然后产生控制vco的信号,来产生新的时钟;DLL呢是通过phase detect以后,经ALU计算出一个数来控制delay chain,从而得到新的时钟信号,所以呢可以说PLL是模拟的,DLL是数字的。从DLL的生成原理来看,它不适合频率太低的应用,因为delay chain是有限的。
7.lattice有primary clock,secondary clock和edge clock三种时钟资源,按器件不同有不同数目的secondary clock region,比方说-17有16个。
8.修改已存在的IP,直接打开ipx文件即可。但是记得例化ip核以后打勾insert ipx to project,这样往后修改ipx之后工程才会自动更新。
9.好想rvl的采样频率低了以后会提示出错,还不知道怎么回事。
10.有一个fpga里进行时钟切换的问题,xilinx里好像有核来做,lattice里没找到直接切换的,我用了一个动态的PLL,它有4bit的输入用来定义相移,然后在逻辑里就可以通过改变这个输入来进行时钟的切换,实践证明效果还不错。
11.找到ddr3_controller user guide的方法,在官网上直接搜索ddr3 controller,点开DDR3 SDRAM CONTROLLER进去,在documentation->user manuall下可以看到。
12.对于位宽大于1的IO,lattice的管脚约束是用下滑杠,而不是[],不知道害死人呀!