当前位置:   article > 正文

Vivado 入门 —— HLS HelloWorld 流水灯(二)—— 调用 IP 与上板验证

vivado 调用ip 查看ip历程

Vivado 入门 —— HLS HelloWorld 流水灯(二)—— 调用 IP 与上板验证

Vivado 新建项目

这里和使用 Vivado HLS 一样,要注意顶层名称与设置的一致

image

直接下一步,到芯片选择界面,选择的芯片型号为 xc7z020clg400-2:

image

创建成功后界面如下:

image

注意:这里我们需要使用的时 Vivado 而不再是 Vivado HLS 了

下面我们需要在我们的项目目录下新建一个文件夹用于存储 ip 文件

image

然后需要将我们前面已经生成的完整的 IP 文件夹复制到我们的 ip 文件夹中

准备好之后,我们就需要在项目中添加我们自己建立的第三方 ip

image

这里选择我们刚刚创建的文件夹即可,这样就能识别到里面的 IP

image

这样我们就能看到我们的 IP 了

image

双击就能看到我们 IP 的结构图

image

下面我们就需要创建 Verilog 文件来调用我们的 IP

代码设计

生成 IP

创建一个 Verilog 文件,来调用 IP

image

image

image

在调用 IP 之前我们需要先通过 IP 文件生成 IP,这里直接双击 IP,点击 ok 即可

image

image

当弹出创建 IP 的对话框时,我们只需要点击生成即可:

image

当出现如下提示框,就说明我们的 IP 已经生成成功了

image

我们也可以看到 IP 文件

image

代码设计

下面我们就可以开始设计我们的代码文件了,完整代码如下:

HLS_HelloWorld.v:

  1. `timescale 1ns / 1ps
  2. module HLS_HelloWorld(
  3. input wire clk ,
  4. input wire rst_n ,
  5. output wire led_o
  6. );
  7. wire rst ;//同步复位
  8. wire ap_ready ;//当前可以接收下一次数据
  9. reg ap_start ;//IP开始工作
  10. reg led_i_vld ;//输入数据有效
  11. wire led_o_vld ;
  12. reg led_i ;//输入的led信号
  13. wire led_o_r ;
  14. wire ap_done ;
  15. wire ap_idle ;
  16. reg [1:0] delay_cnt ;
  17. assign rst = ~rst_n ;
  18. assign led_o = led_o_r ;
  19. //----------------delay_cnt------------------
  20. always @(posedge clk) begin
  21. if (rst==1'b1) begin
  22. delay_cnt <= 'd0;
  23. end
  24. else if(delay_cnt[1]==1'b0) begin
  25. delay_cnt <= delay_cnt + 1'b1;
  26. end
  27. end
  28. //----------------ap_start------------------
  29. always @(posedge clk) begin
  30. if (rst==1'b1) begin
  31. ap_start <= 1'b0;
  32. end
  33. else if(delay_cnt[1]==1'b1)begin
  34. ap_start <= 1'b1;
  35. end
  36. end
  37. //----------------led_i_vld------------------
  38. always @(posedge clk) begin
  39. if (rst==1'b1) begin
  40. led_i_vld <= 1'b0;
  41. end
  42. else if(delay_cnt[1]==1'b1)begin
  43. led_i_vld <= 1'b1;
  44. end
  45. end
  46. //----------------ap_i------------------
  47. always @(posedge clk) begin
  48. if (rst==1'b1) begin
  49. led_i <= 1'b0;
  50. end
  51. else if(led_o_vld==1'b1)begin
  52. led_i <= led_o_r ;
  53. end
  54. end
  55. flash_led_0 inst_flash_led (
  56. .led_o_V_ap_vld(led_o_vld), // output wire led_o_V_ap_vld
  57. .led_i_V_ap_vld(led_i_vld), // input wire led_i_V_ap_vld
  58. .ap_clk(clk), // input wire ap_clk
  59. .ap_rst(rst), // input wire ap_rst
  60. .ap_start(ap_start), // input wire ap_start
  61. .ap_done(ap_done), // output wire ap_done
  62. .ap_idle(ap_idle), // output wire ap_idle
  63. .ap_ready(ap_ready), // output wire ap_ready
  64. .led_o_V(led_o_r), // output wire [0 : 0] led_o_V
  65. .led_i_V(led_i) // input wire [0 : 0] led_i_V
  66. );
  67. wire [15:0] probe0;
  68. assign probe0={
  69. led_i,
  70. led_i_vld,
  71. led_o,
  72. led_o_vld,
  73. ap_start,
  74. ap_ready,
  75. ap_done
  76. };
  77. ila_0 inst_ila (
  78. .clk(clk), // input wire clk
  79. .probe0(probe0) // input wire [15:0] probe0
  80. );
  81. endmodule

由于我们还需要观察内部信号的变化情况,我们就还需要添加一个 ILA

image

image

image

这里我们已经成功的生成了ILA

image

结果验证

绑定引脚约束文件

当我们一切准备就绪,就可以添加约束文件来观察实验结果,约束文件内容如下:

top_pin.xdc

  1. ##############LED define##################
  2. set_property PACKAGE_PIN P15 [get_ports {led_o}]
  3. set_property IOSTANDARD LVCMOS33 [get_ports {led_o}]
  4. ##############Reset define##################
  5. set_property PACKAGE_PIN P16 [get_ports {rst_n}]
  6. set_property IOSTANDARD LVCMOS33 [get_ports {rst_n}]
  7. ##############50M CLK define##################
  8. create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]
  9. set_property PACKAGE_PIN N18 [get_ports {clk}]
  10. set_property IOSTANDARD LVCMOS33 [get_ports {clk}]

选择添加约束文件

image

这里我们选择我们的约束文件即可:

image

编译烧录

如果前面全部没有问题,我们就可以直接生成 Bit 文件

image

这一步时间较长,需要耐心等待,当出现如下界面就说明已经生成成功了

image

这里我们选择打开硬件设备管理

image

点击 open target 链接我们的 FPGA 芯片

image

如果 Hardware 中有设备显示就说明我们已经连接成功了

image

然后我们再点击烧录

image

这是我们可以看到如下界面,直接点击烧录

image

这是我们已经将文件下载到了开发板上

image

点击运行我们就可以观察到实验现象

image

实验结果

由于前面我们设置的时钟时 100 MHz,芯片时钟为 50 MHz,所以这里时 2s 灯亮灭一次

结果:

image

触发信号如下

image

到此我们的流水灯就已经完成了

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

闽ICP备14008679号