Verilog: Как назначить вывод модуля на шину с разной шириной - PullRequest
0 голосов
/ 10 июля 2019

Скажем, у меня есть модуль foo с входом шины A и выходом шины B:

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 Ответ

2 голосов
/ 10 июля 2019

Используйте concats, что-то вроде следующего.Используйте временный сигнал в качестве заполнения для неподключенного среза.

 wire tmp[1:0];

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