Если под «возвратом значения» вы подразумеваете выделение значения, которое вы можете использовать в другом модуле, вы должны использовать выходные данные этого модуля в качестве значения «возврата». Но даже игнорируя return e
, я не думаю, что ваш код будет работать, если вы попытаетесь запустить его, потому что он слишком похож на язык программирования. Есть несколько важных вещей:
Вы уже объявили output e,d
, поэтому вы не можете объявить два reg
с одинаковым именем. Вы, вероятно, хотите output reg e,d
вместо.
Вы не объявили тип для h
или g1
.
- У вас есть
for
петля для e
, но e
никогда не может быть ничем иным, кроме 0
или 1
, потому что вы не установили для него размер, поэтому по умолчанию это только 1- немного долго Даже если он был достаточно большим, чтобы вы могли увеличивать его после 1
, по умолчанию это тип wire
, и вы не можете делать такие приращения непосредственно до wire
.
- Полагаю,
gcd
- это какой-то модуль, который вы сделали где-то еще, но это не то, как вы соединяете модули вместе. Вы не можете назвать это, как будто это функция. Вы должны использовать wire
и reg
, чтобы соединить входы и выходы двух модулей вместе, почти как вы подключаете компоненты.
В любом случае, это то, что мне больше всего нравится. Я думаю, что вы кодируете свой Verilog, как если бы это был Python, и это то, что вызывает эти недоразумения. Verilog очень, очень отличается.