Zedboard学习(三):PL下流水灯实验 标签: fpgazynqPL 2017-07-05 11:09 21人阅读 评论(0)

zynq系列FPGA分为PS部分和PL部分。
PL: 可编程逻辑 (Progarmmable Logic), 就是FPGA部分。
PS: 处理系统 (Processing System) , 就是与FPGA无关的ARM的SOC的部分,实质是直接操作arm9内核的处理器。
这次先是最简单地在PL部分编写一个流水灯实验的代码。
使用的开发环境是vivado 2016.4。

1、新建工程,Create New Project。
这里写图片描述

2、next。
这里写图片描述

3、选择工程目录,和输入工程名字。
这里写图片描述

4、选择RTL Project。
这里写图片描述

5、还没有编写Verilog代码,跳过这一步,直接next。
这里写图片描述

6、不选择IP核,直接跳过,点next。
这里写图片描述

7、选择boards,软件自带了zedboard的芯片型号等的配置,选择zedboard即可。
这里写图片描述

8、工程信息,点next完成工程的创建。
这里写图片描述

9、vivado整个工程的界面。
这里写图片描述

10、点add sources。
这里写图片描述

11、选择如图选项,添加源文件。
这里写图片描述

12、点create file,输入新建的Verilog文件的名称:led.v,然后选OK。
这里写图片描述
接下来有了led.v文件,可以开始编写Verilog代码了。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: xu_hongbin
// 
// Create Date: 2017/07/05 09:57:09
// Design Name: 
// Module Name: led
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module led(
    Clk,
    Rst,
    Led
    );

    input Clk;  //时钟
    input Rst;  //zedboard上是高电平复位
    output [7:0] Led;   //led输出口

    reg [31:0] delay_cnt;   //分频延时计数器
    reg clk_500ms;  //分频后的2HZ信号
    reg [7:0] Led_r;    //LED信号输出寄存器

    always @(posedge Clk or posedge Rst)
    begin
        if(Rst)
        begin
            delay_cnt <= 32'd0;
            clk_500ms <= 1'd0;
        end
        else if(delay_cnt == 32'd25_000_000 - 32'd1)
        begin
            delay_cnt <= 32'd0;
            clk_500ms <= ~clk_500ms;
        end
        else
        begin
            delay_cnt <= delay_cnt + 1'b1;
        end
    end

    always @(posedge clk_500ms or posedge Rst)
    begin
        if(Rst)
            Led_r <= 8'd1;
        else
            Led_r <= (Led_r << 1) | (Led_r >> 7);
    end

    assign Led = Led_r;

endmodule

代码很简单不多介绍了。

13、接下来准备编写约束文件,分配引脚。在constraints下的constrs_1上右击,在弹出的菜单中选择Add Sources。
这里写图片描述

14、选择Add or create constraints。
这里写图片描述

15、跟前面创建Led.v文件时一样,先点create file,创建一个约束文件,名字随便取,约束文件后缀是.xdc。
这里写图片描述
我的约束文件pins.xdc,引脚分配可以从官方给的原理图中找到:

# Led0
set_property PACKAGE_PIN T22 [get_ports {Led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[0]}]

# Led1
set_property PACKAGE_PIN T21 [get_ports {Led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[1]}]

# Led2
set_property PACKAGE_PIN U22 [get_ports {Led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[2]}]

# Led3
set_property PACKAGE_PIN U21 [get_ports {Led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[3]}]

# Led4
set_property PACKAGE_PIN V22 [get_ports {Led[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[4]}]

# Led5
set_property PACKAGE_PIN W22 [get_ports {Led[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[5]}]

# Led6
set_property PACKAGE_PIN U19 [get_ports {Led[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[6]}]

# Led7
set_property PACKAGE_PIN U14 [get_ports {Led[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Led[7]}]


# Clk(板子上的GCLK)
set_property PACKAGE_PIN Y9 [get_ports {Clk}]
set_property IOSTANDARD LVCMOS33 [get_ports {Clk}]

# Rst(板子上的BTNU)
set_property PACKAGE_PIN T18 [get_ports {Rst}]
set_property IOSTANDARD LVCMOS33 [get_ports {Rst}]

16、代码都写完了,剩下的就是分析综合了。
这里写图片描述
分析综合的流程是:Run Synthesis–>Run Implementation–>Generate Bitstream。
Synthesis:对工程进行分析,检查是否有语法错误,生成RTL级的原理图;
Implementation:对工程进行综合,会在底层布局布线。
Bitstream:比特流文件,是最后可以下载到FPGA中运行的文件。
我们也可以一步到位,直接点Generate Bitstream,vivado会自动执行上述过程。

17、产生比特流完毕后,给板子上电,然后点击Open Hardware Manager–>Open Target–>Auto Connect。随后会弹出HardWare Manager的窗口。
这里写图片描述
如果识别到了zedboard,会显示上面的信息。
arm_dap_0表示zynq内的arm9内核;
xc7z020_1表示FPGA处理器。
点击program device,选择xc7z020_1。
选择前面生成的比特流文件,一般自动选好了。
这里写图片描述
program就行了,最后会看到板子上开始运行流水灯。
这里写图片描述

posted @ 2017-07-05 11:09  做人要厚道_xu  阅读(552)  评论(0编辑  收藏  举报