推荐答案
测试一下
题目
Please read the below RTL, then answer the question:
A. y <= p ^ {c[2:0], g[3]};
B. y <= p ^ {c[2:0], 1'b0};
C. y <= p ^ {c[2:0], g[0]};
D. y <= p ^ {c[3:1], 1'b0};
参考答案与知识点
参考答案
正确答案是B。该RTL实现了一个4位行波进位加法器,其中p = a ^ b,g = a & b,c[0] = g[0]为最低位进位输出,c[i] = g[i] | (p[i] & c[i-1])为后续进位输出。加法器输出y = a + b,但代码中未给出外部进位输入,隐含为0。每位和的计算公式为y[i] = p[i] ^ (进位输入),进位输入对于最低位是0,对于高位是c[i-1]。因此y[0] = p[0] ^ 0,y[1] = p[1] ^ c[0],y[2] = p[2] ^ c[1],y[3] = p[3] ^ c[2]。写成向量形式:y <= p ^ {c[2:0], 1'b0},即选项B。选项A使用g[3]作为最低位进位输入错误;选项C使用g[0]错误;选项D使用c[3:1]导致高位进位错误。
涉及知识点
- 行波进位加法器原理
- 进位链计算与传播
- 和位与进位的关系
- Verilog非阻塞赋值时序