求教一个verilog的问题
时间:10-02
整理:3721RD
点击:
a,b 是两个 6bit 有符号的整数
c 是一个 6bit 无符号的整数
现在我想实现一个 c = a/2 + b/8 的等式
我在想具体实现的方法。 a/2 和 b/8可以用比特的右移动完成,但是因为最高位是符号位,所以右移的时候肯定会出问题。所我在想,要不要这样写
assign a[4:0] = a[4:0]>>1;
assign b[4:0] = b[4:0] >> 3;
assign temp = a + b;
if ( temp[5] == 0 )
assign c = temp;
else
assign c = ~temp -1; // 取绝对值
不知道这个思路对不对? 谢了
c 是一个 6bit 无符号的整数
现在我想实现一个 c = a/2 + b/8 的等式
我在想具体实现的方法。 a/2 和 b/8可以用比特的右移动完成,但是因为最高位是符号位,所以右移的时候肯定会出问题。所我在想,要不要这样写
assign a[4:0] = a[4:0]>>1;
assign b[4:0] = b[4:0] >> 3;
assign temp = a + b;
if ( temp[5] == 0 )
assign c = temp;
else
assign c = ~temp -1; // 取绝对值
不知道这个思路对不对? 谢了
不打对哟
上面的代码不对吧
语法就有问题
有符号数移位 只要将最高位用符号位填充不就行了吗?
思路对,但这样写:
reg [5:0]a,b;
wire [5:0]c;
wire [5:0]temp;
assign temp = {a[5],a[5:1]} + {b[5],b[5],b[5],b[5:3]};
assign c = temp[5] ? ( ~temp + 1 ): temp;