Verilog:如何将模块的输出分配给宽度不同的总线

时间:2019-07-09 23:06:44

标签: verilog

说我有一个带有总线输入A和总线输出B的模块foo:

module foo ();
    input [7:0] A;
    output [7:0] B;
endmodule

并且foo在顶级模块中实例化,我想要下面类似的东西(可能有语法错误):

module top ();
     wire [2:0] bus1;
     wire [2:0] bus2;
     wire [2:0] bus3;
     wire [2:0] bus4;

     foo myfoo (
        .A[7:5](bus1[2:0]),
        .A[4:3](2'b00),
        .A[2:0](bus2[2:0]),
        .B[7:5](bus3[2:0]),
        .B[4:3](),
        .B[2:0](bus4[2:0])
     );
endmodule

正确的语法和最优雅的方法是什么?

1 个答案:

答案 0 :(得分:2)

使用concat,类似于以下内容。使用临时信号来填充未连接的切片。

 wire tmp[1:0];

 foo myfoo (
    .A({bus1[2:0], 2'b00, bus2[2:0]),
    .B({bus3[2:0], tmp, bus4[2:0]})
 );