端口矢量中的某些位保持断开状态。 Verilog模块实例化

时间:2018-09-13 06:45:21

标签: verilog

可以说我有一个带位向量端口的Verilog模块。我如何     用一些未连接的位实例化它?

我尝试了类似的方法,但是没有用:

module sub (in,out)
input [3:0] in;
output [3:0] out;
endmodule

module top;
wire [1:0] a1;
wire [1:0] c1;

sub Sub1(
.in[2:1](a1[1:0]),
.out[2:1](c1[1:0])
 ); 
endomdule

4 个答案:

答案 0 :(得分:1)

只声明正确大小的信号并使用连续分配会容易得多

module top;
  wire [1:0] a1;
  wire [1:0] c1;

  wire [3:0] pin;
  wire [3:0] pout;

  assign pin[2:1] = a1;
  assign c1 = pout[2:1];
  sub Sub1(
           .in(pin),
           .out(pout)
          ); 
endomdule

通常,让输入端口悬空不是一个好主意。您可以在分配中或直接在端口连接中使用串联。

sub Sub1(
               .in({1'b0,a1,1'b0}),
               .out({pout[3],c1,pout[0]})
              ); 

SystemVerilog具有网络别名结构,使事情变得更加简单

module top;
  wire [3:0] pin;
  wire [3:0] pout;

  alias pin[2:1]  = a1;
  alias pout[2:1] = c1;
  sub Sub1(
           .in(pin),
           .out(pout)
          ); 
endomdule

答案 1 :(得分:0)

您无法连接/断开端口的各个部分。您可以使用整个端口来完成。因此,在您的情况下,您需要将端口分为几部分,如下所示:

module sub (in1, in2, out1, out2);
   input [2:1] in1;
   input [1:0] in2;
   output [2:1] out1;
   output [1:0] out2;
endmodule

module top;
   wire [1:0] a1;
   wire [1:0] c1;

   sub Sub1(
    .in1(a1[1:0]),
    .in2(),
    .out1(c1[1:0]),
    .out2()
    ); 
endmodule

答案 2 :(得分:0)

我的代码将4位连接到模块的8位输出,上/下甚至中间部分。 它确实有效,但是“ s”(或其他任何东西)到底是什么? 它可以在Quartus Prime 18.0pro和Lattice Diamond 3.10(Symplify Pro)中使用。

module dff8
(
    input clk,
    input [7:0] a,
    output reg [7:0] b
);
    always @ (posedge clk) begin
        b <= a;
    end
endmodule

module top
(
    input clk,
    input [7:0] x,
    output [3:0] y,
    output [3:0] z
);

    dff8 u0 (.clk(clk), .a(x), .b({y,s,s,s,s}));
    dff8 u1 (.clk(clk), .a(x), .b({s,s,s,s,z}));
endmodule

答案 3 :(得分:0)

找到关于为什么无法连接部分端口的 LRM 参考。 LRM 1800-2012 第 23.3.2.2 节按名称连接模块实例端口:

port_name 应为模块声明中指定的名称。端口名称不能是位选择、部分选择或端口的串联。