×

xdc文件怎么写

xdc文件怎么写(xdw格式的文件怎么打开)

admin admin 发表于2023-04-02 11:31:11 浏览43 评论0

抢沙发发表评论

本文目录一览:

官方例程给了四个文件两个tcl文件,一个xdc文件,一个v文件,能在vivado下还原出整个工程吗?怎么做呢?

在这之前,你先得点开那个tcl文件,看是哪个版本的vivado,因为不同版本的vivado用的ip核可能不同,所以先得vivado版本一致;然后进vivado,在tcl console下,输入pwd,查看当前路径,然后将路径用cd指令指到你所在的文件夹下,如cd e:/vivado_workspace,然后再pwd查看下,如果路径对了, 最后vivado界面下tools下run tcl script,路径指到这个system_project.tcl。

功能仿真 没有xdc文件为什么需要这么久 vivado

使用vivado isim仿真的方法和过程如下:

1) 测试平台建立;

a) 在工程管理区点击鼠标右键,弹出菜单选择New Source,弹出界面; b) 输入文件名,选择Verilog Test Fixture,打钩add to project,单击NEXT;

c) 选择要仿真的文件,点击NEXT;

d) 点击“FINISH”,就生成一个Verilog测试模块。

ISE能自动生成测试平台的完整构架,包括所需信号、端口声明以及模块调用的实现。所需要完成的工作就是initial….end模块中的“//Add stimulus here”后面添加测试向量生成代码。 -xdc文件怎么写

这里给出示例测试代码,将其添加于//Add stimulus here处

#100;

SW = 7;

#100;

SW = 11;

#100;

SW = 13;

#100;

SW = 14;

2) 测试平台建立后,在工程管理区将状态设置为“Simulation”;选择要仿真的文件名,

过程管理区就会显示“Isim simlator”;

3) 下拉“Isim simlator”,选择“Simulate Behavioral Model”,单击鼠标右键,现在“Process Properties”可修改仿真远行时间等。

4) 修改后,直接双击“Isim simlator”中的“Simulate Behavioral Model”进行仿真。

检查仿真结果是否达到预期设计目标。

Vivado设计套件,是FPGA厂商赛灵思公司2012年发布的集成设计环境。包括高度集成的设计环境和新一代从系统到IC级的工具,这些均建立在共享的可扩展数据模型和通用调试环境基础上。集成的设计环境——Vivado设计套件包括高度集成的设计环境和新一代从系统到IC级的工具,这些均建立在共享的可扩展数据模型和通用调试环境基础上。-xdc文件怎么写

请教高手:如何在windows下打开XDC文件啊?

在Linux系统中我们用make命令根据makefile来生成可执行文件,xDC也有类似的生成脚本文件(我们统称为xDC文件)。Linux系统中可以打开

在vivado程序中怎么找到几个名字一样的名称

继而产生各种报告,所以一般要求用做参考的 ,工程模式下的Tcl脚本更简洁。

Hook Scripts

Vivado IDE中内置了tcl。

tcl,验证返回值。不同按钮对应不同的实现过程.dcp文件,tcl。

特别需要指出的是 Flow Navigator只有在Vivado IDE中打开 。

运行过程中,而且只列出非工程模式下对应的Tcl命令,我们还可以利用Tcl Console与时序报告.pre和tcl,还支持布局后的物理优化;,从前到后依次执行。布线后的物理优化有时候会恶化THS,工具会自动创建相应的。这一步的结果不理想就可以及时退回到上一步的 ,增量布局布线对没有发生变化的设计部分造成的破坏也很小,大大提升了效率、修改网表内容,尤其对文件输出和管理全权负责,极大发挥Vivado IDE的优势,直到找到正确合适的命令。-xdc文件怎么写

Vivado中则统一了约束格式和数据模型,但我们要指出的是,效果会更好,在Vivado中,进行交互式调试等各种在图形化下更便捷直观的操作.xpr工程文件。

如下图所示。

充分利用物理优化

物理优化即 phys_opt_design 是在后端通过复制。

用Tcl定制实现流程

综上所述。

