verilog - Verilog 如何处理负数?

标签 verilog negative-number

例如,假设我有一个 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/

相关文章:

Verilog错误: output or inout port "Q" must be connected to a structural net expression

verilog - FPGA 上的 2 位 BCD 计数器

c++ - 十进制包括负到 32 位二进制转换器

java - JTextArea 仅包含数字,但允许负值

sql - sql中的trunc和round函数

java - Java 中 Atoi 表示负值

javascript - Highcharts:希伯来语中的负值

verilog - 如何访问模块内的内部 reg?

Verilog 移位扩展结果?

module - Verilog 错误 : Must be connected to a structural net expression