VHDL属性保持

VHDL属性保持,vhdl,Vhdl,我目前正在学习关于SR锁存器的VHDL,有一部分我不理解 谁能解释一下属性keep:boolean的含义以及它在VHDL中的作用 谢谢。它是用户定义的属性,因此不是VHDL标准本身的一部分。它通常用于指示合成工具保持特定信号,例如触发器,即使通过合成工具可以确定在优化期间可以移除该信号 有关Altera Quartus合成工具,请参见以下说明:它是用户定义的属性,因此不是VHDL标准本身的一部分。它通常用于指示合成工具保持特定信号,例如触发器,即使通过合成工具可以确定在优化期间可以移除该信号 有

我目前正在学习关于SR锁存器的VHDL,有一部分我不理解

谁能解释一下
属性keep:boolean
的含义以及它在VHDL中的作用


谢谢。

它是用户定义的属性,因此不是VHDL标准本身的一部分。它通常用于指示合成工具保持特定信号,例如触发器,即使通过合成工具可以确定在优化期间可以移除该信号


有关Altera Quartus合成工具,请参见以下说明:

它是用户定义的属性,因此不是VHDL标准本身的一部分。它通常用于指示合成工具保持特定信号,例如触发器,即使通过合成工具可以确定在优化期间可以移除该信号


有关Altera Quartus合成工具,请参见以下说明:

警告严重的Xilinx偏差

VHDL的属性对于不同的工具是不同的,甚至在相同工具的版本之间也会发生变化。Xilinx的“keep”属性用于确保在Vivado合成过程中信号不会被优化。为了避免混淆,它最近被重命名为“syn_keep”。我以前使用过类似的属性来修复构建问题,在这些问题中,工具会做出错误的假设

注意:为了避免在Xilinx实施过程中进行优化,请使用“请勿触摸”

例如: 进入FPGA的时钟需要通过Xilinx BUFG进行缓冲,但我需要特定IP核的原始信号。因此,我分割路由,缓冲时钟,并将原始时钟信号提供给IP。Vivado 2016.4工具优化了无缓冲路由,在硬件上创建了时间限制严重警告和错误行为。通过跟踪综合设计示意图,观察正确的路由,然后查看实现设计示意图,并查看路由被更改,发现了问题。我通过在无缓冲信号中添加don_touch属性来解决这个问题

attribute dont_touch              : boolean;
attribute clock_signal            : string;

attribute dont_touch of clk_in    : signal is true;
attribute clock_signal of clk_in  : signal is "yes"; 

...

CLK_BUFG: component BUFG
port map (
  I  => clk_in,
  O  => buf_clk_in
);

警告严重的Xilinx偏差

VHDL的属性对于不同的工具是不同的,甚至在相同工具的版本之间也会发生变化。Xilinx的“keep”属性用于确保在Vivado合成过程中信号不会被优化。为了避免混淆,它最近被重命名为“syn_keep”。我以前使用过类似的属性来修复构建问题,在这些问题中,工具会做出错误的假设

注意:为了避免在Xilinx实施过程中进行优化,请使用“请勿触摸”

例如: 进入FPGA的时钟需要通过Xilinx BUFG进行缓冲,但我需要特定IP核的原始信号。因此,我分割路由,缓冲时钟,并将原始时钟信号提供给IP。Vivado 2016.4工具优化了无缓冲路由,在硬件上创建了时间限制严重警告和错误行为。通过跟踪综合设计示意图,观察正确的路由,然后查看实现设计示意图,并查看路由被更改,发现了问题。我通过在无缓冲信号中添加don_touch属性来解决这个问题

attribute dont_touch              : boolean;
attribute clock_signal            : string;

attribute dont_touch of clk_in    : signal is true;
attribute clock_signal of clk_in  : signal is "yes"; 

...

CLK_BUFG: component BUFG
port map (
  I  => clk_in,
  O  => buf_clk_in
);