在Verilog中简单减法

问题描述 投票:0回答:1

我一直在研究六角计算器,但似乎卡在减法部分,特别是当B> A时。我试图简单地减去两个正整数并显示结果。它适用于A> B和A = B.到目前为止,我可以使用两个7段显示来显示要减去的整数,只要A> = B,我就得到了正确的差异

当B> A时,由于我对Verilog case / if-else语句的了解有限,我看到了一个我无法调试的模式。请原谅我,如果我没有解释最好的方法,但我所观察到的是,一旦第一个数字A“达到”0(在减去之后),它就会循环回到F.然后,B的剩余部分从F而不是0。

例如:如果A = 1,则B = 3

A - B =

1 - 1 = 0

0 - 1 = F.

F - 1 = E.

另一个例子可能是4-8 = C.

下面是我迄今为止汇总的重要代码片段。

首先,我的减法声明

always@*
    begin
        begin
                 Cout1 = 7'b1000000; //0
        end

case(PrintDifference[3:0])
    4'b0000 : Cout0 = 7'b1000000;   //0
    4'b0001 : Cout0 = 7'b1111001;   //1
    ...
    4'b1110 : Cout0 = 7'b0000110;   //E
    4'b1111 : Cout0 = 7'b0001110;   //F
  endcase
end

我的减法非常简单

output [4:0]Difference;
output [4:0] PrintDifference;
assign PrintDifference = A-B;

我以为我可以做点什么

if A>=B, Difference = B-A
else, Difference = A-B

提前谢谢大家!

hex verilog difference subtraction integer-arithmetic
1个回答
0
投票

这是两次补充加法/减法的预期行为,我建议阅读,因为它是如此重要。

通过反转所有位并添加一个,可以将获得的结果更改回无符号形式。检查最高位将告诉您该数字是否为负数。

© www.soinside.com 2019 - 2024. All rights reserved.