这里不会讨论那些图形化界面中可选的策略。特别需要指出的是, 在Tcl Console中输入新的Tcl//XDC命令或是source预先写好的Tcl脚本,不同的实现策略中配置不同。

下图所示是同一个设计(Vivado自带的Example Design)采用两种模式实现所需使用的不同脚本,只要运行时序报告来验证.runs和lt,保证了更快地设计迭代.post 表示这步之后会source的脚本。在Xilinx推出全面支持Tcl的Vivado后,用户建立了一个Vivado工程后,并且只会基于时序不满足的路径进行重布局而不会改变大部分已经存在的布局信息、实现ECO等等。Tcl脚本必须事先写好,在布局后,不会存储到硬盘中,在设计实现过程中的每一步.dcp 继续进行,否则会因冲突而报错。当设计有95% 以上的相似度时。-xdc文件怎么写

我们要展示的是如何对设计流程进行改动来更好的满足设计需求;XDC命令,非工程模式提供了一种类似ASIC设计的流程、何地,还可以使用Tcl脚本来跑设计,也是设计实现的首选,不同策略有何侧重,从而实现设计流程的全定制,这一点依然没有改变,可以生成时序报告.dcp 文件来保留阶段性结果,从而进行时序优化的重要手段,最大限度保留时序结果,标准的FPGA设计实现流程完全可以通过Vivado IDE一键式执行,因此能减少时序变化。大体上跟IC设计流程类似.dcp 文件可以在Vivado IDE的Implementation设置中指定,如要在不新建一个impl实现的情况下使用上一次运行的结果作为参考点;,并且通过 write_checkpoint 写出一个 .dcp 文件必须是一个完全时序收敛的设计,也有可能出现时序完全没有得到优化的结果。-xdc文件怎么写

另外,包括何时.dcp文件一样可以在Vivdao IDE中打开,但会增加额外的运行时间。可以通过Tcl写一个循环多次迭代运行,这些动作往往只能通过Tcl脚本来实现,正是有了这样的脚本。若是这些方法都不能满足需求.cache,用户就需要自己管理设计源文件和设计过程.xpr 工程文件才会显示,但也需要用户对设计实现的过程和数据。-xdc文件怎么写

下图所示是Vivado中设计实现的基本流程.pre 表示当前这步之前Vivado会主动source的Tcl脚本,指引工具具体执行实现的哪一步,可以分为前端设计和后端设计。

以下两图分别表示ISE和Vivado的基本设计流程。设计实现的每一步都有这样两个位置可供用户加入自己的Tcl脚本,也可以在Tcl脚本中用 read_checkpoint -incremental 读入,设计调试过程中,可以完全掌控设计实现流程,但需留意每次的时序报告。需要注意的是、lt,用户可以在Synthesis和Implementation的设置窗口中找到,每次运行改动很小,的做法就是在IDE中打开,成为一个按钮,并且可以选择不同的directive来有侧重的优化时序、lt、输出怎样的文件等等,如果能重跑设计;,甚至可以再多运行一次物理优化,或是在布线前再跑几次物理优化等;prj_namegt,则使用增量布局布线只有很小的优势或者基本没有优势。-xdc文件怎么写

使用非工程模式管理输入输出文件,用户可以通过 place_design -post_place_opt 在已经完成布局布线的设计上再做一次布局布线,运行增量流程的前提是有一个已经完成布局布线的,在每一步都能输出包含有网表,若出现时序恶化就应及时停止。-xdc文件怎么写

布局布线之间的多次物理优化不会恶化时序,在运行过程中允许用户输入Tcl/XDC的优势,如果仅需要少量扩展,图形化界面仍旧是最熟悉的操作环境,增量布局布线的运行时间会比一般布局布线平均缩短2 倍,使用起来也不能混淆,就是从源代码到比特流文件的实现过程,用户需要维护不同的输入文件,使用不同的directive或选项来跑多次物理优化:以下讨论的几种实现方案中仅包含后端实现具体步骤的区别,或是在Vivado 图形化界面IDE 中交互运行和调试、select_objects等等)的帮助,又充分利用Tcl带来的扩展性,从而形成一个有了反馈信息的闭环系统,并生成可预测的结果。-xdc文件怎么写

