首页 文章

VHDL ATTRIBUTE保持

提问于
浏览
0

我目前正在研究关于SR Latch的VHDL,有一部分我不明白 .

任何人都可以解释 ATTRIBUTE keep: boolean 是什么意思,它在VHDL中做了什么?

谢谢 .

2 回答

  • 1

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

    对于Altera Quartus综合工具,请参阅以下描述:keep VHDL Synthesis Attribute

  • 1

    警告沉重的Xilinx偏见......

    VHDL的属性对于不同的工具是不同的,甚至在相同工具的版本之间进行更改 . Xilinx的“保持”属性用于确保在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
    );
    

相关问题