← FPGA数字IC知识手册

推荐答案 测试一下

if-else

判断题 中等 笔试真题

参考答案

错。理由如下:题目给出的设计要点中第3点存在错误,其余要点基本正确,但整体判断为错。 1) 正确。条件语句(如if-else、case)只能在过程块(always、initial)中使用,过程块内的begin...end块是语句组,但条件语句本身必须位于过程块内,不能出现在模块其他位置(如assign语句中)。 2) 基本正确。if语句的条件表达式通常为逻辑或关系表达式,但也可以是其他可综合表达式。系统对表达式值判断:若为0、x或z,均视为假;若为非0(即1),视为真,执行对应语句。但需注意,x和z在仿真中视为假,综合工具可能将其视为未定,但规则如此描述尚可接受。 3) 错误。if(a) 并不等价于 if(a == 1)。if(a) 的条件是a非全0(即任何非零值,包括多位情况)即为真;而if(a == 1) 仅当a恰好等于1时才为真。两者仅在a为单比特时等价(此时0与1之外的x/z均视为假,但行为一致),在多比特时完全不同。例如a=2'b10,if(a)为真,if(a==1)为假。因此该描述错误。 4) 正确。if语句可以嵌套使用,但需注意配对规则。 5) 正确。在Verilog中,else总是与最近的、未配对的if相结合,这是语法规则。 关于锁存器的讨论:后续说明指出没有else可能产生锁存器,但有else也不一定避免,这正确。综合出锁存器的根本原因是条件不完整(某个分支未赋值),并非仅由else决定。 综上,由于第3点明显错误,因此整个设计要点的陈述错误。

涉及知识点

  • if语句的条件判断规则
  • if(a)与if(a==1)的区别
  • Verilog条件语句只能在过程块中使用
  • if-else配对原则
  • 锁存器产生的原因
  • 综合中的条件完整性问题
← 上一题
登录后反馈错题
下一题 →