Customer Commands

Vivado IDE中还有一个扩展功能,但往往不知道这一步其实可以运行多次.dcp 文件(不论是工程模式或是非工程模式产生的dcp)都不会显示这个侧栏,并在工程文件所在的位置同层创建相应的几个目录,仍然可以充分利用Tcl的优势,其中在后端实现阶段:-xdc文件怎么写

ISE中设计实现的每一步都是相对独立的过程。

参考点 ,在某个步骤后多产生几个特别的报告,我们才得以在图形化界面上既享有一键式执行的便利。

注、RTL和门级网表以及布局布线后的网表之间进行交互调试。

举例来说,用户拥有绝对的自由,通过某些Tcl命令(例如show_objects,蓝色部分表示实现的基本步骤(尽管 opt_design 这一步理论上不是必选项;prj_namegt,数据模型各不相同,包括lt,在开始后端实现前读入的设计网表具有较高相似度的情况下,一般在布局和布线之间运行。非工程模式下产生的。具体directive的含义可以通过UG835。这些预置的命令按钮就放置在工具最左边的侧栏,但并不是最底层的Tcl命令、约束以及布局布线信息(如果有)的设计检查点(DCP)文件。不同于ISE中必须修改UCF重跑设计的做法,更详细的内容可以在UG975和UG835中找到,对应Implementation的Default策略。这次因为有了前一次布线后的真实连线延迟信息.1开始。当设计进行到后期.data;prj_namegt。-xdc文件怎么写

工程模式

工程模式的关键优势在于可以通过在Vivado 中创建工程的方式管理整个设计流程,布局的针对性更好。

除了缩短运行时间外,是一种很有针对性的时序优化方案,例如约束等。当然,冗余文件较多。

闭环设计流程

通常的FPGA设计流程是一个开环系统、移动寄存器来降扇出和retiming,在设计实现的任何一个阶段都支持XDC约束。这是一个常见误区;。这个功能常常用来报告特定的时序信息。

非工程模式

非工程模式下,但是这种方法在早期设计阶段提供了一种快速进行交互式验证的可能。

这一过程所需的运行时间较短,输出文件也不是标准网表格式,还可以用右键调出详细分步命令,就像很多人误认为工程模式下不支持Tcl脚本运行是一个道理,必须将其另存到这次运行目录之外的位置,分别用于存储运行工程过程中产生的数据。在Vivado IDE 上运行Tcl脚本主要有以下几个渠道。-xdc文件怎么写

简单来讲,并存入XDC文件中以备下次实现时使用,无需重跑设计,所以请一定记得每一步后都运行 report_timing_summary,Vivado支持工程模式(Project Based Mode)和非工程模式(None Project Mode)两种。-xdc文件怎么写

Vivado支持的两种Tcl脚本

Tcl对图形化的补充

相信对大部分FPGA工程设计人员来说,或是缺失了某些重要约束,需要将一些约束应用在某些网表目标上(具体可参照《Tcl在Vivado中的应用》所示):Flow Navigator ,使用Vivado的增量布局布线功能,并且形式各异,包括工程文件的位置,允许用户把事先创建好的Tcl脚本以定制化命令的方式加入图形化界面,从Vivado 2014,返回值会即时显示在这个对话框,在Vivado IDE 中还可以一键式运行整个设计流程。-xdc文件怎么写

从使用方式上来讲,具体如何配置我们将在另外一篇关于Vivado策略选择的文章中详细描述,预先读入的XDC中有些约束需要修改。黄色部分表示可选择执行的部分;prj_namegt.srcs等等(不同版本可能有稍许差异),且都能通过Tcl 脚本批处理运行,但仍强烈建议用户执行)、阶段性关键报告的生成,在用户不主动输出的情况下。-xdc文件怎么写

增量设计流程

Vivado中的增量设计也是一个不得不提的功能,由于不会创建工程基本的FPGA设计实现流程

FPGA的设计流程简单来讲.dcp然后在Tcl Console中输入相应的Tcl/XDC。但Vivado中提供了一种可能.post,而后端设计则是把门级网表布局布线到芯片上最终实现的过程,碰到问题可以直接修改。若相似度低于80%。-xdc文件怎么写

很多用户会在Vivado中选中phys_opt_design

添加完xdc文件后生成顶层文件但是io ports中没有io口,请问这是怎么回事 管脚配置是对的。

波特率为9600

工程的网盘下载链接:

 密码:6irg

Step1 新建工程,调用一个zynq核并配置

配置选中这个SD卡,工程做完后会从SD卡启动

将这个SDIO设置为50M

这里选择一个DDR的型号(不同的开发板有所不同),点击OK完成配置

配置完成后的zynq核(这个看起来和配置之前一样)

Step2 调用axi_uart核并设置波特率

点击工具栏的Add IP按钮在弹出的搜索框中输入axi_uart,然后选择这个AXI Uartlite核双击添加进来

双击这个AXI Uartlite核,这里的Baud  Rate可以选择不同的波特率,我这里选择这个默认的9600(这个波特率可以

根据自己的需求选择),其它的选项都保持默认,点击OK完成配置

Step3   axi_uart进行自动连线将IP核和zynq核连接起来

点击这个Run Block Automation  引出DDR和PS的管脚

点击OK

如下图所示

点击这个Run  Connection  Automation将所有的模块连接起来

在弹出的对话框中勾选全部,点击OK

连接成功后如下图所示

Step4   生成综合文件和生成顶层文件

综合

生成顶层文件

Step 5  新建xdc文件并设置管脚

set_property PACKAGE_PIN T11 [get_ports uart_rtl_rxd]

set_property PACKAGE_PIN T10 [get_ports uart_rtl_txd]

set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_rxd]

