Verilog: правильный способ подключения портов - PullRequest
0 голосов
/ 24 мая 2019

Предположим, есть два разных модуля (first_module, second_module).Оба модуля синхронизированы с тактовым сигналом.first_module имеет следующую структуру:

module first_module(
input clk,
input reset_n,
input in1,
output reg out1,
output reg out2
);

//******** some verilog codes *********

endmodule

И second_module имеет аналогичную структуру:

module second_module(
input clk,
input reset_n,
input in1,
input in2,
output reg out1
);

//******** some verilog codes *********

endmodule

И затем существует модуль с именем top_module, который использует экземпляры обоих модулей:

module top_module(
input clk,
input reset_n,
input insignal1,
input insignal2,
output outsignal1,
output outsignal2
);

first_module fm1(
  .clk(clk),
  .reset_n(reset_n),
  .in1(insignal1),
  .out1(outsignal1),
  .out2(<connection1>) // to be connected to the connection2 
);

second_module sm1(
  .clk(clk),
  .reset_n(reset_n),
  .in1(insignal2),
  .in2(<connection2>), // to be connected to the connection1
  .out1(outsignal2)
);    

endmodule

Целью является подключение connection1 к connection2.Насколько я знаю (если это правильно), мы можем либо объявить один провод (пусть его имя будет connection) и заменить его <connection1> и <connection2>, либо мы можем объявить два разных провода connection1и connection2, затем:

assign connection2 = connection1;

и соедините их соответственно.

  • По-разному ли синтезированы эти два метода? Если ответ положительный, я был бы рад, если бы вы могли объяснить, как они синтезируются.
  • Если ответ отрицательный, может ли один из методов быть лучше другого в других условиях? Не с точки зрения строк кода или простоты, а с точки зрения синтеза.

1 Ответ

1 голос
/ 24 мая 2019

Да, есть разница. Но не в вашем конкретном случае.

Использование прямого соединения делает его однонаправленным или двунаправленным в зависимости от того, какие порты находятся в модуле.

Но assign connection2 = connection1; только однонаправленный.

Таким образом, между двунаправленными портами следует использовать прямые соединения, или вы должны использовать только двунаправленные конструкции Verilog между ними. assign ... не является одним из них.

Но в вашем случае сигнал является однонаправленным, поэтому он не имеет значения.

Обратите внимание, что современные ПЛИС больше не имеют встроенных двунаправленных шин. (По крайней мере, я не знаю, что есть). Кроме того, в микросхемах микросхемы для микросхем категорически не рекомендуются или прямо запрещены производителями.
Поэтому двунаправленные сигналы обычно присутствуют только на испытательном стенде. Поскольку это не синтезируется, ваш вопрос там не применим.

И последнее, но не менее важное: В дизайне HDL я бы настоятельно не рекомендовал менять название сигнала без видимой причины. Наличие одного и того же имени во всем проекте облегчает отладку и отслеживание ваших сигналов после синтеза.

...