verilog中的重复组件指示符错误

时间:2015-09-23 06:14:17

标签: verilog

我收到错误"受影响的对象重复的组件指示符i4在行:25偏移:13和行:25偏移:13"。由于指定的位置都相同,我无法对此问题进行排序。请帮助我。

这是我正在使用的代码。

`timescale 1ns / 1ps

module delay_output(
  input cclk3,
  input [7:0] delay_out1,
  output reg[7:0] delayout1
);

reg [7:0] temp1;
reg [7:0] temp2;
reg [7:0] temp3;
reg [7:0] temp4;

delay_outsig(
  .cclk4(cclk4),
  .delay_out2(delayout1)
);

always @(posedge cclk3) begin
  temp1 <= delay_out1;
  temp2 <= temp1;
  temp3 <= temp2;
  temp4 <= temp3;
  delayout1<= temp4;
end

endmodule

1 个答案:

答案 0 :(得分:0)

由于我不知道您使用的是哪种工具,我只是在猜测。

我发现的一个问题是使用delayout1指示符:

  • module声明中,指定为output reg [7:0]类型。
  • 然而,在第25行,它连接到实例端口,这需要wire而不是reg

因此,我只需从reg声明中删除output,使其成为

output [7:0] delayout1

并查看是否可以解决错误。如果有帮助,请告诉我。

修改

除了上述内容之外,我意识到您还要在delayout1块内分配alwaysdelayout1需要regdelayout1

因此reg不能同时成为reg 的问题delay_out2。假设delay_outsig实例的always端口是输出,delay_outsig块和delayout1实例之间存在冲突 - 两者中的哪一个应该驱动{ {1}}?

除此之外,delay_outsig模块的实例化缺少实例名称,并且未定义cclk4(感谢Greg注意到这一点)。

简而言之,代码存在以下问题:

  1. delay_outsig实例需要一个名称。例如,您可以将行更改为delay_outsig delay_outsig_inst1 (,以便为实例指定名称delay_outsig_inst1
  2. delay_outsig实例和always块之间存在驱动程序冲突。您需要决定两者中哪一个应该控制delayout1。也许您需要为另一个驱动程序使用单独的名称,并以某种方式将两者结合起来。
  3. 一旦您决定,delayout1如果是由实例驱动,则应为导线;如果由reg块驱动,则为always
  4. 您应该定义cclk4(这可能是拼写错误,应该是cclk3吗?)
  5. 在更高级别查看您的代码(即猜测您真正想要做什么),我想知道您是否需要拥有delay_outsig实例或者是否要删除这四行并查看模块是否已经满足您的需求。