查找一个月内的天数

时间:2012-12-18 16:02:21

标签: verilog dataflow

我正在制作一个显示编号的程序。用户提供的当月日期。我正在数据流级别制作这个程序。由于我是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 )

1 个答案:

答案 0 :(得分: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语句中的方法
assign Days = (month == 4 || month == 6 || month == 9 || month == 11) ? 30 : 
              (month == 2 && leapyear == 1) ? 29 :
              (month == 2 && leapyear == 0) ? 28 :
              31;