当前位置:   article > 正文

vivado中IP核调用方法简介_vivado调用ip核

vivado调用ip核

目录

一、基于Vivado的IP核使用方法

二、常用IP核调用方法案例

2.1FIFO IP核

2.2UART IP核

2.3 DDR3 IP核

2.4 PLL IP核

2.5AXI GPIO IP核

三、总结


       Vivado是Xilinx公司推出的一款集成化设计环境,可以用于FPGA和SoC的设计和实现。在Vivado中,可以使用IP核来快速实现一些常见的功能模块,例如时钟管理、数字信号处理、图像处理等等。下面将介绍基于Vivado的IP核的使用方法,并给出5个以上的常用IP核调用方法案例以及对应的testbench。

一、基于Vivado的IP核使用方法

打开Vivado,新建一个工程,选择FPGA或SoC的型号和目标平台。
在工程中添加IP核,可以选择从Xilinx的IP库中选择一个现成的IP核,也可以自定义设计一个IP核。
在IP核的配置界面中,根据实际需求进行参数配置,可以选择使用默认值或手动设置参数。
生成IP核的RTL代码和IP核的包装文件。
在设计中实例化IP核,根据实际需求对IP核进行连接和配置。
运行综合、实现和生成比特流文件。
将比特流文件下载到目标平台中进行验证和测试。


二、常用IP核调用方法案例

2.1FIFO IP核


       FIFO(First-In-First-Out)是一种常见的数据缓存结构,常用于数据的存储和传输。在Vivado中,可以使用FIFO IP核来快速实现FIFO缓存。以下是一个FIFO IP核的调用方法案例:

  1. // FIFO IP核的实例化和连接
  2. fifo_inst fifo (
  3.     .din(din),  // 输入数据
  4.     .wr_clk(wr_clk),  // 写时钟
  5.     .wr_en(wr_en),  // 写使能
  6.     .rd_clk(rd_clk),  // 读时钟
  7.     .rd_en(rd_en),  // 读使能
  8.     .dout(dout),  // 输出数据
  9.     .full(full),  // FIFO满标志
  10.     .empty(empty)  // FIFO空标志
  11. );
  12. // FIFO IP核的测试
  13. initial begin
  14.     wr_en = 1; wr_clk = 1; rd_en = 0; rd_clk = 1;
  15.     #10 din = 8'b00001111;
  16.     #10 din = 8'b00010010;
  17.     #10 din = 8'b01010101;
  18.     #10 wr_en = 0;
  19.     #10 rd_en = 1;
  20.     #10;
  21.     while(!empty) begin
  22.         #10 $display("dout=%b", dout);
  23.     end
  24. end


2.2UART IP核


        UART(Universal Asynchronous Receiver/Transmitter)是一种常见的串口通信协议,常用于嵌入式系统中。在Vivado中,可以使用UART IP核来快速实现串口通信。以下是一个UART IP核的调用方法案例:

  1. // UART IP核的实例化和连接
  2. uart_inst uart (
  3.     .clk(clk),  // 时钟
  4.     .reset(reset),  // 复位
  5.     .tx(tx),  // 发送数据
  6.     .rx(rx)  // 接收数据
  7. );
  8. // UART IP核的测试
  9. initial begin
  10.     #10 reset = 1; clk = 0; tx = 1'b1; rx = 1'b1;
  11.     #10 reset = 0;
  12.     #10;
  13.     $display("发送数据:");
  14.     for(int i=0; i<8; i=i+1) begin
  15.         tx = 1'b0;
  16.         #10 tx = 1'b1;
  17.     end
  18.     #10;
  19.     $display("接收数据:");
  20.     for(int i=0; i<8; i=i+1) begin
  21.         rx = 1'b0;
  22.         #10 rx = 1'b1;
  23.         #10 $display("data=%b", uart.data);
  24.     end
  25. end


2.3 DDR3 IP核


       DDR3(Double Data Rate 3)是一种常见的内存接口协议,常用于高性能计算和图形处理器中。在Vivado中,可以使用DDR3 IP核来快速实现DDR3内存接口。以下是一个DDR3 IP核的调用方法案例:

  1. // DDR3 IP核的实例化和连接
  2. ddr3_inst ddr3 (
  3.     .clk(clk),  // 时钟
  4.     .reset(reset),  // 复位
  5.     .dram_clk(dram_clk),  // DRAM时钟
  6.     .dram_rst(dram_rst),  // DRAM复位
  7.     .a(addr),  // 地址
  8.     .ba(ba),  // Bank地址
  9.     .cs_n(cs_n),  // Chip选择
  10.     .cke(cke),  // 时钟使能
  11.     .ras_n(ras_n),  // 行地址选择
  12.     .cas_n(cas_n),  // 列地址选择
  13.     .we_n(we_n),  // 写使能
  14.     .dm(dm),  // 数据掩码
  15.     .dq(dq),  // 数据
  16.     .dqs_n(dqs_n),  // 数据时钟反相
  17.     .dqs(dqs)  // 数据时钟
  18. );
  19. // DDR3 IP核的测试
  20. initial begin
  21.     // 写入数据
  22.     addr = 32'h00000000;
  23.     ba = 2'b00;
  24.     cs_n = 1'b0;
  25.     cke = 1'b1;
  26.     ras_n = 1'b0;
  27.     cas_n = 1'b0;
  28.     we_n = 1'b0;
  29.     dm = 4'b0000;
  30.     dq = 64'h1122334455667788;
  31.     dqs_n = 1'b0;
  32.     dqs = 1'b1;
  33.     #10;
  34.     cs_n = 1'b1;
  35.     ras_n = 1'b1;
  36.     cas_n = 1'b1;
  37.     we_n = 1'b1;
  38.     #10;
  39.     // 读取数据
  40.     addr = 32'h00000000;
  41.     ba = 2'b00;
  42.     cs_n = 1'b0;
  43.     cke = 1'b1;
  44.     ras_n = 1'b0;
  45.     cas_n = 1'b0;
  46.     we_n = 1'b1;
  47.     dm = 4'b0000;
  48.     dq = 64'h0000000000000000;
  49.     dqs_n = 1'b0;
  50.     dqs = 1'b1;
  51.     #10;
  52.     cs_n = 1'b1;
  53.     ras_n = 1'b1;
  54.     cas_n = 1'b1;
  55.     we_n = 1'b1;
  56.     #10 $display("dq=%h", dq);
  57. end


