首页 > 其他分享 >Xilinx ZYNQ 7000+Vivado2015.2系列(一)之流水灯(纯PL)

Xilinx ZYNQ 7000+Vivado2015.2系列(一)之流水灯(纯PL)

时间:2024-03-27 09:47:25浏览次数:24  
标签:IOSTANDARD set LED get Vivado2015.2 ZYNQ Xilinx property ports

原文链接:https://blog.csdn.net/u014485485/article/details/78056980

前言:

学习Xilinx的ZYNQ 7000系列,用的板子是zc702(注意不是zedboard),SOC型号是xc7z020。虽然设计思路一样,但不同的套件引脚和io标准是有区别的,zc702评估板的的外观图如下,可以对照下自己的板子:

20170922214635878

作为入门体验,本设计实现的功能是控制8个流水灯,循环闪烁,每隔1s移位一个。我们用到的部分是SoC和user LEDs。声明一下本文仅仅用PL编程,并不是PS+PL。

步骤:

1.新建Vivado工程

这里命名为LedTest,next选择新建PTL Project,next选择Boards,输入z7c02,单击后finish:

20170922202637090

各类文件所在文件夹,source选项卡下:

20170922203036239

2.新建设计文件

命名为Led(这里用到了差分时钟信号,后面会介绍):