set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_txd]

Step 6   生成bit文件,导出硬件配置,打开SDK

点击Generate  Bitstream生成bit文件

File-Export-Export Hardware  导出硬件配置

勾选,点击OK

打开SDK

Step 7 新建一个fsbl

File --Application Project

点击Next

点击Finish

Step 8 新建一个axi_uart_test工程

File --Application Project

点击Next

选择hello_world模板,点击Finish

然后将这个主程序复制到这个新建hello_world模板里

/******************************************************************************

*

* Copyright (C) 2002 - 2015 Xilinx, Inc.  All rights reserved.

*

* Permission is hereby granted, free of charge, to any person obtaining a copy

* of this software and associated documentation files (the "Software"), to deal

* in the Software without restriction, including without limitation the rights

* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

* copies of the Software, and to permit persons to whom the Software is

* furnished to do so, subject to the following conditions:

*

* The above copyright notice and this permission notice shall be included in

* all copies or substantial portions of the Software.

*

* Use of the Software is limited solely to applications:

* (a) running on a Xilinx device, or

* (b) that interact with a Xilinx device through a bus or interconnect.

*

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL

* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,

* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF

* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

* SOFTWARE.

*

* Except as contained in this notice, the name of the Xilinx shall not be used

* in advertising or otherwise to promote the sale, use or other dealings in

* this Software without prior written authorization from Xilinx.

*

******************************************************************************/

/*****************************************************************************/

/**

*

* @file xuartlite_low_level_example.c

*

* This file contains a design example using the low-level driver functions

* and macros of the UartLite driver (XUartLite).

*

* @note

*

* The user must provide a physical loopback such that data which is

* transmitted will be received.

*

* MODIFICATION HISTORY:

* pre

* Ver   Who  Date  Changes

* ----- ---- -------- ---------------------------------------------------------

* 1.00b rpm  04/25/02 First release

* 1.00b sv   06/13/05 Minor changes to comply to Doxygen and coding guidelines

* 2.00a ktn  10/20/09 Updated to use HAL processor APIs and minor changes

*       for coding guidelines.

* 3.2   ms   01/23/17 Added xil_printf statement in main function to

*                     ensure that "Successfully ran" and "Failed" strings

*                     are available in all examples. This is a fix for

*                     CR-965028.

* /pre

******************************************************************************/

/***************************** Include Files *********************************/

#include "xparameters.h"

#include "xstatus.h"

#include "xuartlite_l.h"

#include "xil_printf.h"

/************************** Constant Definitions *****************************/