2.4 PLL IP核


        PLL(Phase-Locked Loop)是一种常见的时钟管理器,可以用于时钟频率的倍频、分频和锁相等应用。在Vivado中,可以使用PLL IP核来快速实现PLL模块。以下是一个PLL IP核的调用方法案例:

  1. // PLL IP核的实例化和连接
  2. pll_inst pll (
  3.     .inclk0(inclk0),  // 输入时钟
  4.     .c0(c0),  // 输出时钟1
  5.     .c1(c1),  // 输出时钟2
  6.     .locked(locked)  // 锁相标志
  7. );
  8. // PLL IP核的测试
  9. initial begin
  10.     // 设置时钟频率
  11.     inclk0 = 50e6;
  12.     #10;
  13.     // 配置PLL
  14.     pll.clkfbout_mult = 10;
  15.     pll.clkout0_divide = 2;
  16.     pll.clkout1_divide = 4;
  17.     #10;
  18.     $display("c0=%d, c1=%d", c0, c1);
  19. end


2.5AXI GPIO IP核


       AXI GPIO(Advanced eXtensible Interface General Purpose Input/Output)是一种常见的GPIO接口协议,可以用于控制外部设备的输入输出。在Vivado中,可以使用AXI GPIO IP核来快速实现GPIO接口。以下是一个AXI GPIO IP核的调用方法案例:

  1. // AXI GPIO IP核的实例化和连接
  2. axi_gpio_inst axi_gpio (
  3.     .s_axi(s_axi),  // AXI总线接口
  4.     .gpio_io(gpio_io)  // GPIO接口
  5. );
  6. // AXI GPIO IP核的测试
  7. initial begin
  8.     // 设置GPIO方向和初始值
  9.     s_axi.araddr = 32'h00000000;
  10.     s_ax
  11. 继续
  12. i.awaddr = 32'h00000000;
  13. s_axi.awvalid = 1;
  14. s_axi.awready = 0;
  15. s_axi.wdata = 8'h00;
  16. s_axi.wstrb = 4'b1111;
  17. s_axi.wvalid = 1;
  18. s_axi.wready = 0;
  19. #10;
  20. s_axi.awvalid = 0;
  21. s_axi.awready = 1;
  22. #10;
  23. s_axi.wvalid = 0;
  24. s_axi.wready = 1;
  25. #10;
  26. s_axi.arvalid = 1;
  27. s_axi.arready = 0;
  28. #10;
  29. s_axi.arvalid = 0;
  30. s_axi.arready = 1;
  31. #10;
  32. while(1) begin
  33. // 读取GPIO值
  34. s_axi.araddr = 32'h00000008;
  35. s_axi.arvalid = 1;
  36. s_axi.arready = 0;
  37. #10;
  38. s_axi.arvalid = 0;
  39. s_axi.arready = 1;
  40. #10;
  41. if(s_axi.rvalid && s_axi.rdata) begin
  42. $display("GPIO=%b", s_axi.rdata);
  43. end
  44. // 设置GPIO值
  45. s_axi.awaddr = 32'h00000004;
  46. s_axi.awvalid = 1;
  47. s_axi.awready = 0;
  48. s_axi.wdata = 8'hff;
  49. s_axi.wstrb = 4'b1111;
  50. s_axi.wvalid = 1;
  51. s_axi.wready = 0;
  52. #10;
  53. s_axi.awvalid = 0;
  54. s_axi.awready = 1;
  55. #10;
  56. s_axi.wvalid = 0;
  57. s_axi.wready = 1;
  58. #10;
  59. #100;
  60. end
  61. end

三、总结

        本文介绍了基于Vivado的IP核的使用方法,针对常用的IP核给出了5个以上的调用方法案例以及对应的testbench。这些IP核覆盖了常见的功能模块,可以用于快速实现各种应用。在实际设计中,可以根据具体需求选择合适的IP核,并结合自己的设计进行连接和配置,从而快速实现所需功能。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/131601
推荐阅读