module Led(
    input clk_p,
    input clk_n,
    input RSTn_i,
    output reg [7:0]LED_o
    );
    reg [31:0]C0;
    
    IBUFGDS IBUFGDS_inst (
          .O(CLK_i), 
          .I(clk_p),
          .IB(clk_n)
       );

    
    always @(posedge CLK_i)
        if(RSTn_i)
        begin
            LED_o <= 8'b0000_0001;
            C0 <= 32'h0;
        end
        else
        begin
            if(C0 == 32'd200_000_000)
            begin
                C0 <= 32'h0;
                if(LED_o == 8'b1000_0000)
                    LED_o <= 8'b0000_0001;
                else 
                    LED_o <= LED_o << 1;
            end
            else begin
                C0 <= C0 + 1'b1; LED_o <= LED_o; end
        end
endmodule

3.仿真

这一步可有可无。规范设计应该有。新建仿真文件,命名为Led\_tb:

module Led_tb();
	reg CLK_i;
	reg RSTn_i;
	wire [7:0] LED_o;

	parameter ClockPeriod=10;
	initial
	begin
		CLK_i=0;
		forever
		#(ClockPeriod/2) CLK_i=~CLK_i;	
	end

	initial
	begin 
		RSTn_i=1;
		#100 RSTn_i=0;
		#100 RSTn_i=1;
	end 
	Led Led_inst(
	    .CLK_i(CLK_i),
	    .RSTn_i(RSTn_i),
	    .LED_o(LED_o)
	    );
	
endmodule

仿真时没有用差分时钟,所以需要修改下源文件的时钟输入信号,改为:input  CLK_i;   即可。另外为了快速看到流水灯信号变化,可以将源文件判断中的计数信号C0改为100。

4.添加约束

这里约束文件的作用是给各个信号分配管脚(Pin),指定电气标准。

官方的user guide里:

可以看到系统时钟频率为200M,输出电压是差分的,差分信号可以抑制共模噪声,使用输入的差值,而我们要把它转化为正常信号使用,转化方法是调用IBUFGDS模块:

IBUFGDS IBUFGDS_inst (
          .O(CLK_i),  // Clock buffer output
          .I(clk_p),  // Diff_p clock buffer input (connect directly to top-level port)
          .IB(clk_n) // Diff_n clock buffer input (connect directly to top-level port)
       );

新建约束文件,命名为Led_pin:

set_property PACKAGE_PIN D18 [get_ports {clk_p}]
set_property IOSTANDARD LVDS_25 [get_ports {clk_p}]
set_property IOSTANDARD C19 [get_ports {clk_n}]
set_property IOSTANDARD LVDS_25 [get_ports {clk_n}]

set_property PACKAGE_PIN G19 [get_ports {RSTn_i}] 
set_property IOSTANDARD LVCMOS18 [get_ports {RSTn_i}]
#GPIO PMOD1
set_property PACKAGE_PIN E15 [get_ports {LED_o[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[7]}]
set_property PACKAGE_PIN D15 [get_ports {LED_o[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[6]}]
set_property PACKAGE_PIN W17 [get_ports {LED_o[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[5]}]
set_property PACKAGE_PIN W5 [get_ports {LED_o[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[4]}]
#GPIO PMOD2
set_property PACKAGE_PIN V7 [get_ports {LED_o[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[3]}]
set_property PACKAGE_PIN W10 [get_ports {LED_o[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[2]}]
set_property PACKAGE_PIN P18 [get_ports {LED_o[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[1]}]
set_property PACKAGE_PIN P17 [get_ports {LED_o[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {LED_o[0]}]

也可以综合后在IO planning里约束,约束好后右击 export io ports,保存到之前新建的约束文件中:

20170922211205493

5,依次 综合,实现,产生bit文件。

20170922205556412

综合是将RTL级描述转化为门级描述,综合时将进行逻辑优化,并映射到Xilinx的器件原语。综合后设计表现为层次(模块的实例)和基本元素(查找表,触发器,RAM,DSP,时钟,IO等)的互连网表。本设计综合后的部分网表结构:

20170922210754154

实现是将综合的网表加入物理约束和时钟约束相当于模拟实际电路的工作。

生成比特流数据(可编程文件)是为了下载到硬件。

6.给fpga上电,连接好下载线。

7.下载程序

20170922213400696

①点击open target,如果是第一次下载,点击open new target,

②一直next,finish后,点击program device,

③选择xc7z020_1,

④在弹出的对话框里点击program,

⑤等待下载完成,

⑥流水灯就闪起来了,每隔1s移位一次,从左3往右循环。

总结:

Vivado环境下编写纯PL代码,熟悉整个设计流程,包括仿真,添加约束,综合,实现,生成可编程文件,下载程序。

其中可能会卡住的地方就是系统时钟的使用和约束文件的编写,

牵涉到的一项重要技能就是学会查阅官方文档,

看电路图和user guide,这些东西虽然可以轻易下载到,但由于是英文文档或第一次接触,往往会被难住。

标签:IOSTANDARD,set,LED,get,Vivado2015.2,ZYNQ,Xilinx,property,ports
From: https://www.cnblogs.com/L707/p/18098202

相关文章

  • zynq Lwip学习笔记-recv_callback函数
    文章目录前言一、概述二、函数体三调用位置前言最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwipechoserver例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部......
  • zynq Lwip学习笔记-accept_callback函数
    文章目录前言`一、概述二、函数体三、调用关系前言`最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwipechoserver例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而......
  • ZYNQ AXI 片上互联的再思考:AXI GP口/axi lite
    之前笔记:Zynq上的存储器接口与差分时钟与DDR3_zynqddr3-CSDN博客使用AxiLite接口访问寄存器列表作为缓冲区_两个参数共用axilite中一个寄存器-CSDN博客PS与PL互联与SCU以及PG082_pl能不能用ps-gtr-CSDN博客ZYNQ上互联的AXI主要有三种:AXILITEAXIHPAXIACP AXILITE......
  • ZYNQ自定义IP并使用
    目的:自定义一个IP并添加到设计中使用(产生PWM波形)在ZYNQ系统中将许多特定功能的硬件设计模块封装起来称为IP核,类似于库函数。这种方式极大的提高了设计效率。当遇到设计中的一些特殊的需求且官方没有对应的IP时就需要我们自定义IP来使用。 创建步骤:1、创建新IP进入viv......
  • 使用Xilinx自带的FIR滤波器IP自定义单位增益滤波器
    Eg:在未归一化时输入幅值\(A_i=9295\),滤波器输出幅值\(A_o=9724819390\)首先我们要找到\(A_i*2^X\)使得\(A_i*2^X>A_o\)那么我们得到\(A_i*2^{20}\approxA_o*1.0022\)因此可以取\(X=20\),但我们因为精度要求,于是将\(X\)取的大一些,为\(34\)于是便得到了乘子\(Q\):......
  • ZYNQ7000 PS 复位PL FCLK_RESET0_N
    PSResetPLPS可以输出4个独立的复位信号给PL,用于控制PL逻辑的复位。如何控制呢?参考https://support.xilinx.com/s/question/0D52E00006hpUDcSAM/asserting-fclkreset0n-fpgarstctrl-from-baremetal-system?language=en_US裸机代码如下://assertFPGAResetSignal#d......
  • XILINX FPGA 1/4/8通道PCIe DMA控制器IP,高性能版本IP介绍应用
    Multi-ChannelPCIeQDMA&RDMAIP1   介绍基于PCIExpressIntegratedBlock,Multi-ChannelPCIeQDMASubsystem实现了使用DMA地址队列的独立多通道、高性能Continous或ScatherGatherDMA,提供FIFO/AXI4-Stream用户接口。基于PCIExpressIntegratedBlock,Multi-ChannelPC......
  • Zynq7020 使用 Video Processing Subsystem 实现图像缩放
    1、前言没玩过图像缩放都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前市面上主流的FPGA图像缩放方案如下:1:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;2:非纯Verilog方案,大部分代码使用Verilog实现,但中间的fifo或ram等使用了IP,导致......
  • 1-1-02 AMD(XILINX) FPGA开发工具Vitis(vivado)安装
    1.1Vitis概述Vitis统一软件平台可实现在Xilinx异构平台(包括FPGA、SoC和VersalACAP)上开发嵌入式软件和加速应用。它可为边缘、云和混合计算应用加速提供统一编程模型。利用与高层次框架的集成,通过加速库采用C、C++或Python进行开发,或者使用基于RTL的加速器和低层次......
  • 1-1-03 XILINX JTAG开发工具usb-jtag驱动安装
    1.1概述    一般安装vitis(vivado)的过程中勾选了安装jtagcable驱动就会默认安装好jtag驱动,但是如果vivado无法正确识别到JTAG,那么可以试下重新手动安装驱动1.2准备工作安装驱动前,必须关闭所有的vivado,vitis-sdk并且拔掉USBJTAG以免导致安装失败1.3usb-jtag驱动安装......