【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL72、VL73

全加器

描述

① 请用题目提供的半加器实现全加器电路①

半加器的参考代码如下,可在答案中添加并例化此代码。

cpp 复制代码
module add_half(
   input                A   ,
   input                B   ,
 
   output   wire        S   ,
   output   wire        C   
);

assign S = A ^ B;
assign C = A & B;
endmodule

输入描述:

input A ,

input B ,

input Ci ,

输出描述:

output wire S ,

output wire Co

解题思路

全加器和半加器的工作原理

内容主要来自博文

【连载】FPGA Verilog HDL系列实例 ------ 半加器与全加器

半加器和全加器的区别

半加法全加法 是算数运算电路的基本单元。它们是完成++1位二进制相加的一种组合逻辑电路++。

半加器

半加即为不考虑低位来的进位信号 ;下面给出一位半加法器的真值表

|----------|---------|--------|---------|
| 被加数A | 加数B | 和S | 进位C |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |

全加器

全加器能进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位数的进位信号;下面给出一位全加法器的真值表

|----------|---------|-------------------------------------------|--------------------------------------|-----------------------------------------|
| 被加数A | 加数B | 低位进位 | | 进位 |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |

  • 当多位数相加时,++半加器可用于最低位求和,并给出进位数++。第二位的相加有两个待加数和,还有一个来自前面低位送来的进位数。这三个数相加,得出本位和数(全加和数)和进位数。
  • 半加器和全加器的区别 主要是++半加器没有接收进位的输入端,全加器有进位输入端++,在将两个多位二进制数相加时,除了最低位外,每一位都要考虑来自低位的进位,半加器则不用考虑,只需要考虑两个输入端相加即可。

下面考虑如何将两个半加器构成一个全加器

  • ①将全加器的被加数A加数B 先进入一个半加器HADD1 中(即不考虑从低位的进位**** ), 其中和相当于全加器的低位A、B进行加法运算后的结果;
  • ②将全加器的低位进位**** 和**** 作为被加数A和加数B再进入另一个半加器HADD2 中,得出的和即为最终全加器对应的 ,进位记为**;**
  • 将进位和进位进行异或操作得到最终全加器的进位
  • 上述过程对应的真值表如下所示:

|----------------------------------------|---------------------------------------|----------------------------------------|------------------------------------------|-----------------------------------------|--------------------------------------|------------------------------------------|----------------------------------------|
| 被加数 | 加数 | | 进位 | 进位 | | 进位 | 进位 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |

代码如下:

代码一:
cpp 复制代码
module add_full(
   input                A   ,
   input                B   ,
   input                Ci  , 

   output	wire        S   ,
   output   wire        Co   
);

wire S_1, Co_1, Co_2;

add_half HADD1(.A(A), .B(B), .S(S_1), .C(Co_1));
add_half HADD2(.A(S_1), .B(Ci), .S(S), .C(Co_2));

assign Co = Co_1 | Co_2;

endmodule
代码二:

使用基本组合逻辑电路的思路,即写出S和Co的逻辑表达式,如下所示:

cpp 复制代码
`timescale 1ns/1ns

module add_full(
   input                A   ,
   input                B   ,
   input                Ci  , 

   output	wire        S   ,
   output   wire        Co   
);

//代码二
assign S = A ^ B ^ Ci;
assign Co = A&B | Ci&(A^B);

endmodule

串行(行波)进位加法器

请用全加器电路① 实现串行进位的4位全加器电路

输入描述:

input 3:0 A ,

input 3:0 B ,

input Ci ,

输出描述:

output wire 3:0 S ,

output wire Co

解题思路

主要参考以下博文:

数电------超前进位加法器 - 一曲挽歌 - 博客园 (cnblogs.com)

【Verilog学习日常】---牛客网刷题---Verilog快速入门---VL12-CSDN博客

【Verilog学习日常】---牛客网刷题---Verilog企业真题---VL66-CSDN博客

代码如下:

cpp 复制代码
module add_4(
   input         [3:0]  A   ,
   input         [3:0]  B   ,
   input                Ci  , 

   output	wire [3:0]  S   ,
   output   wire        Co   
);

wire [3:0] Co_t;
add_full A0 (.A(A[0]), .B(B[0]), .Ci(Ci), .S(S[0]), .Co(Co_t[0]));
add_full A1 (.A(A[1]), .B(B[1]), .Ci(Co_t[0]), .S(S[1]), .Co(Co_t[1]));
add_full A2 (.A(A[2]), .B(B[2]), .Ci(Co_t[1]), .S(S[2]), .Co(Co_t[2]));
add_full A3 (.A(A[3]), .B(B[3]), .Ci(Co_t[2]), .S(S[3]), .Co(Co_t[3]));

assign Co = Co_t[3];

endmodule
相关推荐
m4Rk_2 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
闭月之泪舞3 小时前
C++编程学习
c++·学习
cmc10284 小时前
292.三段式状态机第三段时序逻辑用state_c与_n的差异分析
fpga开发
网安蟹佬霸4 小时前
2026网络安全每日学习计划:每天学多久?学什么?怎么安排?照着做就行!
网络·学习·安全·web安全·学习路线·网安
一条破秋裤4 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
2601_949950634 小时前
考研英语资料太散?用小程序把真题、词汇和错题放到一起
人工智能·学习·考研·小程序·刷题·小程序推荐
熊猫钓鱼>_>5 小时前
鸿蒙AI Agent新范式:从“对话式辅助”到“工程化代理”的Harness架构实战解析
人工智能·笔记·学习·华为·架构·harmonyos
2501_919749035 小时前
华为鸿蒙管理学习生活与工作APP—小羊管理
学习·华为·生活·harmonyos·鸿蒙
一条破秋裤5 小时前
STM32 学习笔记:PWM 输出比较原理与计算
笔记·stm32·学习