Verilog设计 - 输入是“未使用”警告

时间:2013-12-12 01:45:52

标签: verilog xilinx

在尝试合成Verilog设计时(我想生成原理图),我收到以下警告:

Synthesizing Unit <rising>.
  Related source file is "C:\PPM\PPM_encoder\detectors.v".
  WARNING:Xst:647 - Input <in> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved.
  Summary:
    no macro.
Unit <rising> synthesized.

相关模块很简单:

module rising (in, out);
output out;
input in;

not #(2,3) (ininv, in);
and #(2,3) (out, in, ininv);

endmodule

我在几个不同的地方称呼它,包括:

rising startdetect(
  .in(start),
  .out(or01a));

当我完成合成然后选择“查看原理图”时,实际上只存在一个组件。扩展该组件,我看到只有输出接地,这是初始条件。没有别的东西存在。这是我的测试平台作为我的“顶级模块”。

当我选择我的实际主项目(在测试平台下面,它被称为ppmencode)作为顶层模块时,我会得到相同的警告,以及每个模块实例的附加警告:

WARNING:Xst:1290 - Hierarchical block <startdetect> is unconnected in block <ppmencode>.
  It will be removed from the design.

这两个警告的原因是什么,如何修复它们并能够生成正确的原理图?

编辑添加:整个事情模拟完美,只是在尝试制作原理图(试图解释我刚刚向我的团队做的这件事)时遇到了问题。此图显示了我得到的原理图。

Exmaple schematic

2 个答案:

答案 0 :(得分:0)

将信号命名为模块的输入是不够的......它需要实际连接到FPGA上的引脚。另一方面,你的rising模块正在取输入的AND和它的补码...合成器可能已经找到了一种简化逻辑的方法,这与你的意愿相反。

答案 1 :(得分:0)

综合正在优化所有逻辑,因为它忽略了延迟。从功能上来说,in & ~in始终为0.你想要的是一个脉冲发生器。实现此目的的一种方法是使用dont_touch属性,该属性告诉合成器它必须在设计中保持特定的模块实例化。有关详情,请参阅此Properties Reference Guide

module rising (in, out);
output out;
input in;

(* DONT_TOUCH = "TRUE" *)
not #(2,3) (ininv, in);
and #(2,3) (out, in, ininv);

endmodule

请注意,即使使用dont_touch,您的合成结果也可能与模拟不匹配。综合忽略了网表中的人工计时。实际的脉冲宽度可以更长,更可能更短或更小。检查标准单元库并查找要应用于ininv的延迟单元,这将增加脉冲宽度。该库可能已经定义了脉冲发生器单元。