首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模在Verilog中的应用

模在Verilog中的应用
EN

Stack Overflow用户
提问于 2022-01-29 11:06:31
回答 2查看 295关注 0票数 0

在一般的数学和软件编程中,-4 mod 5= 1。但是在Verilog中,答案是2。原因似乎是因为二进位的除法。我如何正确地处理这个计算?下面是再现此行为的Verilog代码。

代码语言:javascript
复制
module test (a,b,c);

input [0:3]a,b;
output [0:3]c;

assign a = -4'd4;
assign b = 4'd5;
assign c = a%b;

endmodule
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-29 16:41:45

您的代码对未签名的数据执行操作。在该方案中,-412完全相同,模的结果是2

您需要使用签名的数据,如下所示:

代码语言:javascript
复制
module test (
input signed [0:3]a,b, // <<<< signed
output signed [0:3]c   // <<<< signed
):
assign a = -4'd4;
assign b = 4'd5;
assign c = a%b;

always @*
  $display(a,b,c);
  
endmodule

结果是-4,正如一般编程规则所期望的那样。

票数 1
EN

Stack Overflow用户

发布于 2022-01-29 16:53:15

您没有将变量声明为已签名,因此它们被视为无符号。-4‘d4被解释为2的补体4’B12 (~4’b0100 + 1’b1 == 4’b1100)

您需要将signed关键字添加到信号定义中。

代码语言:javascript
复制
module test;

wire signed [3:0] a,b,c;

assign a = -4'd4;
assign b = 4'd5;
assign c = a%b;

endmodule
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70904695

复制
相关文章

相似问题

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