From 68a30caea24cbdd4a14008798ade6997f09795b3 Mon Sep 17 00:00:00 2001 From: Liphen Date: Mon, 6 Nov 2023 11:48:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90=E5=8A=A0?= =?UTF-8?q?=E5=87=8F=E6=B3=95=E5=99=A8=E5=AE=9E=E9=AA=8C=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../加减法器/加减法器.assets/加减法器.svg | 1 + doc/数字电路实验/加减法器/加减法器.md | 72 +++++++++++++++++ doc/数字电路实验/模板.md | 6 ++ doc/数字电路实验/电路图.drawio | 78 +++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 doc/数字电路实验/加减法器/加减法器.assets/加减法器.svg create mode 100644 doc/数字电路实验/加减法器/加减法器.md diff --git a/doc/数字电路实验/加减法器/加减法器.assets/加减法器.svg b/doc/数字电路实验/加减法器/加减法器.assets/加减法器.svg new file mode 100644 index 0000000..f3dfceb --- /dev/null +++ b/doc/数字电路实验/加减法器/加减法器.assets/加减法器.svg @@ -0,0 +1 @@ +
Adder/Subtracter
Adder/Subtracter
$$Cout$$
$$Cin$$
$$ZF$$
$$CF$$
$$\overline{Add}/Sub$$
$$\left[3:0\right]\,A$$
$$\left[3:0\right]\,B$$
$$\left[3:0\right]\,Y$$
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/数字电路实验/加减法器/加减法器.md b/doc/数字电路实验/加减法器/加减法器.md new file mode 100644 index 0000000..f94c63a --- /dev/null +++ b/doc/数字电路实验/加减法器/加减法器.md @@ -0,0 +1,72 @@ +# 加减法器 + +## 一、实验介绍 + +加减法器(Adder/Subtractor)是一种用于执行加法和减法运算的部件。它可以根据输入信号的控制来确定是执行加法还是减法操作。 + +在加法模式下,加减法器将两个输入数相加,并输出它们的和。加法器通常由多个加法位组成,每个加法位负责处理对应位上的相加运算,并生成该位的和值和进位信号。进位信号作为下一位相加运算的输入。 + +在减法模式下,加减法器将一个输入数减去另一个输入数,并输出它们的差。减法操作可以通过将减数取反(取反码)并加 1 来实现。因此,减法器通常包含一个取反器(或称为“反相器”)用于取反减数,并将结果输入到一个加法器中进行相加运算。 + +加减法器可以通过控制信号来选择加法或减法模式。通常使用一个控制位,称为"Borrow"或"Subtract",来切换加减法模式。当"Borrow"或"Subtract"位为 0 时,加减法器处于加法模式;当该位为 1 时,加减法器处于减法模式。 + +加减法器在数字电路和计算机系统中广泛应用,是实现算术运算的基本组件。它们在处理器、算术逻辑单元(ALU)、计算器和其他数值处理应用中扮演着重要的角色。 + +## 二、实验目的 + +1. 理解加减法器的原理和功能。 +2. 学会使用 Verilog 描述加减法器的行为。 +3. 掌握 Verilog 仿真工具的使用,验证加减法器的正确性。 + +## 三、实验要求 + +1. 使用 Verilog 描述加减法器的行为。 +2. 通过所有测试点。 + +## 四、实验步骤 + +下面以一个 4 位二进制的加减法器为例子: + +### 1. 框图 + +![](加减法器.assets/加减法器.svg) + +- $A$ 、$B$ 是两个 4 位二进制数的输入端,$Y$ 是输出端为计算结果。 +- $Cin$ 表示最低位的进位输入,$Cout$是最高位的进位输出。 +- $\overline{Add}/Sub$ 是加减法器的模式选择端口,当输入 0 时为加法运算,输入 1 时为减法运算。 +- $ZF\left (ZeroFlag\right)$是零标志,当运算结果$Y$为 0 时,$ZF$输出 1;反之为 0。 +- $CF\left(CarryFlag\right)$是进位/标志,$CF$有两个含义: + - 当进行加法运算时,当作进位标志,表明无符号运算发生溢出。此时若$Cout=1$,则$CF=1$;若$Cout=0$,则$CF=0$。 + - 当进行减法运算时,当作借位标志,表明不够减。此时若$Cout=1$,则$CF=0$;若$Cout=0$,则$CF=1$。 + +### 2. 顶层模块 + +```verilog +module Adder_Subtractor( + input [3: 0] A, + input [3: 0] B, + input Cin, + input Mode, + output [3: 0] Y, + output Cout, + output ZF, + output CF + ); + + // TODO: 你的代码实现 + +endmodule + +``` + +在上述代码中,顶层模块名为`Adder_Subtractor`,它有八个端口: + +- $A$ 、$B$ 是两个 4 位二进制数的输入端,$Y$ 是输出端为计算结果。 +- $Cin$ 表示最低位的进位输入,$Cout$是最高位的进位输出。 +- $Mode$是加减法器的模式选择端口,当输入 0 时为加法运算,输入 1 时为减法运算。 +- $ZF\left (ZeroFlag\right)$是零标志,当运算结果$Y$为 0 时,$ZF$输出 1;反之为 0。 +- $CF\left(CarryFlag\right)$是进位/标志,$CF$有两个含义: + - 当进行加法运算时,当作进位标志,表明无符号运算发生溢出。此时若$Cout=1$,则$CF=1$;若$Cout=0$,则$CF=0$。 + - 当进行减法运算时,当作借位标志,表明不够减。此时若$Cout=1$,则$CF=0$;若$Cout=0$,则$CF=1$。 + +请补充代码,完成 4 位二进制加减法器的设计。 diff --git a/doc/数字电路实验/模板.md b/doc/数字电路实验/模板.md index 8917a4c..65113ce 100644 --- a/doc/数字电路实验/模板.md +++ b/doc/数字电路实验/模板.md @@ -1,3 +1,5 @@ +# 标题 + ## 一、实验介绍 ## 二、实验目的 @@ -11,3 +13,7 @@ ### 2. 真值表 ### 3. 顶层模块 + +在上述代码中,顶层模块名为 `Adder_Subtractor`,它有八个端口: + +请补充代码,完成 4 位二进制加减法器的设计。 diff --git a/doc/数字电路实验/电路图.drawio b/doc/数字电路实验/电路图.drawio index fa17c5d..89a152e 100644 --- a/doc/数字电路实验/电路图.drawio +++ b/doc/数字电路实验/电路图.drawio @@ -595,4 +595,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file