推荐答案
测试一下
题目
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在条件比较中的传播