我目前正在学习关于SR Latch的VHDL,有一个部分我不明白。
谁能解释一下ATTRIBUTE keep: boolean
是什么意思以及它在VHDL中的作用是什么?
谢谢。
最佳答案
警告严重 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
);
关于VHDL 属性保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40396085/