【发布时间】:2015-12-30 17:34:39
【问题描述】:
首先,如果这不是发布此问题的正确位置,请原谅我,但我不确定应该去哪里。我目前正在使用 VHDL 在 Xilinx 中模拟 ALU。 ALU 有以下输入和输出:
输入
- A 和 B:两个 8 位操作数
- Ci:单位进位
- Op:多路复用器的 4 位操作码
输出
- 是:8位输出操作数
- Co:单比特执行
- V:溢出标志(有溢出为1,否则为0)
- Z:零标志(如果为零,则为 1,否则为 0)
- S:符号标志(如果 -ve 则为 1,如果 +ve 则为 0)
ALU 执行下表中详述的操作:
我使用多路复用器和加法器实现了它,如下图所示:
我的问题是:
如何计算溢出标志的值,V?
我知道:
- 如果在负数中加上正数,则不会发生溢出
- 如果没有进位/借位,则可以通过计算表达式来计算溢出
(not A(7) and not B(7) and Y(7)) or (A(7) and B(7) and not Y(7))
其中A(7)、B(7)和Y(7)是的第8位 A、B和Y。
- 在进位/借位的情况下,当且仅当最高有效位的进位和进位不同时才会发生溢出。
我不知道如何在 VHDL 代码中逻辑地实现这一点——尤其是在进位的情况下。
【问题讨论】:
-
The CARRY flag and OVERFLOW flag in binary arithmetic,见计算溢出标志的两种方法。您的框图似乎可以优化,多路复用器中似乎存在冗余。考虑在Electrical Engineering Stack Exchange 上询问设计问题。