vivado+zedboard之纯PL开发基本流程

环境:win7 64   vivado 2014.1
开发板:zedboard version d    xc7z020clg484-1

目标:在vivado环境下进行传统的FPGA开发,对zynq来说,也可以叫做纯PL开发。本文重点介绍纯PL的开发流程,具体实例为按键控制LD灯。

说明:文本在参考何宾老师的书籍的基础上整理而成。

注意:本文中所有的源码、工程文件在“我的资源”中可以找到,如果没有请联系作者本人。转载请注明出处。

正文:

本文将分为以下步骤:

1. 使用Vivado 建一个工程,创建源文件,功能仿真等

2. 创建约束文件,综合、实现

3. 生成位流文件,在开发板中进行验证

4. 总结

1. 使用Vivado 建一个工程,创建源文件,功能仿真等

1)打开vivado,创建一个新的工程TestPL,不指定文件,选择zedboard开发板


2)左侧导航面板,选择add sources–add Design source–Create File,设置文件名为top,选择ok


3)在弹出的的对话框中创建端口,也可以在HDL文件中定义。


4)添加源代码,本文采用的代码很简单,重点在说明流程。保存后即可看到sources面板自动更新,top.v文件黑色粗体显示


    
    
  1. module top(
  2. input a,
  3. input b,
  4. output [ 5: 0] z
  5. );
  6. assign z[ 0]=a&b;
  7. assign z[ 1]=~(a&b);
  8. assign z[ 2]=a|b;
  9. assign z[ 3]=~(a&b);
  10. assign z[ 4]=a^b;
  11. assign z[ 5]=a~^b;
  12. endmodule


5)左侧导航面板,add sources–add Simulationsource–Create File,设置文件名为top_tb,即testbench文件,选择ok。这时候可以看到sources面板自动更新



6)这时候就可进行RTL分析了,左侧导航面板,选择RTL analysis下面的额Open elaborate Design,可以看到top模块的RTL原理图


7)添加testbench源代码,给予输入信号a,b以不同的值用以验证模块的情况。本例比较简单,4个组合就包括所有情况。对于复杂的程序需要好好设计testbench。


    
    
  1. module test;
  2. reg a;
  3. reg b;
  4. wire [ 5 : 0] z;
  5. top uut(
  6. .a(a),
  7. .b(b),
  8. .z(z)
  9. );
  10. initial
  11. begin
  12. while( 1)
  13. begin
  14. a= 0;
  15. b= 0;
  16. #100;
  17. a= 1;
  18. b= 0;
  19. #100;
  20. a= 0;
  21. b= 1;
  22. #100;
  23. a= 1;
  24. b= 1;
  25. #100;
  26. end
  27. end
  28. endmodule

8)左侧导航面板,run Simulation,进行功能行为仿真,即利用testbench验证top模块的逻辑正确性。和手算结果进行对比,无误


2. 创建约束文件,综合、实现

9)左侧导航面板,run Synthesis,进行综合。综合的目的是把RTL级转换为门级

10)综合后选择I/O Planning视图进行引脚规划


11)查阅zedboard用户手册,可以看到关于LD灯和开关的引脚定义


12)指定端口的引脚分配。本例为a:SW0-F22;b:SW1-G22;z:LD0-LD5-T22-W22。注意IO标准为LVCMOS33,在用户手册中有说明


13)创建约束文件,命名为top.xdc


