第三讲 verilog基本语法.ppt

3.7 条件语句和循环语句 If语句用于条件选择,其语法如下 if (条件表达式1) begin … …. end else if(条件表达式2) begin … …. end else ………. * if语句 如果存在一个else分支,那么这个分支被执行 if(Sum60) begin Grade=C; Total_C=Total_C+1; end else if (Sum75) begin Grade=B; Total_B=Total_B+1; end else begin Grade=A; Total_A=Total_A+1; end * if语句的嵌套 if(Ctrl) begin if(~Ctrl2) Mux=4d2; else Mux=4d1; end else begin if(~Ctrl2) Mux=4d8; else Mux=4d4; end * case 语句 case语句是一个多路条件分支形式,其语法如下: case(case_expr) case_item_expr{,case_item_expr}: procedural_statement ... ... [default:procedural_statement] endcase case语句首先对条件表达式case_expr求值,然后依次对各分支项求值并进行比较 第一个与条件表达式值相匹配的分支中的语句被执行。 可以在1个分支中定义多个分支项;这些值不需要互斥。 缺省分支(default)覆盖所有没有被分支表达式覆盖的其他分支。 * case 语句 parameter MON=0, TUE=1, WED=2, THU=3, FRI=4, SAT=5, SUN=6; reg [0:2] Day; integer Pocket_Money; case(Day) TUE : Pocket_Money=6; //分支1 MON, WED: Pocket_Money=2; //分支2 FRI, SAT, SUN: Pocket_Money=7; //分支3 default: Pocket_Money=0; //分支4。 endcase 如果Day的值为MON或WED,就选择分支2。分支3覆盖了值FRI、SAT和SUN,而分支4 覆盖了余下的所有值,即THU和位向量111。 * case 语句实例 module ALU(A, B, OpCode, Z); input [3:0] A,B; input [1:2] OpCode; output [7:0] Z; reg [7:0] Z; parameter ADD_INSTR=2b10, SUB_INSTR=2b11, MULT_INSTR=2b01, DIV_INSTR=2b00; always @(A or B or OpCode) case(OpCode) ADD_INSTR: Z=A+B; SUB_INSTR: Z=A-B; MULT_INSTR: Z=A*B; DIV_INSTR: Z=A/B; default : Z=A+B; endcase endmodule * case语句与综合电路 * case 分支长度不同时先统一长度 如果case表达式和分支项表达式的长度不同情况下,在进行任何比较前所有的case表达式都统一为这些表达式的最长长度。 case(3b1012) 3b100: $display(First branch taken!); 4b0100: $display(Second branch taken!); 5b10100: $display(Third branch taken!); default: $display(Default branch taken!); endcase 因为第3个分支项表达式长度为5位,所有的分支项表达式和条件表达式长度统一为5。当计算3 b1012时,结果为5 b10100,并选择第3个分支。 * case语句中的无关位 在casez语句中,出现在case表达式和任意分支项表达式中的值z被认为是无关值,即那个位被忽略(不比较)。 在casex语句中,值x和z都被认为是无关位。 casex( Mask ) 4b1??? : Dbus[4] = 0; 4b01?? : Dbus[3] = 0; 4b001? : Dbus[2] = 0; 4b0001 : Dbus[1] = 0; defalut : Dbus=4’hf; endcase * 条件语句的优先级 case语句和if…else嵌套描述结构就有很大的区别。在Verilog语法中,if…else if…else语句

文档评论(0)

1亿VIP精品文档

相关文档