vc707(virtex7)led 实验例程 备注:本文大部分内容参考网络,原文链接如下,修改和补充一些内容: https://blog.csdn.net/qq_37843999/article/details/79455247

备注:本文大部分内容参考网络,原文链接如下,修改和补充一些内容:

https://blog.csdn.net/qq_37843999/article/details/79455247


该软件以前没有使用过。

先跑一个流水灯看看再说。

1.创建工程

2.next

3.名字和目录

4.

在这里作者讲一下这几个选项的区别。

(1)RTL project

    做FPGA的肯定都知道RTL级,简单的就说verilog代码, 行为级就是不一定可以综合的,什么都可以写。RTL级就是行为级里面可以用综合器综合的,综合之后就是门级。这里的RTL project就是可以用来综合的工程,咱们一般就用这个就可以了。

(2)Post-Synthesis Projects

     翻译过来是 综合后的工程。这种工程,就是直接添加综合后的网表,然后和前面的RTL工程没什么区别,也是实现布局布线。例如 .ngc.edif.edn.ncd.dcp这样的文件。可能是本人电脑不够强大,用vivado跑综合实在是有点慢,之后可能会考虑用其他综合工具。

(3)I/O Planning Projects

    设置I/O口等等,感觉这个选项没有太大的作用,就看一下I/O布局之类的。

(4)Imported Project

     导入其他工具写好的工程。

(5)Example Project

       按照预定义的模板建立一个工程。

我们选择第一个,VC707的型号如下


创建之后,  add sourse 

第一个是约束 第二个是普通的文件 第三个是 仿真文件 先选第二个。创建之后开始写代码。



由于板子上只有差分时钟,所以我们需要用上差分转单端的原语。

对于差分时钟信号 ,我们使用IBUFGDS来替代IBUFDS,这个模块非必须,也可以直接使用clock IP来完成转换。

注意:vc707的reset按钮 按下去的时候 电平是1 ;

选择 IP Catalog,然后搜索Clock 模块,选择Wizard,然后一步一步设置如下:

