← 2022 · ZEKU 笔试

推荐答案 测试一下

logic [1:0] a; logic [1:0] b; logic result; a=2'b1z; b=2'b10; result=(a==b);在sv中,上述代码执行完后,result的值为1'b0

A.正确 B.错误
单选题 中等 笔试真题单选

参考答案

B.错误。在SystemVerilog中,`==`是逻辑相等运算符,用于比较两个四值逻辑值。当操作数包含未知(x)或高阻(z)状态时,对于每一位,如果两个值都是已知的0或1且相等,结果为1;如果任何一位是x或z,或者两个值不相等(已知时),结果为x(未知)。具体到本题:a的低位是z,b的低位是0,两者不相等且包含z;高位a为1,b为1,相等且已知。因此整个比较的结果是`1'bx`(因为低位比较结果为x,高位为1,整体为?1?但实际在四值逻辑中,一位x导致整个比较结果变为x,除非使用全等比较符`===`)。SV中`==`的结果只能是0、1或x,绝不会是z。题目中声称result值为1'b0,这是错误的,因为实际结果是1'bx。注意:如果使用`===`,则只有当每一位精确匹配(包括x和z)时结果才为1,否则为0,此时a和b低位不匹配,结果是1'b0。但题目明确使用`==`,因此result为1'bx,不是0。故本题说法错误,应选B。

涉及知识点

  • 四值逻辑与x/z状态
  • 逻辑相等运算符==的行为
  • 全等运算符===与==的区别
  • x/z在条件比较中的传播
← 上一题
登录后反馈错题
下一题 →