首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemverilog算术运算返回负值

systemverilog算术运算返回负值
EN

Stack Overflow用户
提问于 2014-11-21 15:32:47
回答 1查看 1.9K关注 0票数 0

我有我设计的一部分代码,如下所示。

代码语言:javascript
复制
parameter n=256;
input [n-1:0] x;
output y;
initial begin
x = 0;
if(0 >= unsigned'(x-9))
y = 1;
end

我的期望是,无符号减法运算应该返回十进制247,但实际上它返回-9。有没有人有更好的编码方式来实现这一点?我的实际需求是,即使我从较大的值中减去一个较小的值,该值也应该滚动到w.r.t。参数宽度(就好像0-1应为255)。我的问题可能是错的,但这个要求对我的项目来说是必要的。

EN

回答 1

Stack Overflow用户

发布于 2014-11-21 15:54:17

247和-9是相同的位模式,因此算法是正确的。有符号vs无符号是位模式的一种解释。

注意: 0-1只有255个8位数,你已经将它们定义为256位数。

下面的例子应该有助于澄清,我们使用了$signed$unsigned关键字,它们改变了十进制表示的显示方式,但底层的二进制形式不变。

代码语言:javascript
复制
module tb;
  parameter n=8;
  logic [n-1:0] x;
  logic y;

 initial begin
  x = 0;

  $display("%1d", x-9);
  $display("%1b", x-9);
  $display("");
  $display("%1d", $unsigned(x-9) );
  $display("%1b", $unsigned(x-9) );
  $display("");
  $display("%1d", $signed(x-9) );
  $display("%1b", $signed(x-9) );
  $display("");

  $finish;
end
endmodule

以下哪项输出:

代码语言:javascript
复制
4294967287
11111111111111111111111111110111

4294967287
11111111111111111111111111110111

-9
11111111111111111111111111110111

对于您的示例,您只需要使用$unsigned

代码语言:javascript
复制
module tb;
parameter n=8;
 logic [n-1:0] x;
 logic y;

 initial begin
   x = 0;
   if(0 >= $unsigned(x-9)) begin
     y = 1;
   end
   else begin
     y = 0;
   end
   $display("y: %b", y);
   $finish;
 end
 endmodule
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27056279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档