14)右键,在弹出菜单中选择export IO ports导出IO约束文件,选择刚刚创建的xdc文件并覆盖它。这样就可以自动生成约束文件了



    
    
  1. set_property PACKAGE_PIN T22 [get_ports {z[0]}]
  2. set_property PACKAGE_PIN T21 [get_ports {z[1]}]
  3. set_property PACKAGE_PIN U22 [get_ports {z[2]}]
  4. set_property PACKAGE_PIN U21 [get_ports {z[3]}]
  5. set_property PACKAGE_PIN V22 [get_ports {z[4]}]
  6. set_property PACKAGE_PIN W22 [get_ports {z[5]}]
  7. set_property PACKAGE_PIN F22 [get_ports a]
  8. set_property PACKAGE_PIN G22 [get_ports b]
  9. set_property DIRECTION OUT [get_ports {z[5]}]
  10. set_property IOSTANDARD LVCMOS33 [get_ports {z[5]}]
  11. set_property DRIVE 12 [get_ports {z[5]}]
  12. set_property SLEW SLOW [get_ports {z[5]}]
  13. set_property DIRECTION OUT [get_ports {z[4]}]
  14. set_property IOSTANDARD LVCMOS33 [get_ports {z[4]}]
  15. set_property DRIVE 12 [get_ports {z[4]}]
  16. set_property SLEW SLOW [get_ports {z[4]}]
  17. set_property DIRECTION OUT [get_ports {z[3]}]
  18. set_property IOSTANDARD LVCMOS33 [get_ports {z[3]}]
  19. set_property DRIVE 12 [get_ports {z[3]}]
  20. set_property SLEW SLOW [get_ports {z[3]}]
  21. set_property DIRECTION OUT [get_ports {z[2]}]
  22. set_property IOSTANDARD LVCMOS33 [get_ports {z[2]}]
  23. set_property DRIVE 12 [get_ports {z[2]}]
  24. set_property SLEW SLOW [get_ports {z[2]}]
  25. set_property DIRECTION OUT [get_ports {z[1]}]
  26. set_property IOSTANDARD LVCMOS33 [get_ports {z[1]}]
  27. set_property DRIVE 12 [get_ports {z[1]}]
  28. set_property SLEW SLOW [get_ports {z[1]}]
  29. set_property DIRECTION OUT [get_ports {z[0]}]
  30. set_property IOSTANDARD LVCMOS33 [get_ports {z[0]}]
  31. set_property DRIVE 12 [get_ports {z[0]}]
  32. set_property SLEW SLOW [get_ports {z[0]}]
  33. set_property DIRECTION IN [get_ports a]
  34. set_property IOSTANDARD LVCMOS33 [get_ports a]
  35. set_property DIRECTION IN [get_ports b]
  36. set_property IOSTANDARD LVCMOS33 [get_ports b]
15) 左侧导航面板,run Implementation,进行实现。

16)左侧导航面板,run Post-Implementation Timing Simulation进行实现后时序仿真,验证实现后的、加时序的仿真。这里我们可以看到有微小的延迟但是可以接受



3. 生成位流文件,在开发板中进行验证

17)左侧导航面板,Generate Bitstream,生成位流文件

18)连接开发板,包括micro USB线、电源线。上电

19)左侧导航面板,选择Open Hardware Manager。一路默认,确认已经找到开发板并连接


20)选择Program Device,烧写开发板。烧写完毕后就可以通过控制sw0和sw1,看ld0-LD5的变化,对比功能仿真图即可验证正确性



4. 总结

本文简单介绍了使用vivado进行zynq芯片纯PL开发的流程,和传统的FPGA的开发基本相同。关于硬件调试可以参考官网的教程,这里未做介绍。


环境:win7 64   vivado 2014.1
开发板:zedboard version d    xc7z020clg484-1

目标:在vivado环境下进行传统的FPGA开发,对zynq来说,也可以叫做纯PL开发。本文重点介绍纯PL的开发流程,具体实例为按键控制LD灯。

说明:文本在参考何宾老师的书籍的基础上整理而成。

注意:本文中所有的源码、工程文件在“我的资源”中可以找到,如果没有请联系作者本人。转载请注明出处。

正文:

本文将分为以下步骤:

1. 使用Vivado 建一个工程,创建源文件,功能仿真等

2. 创建约束文件,综合、实现

3. 生成位流文件,在开发板中进行验证

4. 总结

1. 使用Vivado 建一个工程,创建源文件,功能仿真等

1)打开vivado,创建一个新的工程TestPL,不指定文件,选择zedboard开发板


2)左侧导航面板,选择add sources–add Design source–Create File,设置文件名为top,选择ok


3)在弹出的的对话框中创建端口,也可以在HDL文件中定义。


4)添加源代码,本文采用的代码很简单,重点在说明流程。保存后即可看到sources面板自动更新,top.v文件黑色粗体显示


  
  
  1. module top(
  2. input a,
  3. input b,
  4. output [ 5: 0] z
  5. );
  6. assign z[ 0]=a&b;
  7. assign z[ 1]=~(a&b);
  8. assign z[ 2]=a|b;
  9. assign z[ 3]=~(a&b);
  10. assign z[ 4]=a^b;
  11. assign z[ 5]=a~^b;
  12. endmodule


5)左侧导航面板,add sources–add Simulationsource–Create File,设置文件名为top_tb,即testbench文件,选择ok。这时候可以看到sources面板自动更新



6)这时候就可进行RTL分析了,左侧导航面板,选择RTL analysis下面的额Open elaborate Design,可以看到top模块的RTL原理图


7)添加testbench源代码,给予输入信号a,b以不同的值用以验证模块的情况。本例比较简单,4个组合就包括所有情况。对于复杂的程序需要好好设计testbench。


  
  
  1. module test;
  2. reg a;
  3. reg b;
  4. wire [ 5 : 0] z;
  5. top uut(
  6. .a(a),
  7. .b(b),
  8. .z(z)
  9. );
  10. initial
  11. begin
  12. while( 1)
  13. begin
  14. a= 0;
  15. b= 0;
  16. #100;
  17. a= 1;
  18. b= 0;
  19. #100;
  20. a= 0;
  21. b= 1;
  22. #100;
  23. a= 1;
  24. b= 1;
  25. #100;
  26. end
  27. end
  28. endmodule

