Vivado

Vivado之 TCL脚本工具(基本语法)

TCL脚本语言

Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIVADO也提供了TCL命令行。最近发现TCL脚本貌似比GUI下操作VIVADO效率高一些,方便一些。而且最近跟着官网文档做SDSOC的flatform,发现xilinx官网的文档里都是用TCL命令来完成操作,于是决心学习一下TCL的语法。

应用程序(如VIVADO)使用Tcl作为它的命令语言的好处:
1 Tcl提供了标准语法,一旦用户掌握了Tcl就可以很容易的发布命令给基于Tcl的程序。
2 Tcl实现了很多的功能,使你的工作变得很方便。
3 TCl可作为程序间通信的接口。

命令格式

一条Tcl的命令串包含了多条命令时,用换行符或分号来隔开
而每一条命令包含了一个域的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它

数据类型

Tcl只支持一种数据结构:字符串。所有的命令、命令里的所有的参数、命令的结果、变量全部都是都是字符串。

简单实例:
set i 123
将123这个字符串赋值给i变量

unset i
清除变量

set i hi

Vivado综合设置选项分析:-flatten_hierarchy

-flatten_hierarchy有三个可选值,每个值的具体含义如下表所示。通常来讲,-flatten_hierarchy为none时,工具做的优化最少,因而消耗的资源也最多,但层次保留也最为完整。相反,当其为full时,工具做的优化最多,因而消耗的资源也最少,但层次完全被打平(只看到顶层)。从这个角度来说,-flatten_hierarchy的这三个值其实就体现了工具对设计层次完整性和优化力度两者的折中。通常情况下,使用默认值rebuilt即可。

-flatten_hierarchy是一个全局设置(凡是出现在综合选项设置菜单的均为全局设置),意味着对设计中的所有模块均生效。如果期望对设计中某个层次使用与-flatten_hierarchy的值不同的层次优化方式,就要用到综合属性(Synthesis Attributes)KEEP_HIERARCHY,它只能在RTL代码中使用,其优先级高于-flatten_hierarchy。具体使用方法如下:

Verilog版本:

【科普】Xilinx Vivado 安装指南

赛灵思 Vivado 设计套件提供多种下载与安装模式,并可以自定义所需的组件来进行安装。此外,赛灵思全新的信息中心应用程序还可以让您在后台检查软件工薪,并自动通知。

Vivado将模块封装为IP的方法(网表文件)

在给别人用自己的工程时可以封装IP,Vivado用封装IP的工具,可以得到像xilinx的ip一样的可以配置参数的IP核,但是用其他工程调用后发现还是能看到源文件,如何将工程源文件加密,暂时没有找到方法,如果知道还请赐教。而直接用.edif网表文件作为ip的方法如下:

1、建立工程设置顶层模块

将需要封装的模块设置为顶层模块。(shift_bus模块)

2、综合待封装模块

vivado综合时会默认将输入输出端口添加buffer缓存,而封装的模块大多都是用在一个大的模块的内部,综合不能添加iobuf,在ISE的综合选项中有-iobuf选项而在Vivado中该选项是隐藏的,可以在综合设置窗口的Options下面最后一项 More Options一栏写入“-no_iobuf”,然后综合即可。

3、生成.edif网表文件

打开综合后的设计:在Flow Navigator中点击“Open Synthesis Deisgn”
在TCL Console中输入:“write_edif /path/xx.edif” 。特别注意:路径分隔字符为“/”(得到的网表文件为shift_bus.edif)

4、建立wrapper

建立一个与待封装模块同名的.v文件,该文件只描述该模块的接口。(shift_bus.v)

双口RAM及Vivado RAM IP核的使用

1.双口RAM概述

双口RAM(dual port RAM)在异构系统中应用广泛,通过双口RAM,不同硬件架构的芯片可以实现数据的交互,从而实现通信。例如,一般情况下,ARM与DSP之间的通信,可以利用双口RAM实现,ARM通过EBI总线连接到双口RAM的A口,DSP通过EMIF总线(也可以是uPP总线,取决于速度需求)连接到双口RAM的B口,两者对同一块存储区域进行操作,即可实现两者的数据交互。

