当前位置: 首页 > article >正文

vivado GATED_CLOCK、IOB、IO_BUFFER_TYPE、KEEP、KEEP_HIERARCHY、MARK_DEBUG

Vivado合成允许门控时钟的转换。要执行此转换,请使用:

•Vivado IDE中的一个开关,指示工具尝试转换。

•GATED_CLOCK RTL属性或XDC属性,指示工具关于哪个信号在门控逻辑中是时钟。将此属性放置在作为时钟的信号或端口上。要控制开关:

1.选择工具>设置>项目设置>合成。

2.在“选项”区域中,将-gated_clock_conversion选项设置为以下选项之一价值观

•off:禁用门控时钟转换。

•开启:如果在RTL代码中设置了Gated_clock属性,则发生门控时钟转换。此选项使您能够更好地控制结果。

•自动:如果以下任一事件为真,则发生门控时钟转换:

•gated_clock属性设置为YES。

•Vivado合成可以检测门,并且存在有效的时钟约束集。这选项让工具做出决定。

GATED_CLOCK Verilog Example
(* gated_clock = "yes" *) input clk;
GATED_CLOCK VHDL Example
entity test is port (
in1, in2 : in std_logic_vector(9 downto 0);
en : in std_logic;
clk : in std_logic;
out1 : out std_logic_vector( 9 downto 0));
attribute gated_clock : string;
attribute gated_clock of clk : signal is "yes";
end test;
GATED_CLOCK XDC Example
set_property GATED_CLOCK yes [get_ports clk]

IOB属性控制寄存器是否应进入I/O缓冲区。值为TRUE或错误的将此属性放在I/O缓冲区中所需的寄存器上。此属性可以是仅在RTL中设置。

IOB Verilog Example
(* IOB = "true" *) reg sig1;
IOB VHDL Example
signal sig1:std_logic;
attribute IOB: string;
attribute IOB of sig1 : signal is "true";

在任何顶级端口上应用IO_BUFFER_TYPE属性以指示工具使用缓冲区。添加值为“NONE”的属性以禁用上缓冲区的自动推断输入或输出缓冲区,这是Vivado合成的默认行为。此属性仅支持,并且只能在RTL中设置。

IO_BUFFER_TYPE Verilog Example
(* io_buffer_type = "none" *) input in1;
IO_BUFFER_TYPE VHDL Example
entity test is port(
in1 : std_logic_vector (8 downto 0);
clk : std_logic;
out1 : std_logic_vector(8 downto 0));
attribute io_buffer_type : string;
attribute io_buffer_type of out1: signal is "none";
end test;

使用KEEP属性来防止优化或吸收信号转换为逻辑块。该属性指示合成工具保持其所放置的信号,并且该信号被放置在网表中。例如,如果一个信号是2位AND门的输出,并且它驱动另一个AND门KEEP属性可以用于防止该信号被合并到更大的LUT中包含两个AND门。

小心!将KEEP与其他属性一起使用时要小心。在其他属性与冲突的情况下KEEP,属性通常优先。KEEP通常也与时间约束一起使用。如果信号有时间限制通常会进行优化,KEEP会防止这种情况发生,并允许正确的计时规则习惯于

注意:模块或实体的端口不支持KEEP属性。

如果你需要保持具体端口,使用-plane_hierarch-none设置或在模块或实体上放置DONT_TOUCH它本身

小心!在无负载信号上使用KEEP属性时要小心。合成保持这些信号从而导致流程中稍后出现问题。

例如:

•当一个信号上有MAX_FANOUT属性,而第二个信号上则有KEEP属性时由第一个驱动的信号;第二个信号上的KEEP属性不允许扇出复制。

•对于RAM_STYLE=“块”,当寄存器上有KEEP时,需要成为RAM的一部分时,KEEP属性会阻止块RAM被推断出来。支持的KEEP值为:

•TRUE:保持信号。

•FALSE:允许Vivado合成进行优化。FALSE值不会强制工具移除信号。默认值为FALSE。

您可以将此属性放置在任何信号、寄存器或导线上。

建议:仅在RTL中设置此属性。因为需要保留的信号通常在读取XDC文件之前进行了优化,在RTL中设置此属性可确保使用该属性。

注意:KEEP属性不会强制地点和路线保持信号。相反,这是使用DONT_TOUCH属性完成。

KEEP Verilog Example
(* keep = "true" *) wire sig1;
assign sig1 = in1 & in2;
assign out1 = sig1 & in2;
KEEP VHDL Example
signal sig1 : std_logic;
attribute keep : string;
attribute keep of sig1 : signal is "true";
....
....
sig1 <= in1 and in2;
out1 <= sig1 and in3;

