首页 > 试题广场 >

在下列Verilog代码中,a=11, b=10,则z的运算

[单选题]
在下列Verilog代码中,a=11, b=10,则z的运算结果为:
input [3:0] a;
input [3:0] b;
output signed [7:0] z;

wire signed [3:0] c;
assign c = a[3:0] * b[3:0];
assign z = c;


  • 132
  • -126
  • -2
  • 14
a*b=110,二进制为0110_1110,直接截取低4位赋值给c。此时c为1110,又因为c是有符号,所以最高位就是符号位。有符号数扩展位宽时把符号位扩展即可,所以z为1111_1110,转换为补码为1000_0010,即-2
发表于 2022-03-29 19:38:28 回复(2)
4'd11*4'd10 = 8'd110 = 8'b01101110
z = 8'b00001110,这是补码形式,其源码为:4'b1110除去最高位符号位1即3'b110取反再加1,得到3'b001+1=3'b010 = 2,所以答案为-2
发表于 2022-03-02 22:43:10 回复(3)
答案是不是有问题?为什么a*b的计算结果为无符号,然后赋值给有符号的c时,真就单纯的截取么?
按照我认为也要用符号位进行拓展,具体过程如下:

发表于 2024-04-08 16:41:11 回复(0)
想和大家讨论下,是不是因为z=c过程中 四位变八位不会带来错误,而c补码下为 1110,源码为1010,是-2,所以z就为-2
发表于 2022-08-01 13:21:38 回复(0)
注意看题目C的长度是4位,然后截取了的是计算后结果的[3:0],其余位数为,然后用补码的运算规则计算即可。
发表于 2022-03-22 16:06:11 回复(0)