首页 > 解决方案 > 在两个方向上将输入端口分配给输入输出

问题描述

出于模拟目的,使用 Verilog,我想创建一个只有 2 个输入输出端口(比如左和右)的块,并且将从左到右或从右到左传输信号。可以假设该块将仅在转换期间处于活动状态,并将在其余时间等待输入。但我不允许使用任何其他端口。所以模块定义理论上会是这样的:

module blackbox(inout left, inout right)
  assign left = right;
  assign right = left;

  specify
    (left => (right:1'b1)) = 7;
    (right => (left:1'b1)) = 8;
  endspecify
endmodule

有解决方案吗?


作为第二个问题,可以通过确定放置后的方向来简化问题。例如,如果将块放置在一个位置,它将始终从左到右传输信号,但在另一个位置,它可以从右到左传输。是否有可能在模块内以某种方式对其进行编码?

谢谢,

标签: veriloginout

解决方案


在 Verilog 中

module blackbox(inout .left(internal), inout .right(internal));
 wire internal;
  specify
    (left => (right:1'b1)) = 7;
    (right => (left:1'b1)) = 8;
  endspecify
endmodule

或者

 module blackbox(inout left, right);
     tran t(left,right); // some simulators might require this to work with specify block
      specify
        (left => (right:1'b1)) = 7;
        (right => (left:1'b1)) = 8;
      endspecify
    endmodule

在 SystemVerilog 中:

 module blackbox(inout left, right)
   alias left = right;
      specify
        (left => (right:1'b1)) = 7;
        (right => (left:1'b1)) = 8;
      endspecify
 endmodule

对于您的第二个问题,我不确定您为什么需要将其用于仿真模型,或者您如何将布局信息放入网表中。


推荐阅读