我一直在研究六角计算器,但似乎卡在减法部分,特别是当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
提前谢谢大家!
这是两次补充加法/减法的预期行为,我建议阅读,因为它是如此重要。
通过反转所有位并添加一个,可以将获得的结果更改回无符号形式。检查最高位将告诉您该数字是否为负数。