【小脚丫STEP-MXO2】学习3 —PLL使用(IPexpress)

http://jingyan.eeboard.com/article/75672

小脚丫玩了也快两个星期了,这次写关于板上芯片PLL的简单应用。板上芯片是LCMXO2-4000HC-4MG132,内部含有两路PLL,最高倍频可达400MHz。PLL就是锁相环,这里我们用它来进行频率合成。PLL是由鉴相器PD、压控振荡器VCO、低通滤波器LPF三个基本电路组成。我们在这里直接应用,对于内部是怎么实现这个功能大家可以参阅网上资料。直接芯片手册看起,配置了PLL。芯片手册居然是全英文的,没有中文的,看起来费力呀。尤其是资源介绍和编程上,没有中文参考。虽然如此,我也是在翻译软件的帮助下仔细阅读了手册。MXO2 4000HC上的PLL时钟输出不止一个,有CLKOP、CLKOS、CLKOS2、CLKOS3四组。可以满足多时钟的要求。

上图的CLKI是外部时钟输入端,板子上接的是12MHz的晶振;CLKFB是PLL 反馈信号接入端,这里与CLKOP连接。这个反馈信号的作用的感知CLKOP的输出时钟来确定或调整最后的输出信号的频率、相位等,使输出CLKOP更加稳定。CLKOP就是主PLL倍频输出,CLKOS、CLKOS2、CLKOS3就是副PLL输出。四路信号可以同时输出,输出不同的频率,不过要在规定的范围内。LOCK是一个异步信号,它表征了PLL的状态信息。图中的每个端口的意义我也不都明白,后面我会给出参考文献。其实要想把一个芯片搞明白参考文献是必不可少的,而且还的费时间去读。参考文献里还有相互引用,看的我也头大。后面给出链接,请大神翻译。

下面讲一下用软件自带IPexpress配置PLL。

1、打开Lattice Diamond,先自己新建工程,点击Tools—>IPexpress,这样进入了了IP模块了,打开之后可以看到里面有一些常用的模块,只需要简单的配置就可以使用。点击PLL,出现下图:

如果是新建工程在Diamond里打开IPexpress的话在器件选型那里已经填好了。这个要注意,必须和板子上的芯片匹配,不然无法下载运行。代码可以Verilog或者VHDL,看自己了。文件路径设定好之后点击customize。

2、出现下图。图中红色标注的是这次用到的地方。其中CLKI那里输入12,这个频率单位是MHZ,因为板子上的晶振是12MHz,CLKOP输入120,大家也可以自己输入一个频率去测试。但是这里输入必须是CLKI的整数倍或者是0.1——0.9倍。否则后面的计算会提示错误。同样我们可以设置CLKOS、CLKOS1,设置频率之前要先使能,勾上Enable。设置好之后就可以下拉电极Calculate。同时点击左下角导入工程。最后点击Generate生成。最后生成的Verilog文件可以自己导入看一下。里面都是一些设置。

3、之后就是工程综合、引脚映射等。最后下载了。有时候下载的时候会出现错误,重新综合就可以了。下载之后用示波器测试就可以了。测试发现输出的波形还可以,正弦波。频率有小波动,可能是示波器的原因吧。

