vivado自定义 IP 核实验

在某些项目中无法找到合适的 IP 核,这就需要我们来自定义 IP 核。vivado软件提供了创建核封装IP向导的方式来自定义IP核,可以帮助我们实现定制化系统设计,这些设计还可以在其他系统是哪个实现重用。
下面以创建一个能产生PWM波形的IP核在开发板上实现呼吸灯为例来进行介绍。该IP核带有AXI总线,可以通过PS端访问IP核内部寄存器实现PS端对于IP核的控制。
第一步:IP核的创建与封装
vivado自定义 IP 核实验_第1张图片
vivado自定义 IP 核实验_第2张图片
创建完成后点击菜单栏 Tools->Creat and Package New IP,之后在弹出的对话框中点击“Next”。
vivado自定义 IP 核实验_第3张图片
接下来选择封装 IP 或者创建一个带 AXI4 接口的 IP 核,此处我们选择创建一个带有 AXI4 接口的 IP 核,选中“Create a new AXI4 peripheral”,然后点击“Next”。
vivado自定义 IP 核实验_第4张图片
接下来弹出设置页面,设置 IP 核名称、版本号、显示名、描述、保存路径。此处我们设置 IP 核名称为“pwm_ip”,其他保持默认,然后点击“Next”。
vivado自定义 IP 核实验_第5张图片
在 IP Catalog 界面可以看到创建完成的 IP 核如下图所示:
vivado自定义 IP 核实验_第6张图片
之后右键点击该 IP 核,选择“Edit in IP Packager”进入该 IP 核的编辑页面,在弹出的界面点击“OK”。进入下面:
vivado自定义 IP 核实验_第7张图片
双击“pwm_ip_v1_0”,如下图所示,进入编辑页面。
vivado自定义 IP 核实验_第8张图片
添加代码将IP核例化进去如下:
vivado自定义 IP 核实验_第9张图片
vivado自定义 IP 核实验_第10张图片
同样的,双击 pwm_ip_v1_0 下的 pwm_ip_v1_0_S00_AXI_inst加入例化模块,如下图所示:
vivado自定义 IP 核实验_第11张图片

之后添加 pwm_ip.v 文件,右键点击“Design Source”,选择“Add Source”,在弹出的界面选择“Add or Create design source”,点击“Next”。
vivado自定义 IP 核实验_第12张图片
接下来编辑相关代码。双击 u_pwm_ip:pwm_ip(pwm_ip.v),打开编辑窗口,如下图所示:
vivado自定义 IP 核实验_第13张图片
完成代码:

module pwm_ip(
    input sys_clk ,
    input sys_rst_n , 
    input [9:0] set_freq_step , 
    output pwm 
);
 //*****************************************************
 //** main code
 //*****************************************************
 //reg define
reg [15:0] period_cnt ; 
reg [15:0] duty_cycle ; 
reg inc_flag ; 
//wire define
wire led_t ;

assign led_t = ( period_cnt <= duty_cycle ) ? 1'b1 : 1'b0 ;
assign pwm = led_t;
always @ (posedge sys_clk) begin
    if (!sys_rst_n)
        period_cnt <= 16'd0;
    else if( period_cnt == 16'd50_0000 )
        period_cnt <= 16'd0;
    else
        period_cnt <= period_cnt + 16'd1;
    end
always @(posedge sys_clk) begin
    if (sys_rst_n == 1'b0) begin
        duty_cycle <= 16'd0;
        inc_flag <= 1'b0;
    end
    else if( period_cnt == 16'd50_0000 ) begin
        if( inc_flag ) begin 
            if( duty_cycle == 16'd0 )
                inc_flag <= 1'b0;
            else if(duty_cycle < 10'd100)
                duty_cycle <= 16'd0;
        else
            duty_cycle <= duty_cycle - set_freq_step;
        end
    else begin 
        if( duty_cycle >= 16'd50_0000 )
            inc_flag <= 1'b1;
        else
            duty_cycle <= duty_cycle + set_freq_step;
        end
    end
    else 
        duty_cycle <= duty_cycle ;
    end
 endmodule

保存。之后点击点击导航栏 SYNTHESIS->Run Synthesis,在弹出的对话框中点击“OK”,开始编译代码。
vivado自定义 IP 核实验_第14张图片
编译完成后双击 IP-XACT 下的 component.xml 打开封装 IP 页面。
vivado自定义 IP 核实验_第15张图片
vivado自定义 IP 核实验_第16张图片
vivado自定义 IP 核实验_第17张图片
vivado自定义 IP 核实验_第18张图片
vivado自定义 IP 核实验_第19张图片
vivado自定义 IP 核实验_第20张图片
到这里就完成了该 IP 核的封装,接下来开始系统硬件的设计。关闭之前设计IP的工程,在Vivado新建一个工程命名为“pwm_led”。创建完成后点击Create Block Design 创建新的设计。之后将自定义的 IP 添加到工程的 IP 库中,点击菜单栏“Tools”,选择“Settings”,如下图所示:

vivado自定义 IP 核实验_第21张图片
未完待续。。。

你可能感兴趣的:(vivado自定义 IP 核实验)