在Verilog中简单减法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Verilog中简单减法相关的知识,希望对你有一定的参考价值。

我一直在研究六角计算器,但似乎卡在减法部分,特别是当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

提前谢谢大家!

答案

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

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

以上是关于在Verilog中简单减法的主要内容,如果未能解决你的问题,请参考以下文章

verilog4位减法计数器源代码测试代码 和一位半加器源代码测试代码

N位加减法运算器实现(Verilog HDL)|计算机组成

小技巧一种简单的办法在verilog中处理小数运算

verilog中除法运算在modelsim仿真中只要一个时钟周期就能完成,实际上也是这样吗?

verilog: 看代码时遇一问题:把两个12位的数扩展成13位相加,为啥在前面补最高位,不应该补0吗?

用Verilog语言实现一个简单的MII模块