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