在系统C/ xilinxx指定的Verilog数据中查找绝对值



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

我尝试了所有的数据类型:signed int, int, Xuint32

我的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;

我无法帮助系统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;

您仍然可以通过查看MSB来测试负数的无符号值(假设in实际上保存了两个补码值)。

//If negative
if(in[31])
  out = -in;
else
  out = in;

好吧,我终于找到了答案,真的是有人建议的。感谢他(马丁·汤普森)

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

在Verilog-2001中,你可以显式地调用有符号算术,所以我认为你需要转换你的In:

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

你可能感兴趣的读物:

最新更新