gpt4 book ai didi

verilog - Verilog 如何处理负数?

转载 作者:行者123 更新时间:2023-12-03 21:39:46 27 4
gpt4 key购买 nike

例如,假设我有一个 reg [7:0] myReg我给它赋值 -8'D69
我知道 Verilog 将它存储为 2 的补码,所以它应该存储为

10111011

我现在的问题是是否要对其执行操作,例如 myReg/2

它会评估为-34吗?还是需要将 10111011 变成 187 然后执行除法,返回 93?

最佳答案

你需要记住 -8d69只是一个位模式。 reg 是一种保存位模式的类型。是指示 / 的变量类型执行有符号或无符号算术。

如果这是为了综合考虑您想尝试避免使用分隔符,那么您真的想尝试避免使用带符号的分隔符。它可能会用 >>> 1 合成更小

reg [7:0] a;
reg signed [7:0] b;
reg [7:0] c;
reg signed [7:0] d;

initial begin
a = -8'd69 ;
b = -8'd69 ;
c = -8'd69 ;
d = -8'd69 ;
#10ns;
a = a/2 ;
b = b/2 ;
#10ns;
$display("a : %8b, %d", a, a);
$display("b : %8b, %d", b, b);
$display("c >>>1 : %8b, %d", c>>>1, c>>>1);
$display("d >>>1 : %8b, %d", d>>>1, d>>>1);
end

给出:
a      : 01011101,  93
b : 11011110, -34
c >>>1 : 01011101, 93
d >>>1 : 11011101, -35
>> x右移 x 位, >>> x右移 x 位,但符号扩展为有符号类型。

注意: /2在我的例子中也是四舍五入, >>>将向下舍入/截断。

关于verilog - Verilog 如何处理负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com