Как я могу вернуть значение после проверки условия? - PullRequest
0 голосов
/ 08 сентября 2018

Следующий код должен проверить наличие значения 'e', ​​чтобы gcd (h, e) = 1. Где 1

module great(p,q,e,d);
input p,q;
output e,d;
reg e,d;
h=((p-1)*(q-1));
always 
begin
for(e=2;e<h;e=e+1)
begin
g1=gcd(h,e);
if(g1==1)
return e;

1 Ответ

0 голосов
/ 22 сентября 2018

Если под «возвратом значения» вы подразумеваете выделение значения, которое вы можете использовать в другом модуле, вы должны использовать выходные данные этого модуля в качестве значения «возврата». Но даже игнорируя return e, я не думаю, что ваш код будет работать, если вы попытаетесь запустить его, потому что он слишком похож на язык программирования. Есть несколько важных вещей:

  1. Вы уже объявили output e,d, поэтому вы не можете объявить два reg с одинаковым именем. Вы, вероятно, хотите output reg e,d вместо.

  2. Вы не объявили тип для h или g1.

  3. У вас есть for петля для e, но e никогда не может быть ничем иным, кроме 0 или 1, потому что вы не установили для него размер, поэтому по умолчанию это только 1- немного долго Даже если он был достаточно большим, чтобы вы могли увеличивать его после 1, по умолчанию это тип wire, и вы не можете делать такие приращения непосредственно до wire.
  4. Полагаю, gcd - это какой-то модуль, который вы сделали где-то еще, но это не то, как вы соединяете модули вместе. Вы не можете назвать это, как будто это функция. Вы должны использовать wire и reg, чтобы соединить входы и выходы двух модулей вместе, почти как вы подключаете компоненты.

В любом случае, это то, что мне больше всего нравится. Я думаю, что вы кодируете свой Verilog, как если бы это был Python, и это то, что вызывает эти недоразумения. Verilog очень, очень отличается.

...