Я новичок в Verilog и все еще изучаю его, но первое, что я думаю об этом, - это то, что все связано с соединениями портов. Итак, я наивно написал следующий код:Использование «назначить» для портов модуля привязки
module mult4(input wire [3:0] x, y,
output wire [7:0] z)
sum8 sh, sl, ss;
assign sl.x = (y[0] ? x : 0),
sl.y = (y[1] ? x : 0) << 1,
sh.x = (y[2] ? x : 0) << 2,
sh.x = (y[3] ? x : 0) << 3,
ss.x = sl.z,
ss.y = sh.z,
sl.cin = 0,
sh.cin = 0,
ss.cin = 0,
z = ss.z;
endmodule
и он не собирался работать вообще. Здесь sum8
это всего лишь 8-битный сумматор с следующей подписью:
module sum8(input wire cin, // carry-in bit
input wire [7:0] x, y, // operands
output wire cout, // carry-out bit
output wire [7:0] z); // result
Конечно, я могу переписать этот код, чтобы сделать его компиляции, но я хотел бы знать другую вещь. Есть ли способ достичь аналогичного внешнего вида в Verilog, или единственное место, где я могу определить отображение порта, находится в круглых скобках после имени модуля? Если да, есть ли причины для этого? У других HDL есть функция, как я хочу?
Вы покажете, какую функциональность вы ищете? То есть, что представляет собой 'sum8'? И как ss.z получает ценность? –
Что такое 'sum8'? –
@ dave_59: извините за долгую задержку, я только что обновил вопрос. Но речь идет не о том, как работает конкретный модуль, а о том, почему я могу читать его из модуля module.port, но не могу его назначить. Возможно, сам вопрос не так хорош. – firegurafiku