VHDL属性保留
VHDL ATTRIBUTE keep
目前正在研究SR Latch的VHDL,遇到了不懂的部分
谁能解释一下 ATTRIBUTE keep: boolean
是什么意思,它在 VHDL 中有什么作用?
谢谢。
它是用户定义的属性,因此不是 VHDL 标准本身的一部分。它通常用于指示综合工具它应该保留某个信号,例如作为触发器,即使综合工具可能确定在优化期间可以删除该信号。
对于 Altera Quartus 综合工具,请参阅此描述:keep VHDL Synthesis Attribute
警告严重的 Xilinx 偏差...
VHDL 的属性对于不同的工具是不同的,甚至相同工具的不同版本之间也会发生变化。 Xilinx 的 "keep" 属性用于确保在 Vivado 综合过程中信号不会被优化掉。它最近已重命名为 "syn_keep" 以避免混淆。在工具做出错误假设之前,我曾使用过类似的属性来修复构建问题。
注意:为了避免在 Xilinx 的实施过程中进行优化,请使用 "dont_touch"。
示例:
进入 FPGA 的时钟需要通过 Xilinx BUFG 进行缓冲,但我需要特定 IP 核的原始信号。所以我拆分路由,缓冲时钟并将原始时钟信号馈送到 IP。 Vivado 2016.4 工具优化了无缓冲路由,在硬件上创建了时间限制严重警告和不当行为。通过跟踪综合设计原理图,观察正确的布线,然后查看实现设计原理图并看到布线已更改,发现了该问题。我通过将 dont_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
);
目前正在研究SR Latch的VHDL,遇到了不懂的部分
谁能解释一下 ATTRIBUTE keep: boolean
是什么意思,它在 VHDL 中有什么作用?
谢谢。
它是用户定义的属性,因此不是 VHDL 标准本身的一部分。它通常用于指示综合工具它应该保留某个信号,例如作为触发器,即使综合工具可能确定在优化期间可以删除该信号。
对于 Altera Quartus 综合工具,请参阅此描述:keep VHDL Synthesis Attribute
警告严重的 Xilinx 偏差...
VHDL 的属性对于不同的工具是不同的,甚至相同工具的不同版本之间也会发生变化。 Xilinx 的 "keep" 属性用于确保在 Vivado 综合过程中信号不会被优化掉。它最近已重命名为 "syn_keep" 以避免混淆。在工具做出错误假设之前,我曾使用过类似的属性来修复构建问题。
注意:为了避免在 Xilinx 的实施过程中进行优化,请使用 "dont_touch"。
示例: 进入 FPGA 的时钟需要通过 Xilinx BUFG 进行缓冲,但我需要特定 IP 核的原始信号。所以我拆分路由,缓冲时钟并将原始时钟信号馈送到 IP。 Vivado 2016.4 工具优化了无缓冲路由,在硬件上创建了时间限制严重警告和不当行为。通过跟踪综合设计原理图,观察正确的布线,然后查看实现设计原理图并看到布线已更改,发现了该问题。我通过将 dont_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
);