if( ) begin if( ) 语句1 (内嵌if) end else 语句2 这时begin_end块语句限定了内嵌if语句的范围,因此else与第一个if配对。注意begin_end块语句在if_else语句中的使用。因为有时begin_end块语句的不慎使用会改变逻辑行为。见下例: if(index>0) for(scani=0;scani<index;scani=scani+1) if(memory[...
memory[scani]=0;endelse/*WRONG*/$display("error-indexiszero"); 尽管程序设计者把else写在与第一个if(外层if)同一列上,希望与第一个if对应,但实际上else是与第二个if对应,因为它们相距最近。正确的写法应当是这样的: if(index>0)beginfor(scani=0;scani<index;scani=scani+1)if(memory[scani]>0...
if($time>=1000)$finish; end endmodule 仿真结果如下。 由图可知,输出信号与选择信号、输入信号的状态是相匹配的。 事例中 if 条件每次执行的语句只有一条,没有使用 begin 与 end 关键字。但如果是 if-if-else 的形式,即便执行语句只有一条,不使用 begin 与 end 关键字也会引起歧义。
但应注意,不要误认为上面是两个语句(if语句和else语句)。它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。 (3)在if和else后面可以包含一个内嵌的操作语句,也可以有多个操作语句,此时用begin和end这两个关键词将几个语句包含起来成为一个复合块语句如下所示。 if(a...
块语句通常用来将两条或多条语句组合在一起,使其在格式上看更象一条语句。块语句有两种,一种是begin_end语句,通常用来标识顺序执行的语句,用它来标识的块称为顺序块。一种是fork_join语句,通常用来标识并行执行的语句,用它来标识的块称为并行块。下面进行详细的介绍。
end ②并行块fork-join: 格式: fork:块名 //块名可缺省 语句1; 语句2; ... 语句N; join 注意:如果两条语句在同一时刻对同一变量产生影响,则可能出现隐含的竞争。 3.条件语句 ①if-else语句 1)系统对逻辑表达式的值进行判断,若为0,x,z,按“假”处理;若为1,按“真”处理; 2...
if-else决策的每个分支可以是一条语句,也可以是一组包含在begin和end之间的语句,如下面的代码段所示, 没有else分支的if语句。if-else决策的else(false)分支是可选的。如果没有else分支,且表达式的计算结果为false(或unknown),则不执行任何语句。在下面的代码段中,如果enable为0,则out不会更改。由于out是一个变量...
if(rst) //or if(!rst) begin ; end else begin ; end end 参考例子如下: //a must be register data types always@(negedge clk) if(!rst) a <= 1’b0; else a <= b & c; 具有异步复位的always 具有异步复位的always语法如下: always@(<edge_type> clk, <edge_type> aRst) ...
必须加,相当于C语言中的大括号
end endmodule ``` 在这个例子中,`ExampleModule`模块有两个输入条件 `condition1` 和 `condition2`,以及一个输出 `result`。在 `always` 块中,使用 `if`、`else if` 和 `else` 来根据不同的条件执行相应的操作。这个例子中,当 `condition1` 为真时,`result` 被赋值为 1;当 `condition2` 为真时,`...