广告

原创 Vivado下创建和封装用户IP核

2017-9-16 09:04 810 0 1 分类: FPGA/CPLD


      Vivado 设计套件为设计者提供了一个以IP为中心的设计流程,这样可以帮助设计者快速地将自己的设计和算法转换为可重用的IP。基于IP-XACT标准,Vivado IP封装器工具提供了独一无二的“重用”特性。IP封装器为Vivado的任何用户提供了一种能力,即将设计流程任意阶段的一个设计进行封装,然后将该IP作为一个系统级的IP进行使用。

(一)创建IP核的工程


添加 gate.v文件,代码内容如下

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2017/09/15 15:24:22
// Design Name:
// Module Name: gate
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////

module gate#(parameter DELAY=3)(
    input a,
    input b,
    output [5:0] z
    );
   
assign #DELAY z[0]=a&b;
assign #DELAY z[1]=~(a&b);
assign #DELAY z[2]=a|b;
assign #DELAY z[3]=~(a|b);
assign #DELAY z[4]=a^b;
assign #DELAY z[5]=~(a^b);    
     
endmodule





(二)设置定制IP库名目录

    在Flow Navigator 窗口中,点击Project Settings 选项,在弹出的窗口选择IP图标。在该对话框的右侧窗口中,选择 Packager 标签页。按下面的参数配置:Library:TZB;Category:TZB_LIB;其他参数默认。



(三)封装定制的IP

    在当前工程的主界面菜单下,执行菜单命令Tool—Create and IP Package;弹出Create and Package New IP 对话框,点击Next;弹出Create and Package New IP-Please select one of the following tasks 对话框。在该对话框中,选中Package your current project 前面的复选框;点击Next,弹出Create and Package New IP 对话框,在该对话框中,参数按默认设置;点击next,单击Finish按钮,弹出Package IP 提示对话框。单击OK按钮,在Vivado右侧窗口中,出现IP参数的配置界面。

(1)"IP Identification"参数配置对话框,按如下图配置


(2)“Compatibility” 选项。这个选项主要用于确认该IP所支持的FPGA的类型。


(3)点击File Groups,弹出如下的对话框,可以添加一些额外的文件,如测试平台文件。


(4)“Customization Parameters” 选项,可以看出从源文提取了参数DELAY。

双击 DELAY 一行,弹出Edit IP Parameter 对话框,选中 Specify Range前的复选框, Type 中选择 List of values, 添加如下的值3,5,7,9.



(5)单击“Customization GUI”选项,弹出如图的对话框,它给出了输入/输出端口,以及带有默认值的参数选项。



(6)点击“review and Package”,然后点击Package IP 按钮,弹出如图所示的提示,说明IP封装成功。



(四)创建调用IP核的新的工程

     新建一个名为 ip_call的工程,然后设置包含调用IP的路径。在Flow Navigator 的窗口中单击 Project Setting 选项,在弹出的对话框中选择IP图标,然后选择 Repository Manager 标签页。在该标签页中,单击 Add Repository 按钮,弹出 IP Repositories 对话框,将Directory指向上一步生成IP核的路径。



(五)创建基于IP的系统

      Flow Navigator 窗口下找到IP Integrator 选项,然后单击 Create Block Design 选项。在弹出的对话框,按如下设置


在当前工程的右侧窗口出现名字为“Diagram”的空白设计界面,单击 Add IP



   弹出IP查找对话框,在Search中输入 gate, 名字为gate的IP核就出现在下面的窗口中,双击它,就把它添加到了设计界面中。


双击这个IP图标,打开了配置对话框,将DELAY 的值从默认的3改为5



将鼠标光标移动到gate_0 IP 的端口 a 的引出线上,单击鼠标右键,出现浮动菜单,点击 Make External。端口bz 做同样的操作。



Sources 窗口下,选择 System.bd文件,单击鼠标右键,弹出浮动菜单。在浮动菜单内,执行菜单命令 Create HDL Wrapper。弹出Create HDL Wrapper 对话框,按如下配置。



(六)系统行为级仿真

添加仿真文件simu.v,代码如下

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2017/09/16 08:52:32
// Design Name:
// Module Name: simu
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////

module simu(
    );
   
reg a;
reg b;
wire [5:0]z;
system_wrapper U1
(
    .a(a),
    .b(b),
    .z(z)
);    
initial begin
    while(1)begin
    a=0;b=0;
    #100;
    a=0;b=1;
    #100;
    a=1;b=0;
    #100;
    a=1;b=1;
    #100  
       
    end
end    
   
endmodule

Flow Navigator 下,展开 Simulation选项,执行 Run Behaviral Simulation,启动行为级仿真过程。



从图中可以看到 输入 a 和 b 的变化需要 5ns 后才能反映到输出  z








广告

文章评论 1条评论)

登录后参与讨论

curton 2019-5-4 16:46

好资源 学习了
相关推荐阅读
LoneSurvivor 2018-02-25 08:26
C++输入/输出流(2)
1. get()函数#include<iostream>using namespace std;int main(){    char s1[80], s2[...
LoneSurvivor 2018-02-23 12:19
C++输入/输出流(1)
1. 输入/输出流类层次 C++的输入/输出流类库是用派生方法建立起的,它有2个平行的基类,streambuf和ios。其他的流类都是从这两个基类直接或间接派生的。1.1  ...
LoneSurvivor 2018-02-19 11:36
C++多态(4)——特殊运算符重载和类类型转换
1.“++”和“--”的重载     运算符“++”和“--”的重载要区分前置和后置两种形式。如果不区分前置和后置,则使用operator++()或operator—()即可...
LoneSurvivor 2018-02-12 11:15
C++多态(3)——运算符重载
1.     运算符重载的定义     运算符重载也是实现多态的一个重要手段。运算符重载实现的是编译时的多态,即静态多态性。C++预...
LoneSurvivor 2018-02-12 10:31
C++多态(2)——纯虚函数与抽象类
   抽象类是一种特殊的类,它提供了统一的操作界面。建立抽象类是为了多态地使用抽象类的成员函数。抽象类是包含纯虚函数的类。 1.    ...
LoneSurvivor 2018-02-11 16:24
C++多态(1)
1.     多态      多态是人类思维方式的一种直接模拟,多态性是指不同对象接收到相同的消息时,根据对象类的不同而产...
我要评论
1
0
广告
关闭 热点推荐上一条 /1 下一条