推荐答案
测试一下
题目
reg signed [0:4] b, b=8'sh8f,赋值后b的值是多少?
A. 5'h1F
B. 5'h0F
C. 8'h8F
参考答案与知识点
参考答案
正确答案是B。
详细解析:
b定义为有符号5位寄存器,位顺序[0:4]表示MSB为b[0],LSB为b[4]。赋值表达式8'sh8f是一个8位有符号十六进制常量,其二进制值为8'b10001111,对应十进制-113(补码)。将源8位有符号数据赋值给目标5位有符号寄存器时,由于源位宽大于目标位宽,直接截取源的低5位。源低位为bit[4:0]=5'b01111,即5'h0F。该低5位作为有符号数解释时,最高位(b[0])为0,表示正数15。因此b的最终值为5'h0F,对应选项B。
常见易错点:
1. 误以为符号位扩展:位宽缩小时不扩展,仅截断,且截断后按目标位宽重新解释符号。
2. 忽略位顺序[0:4]:虽然索引顺序不同,但数值位权重与常规[4:0]相同,仅索引标签不同,不影响数值计算。
3. 混淆无符号截断:有符号与无符号在截断规则上一致,区别仅在于后续解释时是否将最高位视为符号位。
涉及知识点
- 有符号数位宽缩减规则
- Verilog中signed与unsigned赋值
- 补码表示与截断后的符号解释
- 位顺序[0:4]与数值权重的关系
- 十六进制有符号常量的书写格式