0

我一直在尝试使用 Xilinx SystemC 找到指定给 Verilog 内核的整数的绝对值,我所看到的是 Verilog 将负数视为正数。

我已经尝试了所有数据类型:signed int、、、intXuint32

我的 SystemC 或 Xilinx C 代码是:

signed int data,value;
data=-20;value=0;
putfsl(data,0);
getfsl(value,0);
signed int data1,value1;
data=20;value=0;
putfsl(data1,0);
getfsl(value1,0);

获得变量值后,我将它们打印在超级终端上。

在我的 Verilog 方面,代码是:

out <=(in<0)?-in:in;

我也试过这段代码,但结果相似

if(in<0)
out=-in;
else 
out=in;

请帮帮我!

我也尝试过其他数据类型并更改了参数,但结果并没有解决我总是得到我输入的相同数字,即

in<0

声明不是真的,我也试过了in<=0;

4

2 回答 2

2

我对 System C 无能为力,但根据您的评论,Verilog 代码对信号使用无符号类型in

reg [31:0] in;
if(in<0) //This will always be false since reg is unsigned
  out=-in;
else 
  out=in;

为了使它起作用in,必须将其声明为已签名。

signed reg [31:0] in;

in您仍然可以通过查看 MSB来测试无符号值是否为负值(假设实际上包含两个补码值)。

//If negative
if(in[31])
  out = -in;
else
  out = in;
于 2011-08-11T16:36:38.070 回答
0

好吧,我终于发现答案确实如某人所建议的那样有效。感谢他(马丁汤普森

答案是:在 Verilog-2001 之前,Verilog 中的所有向量算术都是无符号的。

在 Verilog-2001 中,您可以显式调用有符号算术,所以我认为您需要输入:

if ($signed(in) < 0)
 out = -$signed(in);
else
 out = in;

可能感兴趣的阅读材料:

Verilog-2001 中的带符号算术 - 机会和危害

于 2011-08-12T04:47:42.617 回答