【问题标题】:"Illegal output or inout port connection for "port"“端口”的非法输出或输入端口连接
【发布时间】:2016-04-01 10:47:21
【问题描述】:

我为两点 FFT 编写了一个小代码,其中我的输入(64 位复数)采用 IEEE-754 格式(双精度)。这是我的代码的链接(蝴蝶模块、加法器/减法器模块、测试台):

http://pastebin.com/RNRx6J2E

当我尝试模拟测试台时,我遇到了以下错误列表:

http://pastebin.com/LRnRzv4A

P.S : 我是初学者,所以,我的写作风格可能不好。请帮我解决这个问题。

【问题讨论】:

标签: verilog


【解决方案1】:

参考 OP 在评论中提供的this 链接。您的代码适用于所有 SystemVerilog 模拟器。模块的输出必须连接wire。参考下图:

模块内部输出端口可以是regwire。但是,当该模块实例化时,它必须连接到网络wire

参考IEEE 1800-2012,第 23.3.3 节:

每个端口连接应该是源到连续分配 sink,其中一个连接项应为信号源,另一项应为信号源 应为信号接收器。分配应是连续的 输入或输出端口从源到接收器的分配。

当端口在实例化中连接到任何其他端口时,它是一个常量分配,因此它总是要求目标端口是一张网

因此,在此代码中,将 wires 连接到输出模块 add_sub 并将线的值分配给 reg outr1,outr2 等。

  // Draw wires to be connected as output
  wire [63:0] t1,t2,ti1,ti2;

  // Drive all regs from values of wires
  always @*
    begin
      outr1 = t1;
      outr2 = t2;
      outi1 = ti1;
      outi2 = ti2;
    end

  // Change : Wires connection
  add_sub adder1(en,clk,inr1[63],inr2[63],inr1[62:52],inr2[62:52],inr1[51:0],inr2[51:0],1'b0,t1[63],t1[62:52],t1[51:0]);
  //...

我已经使用EDAPlayground here 的所有模拟器模拟了您的代码,并且运行良好。参考thisthis类似问题。

【讨论】:

  • [附加信息] 当出现此错误时,我试图将 reg 类型的信号分配给 wire 类型的另一个信号。 (例如,<wire_type_signal> <= <reg_type_signal>)。当我删除该行时,错误消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多