0

いいえを表示するプログラムを作成しています。ユーザーが指定した月の日数。私はこのプログラムをデータフローレベルで作成しています。私は Verilog を初めて使用するので、データ フロー レベルで if/else 条件または case ステートメントを使用できるかどうかわかりません。if/else ステートメントを使用すると、このプログラムが簡単になります。そうでない場合、データフローレベルで次のアイデアをどのように実装できますか。

if(month==4 || month==6 || month==9|| month==11)

      days=30;
 else
    if(month==2 && leapyear==1)
        days=29;

ここに私のVerilogの不完全なコードがあります:

 module LeapYear(year,month,leapOrNot,Days);

 input year,month;

 output leapOrNot,Days;



 //if (year % 400 == 0) || ( ( year % 100 != 0) && (year % 4 == 0 ))
 leapOrNot=((year&400)===0) && ((year % 100)!==0 || (year & 4)===0);

  Days=((month & 4)===4 ||(month & 6)===6 ||(month & 9)===9 ||(month & 11)===11 )
4

1 に答える 1

0

連続代入では if/else を使用できませんが、機能的に同等の条件演算子を使用できます。

これを試して:

assign Days = (month == 4 || month == 6 || month == 9 || month == 11) ? 30 : 
              (month == 2 && leapyear == 1) ? 29;

これにより、質問に入力したものが生成されます。Daysしかし、が 28 または 31 に等しいという条件が欠落しているため、それは正しい答えではありません。

編集:条件演算子を使用して、すべての条件を単一の割り当てステートメントに結合する方法は次のとおりです.v

assign Days = (month == 4 || month == 6 || month == 9 || month == 11) ? 30 : 
              (month == 2 && leapyear == 1) ? 29 :
              (month == 2 && leapyear == 0) ? 28 :
              31;
于 2012-12-18T17:59:35.283 に答える