可以说我有一个带位向量端口的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
答案 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 应为模块声明中指定的名称。端口名称不能是位选择、部分选择或端口的串联。