← 2022 · 荣耀 笔试

推荐答案 测试一下

下列说法错误的是

A.两个向量进行比较操作或加减操作或赋值操作时,两个向量的位宽要相等,避免隐式扩展; B.if/else语句配对使用,case语句加default项;组合逻辑中在所有条件下都要对信号赋值,如果要保持不变用a=a的方式赋值; C.可综合代码中,除了for语句中的循环变量可以定义为integer型外,所有变量和信号都只能为wire或reg型,不能定义为整型、实数型、无符号型、realtime型和time型; D.条件语句,如果无优先级关系,尽量采用case,避免多级else if影响时序;
简答题 中等 笔试真题

参考答案

选项B说法错误。理由如下: - B选项前半部分“if/else语句配对使用,case语句加default项”是正确的,有助于避免锁存器并提高代码可读性和可综合能力。 - 后半部分“组合逻辑中在所有条件下都要对信号赋值,如果要保持不变用a=a的方式赋值”是错误的。在组合逻辑中,如果信号没有被赋值的所有条件都赋值,会综合出锁存器(latch),而锁存器在数字设计中通常应避免,因为它会导致时序不可控、毛刺敏感等问题。正确的做法是为信号赋默认值(例如在条件语句之前赋值),或者使用always块中的else或case的default分支明确赋值,而不是采用“a=a”这类自赋值方式。自赋值在组合逻辑中正是产生锁存器的典型写法,综合工具会将其推断为锁存器而非组合逻辑。因此,B选项后半句推荐的做法恰恰是应避免的错误设计。 - 其他选项分析: A选项正确,两个向量进行运算或赋值时,位宽应保持一致以防止隐式扩展或截断,这是良好设计规范。 C选项正确,可综合代码中,除for循环的循环变量(通常为integer)外,其他变量和信号应使用wire或reg类型,整型(integer)在某些情况下也可综合,但本题表述严谨;实数型、realtime型、time型等不可综合。 D选项正确,当条件语句各分支无优先级关系时,使用case语句比多层else if能避免级联优先级逻辑,有利于时序收敛,因为case语句综合出的多路选择器延迟通常优于优先级编码器。

涉及知识点

  • 组合逻辑锁存器避免方法
  • 隐式位宽扩展与截断
  • 可综合数据类型
  • 条件语句优先级与时序
← 上一题
登录后反馈错题
下一题 →