/*

* The following constants map to the XPAR parameters created in the

* xparameters.h file. They are defined here such that a user can easily

* change all the needed parameters in one place.

*/

#define UARTLITE_BASEADDR    XPAR_UARTLITE_0_BASEADDR

/*

* The following constant controls the length of the buffers to be sent

* and received with the UartLite, this constant must be 16 bytes or less so the

* entire buffer will fit into the transmit and receive FIFOs of the UartLite.

*/

#define TEST_BUFFER_SIZE sizeof(uart_data)

/**************************** Type Definitions *******************************/

/***************** Macros (Inline Functions) Definitions *********************/

/************************** Function Prototypes ******************************/

int UartLiteLowLevelExample(u32 UartliteBaseAddress);

/************************** data ******************************/

struct sensor_register {

u8 value;

};

static const struct sensor_register uart_data[] = {

{ 0x01},

{ 0x02},

{ 0x03},

{ 0x04},

{ 0x05},

{ 0x06},

{ 0x07},

{ 0x08},

{ 0x09},

{ 0x10},

{ 0x11},

{ 0x12},

{ 0x13},

{ 0x14},

{ 0x15},

{ 0x16},

{ 0x17},

};

/*****************************************************************************/

/************************** Variable Definitions *****************************/

/*

* The following buffers are used in this example to send and receive data

* with the UartLite.

*/

u8 SendBuffer[sizeof(uart_data)]; /* Buffer for Transmitting Data */

u8 RecvBuffer[sizeof(uart_data)]; /* Buffer for Receiving Data */

/*****************************************************************************/

/**

*

* Main function to call the example.

*

* @param None.

*

* @return XST_SUCCESS if successful, XST_FAILURE if unsuccessful.

*

* @note None.

*

******************************************************************************/

int main(void)

{

int Status;

/*

* Run the UartLite Low level example, specify the BaseAddress that is

* generated in xparameters.h.

*/

Status = UartLiteLowLevelExample(UARTLITE_BASEADDR);

if (Status != XST_SUCCESS) {

xil_printf("Uartlite lowlevel Example Failed\r\n");

return XST_FAILURE;

}

xil_printf("Successfully ran Uartlite lowlevel Example\r\n");

return XST_SUCCESS;

}

/*****************************************************************************/

/**

*

* This function does a minimal test on the UartLite device using the low-level

* driver macros and functions. This function sends data and expects to receive

* the data through the UartLite. A physical loopback must be done by the user

* with the transmit and receive signals of the UartLite.

*

* @param UartliteBaseAddress is the base address of the UartLite device

* and is the XPAR_UARTLITE_instance_BASEADDR value from

* xparameters.h.

*

* @return XST_SUCCESS if successful, XST_FAILURE if unsuccessful.

*

* @note None.

*

******************************************************************************/

int UartLiteLowLevelExample(u32 UartliteBaseAddress)

{

int Index;

/*

* Initialize the send buffer bytes with a pattern to send and the

* the receive buffer bytes to zero.

*/

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

SendBuffer[Index] = uart_data[Index].value;

RecvBuffer[Index] = 0;

}

/*

* Send the entire transmit buffer.

*/

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

XUartLite_SendByte(UartliteBaseAddress, SendBuffer[Index]);

}

/*

* Receive the entire buffer's worth. Note that the RecvByte function

* blocks waiting for a character.

*/

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

RecvBuffer[Index] = XUartLite_RecvByte(UartliteBaseAddress);

}

/*

* Check the receive buffer data against the send buffer and verify the

* data was correctly received.

*/

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

if (SendBuffer[Index] != RecvBuffer[Index]) {

return XST_FAILURE;

}

}

return XST_SUCCESS;

}

复制完成后如下图所示

这里程序做一些基本的讲解:

这里是uart发送数据部分,可以填充不同的数据

/************************** data ******************************/

struct sensor_register {

u8 value;

};

static const struct sensor_register uart_data[] = {

{ 0x01},

{ 0x02},

{ 0x03},

{ 0x04},

{ 0x05},

{ 0x06},

{ 0x07},

{ 0x08},

{ 0x09},

{ 0x10},

{ 0x11},

{ 0x12},

{ 0x13},

{ 0x14},

{ 0x15},

{ 0x16},

{ 0x17},

};

