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 的条件。

编辑:以下是如何使用条件 operator.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 回答