VIVADO自定义IP核以及调用,还有遇到的有警告的问题[IP_Flow 19-315]和[IP_Flow 19-5661]

本文详细介绍了如何使用Vivado设计和封装自定义IP核。首先展示了一个数据比较器的RTL设计及仿真过程,然后演示了在Vivado中创建IP核工程并解决封装过程中出现的警告。最后,解释了如何在现有工程中调用自定义IP核进行测试,确保其功能正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        vivado的ip核应该比较常用的设计工具,但有时候官方的ip核设计的比较复杂而我们不需要如此多功能的ip核时,就可以我们自己去设计自己想要的ip核。

一、RTL设计

首先需要你提前设计好自己的模块,包括源文件,以及模块仿真。我的源设计如下

module mid_data(
    input clk ,rst_n,
    
    input [7:0] a,b,c,
    output reg [7:0] mid_data
    );
   wire  A,B,C; 
   wire  [2:0] state;
    assign A=(a>b)?1:0;
    assign B=(b>c)?1:0;
    assign C=(c>a)?1:0;
    assign   state={A,B,C};
  
always@(posedge clk)
    if(!rst_n)
    begin
       mid_data<=8'b0;
     end
       else case(state)
                3'd2,3'd5: begin  mid_data<=a;  end   
                3'd1,3'd6: begin  mid_data<=b;  end
                3'd0,3'd3,3'd4: begin  mid_data<=c;  end                
              default: begin mid_data<=mid_data; end 
             endcase         
endmodule

实现的是一个数据比较器,主要是在一个周期以内找出3个8bit数的中间数。下面是仿真激励代码

module mid_data_tb;
    reg clk,rst_n;
    
    reg [7:0] a,b,c;
    
    wire [7:0] mid_data;

mid_data i0(
    .clk(clk),
    .rst_n(rst_n),
    
    .a(a),
    .b(b),
    .c(c),
    .mid_data(mid_data)
    );
initial
begin
    clk=0;
    rst_n=0;
        a=0;
        b=0;
        c=0;
    #95
        rst_n=1;     
     #100
        a=1;
        b=15;
        c=21;
     #100
        a=30;
        b=10;
        c=20;
     #100
        a=15;
        b=12;
        c=26;
     #100
        a=13;
        b=13;
        c=20;
     #100
        a=15;
        b=14;
        c=14;
     #100
        a=50;
        b=50;
        c=50;
     #100
        a=15;
        b=12;
        c=26;   
     #200
     $stop;                
end    
always #5 clk=!clk;    
endmodule

代码的设计就到处结束,接下来开始ip封装

二、封装IP核

打开tool选择create and packape new ip,点击next,

         选择第一个继续点击next

         这里需要选择一个文件夹存放你的IP核封装文件,最好是新建一个文件夹,将你的所有自己设计的ip核放在这里,每个ip核单独一个文件,方便以后的工程调用。

         创建完了就点击next,然后是ok,最后是finished,接着就会生成一个专门的ip核封装工程和自定义窗口,

         在这里打绿色勾勾的地方我们不关注,都是一些基础配置,vivado已经自动配置好了,包括ip核它的库,源文件,适用的芯片系列。需要关注的是下面这个Ports and interfaces这个选项里面的两个黄色的警告。顺便说一句vivado这里可以自动识别匹配我们源文件中的端口。

产生的警告也可以在下面的messages提示里看到 ,其实忽略这两个警告也是可以的,但为了追求完美可以通过下面的方法来解决。

 先看第一个警告,[IP_Flow 19-315]bus Interface 'rst n " : Bus parameter POLARITY is ACTIVE_LOW but port ' rst_n is not*resetn - please double check the POLARITY setting

什么意思呢,英语比较差百度翻译直接翻译就是[IP_Flow 19-315]总线接口“rst n”:总线参数极性为ACTIVE_LOW,但端口“rst_n”不是*resetn-请仔细检查极性设置。

再翻译一下就是rst_n这个信号没有检测到用作低电平有效。首先说明我们的源文件设计是没有问题的,但是vivado就是检查出有警告,那么怎么解决呢,有两种方式:

1,更改源文件包括仿真文件中的“rst_n”这个信号的名字为“*resetn”例如全部改成“aresetn”,亲测有效。

2,有的小伙伴有很多的源文件那改起来就很麻烦,需要替换等操作,这里还有一个方法就是点击一下Ports and interfaces这个选项里面的"rst_n"在弹出的窗口中选择parameters,可以看到有个属性是ACTIVE_LOW,对就是这个直接改成ACTIVE_HIGH。警告接解决的,同时这里不会影响源文件的逻辑,后面通过仿真也可以看到是不影响逻辑的。

 接下来就是第二个警告,[IP Flow 19-5661] Bus Interface ' clk' does not have any bus interfaces associated with it 。直接翻译就是:总线接口“clk”没有与之关联的任何总线接口。

解决方式也很简单,添加总线接口,同样点击一下Ports and interfaces这个选项里面的"clk"在parameters当中给clk添加属性,选中ASSOXIATED_BUSIF,接着选中间的右移小箭头move

 然后就可以看到他出现在了右边的Overridden选项当中,最后在数数值当中写上你的时钟接口“clk”,就可以了。点击ok,然后就可以看到警告都消失了,出现了绿色的勾勾。

 最后选中最下面的Review and package选项,点击package IP,点击ok就完成了。

三、IP核调用

 接下来打开你自己的最开始的工程,然后点开IP核搜索界面就可以调用了,无论是在基础的源文件例化还是在bd工程中调用都可以。

 最后就是简单的测试,生成ip核过后,还需要改一下最开始上面测试激励文件的例化,只需要将mid_data改为mid_data_0即可

 然后最后出来的仿真结果没有问题,大功告成!

### Vivado 中 I2S IP 与 FIFO 相关配置 在 Vivado 设计环境中,对于涉及 I2S (Inter-IC Sound) 接口的设计来说,通常需要处理音频数据流的传输。为了确保高效的数据管理以及同步操作,常常会在设计中加入 FIFO (First In First Out) 缓冲区来优化性能。 #### 创建并集成 I2S FIFO IP 当希望创建一个新的工程用于开发包含 I2S 功能模块时,可以通过 VivadoFlow Navigator 来启动新项目的建立过程[^2]。然而针对具体的 I2S IP 本身,并未直接提及如何创建;但是可以遵循相似的方式去定位所需的 IP 并完成其初始化设置: 1. **搜索实例化 I2S IP** - 打开 Vivado 后,在左侧导航栏找到 "IP Catalog" - 使用搜索框查找 “I2S” - 双击相应的 I2S 控制器条目以打开配置向导 2. **添加 FIFO 组件支持** 对于任何可能涉及到大量连续读写场景的应用场合而言,合理利用 FIFO 是十分必要的。按照相同的方法可以在 IP Catalog 中寻找 `FIFO Generator` 这样的组件来进行插入: ```python # 假设这是 Python 伪代码表示如何调用 API 实现上述逻辑 project.create_ip('i2s_controller') project.add_existing_ip('fifo_generator', parameters={'DATA_WIDTH': 32}) ``` #### 解决常见问题 有关于特定版本下的 HLS 流量控制或者是其他高级特性方面遇到的问题,社区论坛上可能存在一些解决方案或建议[^3]。例如,在某些情况下可能会面临编译错误或是功能符合预期的情况,此时查阅官方文档之外还可以参考类似平台上的讨论帖获取额外的帮助支持。 另外值得注意的是静态变量声明方式能够模拟硬件描述语言中的存储行为[^4],这有助于理解底层机制从而更好地调试软件模型同实际电路之间的交互情况。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值