• Lattice diamond IPexpress 例子


    【小脚丫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 end
    
    endmodule
  • 相关阅读:
    关于SOA和AOP
    网络通信
    网络层ddos与应用层ddos区别
    python 模块发布及使用
    安全等级划分依据与应急响应流程
    ssl与ssh
    列表计数及插入
    博客首语
    聊聊当今市面上的国产耳机
    “互联网+”背景下使用微信公众号增强班主任工作与整合教学资源(泰微课)
  • 原文地址:https://www.cnblogs.com/lamblabs/p/8567451.html
Copyright © 2020-2023  润新知