vivado 创建自已的IP核(封装自已的Verilog模块)

872次阅读
没有评论

新建一个IP项目

vivado界面选择 Tools->Create and Package New IP
vivado 创建自已的IP核(封装自已的Verilog模块)
选择创建一个基于AXI4的IP, 为什么要选择AXI4呢? 因为AXI接口在ZYNQ ARM core核里能更好地进行读写,不然所有对该核的操作都得自已写私有的模块来处理,工作量稍大
vivado 创建自已的IP核(封装自已的Verilog模块)
vivado 创建自已的IP核(封装自已的Verilog模块)
中断,可选可不选.看应用需求.

打开IP项目

最后创建完成后,可能需要额用以下方式来打开刚才新建的IP.
vivado 创建自已的IP核(封装自已的Verilog模块)

了解IP包的结构

如下: 分别有顶层的封包接口文件以及内部各个verilog模块文件,目前这个项目里只有一个模块.
vivado 创建自已的IP核(封装自已的Verilog模块)

代码分析

打开顶层的verilog文件,大致如下:

module ledkeyV2_v2_0 #
 (
  // Users to add parameters here, 参数是用来配置用.

  // User parameters ends
  // Do not modify the parameters beyond this line

  // Parameters of Axi Slave Bus Interface S00_AXI
  parameter integer C_S00_AXI_DATA_WIDTH = 32,
  parameter integer C_S00_AXI_ADDR_WIDTH = 4
 )
 (
  // Users to add ports here 在下面添加自已的输入输出端口,现在添加了一个输入与一个输出
  input [7:0] sw,
        output [7:0] led,
  // User ports ends
  // Do not modify the ports beyond this line 人家说下面的别动,我们就别去动

  // Ports of Axi Slave Bus Interface S00_AXI
  input wire s00_axi_aclk,
  // .... 略 .... 其他输入输出..
  input wire s00_axi_rready
 );
// Instantiation of Axi Bus Interface S00_AXI .这里添加了个 ledkeyV2_v2_0_S00_AXI这个模块
 ledkeyV2_v2_0_S00_AXI # (
  .C_S_AXI_DATA_WIDTH(C_S00_AXI_DATA_WIDTH), // 将参数传递到对应的模块里
  .C_S_AXI_ADDR_WIDTH(C_S00_AXI_ADDR_WIDTH)
 ) ledkeyV2_v2_0_S00_AXI_inst (
  .led(led), // 这两行是自已添加的,把led与模块里的port连起来
     .sw(sw),
  .S_AXI_ACLK(s00_axi_aclk),
  .S_AXI_ARESETN(s00_axi_aresetn),
  //.... 略 .....
  .S_AXI_RREADY(s00_axi_rready)
 );

 // Add user logic here

 // User logic ends

 endmodule

再看看模块文件的veilog文件. 我们可以在这个文件里实现各种我们想要的功能了,每个always模块都有相应的说明.
下图中把我们刚才在顶层文件里的接口添加进去.
vivado 创建自已的IP核(封装自已的Verilog模块)

参数中的四个寄存器
vivado 创建自已的IP核(封装自已的Verilog模块)

我们可以在适当的 always模块中添加自已的代码来寄现一些功能.比如在写某个寄存器时我们就把对应的值输出到 LED对应的wire上
vivado 创建自已的IP核(封装自已的Verilog模块)

在任何时刻,都把SW的值放入reg0
vivado 创建自已的IP核(封装自已的Verilog模块)

修改完成后,运行下综合,然后做最后的检查.
vivado 创建自已的IP核(封装自已的Verilog模块)

使用IP

与系统内置IP没多大区别.放到block desing里连线,然后在软件里读写寄存器,收工
vivado 创建自已的IP核(封装自已的Verilog模块)
vivado 创建自已的IP核(封装自已的Verilog模块)

正文完
 0
评论(没有评论)