Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Verilog 查找一个月的天数_Verilog_Dataflow - Fatal编程技术网

Verilog 查找一个月的天数

Verilog 查找一个月的天数,verilog,dataflow,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) d

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

不能在连续赋值中使用if/else,但可以使用功能等效的条件运算符

试试这个:

assign Days = (month == 4 || month == 6 || month == 9 || month == 11) ? 30 : 
              (month == 2 && leapyear == 1) ? 29;
这将产生你在问题中提出的内容。但这不是正确的答案,因为您缺少
天数等于28或31的条件

编辑: 下面是如何使用条件运算符将所有条件组合成单个assign语句

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

你可能应该读一本教程,比如:,因为你似乎对基础知识掌握得很差。在开始编写模块之前,您应该尝试更好地理解该语言。对于此代码,我收到了
非法引用错误
:分配leapOrNot=((年份%400)==0 | |(年份%100)!=0&(年份%4)==0)?1:0; 分配天数=(月==4 | |月==6 | |月==9 | |月==11)?30 :31; 分配天数=(月份==2&&leapOrNot==1)?29:28;不清楚这是否是错误的来源,但不能在两个assign语句中分配两次天数。您需要将所有条件合并到一个assigns语句中。我将更新我的答案,以说明这是如何完成的。我不认为分配两次天数是一个问题,因为一次只有一个天数分配的条件运算符处于活动状态。我仍然得到
寄存器在连续赋值的左侧是非法的
这不是Verilog的工作方式。。。分配始终处于活动状态,因此不能有两个分配到同一网络。在最新的错误中,您不能在寄存器上放置连续赋值。尝试将其更改为
导线
。或者将
始终
块中的连续赋值更改为程序赋值,正如在electronics.stackexchange.comLeapOrNot和Days上的同一个问题上所建议的那样,这两个都被声明为导线