8)左侧导航面板,run Simulation,进行功能行为仿真,即利用testbench验证top模块的逻辑正确性。和手算结果进行对比,无误


2. 创建约束文件,综合、实现

9)左侧导航面板,run Synthesis,进行综合。综合的目的是把RTL级转换为门级

10)综合后选择I/O Planning视图进行引脚规划


11)查阅zedboard用户手册,可以看到关于LD灯和开关的引脚定义


12)指定端口的引脚分配。本例为a:SW0-F22;b:SW1-G22;z:LD0-LD5-T22-W22。注意IO标准为LVCMOS33,在用户手册中有说明


13)创建约束文件,命名为top.xdc


14)右键,在弹出菜单中选择export IO ports导出IO约束文件,选择刚刚创建的xdc文件并覆盖它。这样就可以自动生成约束文件了



  
  
  1. set_property PACKAGE_PIN T22 [get_ports {z[0]}]
  2. set_property PACKAGE_PIN T21 [get_ports {z[1]}]
  3. set_property PACKAGE_PIN U22 [get_ports {z[2]}]
  4. set_property PACKAGE_PIN U21 [get_ports {z[3]}]
  5. set_property PACKAGE_PIN V22 [get_ports {z[4]}]
  6. set_property PACKAGE_PIN W22 [get_ports {z[5]}]
  7. set_property PACKAGE_PIN F22 [get_ports a]
  8. set_property PACKAGE_PIN G22 [get_ports b]
  9. set_property DIRECTION OUT [get_ports {z[5]}]
  10. set_property IOSTANDARD LVCMOS33 [get_ports {z[5]}]
  11. set_property DRIVE 12 [get_ports {z[5]}]
  12. set_property SLEW SLOW [get_ports {z[5]}]
  13. set_property DIRECTION OUT [get_ports {z[4]}]
  14. set_property IOSTANDARD LVCMOS33 [get_ports {z[4]}]
  15. set_property DRIVE 12 [get_ports {z[4]}]
  16. set_property SLEW SLOW [get_ports {z[4]}]
  17. set_property DIRECTION OUT [get_ports {z[3]}]
  18. set_property IOSTANDARD LVCMOS33 [get_ports {z[3]}]
  19. set_property DRIVE 12 [get_ports {z[3]}]
  20. set_property SLEW SLOW [get_ports {z[3]}]
  21. set_property DIRECTION OUT [get_ports {z[2]}]
  22. set_property IOSTANDARD LVCMOS33 [get_ports {z[2]}]
  23. set_property DRIVE 12 [get_ports {z[2]}]
  24. set_property SLEW SLOW [get_ports {z[2]}]
  25. set_property DIRECTION OUT [get_ports {z[1]}]
  26. set_property IOSTANDARD LVCMOS33 [get_ports {z[1]}]
  27. set_property DRIVE 12 [get_ports {z[1]}]
  28. set_property SLEW SLOW [get_ports {z[1]}]
  29. set_property DIRECTION OUT [get_ports {z[0]}]
  30. set_property IOSTANDARD LVCMOS33 [get_ports {z[0]}]
  31. set_property DRIVE 12 [get_ports {z[0]}]
  32. set_property SLEW SLOW [get_ports {z[0]}]
  33. set_property DIRECTION IN [get_ports a]
  34. set_property IOSTANDARD LVCMOS33 [get_ports a]
  35. set_property DIRECTION IN [get_ports b]
  36. set_property IOSTANDARD LVCMOS33 [get_ports b]
15) 左侧导航面板,run Implementation,进行实现。

16)左侧导航面板,run Post-Implementation Timing Simulation进行实现后时序仿真,验证实现后的、加时序的仿真。这里我们可以看到有微小的延迟但是可以接受



3. 生成位流文件,在开发板中进行验证

17)左侧导航面板,Generate Bitstream,生成位流文件

18)连接开发板,包括micro USB线、电源线。上电

19)左侧导航面板,选择Open Hardware Manager。一路默认,确认已经找到开发板并连接


20)选择Program Device,烧写开发板。烧写完毕后就可以通过控制sw0和sw1,看ld0-LD5的变化,对比功能仿真图即可验证正确性



4. 总结

本文简单介绍了使用vivado进行zynq芯片纯PL开发的流程,和传统的FPGA的开发基本相同。关于硬件调试可以参考官网的教程,这里未做介绍。


猜你喜欢

转载自blog.csdn.net/zhipao6108/article/details/81142817