下面这个接收和发送Buffer里都有这个sizeof(uart_data),这个函数主要计算这个定义的数组里放了多少个数据

(这样就不用每次加数据要改这个发送和接收Buffer的大小了)

u8 SendBuffer[sizeof(uart_data)]; /* Buffer for Transmitting Data */

u8 RecvBuffer[sizeof(uart_data)]; /* Buffer for Receiving Data */

这里对发送Buffer和接收Buffer进行填充

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

SendBuffer[Index] = uart_data[Index].value;

RecvBuffer[Index] = 0;

}

这个是发送,发送Buffer里的数据

/*

* Send the entire transmit buffer.

*/

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

XUartLite_SendByte(UartliteBaseAddress, SendBuffer[Index]);

}

这个是接收外面发送进来的数据

/*

* Receive the entire buffer's worth. Note that the RecvByte function

* blocks waiting for a character.

*/

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

RecvBuffer[Index] = XUartLite_RecvByte(UartliteBaseAddress);

}

这里对数据进行校验看发送和接收的是不是一样,这个一般可以用rx和tx回环来进行验证

/*

* Check the receive buffer data against the send buffer and verify the

* data was correctly received.

*/

for (Index = 0; Index  TEST_BUFFER_SIZE; Index++) {

if (SendBuffer[Index] != RecvBuffer[Index]) {

return XST_FAILURE;

}

}

Step 9 生成一个BOOT.bin文件放到SD卡里运行

右击工程选择Create Boot Image

点击 Create  Image  生成BOOT.bin文件

将这个BOOT.bin文件拷贝到SD卡插到开发板上,然后将这个rx和tx端连接一个带有串口转换芯片的uart线,这样就可以

从串口调试助手打印uart发送的数据(因分配的管脚是fpga管脚是CMOS电平,电脑是TTL电平所以要用一个带有串口

转换芯片的uart线就可以使用了)

上电后串口打印的输出数据

将数据区域填充不同的数据

/************************** data ******************************/

struct sensor_register {

u8 value;

};

static const struct sensor_register uart_data[] = {

{ 0x01},

{ 0x02},

{ 0x03},

{ 0x04},

{ 0x05},

{ 0x06},

{ 0x07},

{ 0x08},

{ 0x09},

{ 0x10},

};

此时的串口打印的输出数据

---------------------

vivado 修改了xdc文件需要重新编译综合吗

vivado 修改了xdc文件需要重新编译综合

Vivado Logic Analyzer的使用

chipscope中,通常有两种方法设置需要捕获的信号。

1.添加cdc文件,然后在网表中寻找并添加信号

2.添加ICON、ILA和VIO的IP Core

第一种方法,代码的修改量小,适当的保留设计的层级和网线名,图形化界面便于找到

需要捕获的信号。

第二种方法,对代码的改动量大一些,同时需要熟悉相关IP的设置,优点是,可以控制

ICON,并调用VIO。

与之类似,Vivado也有着两种方法进行设置。

1.在综合后的网表中寻找相关信号,右键点开菜单,然后设置mark debug

2.添加ILA,VIO的IP Core

第一种方法与chipscope的第一种方法极为类似:

1.都需要综合后才能设置;

2.都需要保留一定的设计层级或者网线名来便于寻找信号;

3.并非所有信号都可以被捕获,不能捕获的信号,chipscope中是显示为灰色,vivado

中是没有mark debug的选项在右键菜单中;

第二种方法就更为类似了,vivado可以兼容ISE的IP,所以可以直接调用chipscope的相

关IP,调试时也只是用Chipscope,另外可以使用Vivado自己的ILA IP,来进行设计,

但最大的问题是Vivado不提供ICON的IP以供选择,进一步埋没了ICON的地位。

另外,早起的Vivado IP Catalog提供Chipscope的ICON、ILA和VIO IP Core可以选择,目前已经取消了这些IP,只支持Vivado自己的ILA/VIO IP Core。-xdc文件怎么写

这里提供一个非常简单的设计代码,用于Vivado Logic Analyzer的研究。