为何该VHDL代码片段无法完成逻辑综合?
这段VHDL代码无法逻辑综合的原因
先看这段目标代码:
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY simple_buffer IS PORT ( din : IN std_logic; dout : OUT std_logic ); END simple_buffer; ARCHITECTURE behavioural1 OF simple_buffer IS BEGIN dout <= din AFTER 10 ns; END behavioural1;
无法被逻辑综合的核心原因在于代码中的AFTER 10 ns语句:
- 逻辑综合工具的核心目标是将HDL代码转换为可物理实现的硬件电路(如门电路、导线等),它只关注功能逻辑本身,不处理用于仿真的行为级延时描述。硬件的实际信号传播延时由器件工艺、布线布局等物理因素决定,根本无法通过代码里的延时语句来定义。
AFTER是仿真专用语法,仅用于在仿真环境中模拟信号的传播延迟,没有对应的通用硬件单元可以直接映射。哪怕这段代码的核心逻辑只是输入直通输出,加上这个仿真延时后,综合工具找不到可实现的硬件结构,自然无法完成综合。
如果要让这段代码可综合,只需去掉延时描述,修改为:
dout <= din;
此时综合工具就能识别出这是一个直通缓冲器(或根据优化策略直接简化为导线)。
内容的提问来源于stack exchange,提问作者ijump
相关产品推荐
相关产品推荐

