EDITORIAL言葉
関係演算子といえば、それは優先順位の問題があり、傷のは本当にいっぱいです:優先順位関係演算子は、算術演算子の優先順位よりも少ないです。
関係演算子種
(1)<B AはBよりも小さいです
(2)A> B AはBよりも大きいです
(3)<= B B以下
(4)Aが> = B B以上であります
関係演算子を使用することを意味
リレーショナル動作時規定の関係が(偽の場合、偽)、戻り値が0であり、記載された関係が(真)trueの場合、オペランドが未定義の場合、戻り値は、1であり、次いで関係は戻り値が定義されていない、あいまいです。
算術演算子の優先順位との関係
すべての関係演算子が同じ優先度を持っています。算術演算子の優先順位よりも低い関係演算子の優先順位。以下の例を参照してください:
同じことを意味//表現
<サイズ-1
<(サイズ1)
//式は異なる意味します
、サイズ(1 <a)の
サイズ-1 <A
場合の式、サイズ(1 <a)第一の関係式を算出することによって、算出し、0又は1のサイズを減算した値を返します。発現およびサイズ-1 <サイズ1を最初に比較し、次に減算され、時間を算出します。
条件分岐のif-elseステートメント
条件分岐文が次に行うことを決定した場合、それ以外のアクションは、指定した条件が満たされているに基づいて決定されます。それは、次の3つの形の使用で使用することができます。
( 1)IF(<条件式>)
文または文ブロック。
では、条件付きのif-else文を使用していない、そのような入力フォーム他に、この場合は条件分岐文の実行は、次のとおりです。
- 指定した場合、<条件式>確立(条件式「1」、すなわち論理値)、「文または文がブロック」条件分岐文で与えられ実行され、その後条件分岐文から撤退されています。
- 場合 <条件式>満たされていない(すなわち、論理値「0」の条件式、 「X」、 「Z」)、条件分岐文で与えられた「文または文のブロックが」実行されるが、条件文の終了実行。
例えば、プログラム 1
/ ************************************************* *** *エンジニア: ドリーム・ブラザーウイング * QQ:761664056 *モジュール機能:もしステートメント割り当てモジュール ************************************************** *** / 01 モジュール if_else_case (、 SEL 、 RST_N 、アウト)。 02 INPUT ; // 入力してください 03 INPUT SEL ; // 入力された信号を有効にします 04 入力 RST_N 。 05 06 出力 REG OUT ; // 出力信号 07 08 常に@(*) 09 始めます 10 もし(! RST_N ) 11アウト= 0 。 12 他 13 始めます 14 であれば( SELの== 1 ) // SEL == 1は、条件式が論理1 行う、場合ステートメント 15アウト= A ; // への出力変数に割り当てられた値アウト 16 終了 17 終了 18 19 ENDMODULE |
ビューのシミュレーション波形次のように
実行時にこのコードは、条件式に基づいて行われます「SEL == 1」SEL == 1、割り当てが実施される場合には、代入文の実行としてシミュレーションチャート「アウト=」かどうかを決定するために設立されました出力は、割り当てSEL == 0は、行われていない場合、出力は、元の不変を維持するために、信号out、1の値を得るために、信号out。SEL == 0は、アウト1元の値が変わらない場合、図示のように。
( 2)(<条件式>)IF
文または文のブロック 1
他
文または文のブロック 2
条件分岐文のこの形式は、次のように実装されます。
- 指定した場合、その後、条件分岐文または実行文のブロックに指定された文の最初の行、及び<条件式>確立(条件式「1」、すなわち論理値)は、条件分岐命令の実行を終了します。
- 場合 <条件式>満たされず、他の実行条件分岐命令文または文ブロック2の2行目のエントリによって指定され、その後、条件分岐命令の実行を終了します。
例えば、プログラム 2
/ ************************************************* *** *エンジニア: ドリーム・ブラザーウイング * QQ:761664056 *モジュール機能:if_else ステートメント割り当てモジュール *****************************************************/ 01 module if_else_case(a,b,sel,rst_n,out); 02 input a;//输入a 03 input b;//输入b 04 input sel;//使能信号输入 05 input rst_n; 06 07 output reg out;//输出信号 08 09 always@(*) 10 begin 11 if(!rst_n) 12 out=0; 13 else 14 begin 15 if(sel==1)//当sel==1,条件表达式逻辑值为1,执行if下语句 16 out=a;//将a的值赋值给输出变量out 17 else //当sel==0,条件表达式逻辑值为0,执行else下语句 18 out=b;//将a的值赋值给输出变量out 19 end 20 end 21 22 endmodule |
查看仿真图如下:
在运行这段代码时,会根据条件表达式“sel==1”是否成立来决定执行两条过程赋值语句中的哪一条。
如果sel==1,则第一行if这项所指定的赋值语句out=a,得到执行,输出信号out 得到a的值1,如图所示。
如果sel!=1,则执行第二行else 项所指定的赋值语句out=b,输出信号out得到b的值。
(3)if(<条件表达式1>)
语句或语句块1
else if( <条件表达式2>)
语句或语句块2
………
else
在执行这种形式的if-else条件分支语句时,将按照各分支项的排列顺序对各个条件表达式是否成立做出判断,当遇到某一项的条件表达式成立时,就执行这一项所指定的语句或语句块。
如果所有的条件表达式都不成立,则执行最后的else项。
这种形式的if-else条件分支语句实现了一种多路分支选择控制。
例如程序3
/**************************************************** * Engineer : 梦翼师兄 * QQ : 761664056 * The module function:if_else语句赋值模块 *****************************************************/ 01 module if_else_case(a,b,c,sel1,sel2,rst_n,out); 02 input a;//输入a 03 input b;//输入b 04 input c;//输入c 05 input sel1;//使能信号输入1 06 input sel2;//使能信号输入2 07 input rst_n; 08 09 output reg out;//输出信号 10 11 always@(*) 12 begin 13 if(!rst_n) 14 out=0; 15 else 16 begin 17 if(sel1==1)//当sel1==1,条件表达式逻辑值为1,执行对应语句 18 out=a;//将a的值赋值给输出变量out 19 else if(sel2==1) //当sel==0,条件表达式逻辑值为0,执行else下语句 20 out=b;//将b的值赋值给输出变量out 21 else 22 out=c;//将c的值赋值给输出变量out 23 end 24 end 25 26 endmodule |
查看仿真波形如下:
如果sel1的值为1,则第一个分支项的条件表达式sel1成立,因而第一分支项所指定的赋值操作out=a执行。
如果sel2的值为1,sel1的值不为1,则第二个分支项的条件表达式sel2成立,因而第二个分支项所指定的赋值操作out=b执行。
如果sle1和sel2的值都不为1,则执行else 分支语句这一项操作out=c执行。
(4)Verilog HDL 允许if-else 条件分支语句的嵌套使用。
if(<条件表达式1>)//外层if语句
if(<条件表达式2>)//内层if语句1
else //内层else语句2
else //外层else语句1
if(<条件表达式3>)//内层if语句3
else //内层else语句4
case分支控制语句
case分支语句是另一种用来实现多路分支控制的分支语句。与使用if-else条件分支语句相比,采用case分支语句来实现多路控制将显得更为方便与直观。
case分支语句通常用于对微处理器指令译码功能的描述以及对有限状态机的描述。case分支语句有“case”、“casez”、“casex”三种形式。
(1) case语句
case(<控制表达式>)
<分支语句1> :语句块1
<分支语句2> :语句块2
<分支语句3> :语句块3
………
<分支语句n> :语句块n
default: 语句块n+1;
endcase
<控制表达式>代表着对程序流向进行控制的控制信号:各个<分支表达式>则是控制表达式的某些具体状态取值,在实际使用中这些分支项表达式通常是一些常量表达式:各个“语句”则指定了在各个分支下所要执行的操作,它们也可以是由单条语句构成,处于最后的、以关键词default开头的那个分支项称为“default”分支项,它是可以缺省的。
Case语句的执行过程:
(1)当“控制表达式”的取值等于“分支项表达式1”时,执行第一个分支项所包含的语句块1.
(2)当“控制表达式”的取值等于“分支项表达式2”时,执行第一个分支项所包含的语句块2.
………….
(n)当“控制表达式”的取值等于“分支项表达式n”时,执行第一个分支项所包含的语句块n.
(4)在执行了某一分支项内的语句后,跳出case语句结构,终止case语句的执行。
Case语句中各个“分支项表达式”的取值必须是互不相同的,否则就会出现矛盾现象。
例如程序4
/**************************************************** * Engineer : 梦翼师兄 * QQ : 761664056 * The module function:case语句赋值模块 *****************************************************/ 01 module if_else_case(a,b,c,d,sel,rst_n,out); 02 input a;//输入a 03 input b;//输入b 04 input c;//输入c 05 input d;//输入c 06 input [1:0]sel;//使能信号输入 07 input rst_n; 08 09 output reg out;//输出信号 10 11 always@(*) 12 begin 13 if(!rst_n) 14 out=0; 15 else 16 begin 17 case(sel) 18 2'b00:out=a; 19 2'b01:out=b; 20 2'b10:out=c; 21 2'b11:out=d; 22 default:; 23 endcase 24 end 25 end 26 27 endmodule |
查看仿真波形如下:
case语句在执行时,控制表达式和分支项表达式之间进行的比较是一种按进位进行的“全等比较”,也就是说,只有在分支项表达式和控制表达式对应的每一位都是彼此相等的情况下才认为分支项表达式和控制表达式两者是“相等”的,对应的语句块就会被执行。
case语句和if-else的区别
if-else 语句的执行是有优先级的判断,按照优先级的顺序执行语句;而case语句没有先级的考虑,只跟对应的逻辑值有关系,只要逻辑值对应相等就执行对应的语句块。