vivado自定义 IP 核实验

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

之后添加 pwm_ip.v 文件,右键点击“Design Source”,选择“Add Source”,在弹出的界面选择“Add or Create design source”,点击“Next”。
在这里插入图片描述
接下来编辑相关代码。双击 u_pwm_ip:pwm_ip(pwm_ip.v),打开编辑窗口,如下图所示:
在这里插入图片描述
完成代码:

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”,开始编译代码。
在这里插入图片描述
编译完成后双击 IP-XACT 下的 component.xml 打开封装 IP 页面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里就完成了该 IP 核的封装,接下来开始系统硬件的设计。关闭之前设计IP的工程,在Vivado新建一个工程命名为“pwm_led”。创建完成后点击Create Block Design 创建新的设计。之后将自定义的 IP 添加到工程的 IP 库中,点击菜单栏“Tools”,选择“Settings”,如下图所示:

在这里插入图片描述
未完待续。。。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vivado是一种流行的FPGA设计工具,它提供了许多IP核来加速开发过程。然而,并不是所有的需求都可以通过Vivado自带的IP核来满足。在这种情况下,设计师可以创建自己的自定义IP核以实现特定的功能或加速系统性能。 创建自定义IP核的方法与使用Xilinx官方IP核的方法类似。首先,你需要使用VivadoIP Integrator界面来创建一个新的IP。在创建过程中,你可以指定IP的输入输出接口、功能和参数等信息。接下来,你需要使用HDL语言(如Verilog或VHDL)编写IP的逻辑代码。这些代码将定义IP的行为和功能。 一旦你完成了IP的逻辑设计,你可以将它综合到FPGA设备中进行验证。你可以使用Vivado的综合和实现工具来生成bitstream文件,并将其加载到FPGA设备中进行测试。 对于其他工程中使用封装好的IP核的情况,你需要将IP核文件添加到IP核库中。这样,在其他工程中就可以直接使用这个封装好的IP核了。 总的来说,Vivado提供了强大的功能来创建自定义IP核,以满足特定的设计需求。通过设计自定义IP核,开发者可以更好地定制化设计,提高开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vivado自定义IP核](https://blog.csdn.net/mengzaishenqiu/article/details/130048317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值