我目前正在研究有关SR Latch的VHDL,还有一部分我不明白。
任何人都可以解释`2016-11-03 12:59:41.910 ERROR 13586 --- [ main] o.h.j.i.metamodel.MetadataContext : HHH015011: Unable to locate static metamodel field : org.openskye.domain.TaskQueue_#object_metadata_id
2016-11-03 12:59:41.913 ERROR 13586 --- [ main] o.h.j.i.metamodel.MetadataContext : HHH015011: Unable to locate static metamodel field : org.openskye.domain.TaskQueue_#id
2016-11-03 12:59:41.914 ERROR 13586 --- [ main] o.h.j.i.metamodel.MetadataContext : HHH015011: Unable to locate static metamodel field : org.openskye.domain.TaskQueue_#status
2016-11-03 12:59:41.914 ERROR 13586 --- [ main] o.h.j.i.metamodel.MetadataContext : HHH015011: Unable to locate static metamodel field : org.openskye.domain.TaskQueue_#path
的含义是什么以及它在VHDL中的作用是什么?
谢谢。
答案 0 :(得分:1)
它是用户定义的属性,因此不属于VHDL标准本身。它通常用于指示合成工具它应该保持某个信号,例如是触发器,即使通过合成工具也可以确定在优化期间可以移除信号。
对于Altera Quartus综合工具,请参阅此说明:keep VHDL Synthesis Attribute
答案 1 :(得分: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
);