Felix

技术源于积累,成功始于执着! 个人邮箱:justlxy@mail.dhu.edu.cn QQ:1576109464

Lattice Diamond的PMI原语使用简明教程

1
阅读(4350)

PMI (Parameterized Module Instantiation) ,即参数模块实例化,是一种便捷的例化Lattice标准Module的方式。从功能实现角度来说,PMI能够实现的,IPexpress(或者Clarity)都能够实现;从使用的角度来说,例化PMI模块,和我们平时例化其他的模块,几乎没有任何区别。

那么什么时候使用PMI,什么时候使用IPexpress(或者Clarity)呢?

对于新手来说,推荐还是老老实实地使用IPexpress(或者Clarity)吧,因为使用PMI的前提是用户对该模块要足够地了解(至少要使用IPexpress例化过几次)。此外,IPexpress提供了参数检查功能,而使用PMI的话,则需要用户自己来检查参数是否正确。PMI的优势是方便(尤其是需要反复修改模块参数的时候,还是具有明显的效率优势的),此外,在开发IP(或者准备将设计输出为ngo,即黑匣子)的时候,也建议使用PMI,以实现更加方便的参数设置。

下面简单地介绍一下PMI的基本使用方法(流程):

1、在使用PMI之前,首先需要阅读该模块的相关文档,了解每一个参数和IO接口的作用和意义;

2、查找该PMI的源代码,可以在Diamond的安装目录下的cae_library目录中找到,如下图所示:

image.png

以使用PLL的PMI模块为例,在上述目录下直接搜索PLL即可,得到:

image.png

补充说明:对于部分的PMI模块可能会有多个结果,此时应当注意器件型号……

如果用户不需要了解源码等信息,也可以直接通过另一种更加简便的方式来例化PMI模块:

首先,在Diamond中打开任意源文件,然后点击View->Templa Editor,找到PLL,点击,赋值下方例化模板,即可:

image.png

image.png

不过,为了便于了解PMI模块的各个参数的具体属性与IO接口的一些细节,还是推荐使用第一种方式。但是用户可以通过第二种方式来快捷地获得PMI例化的模板,来提高开发效率。

3、打开搜索得到的源文件,根据源文件中的参数和IO接口,在用户逻辑中实例化该PMI模块;

例如:

//Pixel clock conversion(1080p@60,148.5MHz to 720p@60,74.25Mhz)
pmi_pll# (
    .pmi_freq_clki("148.5"),
    .pmi_freq_clkop("74.25"),
    .pmi_family("ECP5U"))
pix_pll(
    .CLKI(clk),
    .CLKOP(oclk)
);