查看原代码
`timescale 1 ns / 1 ps
module PLL2 (CLKI, CLKOP, CLKOS)/* synthesis NGD_DRC_MASK=1 */;input wire CLKI;output wire CLKOP;output wire CLKOS;wire LOCK;wire CLKOS_t;wire CLKOP_t;wire scuba_vlo;VLO scuba_vlo_inst (.Z(scuba_vlo));defparam PLLInst_0.DDRST_ENA = "DISABLED" ;defparam PLLInst_0.DCRST_ENA = "DISABLED" ;defparam PLLInst_0.MRST_ENA = "DISABLED" ;defparam PLLInst_0.PLLRST_ENA = "DISABLED" ;defparam PLLInst_0.INTFB_WAKE = "DISABLED" ;defparam PLLInst_0.STDBY_ENABLE = "DISABLED" ;defparam PLLInst_0.DPHASE_SOURCE = "DISABLED" ;defparam PLLInst_0.PLL_USE_WB = "DISABLED" ;defparam PLLInst_0.CLKOS3_FPHASE = 0 ;defparam PLLInst_0.CLKOS3_CPHASE = 0 ;defparam PLLInst_0.CLKOS2_FPHASE = 0 ;defparam PLLInst_0.CLKOS2_CPHASE = 0 ;defparam PLLInst_0.CLKOS_FPHASE = 0 ;defparam PLLInst_0.CLKOS_CPHASE = 14 ;defparam PLLInst_0.CLKOP_FPHASE = 0 ;defparam PLLInst_0.CLKOP_CPHASE = 1 ;defparam PLLInst_0.PLL_LOCK_MODE = 0 ;defparam PLLInst_0.CLKOS_TRIM_DELAY = 0 ;defparam PLLInst_0.CLKOS_TRIM_POL = "RISING" ;defparam PLLInst_0.CLKOP_TRIM_DELAY = 0 ;defparam PLLInst_0.CLKOP_TRIM_POL = "RISING" ;defparam PLLInst_0.FRACN_DIV = 0 ;defparam PLLInst_0.FRACN_ENABLE = "DISABLED" ;defparam PLLInst_0.OUTDIVIDER_MUXD2 = "DIVD" ;defparam PLLInst_0.PREDIVIDER_MUXD1 = 0 ;defparam PLLInst_0.VCO_BYPASS_D0 = "DISABLED" ;defparam PLLInst_0.CLKOS3_ENABLE = "DISABLED" ;defparam PLLInst_0.OUTDIVIDER_MUXC2 = "DIVC" ;defparam PLLInst_0.PREDIVIDER_MUXC1 = 0 ;defparam PLLInst_0.VCO_BYPASS_C0 = "DISABLED" ;defparam PLLInst_0.CLKOS2_ENABLE = "DISABLED" ;defparam PLLInst_0.OUTDIVIDER_MUXB2 = "DIVB" ;defparam PLLInst_0.PREDIVIDER_MUXB1 = 0 ;defparam PLLInst_0.VCO_BYPASS_B0 = "DISABLED" ;defparam PLLInst_0.CLKOS_ENABLE = "ENABLED" ;defparam PLLInst_0.OUTDIVIDER_MUXA2 = "DIVA" ;defparam PLLInst_0.PREDIVIDER_MUXA1 = 0 ;defparam PLLInst_0.VCO_BYPASS_A0 = "DISABLED" ;defparam PLLInst_0.CLKOP_ENABLE = "ENABLED" ;defparam PLLInst_0.CLKOS3_DIV = 1 ;defparam PLLInst_0.CLKOS2_DIV = 1 ;defparam PLLInst_0.CLKOS_DIV = 15 ;defparam PLLInst_0.CLKOP_DIV = 2 ;defparam PLLInst_0.CLKFB_DIV = 30 ;defparam PLLInst_0.CLKI_DIV = 1 ;defparam PLLInst_0.FEEDBK_PATH = "CLKOP" ;EHXPLLJ PLLInst_0 (.CLKI(CLKI), .CLKFB(CLKOP_t), .PHASESEL1(scuba_vlo), .PHASESEL0(scuba_vlo), .PHASEDIR(scuba_vlo), .PHASESTEP(scuba_vlo), .LOADREG(scuba_vlo), .STDBY(scuba_vlo), .PLLWAKESYNC(scuba_vlo), .RST(scuba_vlo), .RESETM(scuba_vlo), .RESETC(scuba_vlo), .RESETD(scuba_vlo), .ENCLKOP(scuba_vlo), .ENCLKOS(scuba_vlo), .ENCLKOS2(scuba_vlo), .ENCLKOS3(scuba_vlo), .PLLCLK(scuba_vlo), .PLLRST(scuba_vlo), .PLLSTB(scuba_vlo), .PLLWE(scuba_vlo), .PLLADDR4(scuba_vlo), .PLLADDR3(scuba_vlo), .PLLADDR2(scuba_vlo), .PLLADDR1(scuba_vlo), .PLLADDR0(scuba_vlo), .PLLDATI7(scuba_vlo), .PLLDATI6(scuba_vlo), .PLLDATI5(scuba_vlo), .PLLDATI4(scuba_vlo), .PLLDATI3(scuba_vlo), .PLLDATI2(scuba_vlo), .PLLDATI1(scuba_vlo), .PLLDATI0(scuba_vlo), .CLKOP(CLKOP_t), .CLKOS(CLKOS_t), .CLKOS2(), .CLKOS3(), .LOCK(LOCK), .INTLOCK(), .REFCLK(), .CLKINTFB(), .DPHSRC(), .PLLACK(), .PLLDATO7(), .PLLDATO6(), .PLLDATO5(), .PLLDATO4(), .PLLDATO3(), .PLLDATO2(), .PLLDATO1(), .PLLDATO0())/* synthesis FREQUENCY_PIN_CLKOS="48.000000" *//* synthesis FREQUENCY_PIN_CLKOP="360.000000" *//* synthesis FREQUENCY_PIN_CLKI="12.000000" *//* synthesis ICP_CURRENT="5" *//* synthesis LPF_RESISTOR="16" */;assign CLKOS = CLKOS_t;assign CLKOP = CLKOP_t;// exemplar begin// exemplar attribute PLLInst_0 FREQUENCY_PIN_CLKOS 48.000000// exemplar attribute PLLInst_0 FREQUENCY_PIN_CLKOP 360.000000// exemplar attribute PLLInst_0 FREQUENCY_PIN_CLKI 12.000000// exemplar attribute PLLInst_0 ICP_CURRENT 5// exemplar attribute PLLInst_0 LPF_RESISTOR 16// exemplar endendmodule

转载于:https://www.cnblogs.com/lamblabs/p/8567451.html

Lattice diamond IPexpress 例子 - PLL相关推荐

  1. Lattice Diamond 和 ispLEVER 的不同之处

    Lattice Diamond 和 ispLEVER.有一些不同,尤其是如何管理工程的不同,包括以下几点: 1.ispLEVER 有多种工程类型,不同的程序文件类型需要不同的类型的工程:但是Diamo ...

  2. Lattice Diamond用Active-HDL实现仿真

    license同lattice Diamond,如果不可以用,重新加载下并检查环境变量. 转载于:https://www.cnblogs.com/agllero/p/5284738.html

  3. Lattice Diamond关于原语的使用

    Lattice Diamond关于原语的使用 前言 一.原语基本概念 (一)简介 (二)常用原语 1.时钟相关原语 2.差分输入/输出原语 3.接口相关原语 二.Lattice原语 (一)原语使用 ( ...

  4. modelsim ddr3仿真lattice diamond

    转载大部分https://www.cnblogs.com/fhyfhy/p/5224208.html并对其中某些地方就行了改进 自己使用平台:lattice diamond 3.5 ddr3 ip版本 ...

  5. 【教程】LATTICE DIAMOND 工程新建介绍

    [教程]LATTICE DIAMOND 工程新建介绍 本文为明德扬原创文章,转载请注明出处!   在上一篇的文章<1.LATTICE DIAMOND的LICENSE申请方法>中,我为大家详 ...

  6. lattice diamond烧写问题汇总

    概要 总结在使用lattice diamond烧写程序时,出现错误的情况及解决方法.(按照实际情况,不时补充) 问题 问题一 问题说明 Check configuration setup: Start ...

  7. Lattice Diamond安装与学习

    Lattice Diamond安装与学习 一.关于LATIICE安装配置 (一)安装 (二)关于初始化设置 二.帮助文档 三.关于新建项目 (一)界面 (二)文件类型 四.IP核配置 一.关于LATI ...

  8. lattice diamond 3.7安装破解

    第一步安装:执行.EXE文件,一直下一步,最后license选择没有USB什么的那个(具体记不清了). 第二步破解:安装完成后在环境变量中将license路径指定到license文件即可(LM_LIC ...

  9. Lattice Diamond与modelsim联合仿真环境设置

    Lattice FPGA开发环境在仿真时可以使用modelsim,相比于Diamond自带的Active-HDL仿真工具,具有更好的交互性以及更便捷的可操作性.与其他FPGA的开发环境一样,需要设置联 ...

最新文章

  1. WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享...
  2. JS权威指南笔记之数据类型
  3. 推荐算法注意点和DeepFM工程化实现
  4. LVS+Keepalive 实现负载均衡高可用集群
  5. [转载]EF中的那些批量操作
  6. Java json序列化库gson(2)
  7. 8.26~8.30-广州软件所-实习工作日记
  8. r语言 悲观剪枝_R语言实战(5) ——高级数据管理
  9. 杭电HDUacm2098
  10. 计算机绘图尺寸标注,计算机绘图AutoCAD尺寸标注演示教学.ppt
  11. wordpress显示文章浏览量并且动态更新浏览量
  12. Logback第八章:MDC(Mapped Diagnostic Context)
  13. CodeForces - 1467B - Hills And Valleys (贪心)
  14. 为什么我加了过滤器然后就登不进去了_石英砂过滤器和活性炭过滤器应用区别...
  15. DSR 和AODV的对比
  16. 查询某个表空间下所有的表的空间占用情况
  17. pycharm创建.ini文件
  18. EJB初探(二)为什么需要EJB
  19. 一文搞懂各种架构(业务架构、应用架构、数据架构...
  20. 如何确定因果关系?四种理论分析模型

热门文章

  1. 有关贝祖定理的一个小问题
  2. PL/SQL Developer 连接远程oracle的方法
  3. HDU OJ Super Jumping! Jumping! Jumping!
  4. 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码
  5. checkpoint技术mysql_认识MySQL中的Checkpoint技术
  6. andorid简单计算器java源码_Android之一个简单计算器源代码
  7. Access restrictions on Jars
  8. java解析kafkaavro_如何使用Spring Kafka读取合并模式注册的AVRO消息?
  9. 空间连接时计算总和_【数据技术】城市功能混合程度计算
  10. leetcode算法题--组合总和 Ⅳ★