这里使用了一个clock ip 把200MHZ转换为5MHZ了。




  1. module top_led(
  2. input sys_clk_p, // 开发板上差分输入时钟 200Mhz
  3. input sys_clk_n,
  4. input rst,
  5. output reg [ 7: 0] led
  6. );
  7. wire sys_clk_ibufg;
  8. wire clk;
  9. IBUFGDS #
  10. (
  11. . DIFF_TERM ( "FALSE"),
  12. . IBUF_LOW_PWR ( "FALSE")
  13. )
  14. u_ibufg_sys_clk
  15. (
  16. . I (sys_clk_p), //差分时钟正端输入
  17. . IB (sys_clk_n), // 差分时钟负端输入
  18. . O (sys_clk_ibufg) //时钟缓冲输出
  19. );
  20. reg [ 26: 0] count;
  21. clk_wiz_0 instance_name
  22. (
  23. // Clock out ports
  24. .clk_out1(clk), // output clk_out1  5MHZ  
  25. // Status and control signals
  26. .reset(rst), // input reset
  27. .locked(), // output locked
  28. // Clock in ports
  29. .clk_in1(sys_clk_ibufg));
  30. always@(posedge clk or posedge rst)begin
  31. if(rst)begin
  32. count <= 0;
  33. led <= 8'b10101010;
  34. end
  35. else begin
  36. if( count == 26'd2499999)begin
  37. count <= 0;
  38. led <={led[ 6: 0],led[ 7]};
  39. end
  40. else count <= count+ 1;
  41. end
  42. end
  43. endmodule

再添加约束文件

  1. set_property PACKAGE_PIN E19 [get_ports sys_clk_p]
  2. set_property IOSTANDARD LVDS [get_ports sys_clk_p]
  3. set_property PACKAGE_PIN E18 [get_ports sys_clk_n]
  4. set_property IOSTANDARD LVDS [get_ports sys_clk_n]
  5. set_property PACKAGE_PIN AV40 [get_ports rst]
  6. set_property IOSTANDARD LVCMOS18 [get_ports rst]
  7. set_property PACKAGE_PIN AM39 [get_ports {led[0]}]
  8. set_property IOSTANDARD LVCMOS18 [get_ports {led[0]}]
  9. set_property PACKAGE_PIN AN39 [get_ports {led[1]}]
  10. set_property IOSTANDARD LVCMOS18 [get_ports {led[1]}]
  11. set_property PACKAGE_PIN AR37 [get_ports {led[2]}]
  12. set_property IOSTANDARD LVCMOS18 [get_ports {led[2]}]
  13. set_property PACKAGE_PIN AT37 [get_ports {led[3]}]
  14. set_property IOSTANDARD LVCMOS18 [get_ports {led[3]}]
  15. set_property PACKAGE_PIN AR35 [get_ports {led[4]}]
  16. set_property IOSTANDARD LVCMOS18 [get_ports {led[4]}]
  17. set_property PACKAGE_PIN AP41 [get_ports {led[5]}]
  18. set_property IOSTANDARD LVCMOS18 [get_ports {led[5]}]
  19. set_property PACKAGE_PIN AP42 [get_ports {led[6]}]
  20. set_property IOSTANDARD LVCMOS18 [get_ports {led[6]}]
  21. set_property PACKAGE_PIN AU39 [get_ports {led[7]}]
  22. set_property IOSTANDARD LVCMOS18 [get_ports {led[7]}]

然后就跑一个bit文件出来 。打开hardware mannager,给板子上电,


这里自动寻找一下。如果找不到,看看是不是没上电 ,JTAG线是不是插错位置了,驱动是不是下好了。


点 program Device,编程完成之后就可以看到现象了。




该软件以前没有使用过。

先跑一个流水灯看看再说。

1.创建工程

2.next

3.名字和目录

4.

在这里作者讲一下这几个选项的区别。

(1)RTL project

    做FPGA的肯定都知道RTL级,简单的就说verilog代码, 行为级就是不一定可以综合的,什么都可以写。RTL级就是行为级里面可以用综合器综合的,综合之后就是门级。这里的RTL project就是可以用来综合的工程,咱们一般就用这个就可以了。

(2)Post-Synthesis Projects

     翻译过来是 综合后的工程。这种工程,就是直接添加综合后的网表,然后和前面的RTL工程没什么区别,也是实现布局布线。例如 .ngc.edif.edn.ncd.dcp这样的文件。可能是本人电脑不够强大,用vivado跑综合实在是有点慢,之后可能会考虑用其他综合工具。

(3)I/O Planning Projects

    设置I/O口等等,感觉这个选项没有太大的作用,就看一下I/O布局之类的。

(4)Imported Project

     导入其他工具写好的工程。

(5)Example Project

       按照预定义的模板建立一个工程。

我们选择第一个,VC707的型号如下


创建之后,  add sourse 

第一个是约束 第二个是普通的文件 第三个是 仿真文件 先选第二个。创建之后开始写代码。



由于板子上只有差分时钟,所以我们需要用上差分转单端的原语。

对于差分时钟信号 ,我们使用IBUFGDS来替代IBUFDS,这个模块非必须,也可以直接使用clock IP来完成转换。

注意:vc707的reset按钮 按下去的时候 电平是1 ;

选择 IP Catalog,然后搜索Clock 模块,选择Wizard,然后一步一步设置如下:

这里使用了一个clock ip 把200MHZ转换为5MHZ了。




  1. module top_led(
  2. input sys_clk_p, // 开发板上差分输入时钟 200Mhz
  3. input sys_clk_n,
  4. input rst,
  5. output reg [ 7: 0] led
  6. );
  7. wire sys_clk_ibufg;
  8. wire clk;
  9. IBUFGDS #
  10. (
  11. . DIFF_TERM ( "FALSE"),
  12. . IBUF_LOW_PWR ( "FALSE")
  13. )
  14. u_ibufg_sys_clk
  15. (
  16. . I (sys_clk_p), //差分时钟正端输入
  17. . IB (sys_clk_n), // 差分时钟负端输入
  18. . O (sys_clk_ibufg) //时钟缓冲输出
  19. );
  20. reg [ 26: 0] count;
  21. clk_wiz_0 instance_name
  22. (
  23. // Clock out ports
  24. .clk_out1(clk), // output clk_out1&nbsp;&nbsp;5MHZ&nbsp;&nbsp;
  25. // Status and control signals
  26. .reset(rst), // input reset
  27. .locked(), // output locked
  28. // Clock in ports
  29. .clk_in1(sys_clk_ibufg));
  30. always@(posedge clk or posedge rst)begin
  31. if(rst)begin
  32. count <= 0;
  33. led <= 8'b10101010;
  34. end
  35. else begin
  36. if( count == 26'd2499999)begin
  37. count <= 0;
  38. led <={led[ 6: 0],led[ 7]};
  39. end
  40. else count <= count+ 1;
  41. end
  42. end
  43. endmodule

再添加约束文件

  1. set_property PACKAGE_PIN E19 [get_ports sys_clk_p]
  2. set_property IOSTANDARD LVDS [get_ports sys_clk_p]
  3. set_property PACKAGE_PIN E18 [get_ports sys_clk_n]
  4. set_property IOSTANDARD LVDS [get_ports sys_clk_n]
  5. set_property PACKAGE_PIN AV40 [get_ports rst]
  6. set_property IOSTANDARD LVCMOS18 [get_ports rst]
  7. set_property PACKAGE_PIN AM39 [get_ports {led[0]}]
  8. set_property IOSTANDARD LVCMOS18 [get_ports {led[0]}]
  9. set_property PACKAGE_PIN AN39 [get_ports {led[1]}]
  10. set_property IOSTANDARD LVCMOS18 [get_ports {led[1]}]
  11. set_property PACKAGE_PIN AR37 [get_ports {led[2]}]
  12. set_property IOSTANDARD LVCMOS18 [get_ports {led[2]}]
  13. set_property PACKAGE_PIN AT37 [get_ports {led[3]}]
  14. set_property IOSTANDARD LVCMOS18 [get_ports {led[3]}]
  15. set_property PACKAGE_PIN AR35 [get_ports {led[4]}]
  16. set_property IOSTANDARD LVCMOS18 [get_ports {led[4]}]
  17. set_property PACKAGE_PIN AP41 [get_ports {led[5]}]
  18. set_property IOSTANDARD LVCMOS18 [get_ports {led[5]}]
  19. set_property PACKAGE_PIN AP42 [get_ports {led[6]}]
  20. set_property IOSTANDARD LVCMOS18 [get_ports {led[6]}]
  21. set_property PACKAGE_PIN AU39 [get_ports {led[7]}]
  22. set_property IOSTANDARD LVCMOS18 [get_ports {led[7]}]

然后就跑一个bit文件出来 。打开hardware mannager,给板子上电,


这里自动寻找一下。如果找不到,看看是不是没上电 ,JTAG线是不是插错位置了,驱动是不是下好了。


点 program Device,编程完成之后就可以看到现象了。



猜你喜欢

转载自blog.csdn.net/lcydusk/article/details/80932488