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

Verilog设计-输入为;“未使用”;警告,verilog,xilinx,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 t

当尝试合成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.
我在几个不同的地方称之为它,包括:

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.
警告:Xst:1290-块中的分层块未连接。
它将从设计中删除。
这两个警告的原因是什么?如何修复它们并生成正确的示意图

编辑添加:整个过程模拟得非常完美,只是在尝试制作示意图(尝试向我的团队解释我刚刚制作的东西)时,我遇到了问题。此图显示了我得到的示意图


仅将一个信号命名为模块的输入是不够的……它实际上需要连接到FPGA上的一个引脚。另一方面,您的
上升
模块正在接受输入及其补码的AND…合成器可能已经找到了一种与您的愿望相反的简化逻辑的方法。

合成正在优化所有逻辑,因为它忽略了延迟。从功能上讲,在&~in中有
,它总是0。你想要的是一个脉冲发生器。实现这一点的一种方法是使用don_touch属性,该属性告诉合成器必须在设计中保留特定的模块实例化。更多信息请参见此

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

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

endmodule

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

上升模块是一个非常常见的东西,它的延迟不是输入及其补充,延迟是关键。如何指定管脚?我找到了一个约束文件,并运行了planahead,它允许我为我的8个I/o信号分配管脚,但这并不能消除任何警告。我已经在我的原始问题上附上了一张图片,显示了原理图的样子-I/O引脚在那里,但模块内部什么都没有。是什么让你认为你的逻辑实际上将通过AND门和反相器来实现?这个逻辑函数将被合成为一个LUT(查找表),而您生成脉冲的巧妙技巧将被简化为一根接地导线。
module rising (in, out);
output out;
input in;

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

endmodule