当前位置:   article > 正文

Verilog中if- else if语句和case语句用法:_verilog if else用法

verilog if else用法

一、if语句:

1.两种情况

  1. if(条件语句)begin
  2. ……
  3. end else begin
  4. ……
  5. end

2.多种情况

  1. if(条件语句)begin
  2. ……
  3. end else if(条件语句)begin
  4. ……
  5. end else if(条件语句)begin
  6. ……
  7. end else if(条件语句)begin
  8. ……
  9. end

if语句总结:

1)条件语句必须在过程块中使用。所谓过程块语句是指由initial、always引导的执行语句集合。除了这两个语句块引导的begin end块中可以编写条件语句外,模块中的其他地方都不能编写。

2)if语句中的表达式一般为逻辑表达式或者关系表达式。系统对表达式的值进行判断; 若为0,z,X;按照假处理;若为1按照真处理,执行指定的语句;

3)if(a)等价于if(a == 1);

4)if语句可以·嵌套·使用,end总是与离它最近的一份else配对。

二、case语句

  1. case(控制表达式/值)
  2. 分支表达式1:执行语句
  3. 分支表达式2:执行语句
  4. 分支表达式3:执行语句
  5. default:执行语句
  6. endcase
  7. 使用注意事项:
  8. 1)每一个分支表达式的值必须互不相同,否则就会出现问题,即对表达式的同一个值出现多种执行方案,产生矛盾;
  9. 2)执行完一个case的分支语句之后跳出该case语句体结构中止此case语句的执行;
  10. 3)case语句表达式的比较过程中的表达式值必须相同(位宽、数值)才能正确;
  11. 例如:‘bx。‘bz与n‘bx,n‘bz比较,‘bx。‘bz默认计算机位宽,一般为32位,n不等于32时就会出现错误。
  12. 4、casez:
  13. casez语句的分支表达式在与表达式比较时不考虑高阻值z
  14. casex语句的分支表达式在与表达式比较时不考虑高阻值z 和不定值x

示例:

  1. `timescale 1ns / 1ps
  2. //
  3. module case_test(
  4. input [1:0]sel,
  5. output reg [3:0]dout
  6. );
  7. always@(*)
  8. begin
  9. case(sel)
  10. 2'b00:begin
  11. dout = 4'b0000;
  12. end
  13. 2'b01:begin
  14. dout = 4'b0001;
  15. end
  16. 2'b10:begin
  17. dout = 4'b0011;
  18. end
  19. 2'b11:begin
  20. dout = 4'b0111;
  21. end
  22. default:begin
  23. dout = 4'b1111;
  24. end
  25. endcase
  26. end
  27. endmodule

注意⚠️!!!

if 和 case 语句使用不当会造成出现锁存器局面:

if示例:

  1. always@(al or b)
  2. begin
  3. if(a)q <= d;
  4. end
  5. 上述的代码,只写出了a==1时q应该的取值,a==0时的情况并不知道
  6. 在always块里面,如果在给定的条件下变量没有被赋值,这个变量将会保持原来的值,也就是说会生成一个锁存器。

case:

另外一种情况会生成意想不到的锁存器时当case语句中没有default语句时的情况。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/101482?site
推荐阅读
相关标签
  

闽ICP备14008679号