本人需要利用Vivado软件中的DDS核生成一个正弦信号。由于后期还要生成线性调频信号,如果直接编写代码生成比特流文件下载到板子上进行验证会使工作的效率大大下降,所有想利用Vivado软件功能仿真,这样可以极大的提高效率。Vivado软件自带仿真功能,不需要对IP核进行特别的处理,所以很方便。

DDS核的基本原理,看以下一个链接: https://www.xilinx.com/support/documentation/ip_documentation/dds_compil...

此处对DDS核的配置如下:DDS核命名DDS_Signal


Xilinx Vivado Zynq Pldma APB控制线调试

在xilinx vivado zynq pldma PL部分ILA调试中,观测APB总线上的数据是正常的,但PLDMA没有成功,分析代码发现在HP_DMA模块中使用m_apb_pclk与m_apb_presetn为悬空状态。由于Avnet的例程建立在2014年,所以使用vivado版本较早,其使用的AXI Bridge上还存在m_apb_pclk与m_apb_presetn。在pg073文件中查看在AXI APB Bridge(2.0)模块上确实存在m_apb_pclk与m_apb_presetn信号。

但是到了vivado2015.1版本上使用AXI Bridge 3.0版就没有了,并且在综合后通过原理图文件也无法查找到这两个信号。

在2.0版APB Bridge在综合之后的原理图文件查看,APB bridge的m_apb_pclk信号与s_axi_aclk信号为直连状态;m_apb_presetn与s_axi_aresetn为直连状态。

Vivado中AXI IP核的创建和读写逻辑分析

本文包含两部分内容:1)AXI接口简介;2)AXI IP核的创建流程及读写逻辑分析。

1 AXI简介(本部分内容参考官网资料翻译)
自定义IP核是Zynq学习与开发中的难点,AXI IP核又是十分常用的自定义IP核,因此掌握AXI IP核的创建流程及通信机制显得尤为重要。要搞懂AXI IP核,就必须先了解AXI接口。先介绍如下:

1) AXI(Advanced eXtensible Interface)协议主要描述了主设备(Master)和从设备(Slave)之间的数据传输方式,主设备和从设备之间通过握手信号建立连接。当主设备的数据准备好时,会发出和维持VALID信号,表示数据有效;当从设备准备好接收数据时,会发出READY信号。数据只有在这两个信号都有效时才开始传输。

2) AXI协议(又称AXI4.0),包括3种接口标准:AXI4、AXI-Stream、AXI-lite。

AXI4:适用于要求数据高速传输的场合。

AXI-Stream:如FIFO,数据传输不需要地址,而是主从设备间直接进行数据的读写,主要用于高速数据传输的场合,如视频、高速AD等。

AXI-lite:可用于单个数据传输,主要用于访问一些低速外设。

Vivado中IP的使用方法

1、ISE和Vivado中IP核生成的区别即对应关系:

其中.ngc文件为可综合文件,ucf为约束文件。对于IP的仿真,在ISE下要调用XilinxCoreLib这个仿真库,而在Vivado中,生成IP的过程会生成仿真要用到的文件。

2、在Vivado中调用IP会生成的文件

1)实例化的模板,即在自己工程中需要实例化该IP时的模板。Verilog语言的.veo,VHDL语言的.vho。

2)综合的网表文件.dcp

3)行为级的仿真文件。.v或者.vhdl,还有可能生成Testbench。

4)有的IP会生成例子工程,会创建一个以该IP为顶层的工程,帮助我们对IP进行独立的仿真分析。

3、使用IP的方式

xilinx vivado zynq pldma PL部分ILA调试

通过前面的PL DMA设计,在SDK中运行,很正常的没有运行起来(block design与source desing都是自己手敲,明显的错误已经改正,能够生成bit文件启动SDK调试)。

首先在PL部分调试,作为PL DMA的控制APB总线,将其设置为Mark Debug,如下图所示。

然后重新综合,综合完成,不进行implemention,在综合菜单下面找到“Set Up Debug”,进行ILA配置,出现下图的设置窗口。

在上图中点击“more info”,出现提示,部分网表没有设定时钟。

同步内容