KEEP_HIERARCHY用于防止沿层次边界进行优化。Vivado合成工具试图保持RTL中指定的相同通用层次结构,但为了更好结果质量(QoR)原因是它可以压平或修改它们。如果将KEEP_HIERARCHY放置在实例上,则合成工具会将边界保持在该实例上水平静态。这可能会影响QoR,也不应用于描述3的控制逻辑的模块-状态输出和I/O缓冲器。KEEP_HIERARCHY可以放置在模块中,或者架构级别或实例。此属性可以在RTL和XDC中设置。如果在中使用XDC,它只能放在实例上。

KEEP_HIERARCHY Verilog Example
On Module
(* keep_hierarchy = "yes" *) module bottom (in1, in2, in3, in4, out1, out2);
On Instance
(* keep_hierarchy = "yes" *) module bottom (in1, in2, in3, in4, out1, out2);
KEEP_HIERARCHY VHDL Example
On Architecture
attribute keep_hierarchy : string;
attribute keep_hierarchy of beh : entity is "yes";
KEEP_HIERARCHY XDC Example
On Instance
set_property keep_hierarchy yes [get_cells u0]

此属性适用于网络对象。一些网络可以具有专用连接或其他禁止用于调试目的的可见性的方面。MARK_DEBUG值为:“TRUE”或“FALSE”。

语法

Verilog语法

要设置此属性,请在有问题的信号上放置正确的Verilog属性语法:

(* MARK_DEBUG = "{TRUE|FALSE}" *)
Verilog Syntax Example
// Marks an internal wire for debug
(* MARK_DEBUG = "TRUE" *) wire debug_wire,

VHDL语法

若要设置此属性,请在有问题的信号上放置正确的VHDL属性语法。按如下方式声明VHDL属性:

attribute MARK_DEBUG : string;
按如下方式指定VHDL属性:
attribute MARK_DEBUG of signal_name : signal is "{TRUE|FALSE}";
其中signal_name是内部信号。
VHDL Syntax Example
signal debug_wire : std_logic;
attribute MARK_DEBUG : string;
-- Marks an internal wire for debug
attribute MARK_DEBUG of debug_wire : signal is "TRUE";
XDC Syntax
set_property MARK_DEBUG value [get_nets <net_name>]

XDC语法示例

通常,MARK_DEBUG的使用是基于层次结构的,可以用于任何详细的顺序元素,如RTL_REG。MARK_DEBUG属性用于网络。它是建议您同时使用get_nets和get_pins命令,如图所示,例如

set_property MARK_DEBUG true [get_nets -of [get_pins\ hier1/hier2/
<flop_name>/Q]]

该推荐使用确保MARK_DEBUG进入连接到该引脚的网络,无论其名称如何。

注意:如果将MARK_DEBUG应用于声明为bit_vector的信号的某个位,则整个总线将MARK_DEBUG属性。此外,如果将MARK_DEBUG放置在层次结构的引脚上,则保持了层次结构。

 
 


http://www.kler.cn/a/232089.html

相关文章:

  • 浪浪云轻量服务器搭建vulfocus网络安全靶场
  • 什么是MySQL,有什么特点
  • 如何利用WebSockets实现高效的实时通信应用
  • Docker和VMWare有什么不同
  • java项目-jenkins任务的创建和执行
  • Spark RDD sortBy算子什么情况会触发shuffle
  • 跟着pink老师前端入门教程-day21+22
  • C语言第二十一弹---指针(五)
  • 风丘电动汽车热管理方案 为您的汽车研发保驾护航
  • leetcode-区域和检索 - 数组不可变
  • 13. UE5 RPG限制Attribute的值的范围以及生成结构体
  • 3D Line Mapping Revisited论文阅读
  • POPPPPPJ勒索病毒:了解最新POPPPPPJ,以及如何保护您的数据
  • 自定义指令实现图片懒加载
  • 【数据结构】链表OJ面试题4(题库+解析)
  • sqli-labs-master靶场训练笔记(38-53|boss战)
  • STM32——FLASH(1)简单介绍、分类、读写流程及注意事项
  • 百面嵌入式专栏(面试题)C语言面试题22道
  • 命令行任务管理器的at命令
  • 瑞_力扣LeetCode_二叉树相关题
  • Win10系统备份的几种方案,以后不重装系统,备份系统恢复Backup,系统映像备份
  • Python(21)正则表达式中的“元字符”
  • 05 06 Verilog基础语法与应用讲解
  • 【Django-ninja】在django ninja中处理异常
  • Java代码实现基数排序算法(附带源码)
  • 计算机设计大赛 深度学习 机器视觉 人脸识别系统 - opencv python